Exemplo n.º 1
0
    def test__sub_array_to_1d_and_2d_and_back__returns_original_array(self):
        mask = np.array([[False, False, True], [False, True, False]])
        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        sub_array_1d = np.array([
            1.0,
            10.0,
            2.0,
            1.0,
            2.0,
            2.0,
            2.0,
            2.0,
            3.0,
            3.0,
            3.0,
            3.0,
            4.0,
            0.0,
            0.0,
            4.0,
        ])

        sub_array_2d = mapping.sub_array_2d_from_sub_array_1d(
            sub_array_1d=sub_array_1d)

        sub_array_1d_new = mapping.sub_array_1d_with_sub_dimensions_from_sub_array_2d(
            sub_array_2d=sub_array_2d)

        assert (sub_array_1d == sub_array_1d_new).all()
    def test__same_as_above__but_remove_some_centre_pixels_and_change_order__order_does_not_change_mapping(
            self):

        ma = al.Mask(
            array=np.array([[False, False, False], [False, False, False],
                            [False, False, False]]),
            pixel_scale=1.0,
            sub_size=1,
        )

        unmasked_sparse_grid_pixel_centres = np.array([[0, 0], [0, 1], [2, 2],
                                                       [1, 1], [0, 2], [2, 0],
                                                       [0, 2]])

        total_masked_pixels = al.mask_util.total_sparse_pixels_from_mask(
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
        )

        sparse_to_unmasked_sparse = al.sparse_mapping_util.sparse_to_unmasked_sparse_from_mask_and_pixel_centres(
            total_sparse_pixels=total_masked_pixels,
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
        )

        assert (sparse_to_unmasked_sparse == np.array([0, 1, 2, 3, 4, 5,
                                                       6])).all()
Exemplo n.º 3
0
    def test__sub_array_2d_from_sub_array_1d__use_2x3_mask(self):
        mask = np.array([[False, False, True], [False, True, False]])
        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        sub_array_1d = np.array([
            1.0,
            1.0,
            1.0,
            1.0,
            2.0,
            2.0,
            2.0,
            2.0,
            3.0,
            3.0,
            3.0,
            3.0,
            4.0,
            4.0,
            4.0,
            4.0,
        ])

        sub_array_2d = mapping.sub_array_2d_from_sub_array_1d(
            sub_array_1d=sub_array_1d)

        assert (sub_array_2d == np.array([
            [1.0, 1.0, 2.0, 2.0, 0.0, 0.0],
            [1.0, 1.0, 2.0, 2.0, 0.0, 0.0],
            [3.0, 3.0, 0.0, 0.0, 4.0, 4.0],
            [3.0, 3.0, 0.0, 0.0, 4.0, 4.0],
        ])).all()
Exemplo n.º 4
0
    def test__3x3_grid__extracts_max_min_coordinates__creates_grid_including_half_pixel_offset_from_edge(
            self):
        galaxy = al.Galaxy(
            redshift=0.5,
            light=al.light_profiles.EllipticalSersic(intensity=1.0))

        grid = np.array([[-1.5, -1.5], [1.5, 1.5]])

        plane_image = al.lens_util.plane_image_of_galaxies_from_grid(
            shape=(3, 3), grid=grid, galaxies=[galaxy], buffer=0.0)

        mask = al.Mask(array=np.full(shape=(3, 3), fill_value=False),
                       pixel_scale=1.0,
                       sub_size=1)

        grid = al.Grid(
            arr=np.array([
                [-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],
            ]),
            mask=mask,
        )

        plane_image_galaxy = galaxy.profile_image_from_grid(grid)

        assert (plane_image == plane_image_galaxy).all()
    def test__same_as_above__different_mask_and_centres(self):

        ma = al.Mask(
            array=np.array([[False, False, True], [False, False, False],
                            [True, False, False]]),
            pixel_scale=1.0,
            sub_size=1,
        )

        unmasked_sparse_grid_pixel_centres = np.array([[0, 0], [0, 1], [0, 2],
                                                       [0, 2], [0, 2], [1, 1]])

        total_masked_pixels = al.mask_util.total_sparse_pixels_from_mask(
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
        )

        sparse_to_unmasked_sparse = al.sparse_mapping_util.sparse_to_unmasked_sparse_from_mask_and_pixel_centres(
            total_sparse_pixels=total_masked_pixels,
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
        )

        assert (sparse_to_unmasked_sparse == np.array([0, 1, 5])).all()
