Пример #1
0
def test__noise_map__with_and_without_hyper_galaxy(masked_imaging_7x7_no_blur):

    g0 = ag.Galaxy(redshift=0.5,
                   light_profile=MockLightProfile(image_2d_value=1.0))

    plane = ag.Plane(galaxies=[g0])

    fit = ag.FitImaging(dataset=masked_imaging_7x7_no_blur, plane=plane)

    assert fit.noise_map.slim == pytest.approx(
        np.full(fill_value=2.0, shape=(9, )), 1.0e-1)

    hyper_image = ag.Array2D.ones(shape_native=(3, 3), pixel_scales=1.0)

    g0 = ag.Galaxy(
        redshift=0.5,
        light_profile=MockLightProfile(image_2d_value=1.0),
        hyper_galaxy=ag.HyperGalaxy(contribution_factor=1.0,
                                    noise_factor=1.0,
                                    noise_power=1.0),
        hyper_model_image=hyper_image,
        hyper_galaxy_image=hyper_image,
        hyper_minimum_value=0.0,
    )

    plane = ag.Plane(galaxies=[g0])

    fit = ag.FitImaging(dataset=masked_imaging_7x7_no_blur, plane=plane)

    assert fit.noise_map.slim == pytest.approx(
        np.full(fill_value=4.0, shape=(9, )), 1.0e-1)
    assert fit.log_likelihood == pytest.approx(-20.7470, 1.0e-4)
Пример #2
0
def test__subtracted_images_of_galaxies(masked_imaging_7x7_no_blur):

    g0 = ag.Galaxy(redshift=0.5,
                   light_profile=MockLightProfile(image_2d=np.ones(1)))

    g1 = ag.Galaxy(redshift=1.0,
                   light_profile=MockLightProfile(image_2d=2.0 * np.ones(1)))

    g2 = ag.Galaxy(redshift=1.0,
                   light_profile=MockLightProfile(image_2d=3.0 * np.ones(1)))

    plane = ag.Plane(redshift=0.75, galaxies=[g0, g1, g2])

    fit = ag.FitImaging(dataset=masked_imaging_7x7_no_blur, plane=plane)

    assert fit.subtracted_images_of_galaxies[0].slim[0] == -4.0
    assert fit.subtracted_images_of_galaxies[1].slim[0] == -3.0
    assert fit.subtracted_images_of_galaxies[2].slim[0] == -2.0

    g0 = ag.Galaxy(redshift=0.5,
                   light_profile=MockLightProfile(image_2d=np.ones(1)))

    g1 = ag.Galaxy(redshift=0.5)

    g2 = ag.Galaxy(redshift=1.0,
                   light_profile=MockLightProfile(image_2d=3.0 * np.ones(1)))

    plane = ag.Plane(redshift=0.75, galaxies=[g0, g1, g2])

    fit = ag.FitImaging(dataset=masked_imaging_7x7_no_blur, plane=plane)

    assert fit.subtracted_images_of_galaxies[0].slim[0] == -2.0
    assert fit.subtracted_images_of_galaxies[1].slim[0] == -3.0
    assert fit.subtracted_images_of_galaxies[2].slim[0] == 0.0
Пример #3
0
def test__fit_figure_of_merit(masked_imaging_7x7):

    g0 = ag.Galaxy(
        redshift=0.5,
        light_profile=ag.lp.EllSersic(intensity=1.0),
        mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0),
    )

    g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0))

    plane = ag.Plane(redshift=0.75, galaxies=[g0, g1])

    fit = ag.FitImaging(dataset=masked_imaging_7x7, plane=plane)

    assert (fit.image == np.full(fill_value=1.0, shape=(9, ))).all()
    assert (fit.noise_map == np.full(fill_value=2.0, shape=(9, ))).all()
    assert fit.log_likelihood == pytest.approx(-75938.05, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-75938.05, 1.0e-4)

    pix = ag.pix.Rectangular(shape=(3, 3))
    reg = ag.reg.Constant(coefficient=1.0)

    g0 = ag.Galaxy(redshift=0.5, pixelization=pix, regularization=reg)

    plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5), g0])

    fit = ag.FitImaging(dataset=masked_imaging_7x7, plane=plane)

    assert (fit.image == np.full(fill_value=1.0, shape=(9, ))).all()
    assert (fit.noise_map == np.full(fill_value=2.0, shape=(9, ))).all()
    assert fit.log_evidence == pytest.approx(-22.9005, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-22.9005, 1.0e-4)

    galaxy_light = ag.Galaxy(redshift=0.5,
                             light_profile=ag.lp.EllSersic(intensity=1.0))

    pix = ag.pix.Rectangular(shape=(3, 3))
    reg = ag.reg.Constant(coefficient=1.0)
    galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg)

    plane = ag.Plane(redshift=0.75, galaxies=[galaxy_light, galaxy_pix])

    fit = ag.FitImaging(dataset=masked_imaging_7x7, plane=plane)

    assert (fit.image == np.full(fill_value=1.0, shape=(9, ))).all()
    assert (fit.noise_map == np.full(fill_value=2.0, shape=(9, ))).all()
    assert fit.log_evidence == pytest.approx(-6840.5851, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-6840.5851, 1.0e-4)
