From 2176d56b4c0bcf85af967d2f53a107070f0bca40 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Tue, 31 Mar 2026 22:03:42 -0700 Subject: [PATCH] [Arc] Error out on zero radius --- masque/shapes/arc.py | 12 ++++++------ masque/test/test_shape_advanced.py | 9 +++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/masque/shapes/arc.py b/masque/shapes/arc.py index ab2e47b..e6d49cf 100644 --- a/masque/shapes/arc.py +++ b/masque/shapes/arc.py @@ -54,8 +54,8 @@ class Arc(PositionableImpl, Shape): val = numpy.array(val, dtype=float).flatten() if not val.size == 2: raise PatternError('Radii must have length 2') - if not val.min() >= 0: - raise PatternError('Radii must be non-negative') + if not val.min() > 0: + raise PatternError('Radii must be positive') self._radii = val @property @@ -64,8 +64,8 @@ class Arc(PositionableImpl, Shape): @radius_x.setter def radius_x(self, val: float) -> None: - if not val >= 0: - raise PatternError('Radius must be non-negative') + if not val > 0: + raise PatternError('Radius must be positive') self._radii[0] = val @property @@ -74,8 +74,8 @@ class Arc(PositionableImpl, Shape): @radius_y.setter def radius_y(self, val: float) -> None: - if not val >= 0: - raise PatternError('Radius must be non-negative') + if not val > 0: + raise PatternError('Radius must be positive') self._radii[1] = val # arc start/stop angle properties diff --git a/masque/test/test_shape_advanced.py b/masque/test/test_shape_advanced.py index 9f04b61..2dec264 100644 --- a/masque/test/test_shape_advanced.py +++ b/masque/test/test_shape_advanced.py @@ -128,6 +128,15 @@ def test_ellipse_integer_radii_scale_cleanly() -> None: assert_allclose(ellipse.radii, [5, 10]) +def test_arc_rejects_zero_radii_up_front() -> None: + with pytest.raises(PatternError, match='Radii must be positive'): + Arc(radii=(0, 5), angles=(0, 1), width=1) + with pytest.raises(PatternError, match='Radii must be positive'): + Arc(radii=(5, 0), angles=(0, 1), width=1) + with pytest.raises(PatternError, match='Radii must be positive'): + Arc(radii=(0, 0), angles=(0, 1), width=1) + + def test_path_edge_cases() -> None: # Zero-length segments p = MPath(vertices=[[0, 0], [0, 0], [10, 0]], width=2)