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
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)
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)
Beispiel #4
0
def fit_imaging_via_database_from(
    fit: Fit,
    settings_imaging: Optional[ag.SettingsImaging] = None,
    settings_pixelization: Optional[ag.SettingsPixelization] = None,
    settings_inversion: Optional[ag.SettingsInversion] = None,
):
    """
    Returns a `FitImaging` 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 `FitImaging` generator.

     The `FitImaging` is created following the same method as the PyAutoGalaxy `Search` classes.

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

    imaging = imaging_via_database_from(fit=fit, settings_imaging=settings_imaging)
    plane = plane_via_database_from(fit=fit)

    settings_pixelization = settings_pixelization or fit.value(
        name="settings_pixelization"
    )
    settings_inversion = settings_inversion or fit.value(name="settings_inversion")

    return ag.FitImaging(
        imaging=imaging,
        plane=plane,
        settings_pixelization=settings_pixelization,
        settings_inversion=settings_inversion,
    )
    def test__figure_of_merit__includes_hyper_image_and_noise__matches_fit(
        self, masked_imaging_7x7
    ):

        hyper_image_sky = ag.hyper_data.HyperImageSky(sky_scale=1.0)
        hyper_background_noise = ag.hyper_data.HyperBackgroundNoise(noise_scale=1.0)

        galaxy = ag.Galaxy(redshift=0.5, light=ag.lp.EllSersic(intensity=0.1))

        model = af.Collection(
            hyper_image_sky=hyper_image_sky,
            hyper_background_noise=hyper_background_noise,
            galaxies=af.Collection(galaxy=galaxy),
        )

        analysis = ag.AnalysisImaging(dataset=masked_imaging_7x7)

        instance = model.instance_from_unit_vector([])
        fit_figure_of_merit = analysis.log_likelihood_function(instance=instance)

        plane = analysis.plane_for_instance(instance=instance)
        fit = ag.FitImaging(
            imaging=masked_imaging_7x7,
            plane=plane,
            hyper_image_sky=hyper_image_sky,
            hyper_background_noise=hyper_background_noise,
        )

        assert fit.log_likelihood == fit_figure_of_merit
Beispiel #6
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
def test__model_image__with_and_without_psf_blurring(
        masked_imaging_7x7_no_blur, masked_imaging_7x7):

    g0 = ag.Galaxy(
        redshift=0.5,
        light_profile=MockLightProfile(image_2d_value=1.0,
                                       image_2d_first_value=2.0),
    )
    plane = ag.Plane(galaxies=[g0])

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

    assert fit.model_image.slim == pytest.approx(
        np.array([2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]), 1.0e-4)
    assert fit.log_likelihood == pytest.approx(-14.63377, 1.0e-4)

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

    assert fit.model_image.slim == pytest.approx(
        np.array([1.33, 1.16, 1.0, 1.16, 1.0, 1.0, 1.0, 1.0, 1.0]), 1.0e-1)
    assert fit.log_likelihood == pytest.approx(-14.52960, 1.0e-4)
def test__image__with_and_without_hyper_background_sky(
        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.image.slim == pytest.approx(
        np.full(fill_value=1.0, shape=(9, )), 1.0e-1)

    hyper_image_sky = ag.hyper_data.HyperImageSky(sky_scale=1.0)

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

    assert fit.image.slim == pytest.approx(
        np.full(fill_value=2.0, shape=(9, )), 1.0e-1)
    assert fit.log_likelihood == pytest.approx(-15.6337, 1.0e-4)
def test__noise_map__with_and_without_hyper_background(
        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_background_noise = ag.hyper_data.HyperBackgroundNoise(
        noise_scale=1.0)

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

    assert fit.noise_map.slim == pytest.approx(
        np.full(fill_value=3.0, shape=(9, )), 1.0e-1)
    assert fit.log_likelihood == pytest.approx(-18.1579, 1.0e-4)
    def test__figure_of_merit__matches_correct_fit_given_galaxy_profiles(
        self, masked_imaging_7x7
    ):
        galaxy = ag.Galaxy(redshift=0.5, light=ag.lp.EllSersic(intensity=0.1))

        model = af.Collection(galaxies=af.Collection(galaxy=galaxy))

        analysis = ag.AnalysisImaging(dataset=masked_imaging_7x7)

        instance = model.instance_from_unit_vector([])
        fit_figure_of_merit = analysis.log_likelihood_function(instance=instance)

        plane = analysis.plane_for_instance(instance=instance)

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

        assert fit.log_likelihood == fit_figure_of_merit
Beispiel #11
0
def fit_imaging_from_agg_obj(agg_obj):
    """
    Returns a `FitImaging` 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 `FitImaging` generator.

     The `FitImaging` is created following the same method as the PyAutoGalaxy `Search` classes.

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

    imaging = imaging_from_agg_obj(agg_obj=agg_obj)
    plane = plane_from_agg_obj(agg_obj=agg_obj)

    return ag.FitImaging(
        imaging=imaging,
        plane=plane,
        settings_pixelization=agg_obj.settings_pixelization,
        settings_inversion=agg_obj.settings_inversion,
    )
