diff --git a/autoarray/mask/mask_2d.py b/autoarray/mask/mask_2d.py index 59c77204..b6be2910 100644 --- a/autoarray/mask/mask_2d.py +++ b/autoarray/mask/mask_2d.py @@ -364,6 +364,14 @@ def circular( if shape_native[0] > 15 or shape_native[1] > 15: shape_native = (15, 15) pixel_scales = 0.6 + scale_scalar = ( + pixel_scales + if isinstance(pixel_scales, (int, float)) + else min(pixel_scales) + ) + max_radius = min(shape_native) * scale_scalar / 2.0 + if radius > max_radius: + radius = max_radius pixel_scales = geometry_util.convert_pixel_scales_2d(pixel_scales=pixel_scales) diff --git a/test_autoarray/mask/test_mask_2d.py b/test_autoarray/mask/test_mask_2d.py index 5b75a60a..a7de2afb 100644 --- a/test_autoarray/mask/test_mask_2d.py +++ b/test_autoarray/mask/test_mask_2d.py @@ -129,6 +129,42 @@ def test__circular__invert_true__output_is_inverted_util_result(): assert mask.mask_centre == (0.0, 0.0) +def test__circular__small_datasets_env__oversized_radius_clamped_to_disc(monkeypatch): + monkeypatch.setenv("PYAUTO_SMALL_DATASETS", "1") + + mask = aa.Mask2D.circular(shape_native=(100, 100), pixel_scales=0.1, radius=6.0) + + assert mask.shape_native == (15, 15) + assert mask.pixel_scales == (0.6, 0.6) + assert mask.is_circular + n_unmasked = int((~mask.array).sum()) + assert 100 < n_unmasked < 225 + + +def test__circular__small_datasets_env__in_bounds_radius_unchanged(monkeypatch): + monkeypatch.setenv("PYAUTO_SMALL_DATASETS", "1") + + capped = aa.Mask2D.circular(shape_native=(15, 15), pixel_scales=0.6, radius=2.0) + reference = aa.util.mask_2d.mask_2d_circular_from( + shape_native=(15, 15), pixel_scales=(0.6, 0.6), radius=2.0, centre=(0.0, 0.0) + ) + + assert (capped == reference).all() + + +def test__circular__small_datasets_env__tuple_pixel_scales_oversized_radius_clamped( + monkeypatch, +): + monkeypatch.setenv("PYAUTO_SMALL_DATASETS", "1") + + mask = aa.Mask2D.circular( + shape_native=(200, 200), pixel_scales=(0.1, 0.1), radius=7.5 + ) + + assert mask.shape_native == (15, 15) + assert mask.is_circular + + # --------------------------------------------------------------------------- # circular_annular # ---------------------------------------------------------------------------