diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 61755221a..1280d8121 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,7 +27,7 @@ repos: additional_dependencies: [numpy, types-requests] exclude: tests/|docs/ - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.7 + rev: v0.6.2 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] diff --git a/src/spatialdata/_core/operations/rasterize.py b/src/spatialdata/_core/operations/rasterize.py index 158402bed..bbe2a400f 100644 --- a/src/spatialdata/_core/operations/rasterize.py +++ b/src/spatialdata/_core/operations/rasterize.py @@ -336,7 +336,7 @@ def rasterize( element_name = data if isinstance(data, str) else None kwargs = {"sdata": sdata, "element_name": element_name} if element_name is not None else {"element": data} values = get_values(value_key, table_name=table_name, **kwargs).iloc[:, 0] # type: ignore[arg-type, union-attr] - max_index = np.max(values.index) + max_index: int = np.max(values.index) assigner = np.zeros(max_index + 1, dtype=values.dtype) assigner[values.index] = values # call-arg is ignored because model is never TableModel (the error is that the transformation param is not diff --git a/src/spatialdata/_core/operations/rasterize_bins.py b/src/spatialdata/_core/operations/rasterize_bins.py index fcd58b33f..18d72d044 100644 --- a/src/spatialdata/_core/operations/rasterize_bins.py +++ b/src/spatialdata/_core/operations/rasterize_bins.py @@ -14,6 +14,7 @@ from xarray import DataArray from spatialdata._core.query.relational_query import get_values +from spatialdata._types import ArrayLike from spatialdata.models import Image2DModel, get_table_keys from spatialdata.transformations import Affine, Sequence, get_transformation @@ -113,8 +114,9 @@ def rasterize_bins( if value_key is None: shape = (n_rows, n_cols) - def channel_rasterization(block_id: tuple[int, int, int] | None) -> np.ndarray: # type: ignore[type-arg] - image = np.zeros((1, *shape), dtype=dtype) + def channel_rasterization(block_id: tuple[int, int, int] | None) -> ArrayLike: + + image: ArrayLike = np.zeros((1, *shape), dtype=dtype) if block_id is None: return image diff --git a/src/spatialdata/_core/operations/transform.py b/src/spatialdata/_core/operations/transform.py index b99a82e00..15872cf17 100644 --- a/src/spatialdata/_core/operations/transform.py +++ b/src/spatialdata/_core/operations/transform.py @@ -49,11 +49,11 @@ def _transform_raster( v: ArrayLike = np.hstack(c_channel + [binary, np.ones(len(binary)).reshape((-1, 1))]) matrix = transformation.to_affine_matrix(input_axes=axes, output_axes=axes) inverse_matrix = transformation.inverse().to_affine_matrix(input_axes=axes, output_axes=axes) - new_v = (matrix @ v.T).T + new_v: ArrayLike = (matrix @ v.T).T c_shape: tuple[int, ...] c_shape = (data.shape[0],) if "c" in axes else () new_spatial_shape = tuple( - int(np.max(new_v[:, i]) - np.min(new_v[:, i])) for i in range(len(c_shape), n_spatial_dims + len(c_shape)) + int(np.max(new_v[:, i]) - np.min(new_v[:, i])) for i in range(len(c_shape), n_spatial_dims + len(c_shape)) # type: ignore[operator] ) output_shape = c_shape + new_spatial_shape translation_vector = np.min(new_v[:, :-1], axis=0) diff --git a/tests/conftest.py b/tests/conftest.py index d4d06cda5..2ce363bfe 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -21,6 +21,8 @@ from shapely import linearrings, polygons from shapely.geometry import MultiPolygon, Point, Polygon from skimage import data +from xarray import DataArray + from spatialdata._core._deepcopy import deepcopy from spatialdata._core.spatialdata import SpatialData from spatialdata._types import ArrayLike @@ -34,7 +36,6 @@ ShapesModel, TableModel, ) -from xarray import DataArray SEED = 0 RNG = default_rng(seed=SEED) diff --git a/tests/core/operations/test_aggregations.py b/tests/core/operations/test_aggregations.py index 5f8173434..4f10c9c4f 100644 --- a/tests/core/operations/test_aggregations.py +++ b/tests/core/operations/test_aggregations.py @@ -8,6 +8,7 @@ from anndata.tests.helpers import assert_equal from geopandas import GeoDataFrame from numpy.random import default_rng + from spatialdata import aggregate, to_polygons from spatialdata._core._deepcopy import deepcopy as _deepcopy from spatialdata._core.spatialdata import SpatialData diff --git a/tests/core/operations/test_map.py b/tests/core/operations/test_map.py index fea9deead..71b34d70b 100644 --- a/tests/core/operations/test_map.py +++ b/tests/core/operations/test_map.py @@ -2,9 +2,10 @@ import numpy as np import pytest +from xarray import DataArray + from spatialdata._core.operations.map import map_raster from spatialdata.transformations import Translation, get_transformation, set_transformation -from xarray import DataArray def _multiply(arr, parameter=10): diff --git a/tests/core/operations/test_rasterize.py b/tests/core/operations/test_rasterize.py index ca62e2e3d..84f8acc27 100644 --- a/tests/core/operations/test_rasterize.py +++ b/tests/core/operations/test_rasterize.py @@ -11,6 +11,8 @@ from multiscale_spatial_image import MultiscaleSpatialImage from shapely import MultiPolygon, box from spatial_image import SpatialImage +from xarray import DataArray + from spatialdata import SpatialData, get_extent from spatialdata._core.operations.rasterize import rasterize from spatialdata._core.query.relational_query import get_element_instances @@ -18,8 +20,6 @@ from spatialdata.models import PointsModel, ShapesModel, TableModel, get_axes_names from spatialdata.models._utils import get_spatial_axes from spatialdata.transformations import MapAxis -from xarray import DataArray - from tests.conftest import _get_images, _get_labels diff --git a/tests/core/operations/test_rasterize_bins.py b/tests/core/operations/test_rasterize_bins.py index 10eab9786..a8eb0b034 100644 --- a/tests/core/operations/test_rasterize_bins.py +++ b/tests/core/operations/test_rasterize_bins.py @@ -8,6 +8,7 @@ from pandas import DataFrame from scipy.sparse import csr_matrix from shapely.geometry import Polygon + from spatialdata._core.data_extent import are_extents_equal, get_extent from spatialdata._core.operations.rasterize_bins import rasterize_bins from spatialdata._core.spatialdata import SpatialData diff --git a/tests/core/operations/test_spatialdata_operations.py b/tests/core/operations/test_spatialdata_operations.py index 2cdb65a43..8a59147f1 100644 --- a/tests/core/operations/test_spatialdata_operations.py +++ b/tests/core/operations/test_spatialdata_operations.py @@ -5,6 +5,7 @@ import numpy as np import pytest from anndata import AnnData + from spatialdata._core.concatenate import _concatenate_tables, concatenate from spatialdata._core.data_extent import are_extents_equal, get_extent from spatialdata._core.operations._utils import transform_to_data_extent @@ -21,7 +22,6 @@ Sequence, Translation, ) - from tests.conftest import _get_table diff --git a/tests/core/operations/test_transform.py b/tests/core/operations/test_transform.py index fc5d33f4e..f29c23c94 100644 --- a/tests/core/operations/test_transform.py +++ b/tests/core/operations/test_transform.py @@ -6,6 +6,8 @@ import pytest from datatree import DataTree from geopandas.testing import geom_almost_equals +from xarray import DataArray + from spatialdata import transform from spatialdata._core.data_extent import are_extents_equal, get_extent from spatialdata._core.spatialdata import SpatialData @@ -28,7 +30,6 @@ Sequence, Translation, ) -from xarray import DataArray class TestElementsTransform: diff --git a/tests/core/operations/test_vectorize.py b/tests/core/operations/test_vectorize.py index 37a642f67..2a867aba6 100644 --- a/tests/core/operations/test_vectorize.py +++ b/tests/core/operations/test_vectorize.py @@ -4,6 +4,7 @@ import pytest from geopandas import GeoDataFrame from shapely import MultiPoint, Point + from spatialdata._core.operations.vectorize import to_circles, to_polygons from spatialdata.datasets import blobs from spatialdata.models.models import ShapesModel diff --git a/tests/core/query/test_relational_query.py b/tests/core/query/test_relational_query.py index 336c5391e..b4f7d1c85 100644 --- a/tests/core/query/test_relational_query.py +++ b/tests/core/query/test_relational_query.py @@ -2,6 +2,7 @@ import pandas as pd import pytest from anndata import AnnData + from spatialdata import get_values, match_table_to_element from spatialdata._core.query.relational_query import ( _locate_value, diff --git a/tests/core/query/test_spatial_query.py b/tests/core/query/test_spatial_query.py index 18c7614d0..9444d8e9e 100644 --- a/tests/core/query/test_spatial_query.py +++ b/tests/core/query/test_spatial_query.py @@ -11,6 +11,8 @@ from datatree import DataTree from geopandas import GeoDataFrame from shapely import MultiPolygon, Point, Polygon +from xarray import DataArray + from spatialdata._core.data_extent import get_extent from spatialdata._core.query.spatial_query import ( BaseSpatialRequest, @@ -30,8 +32,6 @@ ) from spatialdata.testing import assert_spatial_data_objects_are_identical from spatialdata.transformations import Identity, MapAxis, set_transformation -from xarray import DataArray - from tests.conftest import _make_points, _make_squares diff --git a/tests/core/test_centroids.py b/tests/core/test_centroids.py index 64022b4ba..b8ecc441b 100644 --- a/tests/core/test_centroids.py +++ b/tests/core/test_centroids.py @@ -5,6 +5,7 @@ import pytest from anndata import AnnData from numpy.random import default_rng + from spatialdata._core.centroids import get_centroids from spatialdata._core.query.relational_query import get_element_instances from spatialdata.models import Labels2DModel, Labels3DModel, PointsModel, TableModel, get_axes_names diff --git a/tests/core/test_data_extent.py b/tests/core/test_data_extent.py index 6cbcf47ae..de5875cfa 100644 --- a/tests/core/test_data_extent.py +++ b/tests/core/test_data_extent.py @@ -6,6 +6,7 @@ from geopandas import GeoDataFrame from numpy.random import default_rng from shapely.geometry import MultiPolygon, Point, Polygon + from spatialdata import SpatialData, get_extent, transform from spatialdata._core._deepcopy import deepcopy as _deepcopy from spatialdata.datasets import blobs diff --git a/tests/core/test_deepcopy.py b/tests/core/test_deepcopy.py index 7c3bcae59..8e1c427ad 100644 --- a/tests/core/test_deepcopy.py +++ b/tests/core/test_deepcopy.py @@ -1,4 +1,5 @@ from pandas.testing import assert_frame_equal + from spatialdata._core._deepcopy import deepcopy as _deepcopy from spatialdata.testing import assert_spatial_data_objects_are_identical diff --git a/tests/dataloader/test_datasets.py b/tests/dataloader/test_datasets.py index cfd16312a..48881b0b0 100644 --- a/tests/dataloader/test_datasets.py +++ b/tests/dataloader/test_datasets.py @@ -1,5 +1,6 @@ import numpy as np import pytest + from spatialdata.dataloader import ImageTilesDataset from spatialdata.datasets import blobs_annotating_element diff --git a/tests/io/test_format.py b/tests/io/test_format.py index 7d2eeb6d0..9cc303d71 100644 --- a/tests/io/test_format.py +++ b/tests/io/test_format.py @@ -2,6 +2,7 @@ import pytest from shapely import GeometryType + from spatialdata._io.format import CurrentPointsFormat, CurrentShapesFormat, ShapesFormatV01 from spatialdata.models import PointsModel, ShapesModel diff --git a/tests/io/test_metadata.py b/tests/io/test_metadata.py index a9e73d5e2..6cb3d2ea6 100644 --- a/tests/io/test_metadata.py +++ b/tests/io/test_metadata.py @@ -3,6 +3,7 @@ import tempfile import pytest + from spatialdata import SpatialData, read_zarr from spatialdata._io._utils import _is_element_self_contained from spatialdata._logging import logger diff --git a/tests/io/test_multi_table.py b/tests/io/test_multi_table.py index 4140633a7..b49b9bd47 100644 --- a/tests/io/test_multi_table.py +++ b/tests/io/test_multi_table.py @@ -4,9 +4,9 @@ import pytest from anndata import AnnData from anndata.tests.helpers import assert_equal + from spatialdata import SpatialData, concatenate from spatialdata.models import TableModel - from tests.conftest import _get_shapes, _get_table # notes on paths: https://github.com/orgs/scverse/projects/17/views/1?pane=issue&itemId=44066734 diff --git a/tests/io/test_readwrite.py b/tests/io/test_readwrite.py index c4c897ac6..261b0b898 100644 --- a/tests/io/test_readwrite.py +++ b/tests/io/test_readwrite.py @@ -8,6 +8,7 @@ import pytest from anndata import AnnData from numpy.random import default_rng + from spatialdata import SpatialData, deepcopy, read_zarr from spatialdata._io._utils import _are_directories_identical, get_dask_backing_files from spatialdata.datasets import blobs @@ -19,7 +20,6 @@ set_transformation, ) from spatialdata.transformations.transformations import Identity, Scale - from tests.conftest import _get_images, _get_labels, _get_points, _get_shapes RNG = default_rng(0) diff --git a/tests/io/test_utils.py b/tests/io/test_utils.py index ad695cfba..31346528e 100644 --- a/tests/io/test_utils.py +++ b/tests/io/test_utils.py @@ -2,6 +2,7 @@ import tempfile import dask.dataframe as dd + from spatialdata import read_zarr from spatialdata._io._utils import get_dask_backing_files diff --git a/tests/models/test_models.py b/tests/models/test_models.py index 4c7745955..6f6811593 100644 --- a/tests/models/test_models.py +++ b/tests/models/test_models.py @@ -22,6 +22,8 @@ from shapely.geometry import MultiPolygon, Point, Polygon from shapely.io import to_ragged_array from spatial_image import to_spatial_image +from xarray import DataArray + from spatialdata._core.spatialdata import SpatialData from spatialdata._types import ArrayLike from spatialdata.models._utils import ( @@ -51,8 +53,6 @@ set_transformation, ) from spatialdata.transformations.transformations import Identity, Scale -from xarray import DataArray - from tests.conftest import ( MULTIPOLYGON_PATH, POINT_PATH, diff --git a/tests/transformations/ngff/test_ngff_coordinate_system.py b/tests/transformations/ngff/test_ngff_coordinate_system.py index be1ca2494..6a8474b71 100644 --- a/tests/transformations/ngff/test_ngff_coordinate_system.py +++ b/tests/transformations/ngff/test_ngff_coordinate_system.py @@ -2,6 +2,7 @@ import json import pytest + from spatialdata.transformations.ngff.ngff_coordinate_system import ( NgffAxis, NgffCoordinateSystem, diff --git a/tests/transformations/ngff/test_ngff_transformations.py b/tests/transformations/ngff/test_ngff_transformations.py index 7666995af..8e1ea0f3c 100644 --- a/tests/transformations/ngff/test_ngff_transformations.py +++ b/tests/transformations/ngff/test_ngff_transformations.py @@ -4,6 +4,7 @@ import numpy as np import pytest + from spatialdata._types import ArrayLike from spatialdata.models import C, X, Y, Z from spatialdata.transformations.ngff._utils import get_default_coordinate_system @@ -19,7 +20,6 @@ NgffSequence, NgffTranslation, ) - from tests.transformations.ngff.conftest import ( c_cs, cyx_cs, diff --git a/tests/transformations/test_transformations.py b/tests/transformations/test_transformations.py index 849d26f9a..94651f669 100644 --- a/tests/transformations/test_transformations.py +++ b/tests/transformations/test_transformations.py @@ -4,6 +4,8 @@ import numpy as np import pytest import xarray.testing +from xarray import DataArray + from spatialdata import transform from spatialdata.datasets import blobs from spatialdata.models import Image2DModel, PointsModel @@ -32,7 +34,6 @@ _decompose_transformation, _get_affine_for_element, ) -from xarray import DataArray def test_identity(): diff --git a/tests/utils/test_element_utils.py b/tests/utils/test_element_utils.py index a64842e9b..077ffaa87 100644 --- a/tests/utils/test_element_utils.py +++ b/tests/utils/test_element_utils.py @@ -4,10 +4,11 @@ import pytest import xarray from datatree import DataTree +from xarray import DataArray + from spatialdata._utils import unpad_raster from spatialdata.models import get_model from spatialdata.transformations import Affine -from xarray import DataArray def _pad_raster(data: DataArray, axes: tuple[str, ...]) -> DataArray: diff --git a/tests/utils/test_testing.py b/tests/utils/test_testing.py index f2552704c..4b101969f 100644 --- a/tests/utils/test_testing.py +++ b/tests/utils/test_testing.py @@ -3,6 +3,8 @@ import numpy as np import pytest from datatree import DataTree +from xarray import DataArray + from spatialdata import SpatialData, deepcopy from spatialdata.models import ( Image2DModel, @@ -16,7 +18,6 @@ ) from spatialdata.testing import assert_elements_are_identical, assert_spatial_data_objects_are_identical from spatialdata.transformations import Scale, set_transformation -from xarray import DataArray scale = Scale([1.0], axes=("x",))