def make_fit_imaging_x2_galaxy_7x7():
    plane = ag.Plane(galaxies=[make_gal_x1_lp(), make_gal_x1_lp()])

    return ag.FitImaging(imaging=make_masked_imaging_7x7(), plane=plane)
Beispiel #13
0
def test__simulate_imaging_data_and_fit__include_psf_blurring__chi_squared_is_0__noise_normalization_correct(
):
    grid = ag.Grid2D.uniform(shape_native=(11, 11),
                             pixel_scales=0.2,
                             sub_size=1)

    psf = ag.Kernel2D.from_gaussian(shape_native=(3, 3),
                                    pixel_scales=0.2,
                                    sigma=0.75,
                                    normalize=True)

    lens_galaxy = ag.Galaxy(
        redshift=0.5,
        light=ag.lp.EllSersic(centre=(0.1, 0.1), intensity=0.1),
        mass=ag.mp.EllIsothermal(centre=(0.1, 0.1), einstein_radius=1.8),
    )
    source_galaxy = ag.Galaxy(redshift=1.0,
                              light=ag.lp.EllExponential(centre=(0.1, 0.1),
                                                         intensity=0.5))
    plane = ag.Plane(galaxies=[lens_galaxy, source_galaxy])

    simulator = ag.SimulatorImaging(exposure_time=300.0,
                                    psf=psf,
                                    add_poisson_noise=False)

    imaging = simulator.from_plane_and_grid(plane=plane, grid=grid)
    imaging.noise_map = ag.Array2D.ones(
        shape_native=imaging.image.shape_native, pixel_scales=0.2)

    file_path = path.join(
        "{}".format(path.dirname(path.realpath(__file__))),
        "data_temp",
        "simulate_and_fit",
    )

    try:
        shutil.rmtree(file_path)
    except FileNotFoundError:
        pass

    if path.exists(file_path) is False:
        os.makedirs(file_path)

    imaging.output_to_fits(
        image_path=path.join(file_path, "image.fits"),
        noise_map_path=path.join(file_path, "noise_map.fits"),
        psf_path=path.join(file_path, "psf.fits"),
    )

    imaging = ag.Imaging.from_fits(
        image_path=path.join(file_path, "image.fits"),
        noise_map_path=path.join(file_path, "noise_map.fits"),
        psf_path=path.join(file_path, "psf.fits"),
        pixel_scales=0.2,
    )

    mask = ag.Mask2D.circular(
        shape_native=imaging.image.shape_native,
        pixel_scales=0.2,
        sub_size=1,
        radius=0.8,
    )

    masked_imaging = imaging.apply_mask(mask=mask)
    masked_imaging = masked_imaging.apply_settings(
        settings=ag.SettingsImaging(grid_class=ag.Grid2D, sub_size=1))

    plane = ag.Plane(galaxies=[lens_galaxy, source_galaxy])

    fit = ag.FitImaging(imaging=masked_imaging, plane=plane)

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

    file_path = path.join("{}".format(path.dirname(path.realpath(__file__))),
                          "data_temp")

    if path.exists(file_path) is True:
        shutil.rmtree(file_path)
def make_fit_imaging_x2_galaxy_inversion_7x7():
    return ag.FitImaging(imaging=make_masked_imaging_7x7(),
                         plane=make_plane_x2_galaxy_inversion_7x7())