Пример #4
0
def test__fit_figure_of_merit(interferometer_7):

    g0 = ag.Galaxy(
        redshift=0.5,
        light_profile=ag.lp.EllSersic(intensity=1.0),
        mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0),
    )

    g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0))

    plane = ag.Plane(redshift=0.75, galaxies=[g0, g1])

    fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane)

    assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j,
                                          shape=(7, ))).all()
    assert fit.log_likelihood == pytest.approx(-2398107.3849, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-2398107.3849, 1.0e-4)

    pix = ag.pix.Rectangular(shape=(3, 3))
    reg = ag.reg.Constant(coefficient=0.01)

    g0 = ag.Galaxy(redshift=0.5, pixelization=pix, regularization=reg)

    plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5), g0])

    fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane)

    assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j,
                                          shape=(7, ))).all()
    assert fit.log_evidence == pytest.approx(-66.90612, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-66.90612, 1.0e-4)

    galaxy_light = ag.Galaxy(redshift=0.5,
                             light_profile=ag.lp.EllSersic(intensity=1.0))

    pix = ag.pix.Rectangular(shape=(3, 3))
    reg = ag.reg.Constant(coefficient=1.0)
    galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg)

    plane = ag.Plane(redshift=0.75, galaxies=[galaxy_light, galaxy_pix])

    fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane)

    assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j,
                                          shape=(7, ))).all()
    assert fit.log_evidence == pytest.approx(-283424.48941, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-283424.48941, 1.0e-4)
Пример #5
0
    def test__via_plane_from__same_as_plane_image(self):

        psf = ag.Kernel2D.from_gaussian(
            shape_native=(7, 7), sigma=0.5, pixel_scales=0.05
        )

        grid = ag.Grid2D.uniform(shape_native=(20, 20), pixel_scales=0.05, sub_size=1)

        galaxy_0 = ag.Galaxy(redshift=0.5, light=ag.lp.EllSersic(intensity=1.0))

        galaxy_1 = ag.Galaxy(redshift=1.0, light=ag.lp.EllSersic(intensity=0.3))

        plane = ag.Plane(redshift=0.75, galaxies=[galaxy_0, galaxy_1])

        simulator = ag.SimulatorImaging(
            psf=psf,
            exposure_time=10000.0,
            background_sky_level=100.0,
            add_poisson_noise=False,
        )

        imaging = simulator.via_plane_from(plane=plane, grid=grid)

        imaging_via_image = simulator.via_image_from(
            image=plane.image_2d_from(grid=grid)
        )

        assert imaging.shape_native == (20, 20)
        assert imaging.image.native[0, 0] != imaging_via_image.image.native[0, 0]
        assert imaging.image.native[10, 10] == imaging_via_image.image.native[10, 10]
        assert (imaging.psf == imaging_via_image.psf).all()
        assert (imaging.noise_map == imaging_via_image.noise_map).all()
Пример #6
0
    def test__max_log_likelihood_plane_available_as_result(
            self, analysis_imaging_7x7):

        galaxy_0 = ag.Galaxy(redshift=0.5,
                             light=ag.lp.EllSersic(intensity=1.0))
        galaxy_1 = ag.Galaxy(redshift=0.5,
                             light=ag.lp.EllSersic(intensity=2.0))

        model = af.Collection(
            galaxies=af.Collection(galaxy_0=galaxy_0, galaxy_1=galaxy_1))

        max_log_likelihood_plane = ag.Plane(galaxies=[galaxy_0, galaxy_1])

        search = MockSearch(
            name="test_search",
            samples=MockSamples(
                max_log_likelihood_instance=max_log_likelihood_plane),
        )

        result = search.fit(model=model, analysis=analysis_imaging_7x7)

        assert isinstance(result.max_log_likelihood_plane, ag.Plane)
        assert result.max_log_likelihood_plane.galaxies[
            0].light.intensity == 1.0
        assert result.max_log_likelihood_plane.galaxies[
            1].light.intensity == 2.0
