Skip to content

Commit 2a41e18

Browse files
Jammy2211claude
authored andcommitted
refactor dataset and operator tests for granularity and clarity
Split monolithic tests into focused single-assertion tests with descriptive names encoding condition and expected result. Add @pytest.mark.parametrize for convolver and transformer scenarios. Also fix pytest assert-tuple bug in convolver test. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent cbd68f0 commit 2a41e18

File tree

5 files changed

+157
-66
lines changed

5 files changed

+157
-66
lines changed

test_autoarray/dataset/imaging/test_dataset.py

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def make_test_data_path():
3333
return test_data_path
3434

3535

36-
def test__grid__uses_mask_and_settings(
36+
def test__grid__uses_mask_and_settings__lp_grid_matches_grid_2d_7x7(
3737
image_7x7,
3838
noise_map_7x7,
3939
mask_2d_7x7,
@@ -57,7 +57,7 @@ def test__grid__uses_mask_and_settings(
5757
assert (masked_imaging_7x7.grids.lp.slim == grid_2d_7x7).all()
5858

5959

60-
def test__grids_pixelization__uses_mask_and_settings(
60+
def test__grids_pixelization__uses_mask_and_settings__default_over_sample__matches_grid_2d_7x7(
6161
image_7x7,
6262
noise_map_7x7,
6363
mask_2d_7x7,
@@ -75,6 +75,17 @@ def test__grids_pixelization__uses_mask_and_settings(
7575
assert (masked_imaging_7x7.grids.pixelization == grid_2d_7x7).all()
7676
assert (masked_imaging_7x7.grids.pixelization.slim == grid_2d_7x7).all()
7777

78+
79+
def test__grids_pixelization__uses_mask_and_settings__custom_over_sample__returns_grid2d_with_correct_size(
80+
image_7x7,
81+
noise_map_7x7,
82+
mask_2d_7x7,
83+
grid_2d_7x7,
84+
):
85+
masked_image_7x7 = aa.Array2D(values=image_7x7.native, mask=mask_2d_7x7)
86+
87+
masked_noise_map_7x7 = aa.Array2D(values=noise_map_7x7.native, mask=mask_2d_7x7)
88+
7889
masked_imaging_7x7 = aa.Imaging(
7990
data=masked_image_7x7,
8091
noise_map=masked_noise_map_7x7,
@@ -86,7 +97,9 @@ def test__grids_pixelization__uses_mask_and_settings(
8697
assert masked_imaging_7x7.grids.over_sample_size_pixelization[0] == 4
8798

8899

89-
def test__grid_settings__sub_size(image_7x7, noise_map_7x7):
100+
def test__grid_settings__sub_size__returns_correct_over_sample_sizes(
101+
image_7x7, noise_map_7x7
102+
):
90103
dataset_7x7 = aa.Imaging(
91104
data=image_7x7,
92105
noise_map=noise_map_7x7,
@@ -116,7 +129,7 @@ def test__no_noise_map__raises_exception():
116129
aa.Imaging(data=image)
117130

118131

119-
def test__from_fits():
132+
def test__from_fits__separate_fits_files__loads_data_psf_noise_map_correctly():
120133
dataset = aa.Imaging.from_fits(
121134
pixel_scales=0.1,
122135
data_path=path.join(test_data_path, "3x3_ones.fits"),
@@ -134,6 +147,8 @@ def test__from_fits():
134147
assert dataset.psf.kernel.mask.pixel_scales == (0.1, 0.1)
135148
assert dataset.noise_map.mask.pixel_scales == (0.1, 0.1)
136149

150+
151+
def test__from_fits__all_data_in_one_fits_file_multiple_hdus__loads_data_psf_noise_map_correctly():
137152
dataset = aa.Imaging.from_fits(
138153
pixel_scales=0.1,
139154
data_path=path.join(test_data_path, "3x3_multiple_hdu.fits"),
@@ -155,7 +170,9 @@ def test__from_fits():
155170
assert dataset.noise_map.mask.pixel_scales == (0.1, 0.1)
156171

157172

158-
def test__output_to_fits(imaging_7x7, test_data_path):
173+
def test__output_to_fits__round_trips_data_psf_noise_map_correctly(
174+
imaging_7x7, test_data_path
175+
):
159176

160177
imaging_7x7.output_to_fits(
161178
data_path=path.join(test_data_path, "data.fits"),
@@ -176,7 +193,9 @@ def test__output_to_fits(imaging_7x7, test_data_path):
176193
assert dataset.pixel_scales == (0.1, 0.1)
177194

178195

179-
def test__apply_mask(imaging_7x7, mask_2d_7x7, psf_3x3):
196+
def test__apply_mask__data_noise_map_psf_correctly_masked(
197+
imaging_7x7, mask_2d_7x7, psf_3x3
198+
):
180199
masked_imaging_7x7 = imaging_7x7.apply_mask(mask=mask_2d_7x7)
181200

182201
assert (masked_imaging_7x7.data.slim == np.ones(9)).all()
@@ -198,7 +217,9 @@ def test__apply_mask(imaging_7x7, mask_2d_7x7, psf_3x3):
198217
assert type(masked_imaging_7x7.psf) == aa.Convolver
199218

200219

201-
def test__apply_noise_scaling(imaging_7x7, mask_2d_7x7):
220+
def test__apply_noise_scaling__masked_pixel_data_zeroed_and_noise_set_to_noise_value(
221+
imaging_7x7, mask_2d_7x7
222+
):
202223
masked_imaging_7x7 = imaging_7x7.apply_noise_scaling(
203224
mask=mask_2d_7x7, noise_value=1e5
204225
)
@@ -207,7 +228,7 @@ def test__apply_noise_scaling(imaging_7x7, mask_2d_7x7):
207228
assert masked_imaging_7x7.noise_map.native[4, 4] == 1e5
208229

209230

210-
def test__apply_noise_scaling__use_signal_to_noise_value(
231+
def test__apply_noise_scaling__use_signal_to_noise_value__noise_map_scaled_to_match_snr(
211232
image_7x7, psf_3x3, noise_map_7x7, mask_2d_7x7
212233
):
213234

@@ -233,7 +254,7 @@ def test__apply_noise_scaling__use_signal_to_noise_value(
233254
assert masked_imaging_7x7.noise_map.native[3, 3] == 10.0
234255

235256

236-
def test__apply_mask__noise_covariance_matrix():
257+
def test__apply_mask__noise_covariance_matrix__submatrix_extracted_for_unmasked_pixels():
237258
image = aa.Array2D.ones(shape_native=(2, 2), pixel_scales=(1.0, 1.0))
238259

239260
noise_covariance_matrix = np.array(
@@ -263,7 +284,7 @@ def test__apply_mask__noise_covariance_matrix():
263284
)
264285

265286

266-
def test__different_imaging_without_mock_objects__customize_constructor_inputs():
287+
def test__different_imaging_without_mock_objects__customize_constructor_inputs__single_unmasked_pixel_correct():
267288

268289
kernel = aa.Array2D.ones(shape_native=(7, 7), pixel_scales=3.0)
269290
psf = aa.Convolver(kernel=kernel)
@@ -291,14 +312,18 @@ def test__different_imaging_without_mock_objects__customize_constructor_inputs()
291312
assert (masked_dataset.noise_map == np.array([2.0])).all()
292313

293314

294-
def test__noise_map_unmasked_has_zeros_or_negative__raises_exception():
315+
def test__noise_map_unmasked_has_zeros__raises_exception():
295316
array = aa.Array2D.no_mask([[1.0, 2.0]], pixel_scales=1.0)
296317

297318
noise_map = aa.Array2D.no_mask([[0.0, 3.0]], pixel_scales=1.0)
298319

299320
with pytest.raises(aa.exc.DatasetException):
300321
aa.Imaging(data=array, noise_map=noise_map)
301322

323+
324+
def test__noise_map_unmasked_has_negative_values__raises_exception():
325+
array = aa.Array2D.no_mask([[1.0, 2.0]], pixel_scales=1.0)
326+
302327
noise_map = aa.Array2D.no_mask([[-1.0, 3.0]], pixel_scales=1.0)
303328

304329
with pytest.raises(aa.exc.DatasetException):

test_autoarray/dataset/interferometer/test_dataset.py

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
)
1515

1616

17-
def test__dirty_properties(
17+
def test__dirty_image__shape_native_matches_real_space_mask(
1818
visibilities_7,
1919
visibilities_noise_map_7,
2020
uv_wavelengths_7x2,
@@ -28,12 +28,39 @@ def test__dirty_properties(
2828
)
2929

3030
assert dataset.dirty_image.shape_native == (7, 7)
31-
3231
assert (dataset.transformer.image_from(visibilities=dataset.data)).all()
3332

33+
34+
def test__dirty_noise_map__shape_native_matches_real_space_mask(
35+
visibilities_7,
36+
visibilities_noise_map_7,
37+
uv_wavelengths_7x2,
38+
mask_2d_7x7,
39+
):
40+
dataset = aa.Interferometer(
41+
data=visibilities_7,
42+
noise_map=visibilities_noise_map_7,
43+
uv_wavelengths=uv_wavelengths_7x2,
44+
real_space_mask=mask_2d_7x7,
45+
)
46+
3447
assert dataset.dirty_noise_map.shape_native == (7, 7)
3548
assert (dataset.transformer.image_from(visibilities=dataset.noise_map)).all()
3649

50+
51+
def test__dirty_signal_to_noise_map__shape_native_matches_real_space_mask(
52+
visibilities_7,
53+
visibilities_noise_map_7,
54+
uv_wavelengths_7x2,
55+
mask_2d_7x7,
56+
):
57+
dataset = aa.Interferometer(
58+
data=visibilities_7,
59+
noise_map=visibilities_noise_map_7,
60+
uv_wavelengths=uv_wavelengths_7x2,
61+
real_space_mask=mask_2d_7x7,
62+
)
63+
3764
assert dataset.dirty_signal_to_noise_map.shape_native == (7, 7)
3865
assert (
3966
dataset.transformer.image_from(visibilities=dataset.signal_to_noise_map)
@@ -102,7 +129,7 @@ def test__output_all_arrays(mask_2d_7x7):
102129
assert (dataset.uv_wavelengths[:, 1] == 6.0 * np.ones(3)).all()
103130

104131

105-
def test__transformer(
132+
def test__transformer__dft_class__returns_transformer_dft_instance(
106133
visibilities_7,
107134
visibilities_noise_map_7,
108135
uv_wavelengths_7x2,
@@ -118,6 +145,13 @@ def test__transformer(
118145

119146
assert type(interferometer_7.transformer) == transformer.TransformerDFT
120147

148+
149+
def test__transformer__nufft_class__returns_transformer_nufft_instance(
150+
visibilities_7,
151+
visibilities_noise_map_7,
152+
uv_wavelengths_7x2,
153+
mask_2d_7x7,
154+
):
121155
interferometer_7 = aa.Interferometer(
122156
data=visibilities_7,
123157
noise_map=visibilities_noise_map_7,

test_autoarray/mask/derive/test_mask_2d.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,29 @@ def make_derive_mask_2d_9x9():
2424
return aa.DeriveMask2D(mask=mask_2d)
2525

2626

27-
def test__unmasked_mask(derive_mask_2d_9x9):
27+
def test__unmasked_mask__all_false__returns_full_false_array(derive_mask_2d_9x9):
2828
assert (
2929
derive_mask_2d_9x9.all_false == np.full(fill_value=False, shape=(9, 9))
3030
).all()
3131

3232

33-
def test__blurring_mask_from(derive_mask_2d_9x9):
33+
@pytest.mark.parametrize("kernel_shape_native", [(3, 3)])
34+
def test__blurring_mask_from__3x3_kernel__matches_util_result(
35+
derive_mask_2d_9x9, kernel_shape_native
36+
):
3437
blurring_mask_via_util = aa.util.mask_2d.blurring_mask_2d_from(
3538
mask_2d=derive_mask_2d_9x9.mask,
36-
kernel_shape_native=(3, 3),
39+
kernel_shape_native=kernel_shape_native,
3740
)
3841

39-
blurring_mask = derive_mask_2d_9x9.blurring_from(kernel_shape_native=(3, 3))
42+
blurring_mask = derive_mask_2d_9x9.blurring_from(
43+
kernel_shape_native=kernel_shape_native
44+
)
4045

4146
assert (blurring_mask == blurring_mask_via_util).all()
4247

4348

44-
def test__edge_mask(derive_mask_2d_9x9):
49+
def test__edge_mask__9x9_ring_mask__edge_pixels_are_unmasked(derive_mask_2d_9x9):
4550
assert (
4651
derive_mask_2d_9x9.edge
4752
== np.array(
@@ -60,7 +65,7 @@ def test__edge_mask(derive_mask_2d_9x9):
6065
).all()
6166

6267

63-
def test__edge_buffed_mask():
68+
def test__edge_buffed_mask__5x5_mask_with_centre_masked__buffed_mask_matches_util():
6469
mask = aa.Mask2D.all_false(shape_native=(5, 5), pixel_scales=1.0)
6570
mask[2, 2] = True
6671

@@ -73,7 +78,7 @@ def test__edge_buffed_mask():
7378
assert (derive_mask_2d.edge_buffed == edge_buffed_mask_manual).all()
7479

7580

76-
def test__border_mask(derive_mask_2d_9x9):
81+
def test__border_mask__9x9_ring_mask__inner_pixels_are_masked(derive_mask_2d_9x9):
7782
assert (
7883
derive_mask_2d_9x9.border
7984
== np.array(

0 commit comments

Comments
 (0)