Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ dependencies = [
"typing_extensions>=4.8.0",
"universal_pathlib>=0.2.6",
"xarray>=2024.10.0",
"xarray-schema",
"xarray-spatial>=0.3.5",
"zarr>=3.0.0",
]
Expand Down
2 changes: 1 addition & 1 deletion src/spatialdata/_core/_deepcopy.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def _(element: DataTree) -> DataTree:
msi[key][variable].data = from_array(msi[key][variable].data)
element[key][variable].data = from_array(element[key][variable].data)
assert model in [Image2DModel, Image3DModel, Labels2DModel, Labels3DModel]
model().validate(msi)
model.validate(msi)
return msi


Expand Down
14 changes: 7 additions & 7 deletions src/spatialdata/_core/_elements.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ def __setitem__(self, key: str, value: Raster_T) -> None:
raise TypeError(f"Unknown element type with schema: {schema!r}.")
ndim = len(get_axes_names(value))
if ndim == 3:
Image2DModel().validate(value)
Image2DModel.validate(value)
super().__setitem__(key, value)
elif ndim == 4:
Image3DModel().validate(value)
Image3DModel.validate(value)
super().__setitem__(key, value)
else:
NotImplementedError("TODO: implement for ndim > 4.")
Expand All @@ -89,10 +89,10 @@ def __setitem__(self, key: str, value: Raster_T) -> None:
raise TypeError(f"Unknown element type with schema: {schema!r}.")
ndim = len(get_axes_names(value))
if ndim == 2:
Labels2DModel().validate(value)
Labels2DModel.validate(value)
super().__setitem__(key, value)
elif ndim == 3:
Labels3DModel().validate(value)
Labels3DModel.validate(value)
super().__setitem__(key, value)
else:
NotImplementedError("TODO: implement for ndim > 3.")
Expand All @@ -104,7 +104,7 @@ def __setitem__(self, key: str, value: GeoDataFrame) -> None:
schema = get_model(value)
if schema != ShapesModel:
raise TypeError(f"Unknown element type with schema: {schema!r}.")
ShapesModel().validate(value)
ShapesModel.validate(value)
super().__setitem__(key, value)


Expand All @@ -114,7 +114,7 @@ def __setitem__(self, key: str, value: DaskDataFrame) -> None:
schema = get_model(value)
if schema != PointsModel:
raise TypeError(f"Unknown element type with schema: {schema!r}.")
PointsModel().validate(value)
PointsModel.validate(value)
super().__setitem__(key, value)


Expand All @@ -124,5 +124,5 @@ def __setitem__(self, key: str, value: AnnData) -> None:
schema = get_model(value)
if schema != TableModel:
raise TypeError(f"Unknown element type with schema: {schema!r}.")
TableModel().validate(value)
TableModel.validate(value)
super().__setitem__(key, value)
2 changes: 1 addition & 1 deletion src/spatialdata/_core/operations/rasterize.py
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,7 @@ def rasterize_images_labels(
set_transformation(transformed_data, sequence, target_coordinate_system)

transformed_data = compute_coordinates(transformed_data)
schema().validate(transformed_data)
schema.validate(transformed_data)
return transformed_data


Expand Down
4 changes: 2 additions & 2 deletions src/spatialdata/_core/operations/transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ def _(
to_coordinate_system=to_coordinate_system,
)
transformed_data = compute_coordinates(transformed_data)
schema().validate(transformed_data)
schema.validate(transformed_data)
return transformed_data


Expand Down Expand Up @@ -419,7 +419,7 @@ def _(
to_coordinate_system=to_coordinate_system,
)
transformed_data = compute_coordinates(transformed_data)
schema().validate(transformed_data)
schema.validate(transformed_data)
return transformed_data


Expand Down
26 changes: 11 additions & 15 deletions src/spatialdata/_core/spatialdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,6 @@
SpatialDataFormatType,
)