Пример #7
0
    def test___all_fit_quantities__hyper_background_noise(self, interferometer_7):
        hyper_background_noise = ag.hyper_data.HyperBackgroundNoise(noise_scale=1.0)

        hyper_noise_map = hyper_background_noise.hyper_noise_map_from_complex_noise_map(
            noise_map=interferometer_7.noise_map
        )

        galaxy_light = ag.Galaxy(
            redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0)
        )

        pix = ag.pix.Rectangular(shape=(3, 3))
        reg = ag.reg.Constant(coefficient=1.0)
        galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg)

        plane = ag.Plane(redshift=0.75, galaxies=[galaxy_light, galaxy_pix])

        fit = ag.FitInterferometer(
            interferometer=interferometer_7,
            plane=plane,
            hyper_background_noise=hyper_background_noise,
        )

        assert hyper_noise_map.slim == pytest.approx(fit.inversion.noise_map, 1.0e-4)

        assert hyper_noise_map.slim == pytest.approx(fit.noise_map.slim)
Пример #8
0
def test__galaxy_blurred_image_2d_dict_via_convolver_from(
        sub_grid_2d_7x7, blurring_grid_2d_7x7, convolver_7x7):
    g0 = ag.Galaxy(redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0))
    g1 = ag.Galaxy(
        redshift=0.5,
        mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0),
        light_profile=ag.lp.EllSersic(intensity=2.0),
    )

    g2 = ag.Galaxy(redshift=0.5, light_profile=ag.lp.EllSersic(intensity=3.0))

    plane = ag.Plane(redshift=-0.75, galaxies=[g1, g0, g2])

    blurred_image_2d_list = plane.blurred_image_2d_list_via_convolver_from(
        grid=sub_grid_2d_7x7,
        convolver=convolver_7x7,
        blurring_grid=blurring_grid_2d_7x7,
    )

    blurred_image_dict = plane.galaxy_blurred_image_2d_dict_via_convolver_from(
        grid=sub_grid_2d_7x7,
        convolver=convolver_7x7,
        blurring_grid=blurring_grid_2d_7x7,
    )

    assert (blurred_image_dict[g0].slim == blurred_image_2d_list[1].slim).all()
    assert (blurred_image_dict[g1].slim == blurred_image_2d_list[0].slim).all()
    assert (blurred_image_dict[g2].slim == blurred_image_2d_list[2].slim).all()
Пример #9
0
    def test___fit_galaxy_model_image_dict__images_and_inversion_mapped_reconstructed_image(
        self, interferometer_7
    ):
        pix = ag.pix.Rectangular(shape=(3, 3))
        reg = ag.reg.Constant(coefficient=1.0)

        g0 = ag.Galaxy(redshift=0.5)
        g1 = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg)

        plane = ag.Plane(redshift=0.75, galaxies=[g0, g1])

        fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane)

        mapper = pix.mapper_from_grid_and_sparse_grid(
            grid=interferometer_7.grid, sparse_grid=None
        )

        inversion = inversions.InversionInterferometerMatrix.from_data_mapper_and_regularization(
            mapper=mapper,
            regularization=reg,
            visibilities=interferometer_7.visibilities,
            noise_map=interferometer_7.noise_map,
            transformer=interferometer_7.transformer,
        )

        assert (fit.galaxy_model_image_dict[g0].native == np.zeros((7, 7))).all()

        assert fit.galaxy_model_image_dict[g1].slim == pytest.approx(
            inversion.mapped_reconstructed_image.slim, 1.0e-4
        )
Пример #10
0
    def test___all_fit_quantities__hyper_background_noise(self, interferometer_7):
        hyper_background_noise = ag.hyper_data.HyperBackgroundNoise(noise_scale=1.0)

        hyper_noise_map = hyper_background_noise.hyper_noise_map_from_complex_noise_map(
            noise_map=interferometer_7.noise_map
        )

        g0 = ag.Galaxy(
            redshift=0.5,
            light_profile=ag.lp.EllSersic(intensity=1.0),
            mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0),
        )

        g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0))

        plane = ag.Plane(redshift=0.75, galaxies=[g0, g1])

        fit = ag.FitInterferometer(
            interferometer=interferometer_7,
            plane=plane,
            hyper_background_noise=hyper_background_noise,
        )

        assert hyper_noise_map.slim == pytest.approx(fit.noise_map.slim)

        fit = ag.FitInterferometer(
            interferometer=interferometer_7,
            plane=plane,
            hyper_background_noise=hyper_background_noise,
            use_hyper_scalings=False,
        )

        assert fit.noise_map == pytest.approx(interferometer_7.noise_map, 1.0e-4)
        assert fit.noise_map != pytest.approx(hyper_noise_map.slim, 1.0e-4)