Exemplo n.º 6
0
    def test__3x3_grid__buffer_aligns_two_grids(self):
        galaxy = al.Galaxy(
            redshift=0.5,
            light=al.light_profiles.EllipticalSersic(intensity=1.0))

        grid_without_buffer = np.array([[-1.48, -1.48], [1.48, 1.48]])

        plane_image = al.lens_util.plane_image_of_galaxies_from_grid(
            shape=(3, 3),
            grid=grid_without_buffer,
            galaxies=[galaxy],
            buffer=0.02)

        mask = al.Mask(array=np.full(shape=(3, 3), fill_value=False),
                       pixel_scale=1.0,
                       sub_size=1)

        grid = al.Grid(
            arr=np.array([
                [-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],
            ]),
            mask=mask,
        )

        plane_image_galaxy = galaxy.profile_image_from_grid(grid=grid)

        assert (plane_image == plane_image_galaxy).all()
    def test__same_as_above__but_4x3_mask(self):

        ma = al.Mask(
            array=np.array([
                [True, False, True],
                [True, False, True],
                [False, False, False],
                [True, False, True],
            ]),
            pixel_scale=1.0,
            sub_size=1,
        )

        unmasked_sparse_grid_pixel_centres = np.array([[0, 0], [0, 1], [0, 2],
                                                       [0, 2], [0, 2], [1, 1],
                                                       [2, 2], [3, 1]])

        unmasked_sparse_to_sparse = al.sparse_mapping_util.unmasked_sparse_to_sparse_from_mask_and_pixel_centres(
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
            total_sparse_pixels=6,
        )

        assert (unmasked_sparse_to_sparse == np.array([0, 0, 1, 1, 1, 1, 2,
                                                       3])).all()
    def test__mask_full_false__image_mask_and_pixel_centres_fully_overlap__each_sparse_maps_to_unmaked_sparse(
            self):

        ma = al.Mask(
            array=np.array([[False, False, False], [False, False, False],
                            [False, False, False]]),
            pixel_scale=1.0,
            sub_size=1,
        )

        unmasked_sparse_grid_pixel_centres = np.array([[0, 0], [0, 1], [0, 2],
                                                       [1, 0], [1, 1], [1, 2],
                                                       [2, 0], [2, 1], [2, 2]])

        total_masked_pixels = al.mask_util.total_sparse_pixels_from_mask(
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
        )

        sparse_to_unmasked_sparse = al.sparse_mapping_util.sparse_to_unmasked_sparse_from_mask_and_pixel_centres(
            total_sparse_pixels=total_masked_pixels,
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
        )

        assert (sparse_to_unmasked_sparse == np.array(
            [0, 1, 2, 3, 4, 5, 6, 7, 8])).all()
    def test__mask_is_cross__some_pix_pixels_are_masked__omitted_from_mapping(
            self):

        ma = al.Mask(
            array=np.array([[True, False, True], [False, False, False],
                            [True, False, True]]),
            pixel_scale=1.0,
            sub_size=1,
        )

        unmasked_sparse_grid_pixel_centres = np.array([[0, 0], [0, 1], [0, 2],
                                                       [1, 0], [1, 1], [1, 2],
                                                       [2, 0], [2, 1], [2, 2]])

        total_masked_pixels = al.mask_util.total_sparse_pixels_from_mask(
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
        )

        sparse_to_unmasked_sparse = al.sparse_mapping_util.sparse_to_unmasked_sparse_from_mask_and_pixel_centres(
            total_sparse_pixels=total_masked_pixels,
            mask=ma,
            unmasked_sparse_grid_pixel_centres=
            unmasked_sparse_grid_pixel_centres,
        )

        assert (sparse_to_unmasked_sparse == np.array([1, 3, 4, 5, 7])).all()
Exemplo n.º 10
0
    def test__scaled_array_2d_from_array_1d__compare_to_util(self):
        mask = np.array([
            [True, True, False, False],
            [True, False, True, True],
            [True, True, False, False],
        ])

        array_1d = np.array([1.0, 6.0, 4.0, 5.0, 2.0])

        array_2d_util = al.array_mapping_util.sub_array_2d_from_sub_array_1d_mask_and_sub_size(
            sub_array_1d=array_1d, mask=mask, sub_size=1)

        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=1)

        mapping = al.Mapping(mask=mask)

        array_2d = mapping.array_2d_from_array_1d(array_1d=array_1d)

        assert (array_2d == array_2d_util).all()

        scaled_array_2d = mapping.scaled_array_2d_from_array_1d(
            array_1d=array_1d)

        assert (scaled_array_2d == array_2d_util).all()
        assert (scaled_array_2d.xticks == np.array([-6.0, -2.0, 2.0,
                                                    6.0])).all()
        assert (scaled_array_2d.yticks == np.array([-4.5, -1.5, 1.5,
                                                    4.5])).all()
        assert scaled_array_2d.shape_arcsec == (9.0, 12.0)
        assert scaled_array_2d.pixel_scale == 3.0
        assert scaled_array_2d.origin == (0.0, 0.0)
