From 7c59025d1b5718cb06f9d336028840a242010ce3 Mon Sep 17 00:00:00 2001 From: Luca Marconato Date: Thu, 1 Aug 2024 15:20:53 +0200 Subject: [PATCH] added validation check for inf/nan radius for shapes --- src/spatialdata/models/models.py | 4 +++- tests/models/test_models.py | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/spatialdata/models/models.py b/src/spatialdata/models/models.py index 39911ebf..ea829323 100644 --- a/src/spatialdata/models/models.py +++ b/src/spatialdata/models/models.py @@ -342,7 +342,9 @@ def validate(cls, data: GeoDataFrame) -> None: raise ValueError(f"Column `{cls.RADIUS_KEY}` not found." + SUGGESTION) radii = data[cls.RADIUS_KEY].values if np.any(radii <= 0): - raise ValueError("Radii of circles must be positive." + SUGGESTION) + raise ValueError("Radii of circles must be positive.") + if np.any(np.isnan(radii)) or np.any(np.isinf(radii)): + raise ValueError("Radii of circles must not be nan or inf.") if cls.TRANSFORM_KEY not in data.attrs: raise ValueError(f":class:`geopandas.GeoDataFrame` does not contain `{TRANSFORM_KEY}`." + SUGGESTION) if len(data) > 0: diff --git a/tests/models/test_models.py b/tests/models/test_models.py index 9ee214df..09c7a30e 100644 --- a/tests/models/test_models.py +++ b/tests/models/test_models.py @@ -221,6 +221,12 @@ def test_shapes_model(self, model: ShapesModel, path: Path) -> None: poly[ShapesModel.RADIUS_KEY].iloc[0] = 0 with pytest.raises(ValueError, match="Radii of circles must be positive."): ShapesModel.validate(poly) + poly[ShapesModel.RADIUS_KEY].iloc[0] = np.nan + with pytest.raises(ValueError, match="Radii of circles must not be nan or inf."): + ShapesModel.validate(poly) + poly[ShapesModel.RADIUS_KEY].iloc[0] = np.inf + with pytest.raises(ValueError, match="Radii of circles must not be nan or inf."): + ShapesModel.validate(poly) @pytest.mark.parametrize("model", [PointsModel]) @pytest.mark.parametrize("instance_key", [None, "cell_id"])