def test__fit_figure_of_merit__include_hyper_methods(masked_imaging_7x7):

    hyper_image_sky = ag.hyper_data.HyperImageSky(sky_scale=1.0)
    hyper_background_noise = ag.hyper_data.HyperBackgroundNoise(
        noise_scale=1.0)

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

    g0 = ag.Galaxy(
        redshift=0.5,
        light_profile=ag.lp.EllSersic(intensity=1.0),
        mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0),
        hyper_galaxy=hyper_galaxy,
        hyper_model_image=np.ones(9),
        hyper_galaxy_image=np.ones(9),
        hyper_minimum_value=0.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,
        hyper_image_sky=hyper_image_sky,
        hyper_background_noise=hyper_background_noise,
    )

    assert (fit.image == np.full(fill_value=2.0, shape=(9, ))).all()
    assert (fit.noise_map == np.full(fill_value=5.0, shape=(9, ))).all()
    assert fit.log_likelihood == pytest.approx(-12104.68, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-12104.68, 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,
        hyper_galaxy=hyper_galaxy,
        hyper_model_image=np.ones(9),
        hyper_galaxy_image=np.ones(9),
        hyper_minimum_value=0.0,
    )

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

    fit = ag.FitImaging(
        dataset=masked_imaging_7x7,
        plane=plane,
        hyper_image_sky=hyper_image_sky,
        hyper_background_noise=hyper_background_noise,
        settings_inversion=ag.SettingsInversion(use_w_tilde=False),
    )

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

    galaxy_light = ag.Galaxy(
        redshift=0.5,
        light_profile=ag.lp.EllSersic(intensity=1.0),
        hyper_galaxy=hyper_galaxy,
        hyper_model_image=np.ones(9),
        hyper_galaxy_image=np.ones(9),
        hyper_minimum_value=0.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,
        hyper_image_sky=hyper_image_sky,
        hyper_background_noise=hyper_background_noise,
        settings_inversion=ag.SettingsInversion(use_w_tilde=False),
    )

    assert (fit.image == np.full(fill_value=2.0, shape=(9, ))).all()
    assert (fit.noise_map == np.full(fill_value=5.0, shape=(9, ))).all()
    assert fit.log_evidence == pytest.approx(-1132.9297, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-1132.9297, 1.0e-4)
def test__galaxy_model_image_dict(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))
    g2 = ag.Galaxy(redshift=1.0)

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

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

    g0_blurred_image_2d = g0.blurred_image_2d_via_convolver_from(
        grid=masked_imaging_7x7.grid,
        blurring_grid=masked_imaging_7x7.blurring_grid,
        convolver=masked_imaging_7x7.convolver,
    )

    g1_blurred_image_2d = g1.blurred_image_2d_via_convolver_from(
        grid=masked_imaging_7x7.grid,
        blurring_grid=masked_imaging_7x7.blurring_grid,
        convolver=masked_imaging_7x7.convolver,
    )

    assert fit.galaxy_model_image_dict[g0] == pytest.approx(
        g0_blurred_image_2d, 1.0e-4)
    assert fit.galaxy_model_image_dict[g1] == pytest.approx(
        g1_blurred_image_2d, 1.0e-4)
    assert (fit.galaxy_model_image_dict[g2].slim == np.zeros(9)).all()

    assert fit.model_image.native == pytest.approx(
        fit.galaxy_model_image_dict[g0].native +
        fit.galaxy_model_image_dict[g1].native,
        1.0e-4,
    )

    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.FitImaging(dataset=masked_imaging_7x7, plane=plane)

    mapper = pix.mapper_from(source_grid_slim=masked_imaging_7x7.grid,
                             source_pixelization_grid=None)

    inversion = ag.Inversion(dataset=masked_imaging_7x7,
                             linear_obj_list=[mapper],
                             regularization_list=[reg])

    assert (fit.galaxy_model_image_dict[g0] == np.zeros(9)).all()

    assert fit.galaxy_model_image_dict[g1].native == pytest.approx(
        inversion.mapped_reconstructed_image.native, 1.0e-4)

    assert fit.model_image.native == pytest.approx(
        fit.galaxy_model_image_dict[g1].native, 1.0e-4)

    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))
    g2 = ag.Galaxy(redshift=0.5)

    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, g2, galaxy_pix])

    masked_imaging_7x7.image[0] = 3.0

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

    g0_blurred_image = g0.blurred_image_2d_via_convolver_from(
        grid=masked_imaging_7x7.grid,
        convolver=masked_imaging_7x7.convolver,
        blurring_grid=masked_imaging_7x7.blurring_grid,
    )
    g1_blurred_image = g1.blurred_image_2d_via_convolver_from(
        grid=masked_imaging_7x7.grid,
        convolver=masked_imaging_7x7.convolver,
        blurring_grid=masked_imaging_7x7.blurring_grid,
    )

    blurred_image = g0_blurred_image + g1_blurred_image

    profile_subtracted_image = masked_imaging_7x7.image - blurred_image
    mapper = pix.mapper_from(
        source_grid_slim=masked_imaging_7x7.grid,
        settings=ag.SettingsPixelization(use_border=False),
    )

    inversion = ag.InversionImaging(
        image=profile_subtracted_image,
        noise_map=masked_imaging_7x7.noise_map,
        convolver=masked_imaging_7x7.convolver,
        w_tilde=masked_imaging_7x7.w_tilde,
        linear_obj_list=[mapper],
        regularization_list=[reg],
    )

    assert (fit.galaxy_model_image_dict[g2] == np.zeros(9)).all()

    assert fit.galaxy_model_image_dict[g0].native == pytest.approx(
        g0_blurred_image.native, 1.0e-4)
    assert fit.galaxy_model_image_dict[g1].native == pytest.approx(
        g1_blurred_image.native, 1.0e-4)
    assert fit.galaxy_model_image_dict[galaxy_pix].native == pytest.approx(
        inversion.mapped_reconstructed_image.native, 1.0e-4)

    assert fit.model_image.native == pytest.approx(
        fit.galaxy_model_image_dict[g0].native +
        fit.galaxy_model_image_dict[g1].native +
        inversion.mapped_reconstructed_image.native,
        1.0e-4,
    )