# schema for elements
Label2D_s = Labels2DModel()
Label3D_s = Labels3DModel()
Image2D_s = Image2DModel()
Image3D_s = Image3DModel()
Shape_s = ShapesModel()
Point_s = PointsModel()
Table_s = TableModel()


class SpatialData:
"""
Expand Down Expand Up @@ -199,7 +190,7 @@ def validate_table_in_spatialdata(self, table: AnnData) -> None:
UserWarning
The dtypes of the instance key column in the table and the annotation target do not match.
"""
TableModel().validate(table)
TableModel.validate(table)
if TableModel.ATTRS_KEY in table.uns:
region, _, instance_key = get_table_keys(table)
region = region if isinstance(region, list) else [region]
Expand Down Expand Up @@ -349,8 +340,13 @@ def _set_table_annotation_target(
ValueError
If `instance_key` is not present in the `table.obs` columns.
"""
TableModel()._validate_set_region_key(table, region_key)
TableModel()._validate_set_instance_key(table, instance_key)
old_attrs = table.uns.get(TableModel.ATTRS_KEY)
# _validate_set_region_key and _validate_set_instance_key will raise an error if table.uns[ATTRS_KEY] is None,
# so let's initialize it here. Below it will be replaced with the actual metadata.
if old_attrs is None:
table.uns[TableModel.ATTRS_KEY] = {}
TableModel._validate_set_region_key(table, region_key)
TableModel._validate_set_instance_key(table, instance_key)
attrs = {
TableModel.REGION_KEY: region,
TableModel.REGION_KEY_KEY: region_key,
Expand Down Expand Up @@ -393,8 +389,8 @@ def _change_table_annotation_target(
attrs = table.uns[TableModel.ATTRS_KEY]
table_region_key = region_key if region_key else attrs.get(TableModel.REGION_KEY_KEY)

TableModel()._validate_set_region_key(table, region_key)
TableModel()._validate_set_instance_key(table, instance_key)
TableModel._validate_set_region_key(table, region_key)
TableModel._validate_set_instance_key(table, instance_key)
check_target_region_column_symmetry(table, table_region_key, region)
attrs[TableModel.REGION_KEY] = region

Expand Down Expand Up @@ -1822,7 +1818,7 @@ def tables(self, tables: dict[str, AnnData]) -> None:
self._shared_keys = self._shared_keys - set(self._tables.keys())
self._tables = Tables(shared_keys=self._shared_keys)
for k, v in tables.items():
TableModel().validate(v)
TableModel.validate(v)
self._tables[k] = v

@staticmethod
Expand Down
2 changes: 1 addition & 1 deletion src/spatialdata/_io/io_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def write_table(
) -> None:
if TableModel.ATTRS_KEY in table.uns:
region, region_key, instance_key = get_table_keys(table)
TableModel().validate(table)
TableModel.validate(table)
else:
region, region_key, instance_key = (None, None, None)

Expand Down
2 changes: 1 addition & 1 deletion src/spatialdata/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ def _error_message_add_element() -> None:


def _check_match_length_channels_c_dim(
data: DaskArray | DataArray | DataTree, c_coords: str | list[str], dims: tuple[str]
data: DaskArray | DataArray | DataTree, c_coords: str | list[str], dims: tuple[str, ...]
) -> list[str]:
"""
Check whether channel names `c_coords` are of equal length to the `c` dimension of the data.
Expand Down
2 changes: 1 addition & 1 deletion src/spatialdata/models/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ def set_channel_names(element: DataArray | DataTree, channel_names: str | list[s

# get_model cannot be used due to circular import so get_axes_names is used instead
if model in [Image2DModel, Image3DModel]:
channel_names = _check_match_length_channels_c_dim(element, channel_names, model.dims.dims) # type: ignore[union-attr]
channel_names = _check_match_length_channels_c_dim(element, channel_names, model.dims) # type: ignore[union-attr]
if isinstance(element, DataArray):
element = element.assign_coords(c=channel_names)
else:
Expand Down
Loading
Loading