Skip to content

Commit 3dc4e5b

Browse files
Fix bug adata in model not being reset (#317)
* fix bug adata in model not being reset * changelog
1 parent 4385a20 commit 3dc4e5b

5 files changed

Lines changed: 34 additions & 18 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ and this project adheres to [Semantic Versioning][].
1010

1111
## [0.x.x] - 2024-xx-xx
1212

13+
### Fixed
14+
15+
- Bug table was not reset after an element without table was added #317
16+
1317
## [0.5.2] - 2024-08-16
1418

1519
### Minor

src/napari_spatialdata/_view.py

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,13 @@ def _update_adata(self) -> None:
137137
)
138138
layer.metadata["adata"] = table
139139

140-
if layer is not None and "adata" in layer.metadata:
141-
with self.model.events.adata.blocker():
142-
self.model.adata = layer.metadata["adata"]
140+
if layer is not None:
141+
if "adata" in layer.metadata:
142+
with self.model.events.adata.blocker():
143+
self.model.adata = layer.metadata["adata"]
144+
else:
145+
with self.model.events.adata.blocker():
146+
self.model.adata = None
143147

144148
if self.model.adata.shape == (0, 0):
145149
return
@@ -186,8 +190,8 @@ def _select_layer(self) -> None:
186190
self.color_widget.clear()
187191
return
188192

189-
if layer is not None and "adata" in layer.metadata:
190-
self.model.adata = layer.metadata["adata"]
193+
if layer is not None:
194+
self.model.adata = layer.metadata.get("adata", None)
191195

192196
def screenshot(self) -> Any:
193197
return QImg2array(self.grab().toImage())
@@ -384,10 +388,11 @@ def _select_layer(self) -> None:
384388
if isinstance(layer, (Points, Shapes)) and (cols_df := layer.metadata.get("_columns_df")) is not None:
385389
self.dataframe_columns_widget.addItems(map(str, cols_df.columns))
386390
self.model.system_name = layer.metadata.get("name", None)
391+
self.model.adata = None
387392
return
388393

389-
if layer is not None and "adata" in layer.metadata:
390-
self.model.adata = layer.metadata["adata"]
394+
if layer is not None:
395+
self.model.adata = layer.metadata.get("adata", None)
391396

392397
if self.model.adata.shape == (0, 0):
393398
return
@@ -418,9 +423,13 @@ def _update_adata(self) -> None:
418423
)
419424
layer.metadata["adata"] = table
420425

421-
if layer is not None and "adata" in layer.metadata:
422-
with self.model.events.adata.blocker():
423-
self.model.adata = layer.metadata["adata"]
426+
if layer is not None:
427+
if "adata" in layer.metadata:
428+
with self.model.events.adata.blocker():
429+
self.model.adata = layer.metadata["adata"]
430+
else:
431+
with self.model.events.adata.blocker():
432+
self.model.adata = None
424433

425434
if self.model.adata.shape == (0, 0):
426435
return
@@ -440,10 +449,12 @@ def _update_adata(self) -> None:
440449
return
441450

442451
def _get_adata_layer(self) -> Sequence[str | None]:
452+
if self.model.adata is None:
453+
return [None]
443454
adata_layers = list(self.model.adata.layers.keys())
444-
if len(adata_layers):
445-
return adata_layers
446-
return [None]
455+
if len(adata_layers) == 0:
456+
return [None]
457+
return adata_layers
447458

448459
def _change_color_by(self) -> None:
449460
self.color_by.setText(f"Color by: {self.model.color_by}")

src/napari_spatialdata/_viewer.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from shapely import Polygon
1818
from spatialdata import get_element_annotators, get_element_instances
1919
from spatialdata._core.query.relational_query import _left_join_spatialelement_table
20+
from spatialdata._types import ArrayLike
2021
from spatialdata.models import PointsModel, ShapesModel, TableModel, force_2d, get_channels
2122
from spatialdata.transformations import Affine, Identity
2223
from spatialdata.transformations._utils import scale_radii
@@ -254,15 +255,13 @@ def _save_shapes_to_sdata(
254255
for shape in layer_to_save._data_view.shapes
255256
]
256257

257-
def _fix_coords(coords: np.ndarray) -> np.ndarray:
258+
def _fix_coords(coords: ArrayLike) -> ArrayLike:
258259
remove_z = coords.shape[1] == 3
259260
first_index = 1 if remove_z else 0
260261
coords = coords[:, first_index::]
261262
return np.fliplr(coords)
262263

263264
polygons: list[Polygon] = [Polygon(_fix_coords(p)) for p in coords]
264-
# polygons: list[Polygon] = [Polygon(i) for i in _transform_coordinates(coords, f=lambda x: x[::-1])]
265-
# polygons: list[Polygon] = [Polygon(i) for i in _transform_coordinates(layer_to_save.data, f=lambda x: x[::-1])]
266265
gdf = GeoDataFrame({"geometry": polygons})
267266

268267
force_2d(gdf)

src/napari_spatialdata/_widgets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ def _(self, vec: pd.Series, **kwargs: Any) -> dict[str, Any]:
227227
f"The {vec_color_name} column must have unique values for the each {vec.name} level. Found:\n"
228228
f"{unique_colors}"
229229
)
230-
color_dict = unique_colors.to_dict()["genes_color"]
230+
color_dict = unique_colors.to_dict()[f"{vec.name}_color"]
231231

232232
if self.model.instance_key is not None and self.model.instance_key == vec.index.name:
233233
merge_df = pd.merge(

src/napari_spatialdata/utils/_utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ def get_itemindex_by_text(
419419
return widget_item
420420

421421

422-
def _get_init_table_list(layer: Layer) -> Sequence[str | None] | None:
422+
def _get_init_table_list(layer: Layer | None) -> Sequence[str | None] | None:
423423
"""
424424
Get the table names annotating the SpatialElement upon creating the napari layer.
425425
@@ -432,6 +432,8 @@ def _get_init_table_list(layer: Layer) -> Sequence[str | None] | None:
432432
------
433433
The list of table names annotating the SpatialElement if any.
434434
"""
435+
if layer is None:
436+
return None
435437
table_names: Sequence[str | None] | None
436438
if table_names := layer.metadata.get("table_names"):
437439
return table_names # type: ignore[no-any-return]

0 commit comments

Comments
 (0)