Пример #11
0
    def test___fit_galaxy_visibilities_dict__corresponds_to_galaxy_visibilities(
        self, interferometer_7
    ):
        g0 = ag.Galaxy(
            redshift=0.5,
            light_profile=ag.lp.EllSersic(intensity=1.0),
            mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0),
        )
        g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0))

        plane = ag.Plane(redshift=0.75, galaxies=[g0, g1])

        fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane)

        g0_profile_visibilities = g0.profile_visibilities_from_grid_and_transformer(
            grid=interferometer_7.grid, transformer=interferometer_7.transformer
        )

        g1_profile_visibilities = g1.profile_visibilities_from_grid_and_transformer(
            grid=interferometer_7.grid, transformer=interferometer_7.transformer
        )

        assert fit.galaxy_model_visibilities_dict[g0].slim == pytest.approx(
            g0_profile_visibilities, 1.0e-4
        )
        assert fit.galaxy_model_visibilities_dict[g1].slim == pytest.approx(
            g1_profile_visibilities, 1.0e-4
        )

        assert fit.model_visibilities.slim == pytest.approx(
            fit.galaxy_model_visibilities_dict[g0].slim
            + fit.galaxy_model_visibilities_dict[g1].slim,
            1.0e-4,
        )
Пример #12
0
    def test__from_plane__same_as_plane_input(self):

        grid = ag.Grid2D.uniform(shape_native=(20, 20), pixel_scales=0.05, sub_size=1)

        galaxy_0 = ag.Galaxy(
            redshift=0.5,
            light=ag.lp.EllSersic(intensity=1.0),
            mass=ag.mp.EllIsothermal(einstein_radius=1.6),
        )

        galaxy_1 = ag.Galaxy(redshift=1.0, light=ag.lp.EllSersic(intensity=0.3))

        plane = ag.Plane(redshift=0.75, galaxies=[galaxy_0, galaxy_1])

        simulator = ag.SimulatorInterferometer(
            uv_wavelengths=np.ones(shape=(7, 2)),
            exposure_time=10000.0,
            noise_sigma=0.1,
            noise_seed=1,
        )

        interferometer = simulator.via_plane_from(plane=plane, grid=grid)

        interferometer_via_image = simulator.via_image_from(
            image=plane.image_2d_from(grid=grid)
        )

        assert (
            interferometer.visibilities == interferometer_via_image.visibilities
        ).all()
        assert (
            interferometer.uv_wavelengths == interferometer_via_image.uv_wavelengths
        ).all()
        assert (interferometer.noise_map == interferometer_via_image.noise_map).all()
Пример #13
0
def plane_via_database_from(fit: Fit):
    """
    Returns a `Plane` object from an aggregator's `SearchOutput` class, which we call an 'agg_obj' to describe that
     it acts as the aggregator object for one result in the `Aggregator`. This uses the aggregator's generator outputs
     such that the function can use the `Aggregator`'s map function to to create a `Plane` generator.

     The `Plane` is created following the same method as the PyAutoGalaxy `Search` classes using an instance of the
     maximum log likelihood model's galaxies. These galaxies have their hyper-images added (if they were used in the
     fit) and passed into a Plane object.

    Parameters
    ----------
    fit : af.SearchOutput
        A PyAutoFit aggregator's SearchOutput object containing the generators of the results of PyAutoGalaxy model-fits.
    """

    galaxies = fit.instance.galaxies

    hyper_model_image = fit.value(name="hyper_model_image")
    hyper_galaxy_image_path_dict = fit.value(name="hyper_galaxy_image_path_dict")

    if hyper_galaxy_image_path_dict is not None:

        for (galaxy_path, galaxy) in fit.instance.path_instance_tuples_for_class(
            ag.Galaxy
        ):
            if galaxy_path in hyper_galaxy_image_path_dict:
                galaxy.hyper_model_image = hyper_model_image
                galaxy.hyper_galaxy_image = hyper_galaxy_image_path_dict[galaxy_path]

    return ag.Plane(galaxies=galaxies)
Пример #14
0
def make_plane_x2_galaxy_inversion_7x7():
    source_gal_inversion = ag.Galaxy(
        redshift=1.0,
        pixelization=ag.pix.Rectangular(),
        regularization=ag.reg.Constant(),
    )

    return ag.Plane(galaxies=[make_gal_x1_lp(), source_gal_inversion])
def make_samples():
    galaxy_0 = ag.Galaxy(redshift=0.5,
                         light=ag.lp.EllSersic(centre=(0.0, 1.0)))
    galaxy_1 = ag.Galaxy(redshift=1.0, light=ag.lp.EllSersic())

    plane = ag.Plane(galaxies=[galaxy_0, galaxy_1])

    return mock.MockSamples(max_log_likelihood_instance=plane)
Пример #16
0
def make_samples_with_result():
    galaxies = [
        ag.Galaxy(redshift=0.5, light=ag.lp.EllSersic(intensity=1.0)),
        ag.Galaxy(redshift=1.0, light=ag.lp.EllSersic(intensity=2.0)),
    ]

    plane = ag.Plane(galaxies=galaxies)

    return MockSamples(max_log_likelihood_instance=plane)