Exemplo n.º 11
0
    def test__sub_array_1d_from_sub_array_2d__numerical_values(self):
        sub_array_2d = np.array([
            [1.0, 1.0, 2.0, 2.0, 0.0, 0.0],
            [1.0, 1.0, 2.0, 2.0, 0.0, 0.0],
            [3.0, 3.0, 0.0, 0.0, 4.0, 4.0],
            [3.0, 3.0, 0.0, 0.0, 4.0, 4.0],
        ])

        mask = np.array([[False, False, True], [False, True, False]])
        mask = al.Mask(array=mask, pixel_scale=2.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        sub_array_1d = mapping.sub_array_1d_with_sub_dimensions_from_sub_array_2d(
            sub_array_2d=sub_array_2d)

        assert (sub_array_1d == np.array([
            1.0,
            1.0,
            1.0,
            1.0,
            2.0,
            2.0,
            2.0,
            2.0,
            3.0,
            3.0,
            3.0,
            3.0,
            4.0,
            4.0,
            4.0,
            4.0,
        ])).all()
Exemplo n.º 12
0
    def test__sub_grid_2d_with_sub_dimensions_from_sub_grid_1d__use_real_mask_and_grid(
            self):
        mask = np.array([[False, True], [False, False]])
        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        sub_grid_1d = np.array([
            [1.0, 1.0],
            [2.0, 2.0],
            [3.0, 3.0],
            [4.0, 4.0],
            [9.0, 9.0],
            [10.0, 10.0],
            [11.0, 11.0],
            [12.0, 12.0],
            [13.0, 13.0],
            [14.0, 14.0],
            [15.0, 15.0],
            [16.0, 16.0],
        ])

        sub_grid_2d = mapping.sub_grid_2d_with_sub_dimensions_from_sub_grid_1d(
            sub_grid_1d=sub_grid_1d)

        assert (sub_grid_2d == np.array([
            [[1.0, 1.0], [2.0, 2.0], [0.0, 0.0], [0.0, 0.0]],
            [[3.0, 3.0], [4.0, 4.0], [0.0, 0.0], [0.0, 0.0]],
            [[9.0, 9.0], [10.0, 10.0], [13.0, 13.0], [14.0, 14.0]],
            [[11.0, 11.0], [12.0, 12.0], [15.0, 15.0], [16.0, 16.0]],
        ])).all()
Exemplo n.º 13
0
    def test__grid_2d_binned_from_sub_grid_1d__use_real_mask_and_grid(self):
        mask = np.array([[False, True], [False, False]])
        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        sub_grid_1d = np.array([
            [1.0, 1.0],
            [2.0, 2.0],
            [3.0, 3.0],
            [4.0, 6.0],
            [9.0, 9.0],
            [10.0, 10.0],
            [11.0, 11.0],
            [12.0, 12.0],
            [13.0, 13.0],
            [14.0, 14.0],
            [15.0, 15.0],
            [16.0, 16.0],
        ])

        grid_2d_binned = mapping.grid_2d_binned_from_sub_grid_1d(
            sub_grid_1d=sub_grid_1d)

        assert (grid_2d_binned == np.array([[[2.5, 3.0], [0.0, 0.0]],
                                            [[10.5, 10.5], [14.5,
                                                            14.5]]])).all()
Exemplo n.º 14
0
    def test__scaled_array_from_sub_array_1d_by_binning_up(self):
        mask = np.array([[False, False, True], [False, True, False]])
        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        sub_array_1d = np.array([
            1.0,
            10.0,
            2.0,
            1.0,
            2.0,
            2.0,
            2.0,
            2.0,
            3.0,
            3.0,
            3.0,
            3.0,
            4.0,
            0.0,
            0.0,
            4.0,
        ])

        scaled_array_2d = mapping.scaled_array_2d_binned_from_sub_array_1d(
            sub_array_1d=sub_array_1d)

        assert (scaled_array_2d == np.array([[3.5, 2.0, 0.0], [3.0, 0.0,
                                                               2.0]])).all()

        assert scaled_array_2d.pixel_scales == (3.0, 3.0)
        assert scaled_array_2d.origin == (0.0, 0.0)
Exemplo n.º 15
0
    def test__2x3_grid__shape_change_correct_and_coordinates_shift(self):
        galaxy = al.Galaxy(
            redshift=0.5,
            light=al.light_profiles.EllipticalSersic(intensity=1.0))

        grid = np.array([[-1.5, -1.5], [1.5, 1.5]])

        plane_image = al.lens_util.plane_image_of_galaxies_from_grid(
            shape=(2, 3), grid=grid, galaxies=[galaxy], buffer=0.0)

        mask = al.Mask(array=np.full(shape=(2, 3), fill_value=False),
                       pixel_scale=1.0,
                       sub_size=1)

        grid = al.Grid(
            arr=np.array([
                [-0.75, -1.0],
                [-0.75, 0.0],
                [-0.75, 1.0],
                [0.75, -1.0],
                [0.75, 0.0],
                [0.75, 1.0],
            ]),
            mask=mask,
        )

        plane_image_galaxy = galaxy.profile_image_from_grid(grid=grid)

        assert (plane_image == plane_image_galaxy).all()
Exemplo n.º 16
0
    def test__sub_mask_1d_index_to_mask_1d_index__compare_to_util(self):
        mask = np.array([[True, False, True], [False, False, False],
                         [True, False, False]])

        sub_mask_1d_index_to_mask_1d_index_util = al.mask_mapping_util.sub_mask_1d_index_to_mask_1d_index_from_mask(
            mask=mask, sub_size=2)
        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        assert (mapping.sub_mask_1d_index_to_mask_1d_index ==
                sub_mask_1d_index_to_mask_1d_index_util).all()
Exemplo n.º 17
0
    def test__1x1_image__light_profile_fits_data_perfectly__lh_is_noise(self):
        image = al.ScaledSquarePixelArray(array=np.ones((3, 3)),
                                          pixel_scale=1.0)

        noise_map = al.ScaledSquarePixelArray(array=np.ones((3, 3)),
                                              pixel_scale=1.0)

        galaxy_data = al.GalaxyData(image=image,
                                    noise_map=noise_map,
                                    pixel_scale=3.0)

        mask = al.Mask(
            array=np.array([[True, True, True], [True, False, True],
                            [True, True, True]]),
            pixel_scale=1.0,
            sub_size=1,
        )
        g0 = MockGalaxy(value=1.0)

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_image=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.model_galaxies == [g0]
        assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0)

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_convergence=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.model_galaxies == [g0]
        assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0)

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_potential=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.model_galaxies == [g0]
        assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0)

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_deflections_y=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.model_galaxies == [g0]
        assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0)

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_deflections_x=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.model_galaxies == [g0]
        assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0)