def make_fit_imaging_7x7():
    return ag.FitImaging(imaging=make_masked_imaging_7x7(),
                         plane=make_plane_7x7())
def test___blurred_and_model_image_properties(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)

    g0_blurred_image = g0.blurred_image_2d_via_convolver_from(
        grid=masked_imaging_7x7.grid,
        convolver=masked_imaging_7x7.convolver,
        blurring_grid=masked_imaging_7x7.blurring_grid,
    )
    g1_blurred_image = g1.blurred_image_2d_via_convolver_from(
        grid=masked_imaging_7x7.grid,
        convolver=masked_imaging_7x7.convolver,
        blurring_grid=masked_imaging_7x7.blurring_grid,
    )

    assert g0_blurred_image.native == pytest.approx(
        fit.model_images_of_galaxies[0].native, 1.0e-4)

    assert g1_blurred_image.native == pytest.approx(
        fit.model_images_of_galaxies[1].native, 1.0e-4)

    unmasked_blurred_image = plane.unmasked_blurred_image_2d_via_psf_from(
        grid=masked_imaging_7x7.grid, psf=masked_imaging_7x7.psf)

    assert (unmasked_blurred_image == fit.unmasked_blurred_image).all()

    unmasked_blurred_image_of_galaxies = plane.unmasked_blurred_image_2d_list_via_psf_from(
        grid=masked_imaging_7x7.grid, psf=masked_imaging_7x7.psf)

    assert (unmasked_blurred_image_of_galaxies[0] ==
            fit.unmasked_blurred_image_of_galaxies[0]).all()
    assert (unmasked_blurred_image_of_galaxies[1] ==
            fit.unmasked_blurred_image_of_galaxies[1]).all()

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

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

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

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

    mapper = pix.mapper_from(
        source_grid_slim=masked_imaging_7x7.grid,
        settings=ag.SettingsPixelization(use_border=False),
    )

    inversion = ag.Inversion(dataset=masked_imaging_7x7,
                             linear_obj_list=[mapper],
                             regularization_list=[reg])

    assert (fit.model_images_of_galaxies[0].native == np.zeros((7, 7))).all()
    assert inversion.mapped_reconstructed_image.native == pytest.approx(
        fit.model_images_of_galaxies[1].native, 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)

    blurred_image = plane.blurred_image_2d_via_convolver_from(
        grid=masked_imaging_7x7.grid,
        convolver=masked_imaging_7x7.convolver,
        blurring_grid=masked_imaging_7x7.blurring_grid,
    )

    profile_subtracted_image = masked_imaging_7x7.image - blurred_image

    mapper = pix.mapper_from(
        source_grid_slim=masked_imaging_7x7.grid,
        settings=ag.SettingsPixelization(use_border=False),
    )

    inversion = ag.InversionImaging(
        image=profile_subtracted_image,
        noise_map=masked_imaging_7x7.noise_map,
        convolver=masked_imaging_7x7.convolver,
        w_tilde=masked_imaging_7x7.w_tilde,
        linear_obj_list=[mapper],
        regularization_list=[reg],
    )

    assert blurred_image.native == pytest.approx(
        fit.model_images_of_galaxies[0].native, 1.0e-4)
    assert inversion.mapped_reconstructed_image.native == pytest.approx(
        fit.model_images_of_galaxies[1].native, 1.0e-4)