Пример #17
0
    def test__uses_hyper_fit_correctly(self, masked_imaging_7x7):

        galaxies = af.ModelInstance()
        galaxies.galaxy = ag.Galaxy(redshift=0.5,
                                    light=ag.lp.EllSersic(intensity=1.0),
                                    mass=ag.mp.SphIsothermal)
        galaxies.source = ag.Galaxy(redshift=1.0, light=ag.lp.EllSersic())

        instance = af.ModelInstance()
        instance.galaxies = galaxies

        galaxy_hyper_image = ag.Array2D.ones(shape_native=(3, 3),
                                             pixel_scales=0.1)
        galaxy_hyper_image[4] = 10.0
        hyper_model_image = ag.Array2D.full(fill_value=0.5,
                                            shape_native=(3, 3),
                                            pixel_scales=0.1)

        hyper_galaxy_image_path_dict = {
            ("galaxies", "galaxy"): galaxy_hyper_image
        }

        result = mock.MockResult(
            hyper_galaxy_image_path_dict=hyper_galaxy_image_path_dict,
            hyper_model_image=hyper_model_image,
        )

        analysis = ag.AnalysisImaging(dataset=masked_imaging_7x7,
                                      hyper_dataset_result=result)

        hyper_galaxy = ag.HyperGalaxy(contribution_factor=1.0,
                                      noise_factor=1.0,
                                      noise_power=1.0)

        instance.galaxies.galaxy.hyper_galaxy = hyper_galaxy

        fit_likelihood = analysis.log_likelihood_function(instance=instance)

        g0 = ag.Galaxy(
            redshift=0.5,
            light_profile=instance.galaxies.galaxy.light,
            mass_profile=instance.galaxies.galaxy.mass,
            hyper_galaxy=hyper_galaxy,
            hyper_model_image=hyper_model_image,
            hyper_galaxy_image=galaxy_hyper_image,
            hyper_minimum_value=0.0,
        )
        g1 = ag.Galaxy(redshift=1.0,
                       light_profile=instance.galaxies.source.light)

        plane = ag.Plane(galaxies=[g0, g1])

        fit = ag.FitImaging(dataset=masked_imaging_7x7, plane=plane)

        assert (fit.plane.galaxies[0].hyper_galaxy_image == galaxy_hyper_image
                ).all()
        assert fit_likelihood == fit.log_likelihood
Пример #18
0
    def test___all_fit_quantities__no_hyper_methods(self, interferometer_7):
        g0 = ag.Galaxy(
            redshift=0.5,
            light_profile=ag.lp.EllSersic(intensity=1.0),
            mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0),
        )

        g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0))

        plane = ag.Plane(redshift=0.75, galaxies=[g0, g1])

        fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane)

        assert interferometer_7.noise_map == pytest.approx(fit.noise_map)

        model_visibilities = plane.profile_visibilities_from_grid_and_transformer(
            grid=interferometer_7.grid, transformer=interferometer_7.transformer
        )

        assert model_visibilities == pytest.approx(fit.model_visibilities, 1e-4)

        residual_map = ag.util.fit.residual_map_from(
            data=interferometer_7.visibilities, model_data=model_visibilities
        )

        assert residual_map == pytest.approx(fit.residual_map, 1e-4)

        normalized_residual_map = ag.util.fit.normalized_residual_map_complex_from(
            residual_map=residual_map, noise_map=interferometer_7.noise_map
        )

        assert normalized_residual_map == pytest.approx(
            fit.normalized_residual_map, 1e-4
        )

        chi_squared_map = ag.util.fit.chi_squared_map_complex_from(
            residual_map=residual_map, noise_map=interferometer_7.noise_map
        )

        assert chi_squared_map == pytest.approx(fit.chi_squared_map, 1e-4)

        chi_squared = ag.util.fit.chi_squared_complex_from(
            chi_squared_map=fit.chi_squared_map
        )

        noise_normalization = ag.util.fit.noise_normalization_complex_from(
            noise_map=interferometer_7.noise_map
        )

        log_likelihood = ag.util.fit.log_likelihood_from(
            chi_squared=chi_squared, noise_normalization=noise_normalization
        )

        assert log_likelihood == pytest.approx(fit.log_likelihood, 1e-4)
        assert log_likelihood == fit.figure_of_merit
Пример #19
0
def test__model_visibilities(interferometer_7):

    g0 = ag.Galaxy(redshift=0.5,
                   light_profile=MockLightProfile(image_2d=np.ones(2)))
    plane = ag.Plane(galaxies=[g0])

    fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane)

    assert fit.model_visibilities.slim[0] == pytest.approx(
        np.array([1.2933 + 0.2829j]), 1.0e-4)
    assert fit.log_likelihood == pytest.approx(-27.06284, 1.0e-4)