Exemplo n.º 18
0
    def test__sub_mask_1d_index_to_submask_index__compare_to_array_util(self):
        mask = np.array([[True, True, True], [True, False, False],
                         [True, True, False]])

        mask = al.Mask(array=mask, pixel_scale=7.0, sub_size=2)

        mapping = al.Mapping(mask=mask)

        sub_mask_1d_index_to_submask_index = al.mask_mapping_util.sub_mask_1d_index_to_submask_index_from_mask_and_sub_size(
            mask=mask, sub_size=2)

        assert mapping.sub_mask_1d_index_to_submask_index == pytest.approx(
            sub_mask_1d_index_to_submask_index, 1e-4)
Exemplo n.º 19
0
    def test__sub_array_1d_from_sub_array_2d__compare_to_util(self):
        sub_array_2d = np.array([
            [1.0, 1.0, 2.0, 2.0, 3.0, 10.0],
            [1.0, 1.0, 2.0, 2.0, 3.0, 10.0],
            [3.0, 3.0, 8.0, 1.0, 4.0, 4.0],
            [3.0, 3.0, 7.0, 2.0, 4.0, 4.0],
        ])

        mask = np.array([[False, False, False], [True, True, False]])
        mask = al.Mask(array=mask, pixel_scale=2.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        sub_array_1d = mapping.sub_array_1d_with_sub_dimensions_from_sub_array_2d(
            sub_array_2d=sub_array_2d)

        sub_array_1d_util = al.array_mapping_util.sub_array_1d_from_sub_array_2d_mask_and_sub_size(
            sub_array_2d=sub_array_2d, mask=mask, sub_size=2)

        assert (sub_array_1d == sub_array_1d_util).all()
Exemplo n.º 20
0
    def test__solution_different_values__simple_blurred_mapping_matrix__correct_reconstructed_image(
            self):

        matrix_shape = (3, 3)

        mask = al.Mask(
            array=np.array([[True, True, True], [False, False, False],
                            [True, True, True]]),
            pixel_scale=1.0,
            sub_size=1,
        )

        grid = al.Grid.from_mask(mask=mask)

        inv = al.Inversion.from_data_1d_mapper_and_regularization(
            image_1d=np.ones(9),
            noise_map_1d=np.ones(9),
            convolver=mock_inversion.MockConvolver(matrix_shape),
            mapper=mock_inversion.MockMapper(matrix_shape=matrix_shape,
                                             grid=grid),
            regularization=mock_inversion.MockRegularization(matrix_shape),
        )

        inv.pixelization_values = np.array([1.0, 2.0, 3.0, 4.0])

        inv.blurred_mapping_matrix = np.array([[1.0, 1.0, 1.0, 1.0],
                                               [1.0, 0.0, 1.0, 1.0],
                                               [1.0, 0.0, 0.0, 0.0]])

        # # Imaging pixel 0 maps to 4 pixs pixxels -> value is 1.0 + 2.0 + 3.0 + 4.0 = 10.0
        # # Imaging pixel 1 maps to 3 pixs pixxels -> value is 1.0 + 3.0 + 4.0
        # # Imaging pixel 2 maps to 1 pixs pixxels -> value is 1.0

        assert (inv.reconstructed_data_1d == np.array([10.0, 8.0, 1.0])).all()
        assert inv.reconstructed_data_2d == np.array([[0.0, 0.0, 0.0],
                                                      [10.0, 8.0, 1.0],
                                                      [0.0, 0.0, 0.0]])

        assert inv.pixelization_errors_with_covariance == pytest.approx(
            np.array([[0.7, -0.3, -0.3], [-0.3, 0.7, -0.3], [-0.3, -0.3,
                                                             0.7]]), 1.0e-4)
        assert inv.pixelization_errors == pytest.approx(
            np.array([0.7, 0.7, 0.7]), 1.0e-4)
Exemplo n.º 21
0
    def test__grid_2d_from_grid_1d__compare_to_util(self):
        mask = np.array([
            [True, True, False, False],
            [True, False, True, True],
            [True, True, False, False],
        ])

        grid_1d = np.array([[1.0, 1.0], [6.0, 6.0], [4.0, 4.0], [5.0, 5.0],
                            [2.0, 2.0]])

        grid_2d_util = al.grid_mapping_util.sub_grid_2d_from_sub_grid_1d_mask_and_sub_size(
            sub_grid_1d=grid_1d, mask=mask, sub_size=1)

        mask = al.Mask(array=mask, pixel_scale=2.0, sub_size=1)

        mapping = al.Mapping(mask=mask)
        grid_2d = mapping.grid_2d_from_grid_1d(grid_1d=grid_1d)

        assert (grid_2d_util == grid_2d).all()
Exemplo n.º 22
0
    def test__3x3_grid__extracts_max_min_coordinates__ignores_other_coordinates_more_central(
            self):
        galaxy = al.Galaxy(
            redshift=0.5,
            light=al.light_profiles.EllipticalSersic(intensity=1.0))

        grid = np.array([
            [-1.5, -1.5],
            [1.5, 1.5],
            [0.1, -0.1],
            [-1.0, 0.6],
            [1.4, -1.3],
            [1.5, 1.5],
        ])

        plane_image = al.lens_util.plane_image_of_galaxies_from_grid(
            shape=(3, 3), grid=grid, galaxies=[galaxy], buffer=0.0)

        mask = al.Mask(array=np.full(shape=(3, 3), fill_value=False),
                       pixel_scale=1.0,
                       sub_size=1)

        grid = al.Grid(
            arr=np.array([
                [-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],
            ]),
            mask=mask,
        )

        plane_image_galaxy = galaxy.profile_image_from_grid(grid=grid,
                                                            return_binned=True,
                                                            return_in_2d=True)

        assert (plane_image == plane_image_galaxy).all()
Exemplo n.º 23
0
    def test__array_1d_from_array_2d__compare_to_array_util(self):
        array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])

        mask = np.array([
            [True, False, True],
            [False, False, False],
            [True, False, True],
            [True, True, True],
        ])

        array_1d_util = al.array_mapping_util.sub_array_1d_from_sub_array_2d_mask_and_sub_size(
            mask=mask, sub_array_2d=array_2d, sub_size=1)

        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=1)

        mapping = al.Mapping(mask=mask)

        array_1d = mapping.array_1d_from_array_2d(array_2d=array_2d)

        assert (array_1d == array_1d_util).all()
