def test__sub_to_pix__3x3_grid__change_scaledond_dimensions_size__grid_adapts_accordingly( self, ): # _ _ _ # I_I_I_I Boundaries for pixels x = 0 and y = 0 -1.5 to -0.5 # I_I_I_I Boundaries for pixels x = 1 and y = 1 -0.5 to 0.5 # I_I_I_I Boundaries for pixels x = 2 and y = 2 0.5 to 1.5 grid = aa.Grid2D.manual_slim( [[1.5, -1.5], [1.0, 0.0], [1.0, 0.6], [-1.4, 0.0], [-1.5, 1.5]], pixel_scales=1.0, shape_native=(5, 1), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 2, 7, 8])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [2], [], [], [], [], [3], [4], ]
def test__sub_to_pix_of_mapper_matches_nearest_neighbor_calculation( self, grid_2d_7x7): pixelization_grid = aa.Grid2D.manual_slim( [[0.1, 0.1], [1.1, 0.1], [2.1, 0.1], [0.1, 1.1], [1.1, 1.1], [2.1, 1.1]], shape_native=(3, 2), pixel_scales=1.0, ) sub_to_pix_nearest_neighbour = grid_to_pixel_pixels_via_nearest_neighbour( grid_2d_7x7, pixelization_grid) nearest_pixelization_index_for_slim_index = np.array( [0, 0, 1, 0, 0, 1, 2, 2, 3]) pixelization_grid = aa.Grid2DVoronoi( grid=pixelization_grid, nearest_pixelization_index_for_slim_index= nearest_pixelization_index_for_slim_index, ) mapper = aa.Mapper(source_grid_slim=grid_2d_7x7, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == sub_to_pix_nearest_neighbour).all()
def test__pixel_signals__compare_to_mapper_util(self, grid_2d_7x7, image_7x7): pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 3), grid=grid_2d_7x7) mapper = aa.Mapper( source_grid_slim=grid_2d_7x7, source_pixelization_grid=pixelization_grid, hyper_data=image_7x7, ) pixel_signals = mapper.pixel_signals_from_signal_scale( signal_scale=2.0) pixel_signals_util = aa.util.mapper.adaptive_pixel_signals_from( pixels=9, signal_scale=2.0, pixelization_index_for_sub_slim_index=mapper. pixelization_index_for_sub_slim_index, slim_index_for_sub_slim_index=grid_2d_7x7.mask. _slim_index_for_sub_slim_index, hyper_image=image_7x7, ) assert (pixel_signals == pixel_signals_util).all()
def test__reconstructed_pixelization__3x3_pixelization__solution_vector_ascending( self, ): grid = aa.Grid2D.manual_slim( [ [2.0, -1.0], [2.0, 0.0], [2.0, 1.0], [0.0, -1.0], [0.0, 0.0], [0.0, 1.0], [-2.0, -1.0], [-2.0, 0.0], [-2.0, 1.0], ], pixel_scales=1.0, shape_native=(3, 3), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) recon_pix = mapper.reconstruction_from(solution_vector=np.array( [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0])) assert (recon_pix.native == np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])).all() assert recon_pix.pixel_scales == pytest.approx((4.0 / 3.0, 2.0 / 3.0), 1e-2) assert recon_pix.origin == (0.0, 0.0)
def test__reconstructed_pixelization__compare_to_imaging_util(self): grid = aa.Grid2D.manual_slim( [[1.0, 1.0], [1.0, 1.0], [1.0, 1.0], [1.0, 1.0]], pixel_scales=1.0, shape_native=(2, 2), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(4, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) solution = np.array( [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 1.0, 2.0, 3.0]) recon_pix = mapper.reconstruction_from(solution_vector=solution) recon_pix_util = aa.util.array_2d.array_2d_native_from( array_2d_slim=solution, mask_2d=np.full(fill_value=False, shape=(4, 3)), sub_size=1, ) assert (recon_pix.native == recon_pix_util).all() assert recon_pix.shape_native == (4, 3) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 4), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) solution = np.array( [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 1.0, 2.0, 3.0]) recon_pix = mapper.reconstruction_from(solution_vector=solution) recon_pix_util = aa.util.array_2d.array_2d_native_from( array_2d_slim=solution, mask_2d=np.full(fill_value=False, shape=(3, 4)), sub_size=1, ) assert (recon_pix.native == recon_pix_util).all() assert recon_pix.shape_native == (3, 4)
def test__sub_to_pix__3x3_grid_of_pixel_grid___shift_coordinates_to_new_centre__centre_adjusts_based_on_grid( self, ): # _ _ _ # I_I_I_I Boundaries for pixels x = 0 and y = 0 -1.0 to -(1/3) # I_I_I_I Boundaries for pixels x = 1 and y = 1 - (1/3) to (1/3) # I_I_I_I Boundaries for pixels x = 2 and y = 2 - (1/3)" to 1.0" grid = aa.Grid2D.manual_slim( [ [2.0, 0.0], [2.0, 1.0], [2.0, 2.0], [1.0, 0.0], [1.0, 1.0], [1.0, 2.0], [0.0, 0.0], [0.0, 1.0], [0.0, 2.0], ], pixel_scales=1.0, shape_native=(3, 3), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 2, 3, 4, 5, 6, 7, 8])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [2], [3], [4], [5], [6], [7], [8], ]
def test__sub_to_pix__3x3_grid_of_pixel_grid__add_multiple_grid_to_1_pixel( self): # _ _ _ # -1.0 to -(1/3) I_I_I_I # -(1/3) to (1/3) I_I_I_I # (1/3) to 1.0 I_I_I_I grid = aa.Grid2D.manual_slim( [ [1.0, -1.0], [0.0, 0.0], [1.0, 1.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [-1.0, -1.0], [0.0, 0.0], [-1.0, 1.0], ], pixel_scales=1.0, shape_native=(3, 3), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 4, 2, 4, 4, 4, 6, 4, 8])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [], [2], [], [1, 3, 4, 5, 7], [], [6], [], [8], ]
def test__image_from_source__different_types_of_lists_input( self, sub_grid_2d_7x7): rectangular_pixelization_grid = aa.Grid2DRectangular.overlay_grid( grid=sub_grid_2d_7x7, shape_native=(3, 3)) rectangular_mapper = aa.Mapper( source_grid_slim=sub_grid_2d_7x7, source_pixelization_grid=rectangular_pixelization_grid, ) full_indexes = rectangular_mapper.slim_indexes_from_pixelization_indexes( pixelization_indexes=[0, 1]) assert full_indexes == [0, 1, 2, 3, 4, 5, 6, 7] full_indexes = rectangular_mapper.slim_indexes_from_pixelization_indexes( pixelization_indexes=[[0], [4]]) assert full_indexes == [[0, 1, 2, 3], [16, 17, 18, 19]]
def test__sub_to_pix__different_image_and_sub_grids(self): # _ _ _ # -1.0 to -(1/3) I_I_I_I # -(1/3) to (1/3) I_I_I_I # (1/3) to 1.0 I_I_I_I grid = aa.Grid2D.manual_slim( [ [1.0, -1.0], [1.0, 0.0], [1.0, 1.0], [0.0, -1.0], [0.0, 0.0], [0.0, 1.0], [-1.0, -1.0], [-1.0, 0.0], [-1.0, 1.0], ], pixel_scales=1.0, shape_native=(3, 3), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 2, 3, 4, 5, 6, 7, 8])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [2], [3], [4], [5], [6], [7], [8], ]
def test__pixel_scales___for_voronoi_mapper(self, grid_2d_7x7, image_7x7): pixelization_grid = aa.Grid2D.manual_slim( [[0.1, 0.1], [1.1, 0.1], [2.1, 0.1], [0.1, 1.1], [1.1, 1.1], [2.1, 1.1]], shape_native=(3, 2), pixel_scales=1.0, ) nearest_pixelization_index_for_slim_index = np.array( [0, 0, 1, 0, 0, 1, 2, 2, 3]) pixelization_grid = aa.Grid2DVoronoi( grid=pixelization_grid, nearest_pixelization_index_for_slim_index= nearest_pixelization_index_for_slim_index, ) mapper = aa.Mapper( source_grid_slim=grid_2d_7x7, source_pixelization_grid=pixelization_grid, hyper_data=image_7x7, ) pixel_signals = mapper.pixel_signals_from_signal_scale( signal_scale=2.0) pixel_signals_util = aa.util.mapper.adaptive_pixel_signals_from( pixels=6, signal_scale=2.0, pixelization_index_for_sub_slim_index=mapper. pixelization_index_for_sub_slim_index, slim_index_for_sub_slim_index=grid_2d_7x7.mask. _slim_index_for_sub_slim_index, hyper_image=image_7x7, ) assert (pixel_signals == pixel_signals_util).all()
def test__sub_to_pix__4x3_grid__non_symmetric_centre_shift(self): # _ _ _ # I_I_I_I # I_I_I_I # I_I_I_I # I_I_I_I grid = aa.Grid2D.manual_slim( [[3.0, -0.5], [3.0, 0.51], [2.49, -0.5], [1.4, 1.0], [1.0, 2.5]], pixel_scales=1.0, shape_native=(5, 1), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(4, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 3, 10, 11])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [], [2], [], [], [], [], [], [], [3], [4], ]
def test__sub_to_pix__various_grids__1_coordinate_per_square_pixel__in_centre_of_pixels( self, ): # _ _ _ # I_I_I_I Boundaries for pixels x = 0 and y = 0 -1.0 to -(1/3) # I_I_I_I Boundaries for pixels x = 1 and y = 1 - (1/3) to (1/3) # I_I_I_I Boundaries for pixels x = 2 and y = 2 - (1/3)" to 1.0" grid = aa.Grid2D.manual_slim( [ [1.0, -1.0], [1.0, 0.0], [1.0, 1.0], [0.0, -1.0], [0.0, 0.0], [0.0, 1.0], [-1.0, -1.0], [-1.0, 0.0], [-1.0, 1.0], ], pixel_scales=1.0, shape_native=(3, 3), ) pixelization_grid = aa.Grid2DRectangular(grid=np.ones((2, 2)), shape_native=(3, 3), pixel_scales=(1.0, 1.0)) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 2, 3, 4, 5, 6, 7, 8])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [2], [3], [4], [5], [6], [7], [8], ] # _ _ _ # I_I_I_I Boundaries for pixels x = 0 and y = 0 -1.0 to -(1/3) # I_I_I_I Boundaries for pixels x = 1 and y = 1 - (1/3) to (1/3) # I_I_I_I Boundaries for pixels x = 2 and y = 2 - (1/3)" to 1.0" grid = aa.Grid2D.manual_slim( [ [1.0, -1.0], [1.0, 0.0], [1.0, 1.0], [-0.32, -1.0], [-0.32, 0.32], [0.0, 1.0], [-0.34, -0.34], [-0.34, 0.325], [-1.0, 1.0], ], pixel_scales=1.0, shape_native=(3, 3), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 2, 3, 4, 5, 6, 7, 8])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [2], [3], [4], [5], [6], [7], [8], ]
def test__sub_to_pix__various_grids__change_scaledond_dimensions__not_symmetric( self, ): # _ _ _ # I_I_I_I Boundaries for pixels x = 0 and y = 0 -1.5 to -0.5 # I_I_I_I Boundaries for pixels x = 1 and y = 1 -0.5 to 0.5 # I_I_I_I Boundaries for pixels x = 2 and y = 2 0.5 to 1.5 grid = aa.Grid2D.manual_slim( [[1.0, -1.5], [1.0, -0.49], [0.32, -1.5], [0.32, 0.51], [-1.0, 1.5]], pixel_scales=1.0, shape_native=(5, 1), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 3, 5, 8])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [], [2], [], [3], [], [], [4], ] # _ _ _ # I_I_I_I # I_I_I_I # I_I_I_I # I_I_I_I grid = aa.Grid2D.manual_slim( [[1.0, -1.5], [1.0, -0.49], [0.49, -1.5], [-0.6, 0.0], [-1.0, 1.5] ], pixel_scales=1.0, shape_native=(5, 1), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(4, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 3, 10, 11])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [], [2], [], [], [], [], [], [], [3], [4], ] # _ _ _ _ # I_I_I_I_I # I_I_I_I_I # I_I_I_I_I grid = aa.Grid2D.manual_slim( [[1.0, -1.5], [1.0, -0.49], [0.32, -1.5], [-0.34, 0.49], [-1.0, 1.5]], pixel_scales=1.0, shape_native=(5, 1), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 4), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 4, 10, 11])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [], [], [2], [], [], [], [], [], [3], [4], ]
def test__sub_to_pix__various_grids__1_coordinate_in_each_pixel(self): # _ _ _ # I_I_I_I # I_I_I_I # I_I_I_I # I_I_I_I # Boundaries for column pixel 0 -1.0 to -(1/3) # Boundaries for column pixel 1 -(1/3) to (1/3) # Boundaries for column pixel 2 (1/3) to 1.0 # Bounadries for row pixel 0 -1.0 to -0.5 # Bounadries for row pixel 1 -0.5 to 0.0 # Bounadries for row pixel 2 0.0 to 0.5 # Bounadries for row pixel 3 0.5 to 1.0 grid = aa.Grid2D.manual_slim( [ [1.0, -1.0], [1.0, 0.0], [1.0, 1.0], [0.5, -1.0], [-0.5, 1.0], [-1.0, 1.0], ], pixel_scales=1.0, shape_native=(3, 2), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(4, 3), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 2, 3, 8, 11])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [2], [3], [], [], [], [], [4], [], [], [5], ] # _ _ _ _ # I_I_I_I_I # I_I_I_I_I # I_I_I_I_I # Boundaries for row pixel 0 -1.0 to -(1/3) # Boundaries for row pixel 1 -(1/3) to (1/3) # Boundaries for row pixel 2 (1/3) to 1.0 # Bounadries for column pixel 0 -1.0 to -0.5 # Bounadries for column pixel 1 -0.5 to 0.0 # Bounadries for column pixel 2 0.0 to 0.5 # Bounadries for column pixel 3 0.5 to 1.0 grid = aa.Grid2D.manual_slim( [ [1.0, -1.0], [1.0, -0.49], [1.0, 0.01], [0.32, 0.01], [-0.34, -0.01], [-1.0, 1.0], ], pixel_scales=1.0, shape_native=(2, 3), ) pixelization_grid = aa.Grid2DRectangular.overlay_grid(shape_native=(3, 4), grid=grid) mapper = aa.Mapper(source_grid_slim=grid, source_pixelization_grid=pixelization_grid) assert (mapper.pixelization_index_for_sub_slim_index == np.array( [0, 1, 2, 6, 9, 11])).all() assert mapper.all_sub_slim_indexes_for_pixelization_index == [ [0], [1], [2], [], [], [], [3], [], [], [4], [], [5], ]