Пример #20
0
    def test___fit_galaxy_model_visibilities_dict__has_image_and_inversion_mapped_reconstructed_image(
        self, interferometer_7
    ):
        g0 = ag.Galaxy(redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0))
        g1 = ag.Galaxy(redshift=0.5, light_profile=ag.lp.EllSersic(intensity=2.0))

        pix = ag.pix.Rectangular(shape=(3, 3))
        reg = ag.reg.Constant(coefficient=1.0)
        galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg)

        plane = ag.Plane(redshift=0.75, galaxies=[g0, g1, galaxy_pix])

        fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane)

        g0_visibilities = g0.profile_visibilities_from_grid_and_transformer(
            grid=interferometer_7.grid, transformer=interferometer_7.transformer
        )

        g1_visibilities = g1.profile_visibilities_from_grid_and_transformer(
            grid=interferometer_7.grid, transformer=interferometer_7.transformer
        )

        profile_visibilities = g0_visibilities + g1_visibilities

        profile_subtracted_visibilities = (
            interferometer_7.visibilities - profile_visibilities
        )
        mapper = pix.mapper_from_grid_and_sparse_grid(
            grid=interferometer_7.grid,
            settings=ag.SettingsPixelization(use_border=False),
        )

        inversion = inversions.InversionInterferometerMatrix.from_data_mapper_and_regularization(
            visibilities=profile_subtracted_visibilities,
            noise_map=interferometer_7.noise_map,
            transformer=interferometer_7.transformer,
            mapper=mapper,
            regularization=reg,
        )

        g0_image = g0.image_2d_from_grid(grid=interferometer_7.grid)

        g1_image = g1.image_2d_from_grid(grid=interferometer_7.grid)

        assert fit.galaxy_model_image_dict[g0].slim == pytest.approx(
            g0_image.slim, 1.0e-4
        )
        assert fit.galaxy_model_image_dict[g1].slim == pytest.approx(
            g1_image.slim, 1.0e-4
        )
        assert fit.galaxy_model_image_dict[galaxy_pix].slim == pytest.approx(
            inversion.mapped_reconstructed_image.slim, 1.0e-4
        )
Пример #21
0
    def test__results_include_pixelization__available_as_property(
        self, analysis_imaging_7x7
    ):
        source = ag.Galaxy(
            redshift=1.0,
            pixelization=ag.pix.VoronoiMagnification(shape=(2, 3)),
            regularization=ag.reg.Constant(),
        )

        max_log_likelihood_plane = ag.Plane(galaxies=[source])

        samples = mock.MockSamples(max_log_likelihood_instance=max_log_likelihood_plane)

        result = res.ResultDataset(
            samples=samples, analysis=analysis_imaging_7x7, model=None, search=None
        )

        assert isinstance(result.pixelization, ag.pix.VoronoiMagnification)
        assert result.pixelization.shape == (2, 3)

        source = ag.Galaxy(
            redshift=1.0,
            pixelization=ag.pix.VoronoiBrightnessImage(pixels=6),
            regularization=ag.reg.Constant(),
        )

        source.hyper_galaxy_image = np.ones(9)

        max_log_likelihood_plane = ag.Plane(galaxies=[source])

        samples = mock.MockSamples(max_log_likelihood_instance=max_log_likelihood_plane)

        result = res.ResultDataset(
            samples=samples, analysis=analysis_imaging_7x7, model=None, search=None
        )

        assert isinstance(result.pixelization, ag.pix.VoronoiBrightnessImage)
        assert result.pixelization.pixels == 6
Пример #22
0
    def test__simulate_interferometer_from_galaxy__source_galaxy__compare_to_interferometer(
        self,
    ):

        galaxy_0 = ag.Galaxy(
            redshift=0.5,
            mass=ag.mp.EllIsothermal(
                centre=(0.0, 0.0), einstein_radius=1.6, elliptical_comps=(0.17647, 0.0)
            ),
        )

        galaxy_1 = ag.Galaxy(
            redshift=0.5,
            light=ag.lp.EllSersic(
                centre=(0.1, 0.1),
                elliptical_comps=(0.096225, -0.055555),
                intensity=0.3,
                effective_radius=1.0,
                sersic_index=2.5,
            ),
        )

        grid = ag.Grid2D.uniform(shape_native=(11, 11), pixel_scales=0.05, sub_size=1)

        simulator = ag.SimulatorInterferometer(
            uv_wavelengths=np.ones(shape=(7, 2)),
            exposure_time=10000.0,
            noise_sigma=0.1,
            noise_seed=1,
        )

        interferometer = simulator.via_galaxies_from(
            galaxies=[galaxy_0, galaxy_1], grid=grid
        )

        plane = ag.Plane(galaxies=[galaxy_0, galaxy_1])

        interferometer_via_image = simulator.via_image_from(
            image=plane.image_2d_from(grid=grid)
        )

        assert interferometer.visibilities == pytest.approx(
            interferometer_via_image.visibilities, 1.0e-4
        )
        assert (
            interferometer.uv_wavelengths == interferometer_via_image.uv_wavelengths
        ).all()
        assert (interferometer_via_image.noise_map == interferometer.noise_map).all()