Exemplo n.º 24
0
    def test__grid_1d_from_grid_2d__compare_to_util(self):
        grid_2d = np.array([
            [[1, 1], [2, 2], [3, 3], [4, 4]],
            [[5, 5], [6, 6], [7, 7], [8, 8]],
            [[9, 9], [10, 10], [11, 11], [12, 12]],
        ])

        mask = np.array([
            [True, False, True, True],
            [False, False, False, True],
            [True, False, True, False],
        ])

        grid_1d_util = al.grid_mapping_util.sub_grid_1d_from_sub_grid_2d_mask_and_sub_size(
            sub_grid_2d=grid_2d, mask=mask, sub_size=1)

        mask = al.Mask(array=mask, pixel_scale=2.0, sub_size=1)

        mapping = al.Mapping(mask=mask)
        grid_1d = mapping.grid_1d_from_grid_2d(grid_2d=grid_2d)

        assert (grid_1d_util == grid_1d).all()
Exemplo n.º 25
0
    def test__scaled_sub_array_2d_from_sub_array_1d(self):
        mask = np.array([[False, False, True], [False, True, False]])
        mask = al.Mask(array=mask, pixel_scale=3.0, sub_size=2)
        mapping = al.Mapping(mask=mask)

        sub_array_1d = np.array([
            1.0,
            1.0,
            1.0,
            1.0,
            2.0,
            2.0,
            2.0,
            2.0,
            3.0,
            3.0,
            3.0,
            3.0,
            4.0,
            4.0,
            4.0,
            4.0,
        ])

        scaled_sub_array_2d = mapping.scaled_array_2d_with_sub_dimensions_from_sub_array_1d(
            sub_array_1d=sub_array_1d)

        assert (scaled_sub_array_2d == np.array([
            [1.0, 1.0, 2.0, 2.0, 0.0, 0.0],
            [1.0, 1.0, 2.0, 2.0, 0.0, 0.0],
            [3.0, 3.0, 0.0, 0.0, 4.0, 4.0],
            [3.0, 3.0, 0.0, 0.0, 4.0, 4.0],
        ])).all()

        assert scaled_sub_array_2d.pixel_scales == (1.5, 1.5)
        assert scaled_sub_array_2d.origin == (0.0, 0.0)
import numpy as np
import pytest

import autofit as af
import autolens as al

directory = path.dirname(path.realpath(__file__))


@pytest.fixture(scope="session", autouse=True)
def do_something():
    af.conf.instance = af.conf.Config(
        config_path="{}/../../test_files/config/radial_min".format(directory))


mask_x1 = al.Mask(array=np.array([[False]]), pixel_scale=1.0, sub_size=1)
grid_10 = al.Grid(arr=np.array([[1.0, 0.0]]), mask=mask_x1)
grid_01 = al.Grid(arr=np.array([[0.0, 1.0]]), mask=mask_x1)
grid_11 = al.Grid(arr=np.array([[1.0, 1.0]]), mask=mask_x1)
grid_00 = al.Grid(arr=np.array([[0.0, 0.0]]), mask=mask_x1)
grid_minus_11 = al.Grid(arr=np.array([[-1.0, -1.0]]), mask=mask_x1)
grid_03 = al.Grid(arr=np.array([[0.0, 3.0]]), mask=mask_x1)
grid_34 = al.Grid(arr=np.array([[3.0, 4.0]]), mask=mask_x1)


class TestMemoize(object):
    def test_add_to_cache(self):
        class MyProfile(object):
            # noinspection PyMethodMayBeStatic
            @al.geometry_profiles.cache
            def my_method(
Exemplo n.º 27
0
    def test__1x2_image__noise_not_1__alls_correct(self):
        image = al.ScaledSquarePixelArray(array=5.0 * np.ones((3, 4)),
                                          pixel_scale=1.0)
        image[1, 2] = 4.0

        noise_map = al.ScaledSquarePixelArray(array=2.0 * np.ones((3, 4)),
                                              pixel_scale=1.0)

        galaxy_data = al.GalaxyData(image=image,
                                    noise_map=noise_map,
                                    pixel_scale=3.0)

        mask = al.Mask(
            array=np.array([
                [True, True, True, True],
                [True, False, False, True],
                [True, True, True, True],
            ]),
            pixel_scale=1.0,
            sub_size=1,
        )

        g0 = MockGalaxy(value=1.0, shape=2)

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_image=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])

        assert fit.model_galaxies == [g0]
        assert fit.chi_squared == (25.0 / 4.0)
        assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0
        assert fit.likelihood == -0.5 * (
            (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2))

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_convergence=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.model_galaxies == [g0]
        assert fit.chi_squared == (25.0 / 4.0)
        assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0
        assert fit.likelihood == -0.5 * (
            (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2))

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_potential=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.model_galaxies == [g0]
        assert fit.chi_squared == (25.0 / 4.0)
        assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0
        assert fit.likelihood == -0.5 * (
            (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2))

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_deflections_y=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.chi_squared == (25.0 / 4.0)
        assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0
        assert fit.likelihood == -0.5 * (
            (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2))

        galaxy_fit_data = al.GalaxyFitData(galaxy_data=galaxy_data,
                                           mask=mask,
                                           use_deflections_x=True)
        fit = al.GalaxyFit(galaxy_data=galaxy_fit_data, model_galaxies=[g0])
        assert fit.chi_squared == (25.0 / 4.0)
        assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0
        assert fit.likelihood == -0.5 * (
            (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2))