Пример #23
0
    def test__simulate_imaging_from_galaxy__source_galaxy__compare_to_imaging(
            self):

        galaxy_0 = ag.Galaxy(
            redshift=0.5,
            mass=ag.mp.EllIsothermal(centre=(0.0, 0.0),
                                     einstein_radius=1.6,
                                     elliptical_comps=(0.17647, 0.0)),
        )

        galaxy_1 = ag.Galaxy(
            redshift=1.0,
            light=ag.lp.EllSersic(
                centre=(0.1, 0.1),
                elliptical_comps=(0.096225, -0.055555),
                intensity=0.3,
                effective_radius=1.0,
                sersic_index=2.5,
            ),
        )

        grid = ag.Grid2D.uniform(shape_native=(11, 11),
                                 pixel_scales=0.2,
                                 sub_size=1)

        psf = ag.Kernel2D.no_blur(pixel_scales=0.2)

        simulator = ag.SimulatorImaging(
            psf=psf,
            exposure_time=10000.0,
            background_sky_level=100.0,
            add_poisson_noise=True,
            noise_seed=1,
        )

        imaging = simulator.from_galaxies_and_grid(
            galaxies=[galaxy_0, galaxy_1], grid=grid)

        plane = ag.Plane(redshift=0.75, galaxies=[galaxy_0, galaxy_1])

        imaging_via_image = simulator.from_image(
            image=plane.image_2d_from_grid(grid=grid))

        assert imaging.shape_native == (11, 11)
        assert (imaging.image == imaging_via_image.image).all()
        assert (imaging.psf == imaging_via_image.psf).all()
        assert (imaging.noise_map == imaging_via_image.noise_map).all()
Пример #24
0
    def test__1x2_image__1x2_visibilities__simple_fourier_transform(self):
        # The image plane image generated by the galaxy is [1.0, 1.0]

        # Thus the chi squared is 4.0**2.0 + 3.0**2.0 = 25.0

        real_space_mask = ag.Mask2D.manual(
            mask=[
                [True, True, True, True],
                [True, False, False, True],
                [True, True, True, True],
            ],
            pixel_scales=1.0,
        )

        interferometer = ag.Interferometer(
            visibilities=ag.Visibilities.full(fill_value=5.0, shape_slim=(1,)),
            noise_map=ag.Visibilities.ones(shape_slim=(1,)),
            uv_wavelengths=np.array([[0.0, 0.0]]),
            real_space_mask=real_space_mask,
            settings=ag.SettingsInterferometer(
                grid_class=ag.Grid2D, sub_size=1, transformer_class=ag.TransformerDFT
            ),
        )

        interferometer.visibilities[0] = 5.0 + 4.0j

        # Setup as a ray trace instance, using a light profile for the galaxy

        g0 = ag.Galaxy(redshift=0.5, light_profile=MockLightProfile(value=1.0, size=2))
        plane = ag.Plane(galaxies=[g0])

        fit = ag.FitInterferometer(interferometer=interferometer, plane=plane)

        assert (fit.visibilities.slim == np.array([5.0 + 4.0j])).all()
        assert (fit.noise_map.slim == np.array([1.0 + 1.0j])).all()
        assert (fit.model_visibilities.slim == np.array([2.0 + 0.0j])).all()
        assert (fit.residual_map.slim == np.array([3.0 + 4.0j])).all()
        assert (fit.normalized_residual_map.slim == np.array([3.0 + 4.0j])).all()
        assert (fit.chi_squared_map.slim == np.array([9.0 + 16.0j])).all()

        assert fit.chi_squared == 25.0
        assert fit.noise_normalization == pytest.approx(
            2.0 * np.log(2 * np.pi * 1.0 ** 2.0), 1.0e-4
        )
        assert fit.log_likelihood == pytest.approx(
            -0.5 * (25.0 + 2.0 * np.log(2 * np.pi * 1.0 ** 2.0)), 1.0e-4
        )
Пример #25
0
def test__y_x(dataset_quantity_7x7_vector_yx_2d):

    model_object = MockMassProfile(deflections_yx_2d=ag.VectorYX2D.full(
        fill_value=3.0, shape_native=(7, 7), pixel_scales=1.0))

    plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5, mass=model_object)])

    fit_quantity = ag.FitQuantity(
        dataset=dataset_quantity_7x7_vector_yx_2d,
        light_mass_obj=plane,
        func_str="deflections_yx_2d_from",
    )

    assert (fit_quantity.y.dataset.data ==
            dataset_quantity_7x7_vector_yx_2d.y.data).all()
    assert (fit_quantity.x.dataset.data ==
            dataset_quantity_7x7_vector_yx_2d.x.data).all()