Exemplo n.º 28
0
    def test__15_grid__no_sub_grid(self):

        mask = np.array(
            [
                [True, True, True, True, True, True, True],
                [True, True, True, True, True, True, True],
                [True, False, False, False, False, False, True],
                [True, False, False, False, False, False, True],
                [True, False, False, False, False, False, True],
                [True, True, True, True, True, True, True],
                [True, True, True, True, True, True, True],
            ]
        )

        mask = al.Mask(array=mask, pixel_scale=1.0, sub_size=1)

        # There is no sub-grid, so our grid are just the masked_image grid (note the NumPy weighted_data structure
        # ensures this has no sub-gridding)
        grid = al.Grid(
            arr=np.array(
                [
                    [0.9, -0.9],
                    [1.0, -1.0],
                    [1.1, -1.1],
                    [0.9, 0.9],
                    [1.0, 1.0],
                    [1.1, 1.1],
                    [-0.01, 0.01],
                    [0.0, 0.0],
                    [0.01, 0.01],
                    [-0.9, -0.9],
                    [-1.0, -1.0],
                    [-1.1, -1.1],
                    [-0.9, 0.9],
                    [-1.0, 1.0],
                    [-1.1, 1.1],
                ]
            ),
            mask=mask,
            sub_size=1,
        )

        pixelization_grid = MockPixelizationGrid(arr=grid)

        pix = al.pixelizations.Rectangular(shape=(3, 3))

        mapper = pix.mapper_from_grid_and_pixelization_grid(
            grid=grid, pixelization_grid=pixelization_grid, inversion_uses_border=False
        )

        assert mapper.is_image_plane_pixelization == False
        assert mapper.geometry.shape_arcsec == pytest.approx((2.2, 2.2), 1.0e-4)
        assert mapper.geometry.origin == pytest.approx((0.0, 0.0), 1.0e-4)

        assert (
            mapper.mapping_matrix
            == np.array(
                [
                    [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
                ]
            )
        ).all()
        assert mapper.shape == (3, 3)

        reg = al.regularization.Constant(coefficient=1.0)
        regularization_matrix = reg.regularization_matrix_from_pixel_neighbors(
            mapper.geometry.pixel_neighbors, mapper.geometry.pixel_neighbors_size
        )

        assert (
            regularization_matrix
            == np.array(
                [
                    [2.00000001, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [-1.0, 3.00000001, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, -1.0, 2.00000001, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0],
                    [-1.0, 0.0, 0.0, 3.00000001, -1.0, 0.0, -1.0, 0.0, 0.0],
                    [0.0, -1.0, 0.0, -1.0, 4.00000001, -1.0, 0.0, -1.0, 0.0],
                    [0.0, 0.0, -1.0, 0.0, -1.0, 3.00000001, 0.0, 0.0, -1.0],
                    [0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 2.00000001, -1.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 3.00000001, -1.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 2.00000001],
                ]
            )
        ).all()
Exemplo n.º 29
0
    def test__3x3_simple_grid__include_mask_with_offset_centre(self):

        mask = al.Mask(
            array=np.array(
                [
                    [True, True, True, False, True],
                    [True, True, False, False, False],
                    [True, True, True, False, True],
                    [True, True, True, True, True],
                    [True, True, True, True, True],
                ]
            ),
            pixel_scale=1.0,
            sub_size=1,
        )

        grid = np.array([[2.0, 1.0], [1.0, 0.0], [1.0, 1.0], [1.0, 2.0], [0.0, 1.0]])

        grid = al.Grid(arr=grid, mask=mask, sub_size=1)

        pix = al.pixelizations.VoronoiMagnification(shape=(3, 3))
        sparse_to_grid = al.SparseToGrid.from_grid_and_unmasked_2d_grid_shape(
            unmasked_sparse_shape=pix.shape, grid=grid.unlensed_unsubbed_1d
        )

        pixelization_grid = MockPixelizationGrid(
            arr=sparse_to_grid.sparse,
            mask_1d_index_to_nearest_pixelization_1d_index=sparse_to_grid.mask_1d_index_to_sparse_1d_index,
        )

        mapper = pix.mapper_from_grid_and_pixelization_grid(
            grid=grid, pixelization_grid=pixelization_grid, inversion_uses_border=False
        )

        assert mapper.is_image_plane_pixelization == True
        assert mapper.geometry.shape_arcsec == pytest.approx((2.0, 2.0), 1.0e-4)
        assert (mapper.geometry.pixel_centres == sparse_to_grid.sparse).all()
        assert mapper.geometry.origin == pytest.approx((1.0, 1.0), 1.0e-4)

        assert isinstance(mapper, al.VoronoiMapper)

        assert (
            mapper.mapping_matrix
            == np.array(
                [
                    [1.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 1.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 1.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 1.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 1.0],
                ]
            )
        ).all()

        reg = al.regularization.Constant(coefficient=1.0)
        regularization_matrix = reg.regularization_matrix_from_pixel_neighbors(
            mapper.geometry.pixel_neighbors, mapper.geometry.pixel_neighbors_size
        )

        assert (
            regularization_matrix
            == np.array(
                [
                    [3.00000001, -1.0, -1.0, -1.0, 0.0],
                    [-1.0, 3.00000001, -1.0, 0.0, -1.0],
                    [-1.0, -1.0, 4.00000001, -1.0, -1.0],
                    [-1.0, 0.0, -1.0, 3.00000001, -1.0],
                    [0.0, -1.0, -1.0, -1.0, 3.00000001],
                ]
            )
        ).all()
Exemplo n.º 30
0
    def test__grid__requires_border_relocation(self):

        mask = np.array(
            [
                [True, True, True, True, True, True, True],
                [True, True, True, True, True, True, True],
                [True, True, True, False, True, True, True],
                [True, True, False, False, False, True, True],
                [True, True, True, False, True, True, True],
                [True, True, True, True, True, True, True],
                [True, True, True, True, True, True, True],
            ]
        )

        mask = al.Mask(array=mask, pixel_scale=1.0, sub_size=1)

        grid = al.Grid(
            arr=np.array(
                [[1.0, 1.0], [1.0, 1.0], [1.0, 1.0], [1.0, 1.0], [-1.0, -1.0]]
            ),
            mask=mask,
            sub_size=1,
        )

        pixelization_grid = MockPixelizationGrid(grid)

        pix = al.pixelizations.Rectangular(shape=(3, 3))

        mapper = pix.mapper_from_grid_and_pixelization_grid(
            grid=grid, pixelization_grid=pixelization_grid, inversion_uses_border=True
        )

        assert mapper.is_image_plane_pixelization == False
        assert mapper.geometry.shape_arcsec == pytest.approx((2.0, 2.0), 1.0e-4)
        assert mapper.geometry.origin == pytest.approx((0.0, 0.0), 1.0e-4)

        assert (
            mapper.mapping_matrix
            == np.array(
                [
                    [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0],
                ]
            )
        ).all()
        assert mapper.shape == (3, 3)

        reg = al.regularization.Constant(coefficient=1.0)
        regularization_matrix = reg.regularization_matrix_from_pixel_neighbors(
            mapper.geometry.pixel_neighbors, mapper.geometry.pixel_neighbors_size
        )

        assert (
            regularization_matrix
            == np.array(
                [
                    [2.00000001, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
                    [-1.0, 3.00000001, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0],
                    [0.0, -1.0, 2.00000001, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0],
                    [-1.0, 0.0, 0.0, 3.00000001, -1.0, 0.0, -1.0, 0.0, 0.0],
                    [0.0, -1.0, 0.0, -1.0, 4.00000001, -1.0, 0.0, -1.0, 0.0],
                    [0.0, 0.0, -1.0, 0.0, -1.0, 3.00000001, 0.0, 0.0, -1.0],
                    [0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 2.00000001, -1.0, 0.0],
                    [0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 3.00000001, -1.0],
                    [0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 2.00000001],
                ]
            )
        ).all()