Пример #26
0
def make_samples(model):
    galaxy_0 = ag.Galaxy(redshift=0.5, light=ag.lp.EllSersic(centre=(0.0, 1.0)))
    galaxy_1 = ag.Galaxy(redshift=1.0, light=ag.lp.EllSersic())

    plane = ag.Plane(galaxies=[galaxy_0, galaxy_1])

    parameters = [model.prior_count * [0.0], model.prior_count * [10.0]]

    sample_list = Sample.from_lists(
        model=model,
        parameter_lists=parameters,
        log_likelihood_list=[1.0, 2.0],
        log_prior_list=[0.0, 0.0],
        weight_list=[0.0, 1.0],
    )

    return mock.MockSamples(
        model=model, sample_list=sample_list, max_log_likelihood_instance=plane
    )
Пример #27
0
def test___fit_figure_of_merit__linear_operator(interferometer_7_lop):

    pix = ag.pix.Rectangular(shape=(3, 3))
    reg = ag.reg.Constant(coefficient=0.01)

    g0 = ag.Galaxy(redshift=0.5, pixelization=pix, regularization=reg)

    plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5), g0])

    fit = ag.FitInterferometer(
        dataset=interferometer_7_lop,
        plane=plane,
        settings_inversion=ag.SettingsInversion(use_linear_operators=True),
    )

    assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j,
                                          shape=(7, ))).all()
    assert fit.log_evidence == pytest.approx(-71.5177, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-71.5177, 1.0e-4)
Пример #28
0
def test__fit_via_mock_profile(dataset_quantity_7x7_array_2d,
                               dataset_quantity_7x7_vector_yx_2d):

    model_object = MockMassProfile(
        convergence_2d=ag.Array2D.ones(shape_native=(7, 7), pixel_scales=1.0),
        potential_2d=ag.Array2D.full(fill_value=2.0,
                                     shape_native=(7, 7),
                                     pixel_scales=1.0),
        deflections_yx_2d=ag.VectorYX2D.full(fill_value=3.0,
                                             shape_native=(7, 7),
                                             pixel_scales=1.0),
    )

    plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5, mass=model_object)])

    fit_quantity = ag.FitQuantity(
        dataset=dataset_quantity_7x7_array_2d,
        light_mass_obj=plane,
        func_str="convergence_2d_from",
    )

    assert fit_quantity.chi_squared == pytest.approx(0.0, 1.0e-4)
    assert fit_quantity.log_likelihood == pytest.approx(
        -0.5 * 49.0 * np.log(2 * np.pi * 2.0**2.0), 1.0e-4)

    fit_quantity = ag.FitQuantity(
        dataset=dataset_quantity_7x7_array_2d,
        light_mass_obj=plane,
        func_str="potential_2d_from",
    )

    assert fit_quantity.chi_squared == pytest.approx(12.25, 1.0e-4)
    assert fit_quantity.log_likelihood == pytest.approx(-85.1171999, 1.0e-4)

    fit_quantity = ag.FitQuantity(
        dataset=dataset_quantity_7x7_vector_yx_2d,
        light_mass_obj=plane,
        func_str="deflections_yx_2d_from",
    )

    assert fit_quantity.chi_squared == pytest.approx(98.0, 1.0e-4)
    assert fit_quantity.log_likelihood == pytest.approx(-206.98438, 1.0e-4)
Пример #29
0
    def test___fit_galaxy_model_image_dict__corresponds_to_profile_galaxy_images(
        self, interferometer_7
    ):
        g0 = ag.Galaxy(
            redshift=0.5,
            light_profile=ag.lp.EllSersic(intensity=1.0),
            mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0),
        )
        g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0))

        plane = ag.Plane(redshift=0.75, galaxies=[g0, g1])

        fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane)

        g0_image = g0.image_2d_from_grid(grid=interferometer_7.grid)

        g1_image = g1.image_2d_from_grid(grid=interferometer_7.grid)

        assert fit.galaxy_model_image_dict[g0].slim == pytest.approx(g0_image, 1.0e-4)
        assert fit.galaxy_model_image_dict[g1].slim == pytest.approx(g1_image, 1.0e-4)
Пример #30
0
    def test__results_include_pixelization__available_as_property(
            self, analysis_imaging_7x7):
        source = ag.Galaxy(
            redshift=1.0,
            pixelization=MockPixelization(mapper=1),
            regularization=MockRegularization(),
        )

        max_log_likelihood_plane = ag.Plane(galaxies=[source])

        samples = MockSamples(
            max_log_likelihood_instance=max_log_likelihood_plane)

        result = res.ResultDataset(samples=samples,
                                   analysis=analysis_imaging_7x7,
                                   model=None,
                                   search=None)

        assert isinstance(result.pixelization_list[0], MockPixelization)
        assert result.pixelization_list[0].mapper == 1