コード例 #1
0
def test__total_mappers(interferometer_7):
    g0 = al.Galaxy(redshift=0.5)

    g1 = al.Galaxy(redshift=1.0)

    g2 = al.Galaxy(redshift=2.0)

    tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2])

    fit = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        settings_inversion=al.SettingsInversion(use_w_tilde=False),
    )

    assert fit.total_mappers == 0

    g2 = al.Galaxy(
        redshift=2.0,
        pixelization=al.pix.Rectangular(),
        regularization=al.reg.Constant(),
    )

    tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2])

    fit = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        settings_inversion=al.SettingsInversion(use_w_tilde=False),
    )

    assert fit.total_mappers == 1
コード例 #2
0
    def test__total_inversions(self, interferometer_7):
        g0 = al.Galaxy(redshift=0.5)

        g1 = al.Galaxy(redshift=1.0)

        g2 = al.Galaxy(redshift=2.0)

        tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2])

        fit = al.FitInterferometer(interferometer=interferometer_7,
                                   tracer=tracer)

        assert fit.total_inversions == 0

        g2 = al.Galaxy(
            redshift=2.0,
            pixelization=al.pix.Rectangular(),
            regularization=al.reg.Constant(),
        )

        tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2])

        fit = al.FitInterferometer(interferometer=interferometer_7,
                                   tracer=tracer)

        assert fit.total_inversions == 1

        g0 = al.Galaxy(
            redshift=0.5,
            pixelization=al.pix.Rectangular(),
            regularization=al.reg.Constant(),
        )

        g1 = al.Galaxy(
            redshift=1.0,
            pixelization=al.pix.Rectangular(),
            regularization=al.reg.Constant(),
        )

        g2 = al.Galaxy(
            redshift=2.0,
            pixelization=al.pix.Rectangular(),
            regularization=al.reg.Constant(),
        )

        tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2])

        fit = al.FitInterferometer(interferometer=interferometer_7,
                                   tracer=tracer)

        assert fit.total_inversions == 3
コード例 #3
0
def fit_interferometer_from_agg_obj(
    agg_obj,
    settings_masked_interferometer=None,
    settings_pixelization=None,
    settings_inversion=None,
):
    """Compute a generator of *FitInterferometer* objects from an input aggregator, which generates a list of the 
    *FitInterferometer* objects for every set of results loaded in the aggregator.

    This is performed by mapping the *fit_interferometer_from_agg_obj* with the aggregator, which sets up each fit
    using only generators ensuring that manipulating the fits of large sets of results is done in a memory efficient
    way.

    Parameters
    ----------
    aggregator : af.Aggregator
        A PyAutoFit aggregator object containing the results of PyAutoLens model-fits."""
    masked_interferometer = masked_interferometer_from_agg_obj(
        agg_obj=agg_obj,
        settings_masked_interferometer=settings_masked_interferometer)
    tracer = tracer_from_agg_obj(agg_obj=agg_obj)

    if settings_pixelization is None:
        settings_pixelization = agg_obj.settings.settings_pixelization

    if settings_inversion is None:
        settings_inversion = agg_obj.settings.settings_inversion

    return al.FitInterferometer(
        masked_interferometer=masked_interferometer,
        tracer=tracer,
        settings_pixelization=settings_pixelization,
        settings_inversion=settings_inversion,
    )
コード例 #4
0
    def test___lens_fit_galaxy_model_image_dict__corresponds_to_profile_galaxy_images(
            self, interferometer_7_grid):
        g0 = al.Galaxy(
            redshift=0.5,
            light_profile=al.lp.EllSersic(intensity=1.0),
            mass_profile=al.mp.SphIsothermal(einstein_radius=1.0),
        )
        g1 = al.Galaxy(redshift=1.0,
                       light_profile=al.lp.EllSersic(intensity=1.0))
        g2 = al.Galaxy(redshift=1.0)

        tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2])

        fit = al.FitInterferometer(interferometer=interferometer_7_grid,
                                   tracer=tracer)

        traced_grids_of_planes = tracer.traced_grids_of_planes_from_grid(
            grid=interferometer_7_grid.grid)

        g0_image = g0.image_2d_from_grid(grid=traced_grids_of_planes[0])

        g1_image = g1.image_2d_from_grid(grid=traced_grids_of_planes[1])

        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)
コード例 #5
0
    def test___lens_fit_galaxy_model_visibilities_dict__has_inversion_mapped_reconstructed_visibilities(
            self, interferometer_7):
        pix = al.pix.Rectangular(shape=(3, 3))
        reg = al.reg.Constant(coefficient=1.0)

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

        tracer = al.Tracer.from_galaxies(galaxies=[g0, g1])

        fit = al.FitInterferometer(interferometer=interferometer_7,
                                   tracer=tracer)

        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_visibilities_dict[g0] == (0.0 + 0.0j) *
                np.zeros((7, ))).all()

        assert fit.galaxy_model_visibilities_dict[g1].slim == pytest.approx(
            inversion.mapped_reconstructed_visibilities.slim, 1.0e-4)

        assert fit.model_visibilities.slim == pytest.approx(
            fit.galaxy_model_visibilities_dict[g1].slim, 1.0e-4)
コード例 #6
0
    def test__fit_figure_of_merit__matches_correct_fit_given_galaxy_profiles(
            self, interferometer_7, mask_7x7, visibilities_mask_7x2):
        lens_galaxy = al.Galaxy(redshift=0.5,
                                light=al.lp.EllipticalSersic(intensity=0.1))

        phase_interferometer_7 = al.PhaseInterferometer(
            real_space_mask=mask_7x7,
            galaxies=[lens_galaxy],
            cosmology=cosmo.FLRW,
            sub_size=2,
            phase_name="test_phase",
        )

        analysis = phase_interferometer_7.make_analysis(
            dataset=interferometer_7,
            mask=visibilities_mask_7x2,
            results=mock_pipeline.MockResults(),
        )
        instance = phase_interferometer_7.model.instance_from_unit_vector([])
        fit_figure_of_merit = analysis.fit(instance=instance)

        real_space_mask = phase_interferometer_7.meta_dataset.mask_with_phase_sub_size_from_mask(
            mask=mask_7x7)
        masked_interferometer = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7x2,
            real_space_mask=real_space_mask,
        )
        tracer = analysis.tracer_for_instance(instance=instance)

        fit = al.FitInterferometer(masked_interferometer=masked_interferometer,
                                   tracer=tracer)

        assert fit.likelihood == fit_figure_of_merit
コード例 #7
0
def test__model_visibilities_of_planes_list(interferometer_7):

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

    g1_linear = al.Galaxy(redshift=0.75,
                          light_profile=al.lp_linear.EllSersic())

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

    galaxy_pix_0 = al.Galaxy(redshift=1.0,
                             pixelization=pix,
                             regularization=reg)
    galaxy_pix_1 = al.Galaxy(redshift=1.0,
                             pixelization=pix,
                             regularization=reg)

    tracer = al.Tracer.from_galaxies(
        galaxies=[g0, g1_linear, galaxy_pix_0, galaxy_pix_1])

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

    assert fit.model_visibilities_of_planes_list[0] == pytest.approx(
        fit.galaxy_model_visibilities_dict[g0], 1.0e-4)
    assert fit.model_visibilities_of_planes_list[1] == pytest.approx(
        fit.galaxy_model_visibilities_dict[g1_linear], 1.0e-4)
    assert fit.model_visibilities_of_planes_list[2] == pytest.approx(
        fit.galaxy_model_visibilities_dict[galaxy_pix_0] +
        fit.galaxy_model_visibilities_dict[galaxy_pix_1],
        1.0e-4,
    )
コード例 #8
0
    def test__figure_of_merit__includes_hyper_image_and_noise__matches_fit(
            self, interferometer_7):
        hyper_background_noise = al.hyper_data.HyperBackgroundNoise(
            noise_scale=1.0)

        lens_galaxy = al.Galaxy(redshift=0.5,
                                light=al.lp.EllSersic(intensity=0.1))

        model = af.Collection(
            galaxies=af.Collection(lens=lens_galaxy),
            hyper_background_noise=hyper_background_noise,
        )

        analysis = al.AnalysisInterferometer(dataset=interferometer_7)

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

        tracer = analysis.tracer_for_instance(instance=instance)

        fit = al.FitInterferometer(
            interferometer=interferometer_7,
            tracer=tracer,
            hyper_background_noise=hyper_background_noise,
        )

        assert fit.log_likelihood == analysis_log_likelihood
コード例 #9
0
def fit_interferometer_from_agg_obj(
    agg_obj: af.SearchOutput,
    settings_interferometer: al.SettingsInterferometer = None,
    settings_pixelization: al.SettingsPixelization = None,
    settings_inversion: al.SettingsInversion = None,
) -> "al.FitInterferometer":
    """
    Returns a generator of `FitInterferometer` objects from an input aggregator, which generates a list of the
    `FitInterferometer` objects for every set of results loaded in the aggregator.

    This is performed by mapping the `fit_interferometer_from_agg_obj` with the aggregator, which sets up each fit
    using only generators ensuring that manipulating the fits of large sets of results is done in a memory efficient
    way.

    Parameters
    ----------
    aggregator : af.Aggregator
        A PyAutoFit aggregator object containing the results of PyAutoLens model-fits.
    """
    interferometer = interferometer_from_agg_obj(
        agg_obj=agg_obj, settings_interferometer=settings_interferometer)
    tracer = tracer_from_agg_obj(agg_obj=agg_obj)

    if settings_pixelization is None:
        settings_pixelization = agg_obj.settings_pixelization

    if settings_inversion is None:
        settings_inversion = agg_obj.settings_inversion

    return al.FitInterferometer(
        interferometer=interferometer,
        tracer=tracer,
        settings_pixelization=settings_pixelization,
        settings_inversion=settings_inversion,
    )
コード例 #10
0
def make_masked_interferometer_fit_x2_plane_inversion_7x7(
    masked_interferometer_7, tracer_x2_plane_inversion_7x7
):
    return al.FitInterferometer(
        masked_interferometer=masked_interferometer_7,
        tracer=tracer_x2_plane_inversion_7x7,
    )
コード例 #11
0
    def test___all_lens_fit_quantities__hyper_background_noise(
            self, interferometer_7):

        hyper_background_noise = al.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 = al.Galaxy(redshift=0.5,
                                 light_profile=al.lp.EllSersic(intensity=1.0))

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

        tracer = al.Tracer.from_galaxies(galaxies=[galaxy_light, galaxy_pix])

        fit = al.FitInterferometer(
            interferometer=interferometer_7,
            tracer=tracer,
            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)
コード例 #12
0
def test___stochastic_mode__gives_different_log_likelihood_list(
        interferometer_7):

    pix = al.pix.VoronoiBrightnessImage(pixels=5)
    reg = al.reg.Constant(coefficient=1.0)

    g0 = al.Galaxy(
        redshift=0.5,
        pixelization=pix,
        regularization=reg,
        hyper_model_image=al.Array2D.ones(shape_native=(3, 3),
                                          pixel_scales=1.0),
        hyper_galaxy_image=al.Array2D.ones(shape_native=(3, 3),
                                           pixel_scales=1.0),
    )

    tracer = al.Tracer.from_galaxies(galaxies=[al.Galaxy(redshift=0.5), g0])

    fit_0 = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        settings_pixelization=al.SettingsPixelization(is_stochastic=False),
        settings_inversion=al.SettingsInversion(use_w_tilde=False),
    )
    fit_1 = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        settings_pixelization=al.SettingsPixelization(is_stochastic=False),
        settings_inversion=al.SettingsInversion(use_w_tilde=False),
    )

    assert fit_0.log_evidence == fit_1.log_evidence

    fit_0 = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        settings_pixelization=al.SettingsPixelization(is_stochastic=True),
        settings_inversion=al.SettingsInversion(use_w_tilde=False),
    )
    fit_1 = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        settings_pixelization=al.SettingsPixelization(is_stochastic=True),
        settings_inversion=al.SettingsInversion(use_w_tilde=False),
    )

    assert fit_0.log_evidence != fit_1.log_evidence
コード例 #13
0
def test__fit_figure_of_merit(interferometer_7):
    g0 = al.Galaxy(
        redshift=0.5,
        light_profile=al.lp.EllSersic(intensity=1.0),
        mass_profile=al.mp.SphIsothermal(einstein_radius=1.0),
    )

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

    tracer = al.Tracer.from_galaxies(galaxies=[g0, g1])

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

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

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

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

    tracer = al.Tracer.from_galaxies(galaxies=[al.Galaxy(redshift=0.5), g0])

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

    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 = al.Galaxy(redshift=0.5,
                             light_profile=al.lp.EllSersic(intensity=1.0))

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

    tracer = al.Tracer.from_galaxies(galaxies=[galaxy_light, galaxy_pix])

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

    assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j,
                                          shape=(7, ))).all()
    assert fit.log_evidence == pytest.approx(-1570173.14216, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-1570173.14216, 1.0e-4)
コード例 #14
0
def test__model_visibilities(interferometer_7):

    g0 = al.Galaxy(redshift=0.5,
                   light_profile=MockLightProfile(image_2d=np.ones(2)))
    tracer = al.Tracer.from_galaxies(galaxies=[g0])

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

    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)
コード例 #15
0
def print_fit_time_from(interferometer,
                        transformer_class,
                        use_w_tilde,
                        use_linear_operators,
                        repeats=1):

    settings_interferometer = al.SettingsInterferometer(
        transformer_class=transformer_class)
    interferometer = interferometer.apply_settings(
        settings=settings_interferometer)
    """
    __Numba Caching__

    Call FitImaging once to get all numba functions initialized.
    """
    fit = al.FitInterferometer(
        dataset=interferometer,
        tracer=tracer,
        settings_inversion=al.SettingsInversion(
            use_w_tilde=use_w_tilde,
            use_linear_operators=use_linear_operators),
    )
    print(fit.figure_of_merit)
    """
    __Fit Time__

    Time FitImaging by itself, to compare to profiling dict call.
    """
    start = time.time()
    for i in range(repeats):
        fit = al.FitInterferometer(
            dataset=interferometer,
            tracer=tracer,
            settings_inversion=al.SettingsInversion(
                use_w_tilde=use_w_tilde,
                use_linear_operators=use_linear_operators),
        )
        fit.figure_of_merit

    fit_time = (time.time() - start) / repeats
    print(f"Fit Time = {fit_time} \n")
コード例 #16
0
    def test___all_lens_fit_quantities__no_hyper_methods(
            self, interferometer_7):
        g0 = al.Galaxy(
            redshift=0.5,
            light_profile=al.lp.EllSersic(intensity=1.0),
            mass_profile=al.mp.SphIsothermal(einstein_radius=1.0),
        )

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

        tracer = al.Tracer.from_galaxies(galaxies=[g0, g1])

        fit = al.FitInterferometer(interferometer=interferometer_7,
                                   tracer=tracer)

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

        model_visibilities = tracer.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 = al.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 = al.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 = al.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 = al.util.fit.chi_squared_complex_from(
            chi_squared_map=fit.chi_squared_map)

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

        log_likelihood = al.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
コード例 #17
0
    def test___all_lens_fit_quantities__hyper_background_noise(
            self, interferometer_7):

        hyper_background_noise = al.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 = al.Galaxy(
            redshift=0.5,
            light_profile=al.lp.EllSersic(intensity=1.0),
            mass_profile=al.mp.SphIsothermal(einstein_radius=1.0),
        )

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

        tracer = al.Tracer.from_galaxies(galaxies=[g0, g1])

        fit = al.FitInterferometer(
            interferometer=interferometer_7,
            tracer=tracer,
            hyper_background_noise=hyper_background_noise,
        )

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

        fit = al.FitInterferometer(
            interferometer=interferometer_7,
            tracer=tracer,
            hyper_background_noise=hyper_background_noise,
            use_hyper_scaling=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)
コード例 #18
0
def test__noise_map__with_and_without_hyper_background(interferometer_7):

    g0 = al.Galaxy(redshift=0.5,
                   light_profile=MockLightProfile(image_2d=np.ones(2)))
    tracer = al.Tracer.from_galaxies(galaxies=[g0])

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

    assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j,
                                          shape=(7, ))).all()

    hyper_background_noise = al.hyper_data.HyperBackgroundNoise(
        noise_scale=1.0)

    fit = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        hyper_background_noise=hyper_background_noise,
    )

    assert (fit.noise_map.slim == np.full(fill_value=3.0 + 3.0j,
                                          shape=(7, ))).all()
    assert fit.log_likelihood == pytest.approx(-30.24288, 1.0e-4)
コード例 #19
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

        uv_wavelengths = np.array([[0.0, 0.0]])

        real_space_mask = al.Mask2D.manual(
            mask=np.array([
                [True, True, True, True],
                [True, False, False, True],
                [True, True, True, True],
            ]),
            pixel_scales=1.0,
        )

        interferometer = al.Interferometer(
            visibilities=al.Visibilities.full(fill_value=5.0,
                                              shape_slim=(1, )),
            noise_map=al.Visibilities.ones(shape_slim=(1, )),
            uv_wavelengths=uv_wavelengths,
            real_space_mask=real_space_mask,
            settings=al.SettingsInterferometer(
                sub_size=1, transformer_class=al.TransformerDFT),
        )

        interferometer.visibilities[0] = 5.0 + 4.0j

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

        g0 = al.Galaxy(redshift=0.5,
                       light_profile=MockLightProfile(value=1.0, size=2))
        tracer = al.Tracer.from_galaxies(galaxies=[g0])

        fit = al.FitInterferometer(interferometer=interferometer,
                                   tracer=tracer)

        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 == (2.0 * np.log(2 * np.pi * 1.0**2.0))
        assert fit.log_likelihood == -0.5 * (
            25.0 + 2.0 * np.log(2 * np.pi * 1.0**2.0))
コード例 #20
0
def test__simulate_interferometer_data_and_fit__known_likelihood():

    mask = al.Mask2D.circular(radius=3.0,
                              shape_native=(31, 31),
                              pixel_scales=0.2,
                              sub_size=1)

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

    lens_galaxy = al.Galaxy(
        redshift=0.5,
        light=al.lp.EllSersic(centre=(0.1, 0.1), intensity=0.1),
        mass=al.mp.EllIsothermal(centre=(0.1, 0.1), einstein_radius=1.8),
    )
    source_galaxy_0 = al.Galaxy(
        redshift=1.0,
        pixelization=al.pix.Rectangular(shape=(16, 16)),
        regularization=al.reg.Constant(coefficient=(1.0)),
    )
    source_galaxy_1 = al.Galaxy(
        redshift=2.0,
        pixelization=al.pix.Rectangular(shape=(16, 16)),
        regularization=al.reg.Constant(coefficient=(1.0)),
    )
    tracer = al.Tracer.from_galaxies(
        galaxies=[lens_galaxy, source_galaxy_0, source_galaxy_1])

    simulator = al.SimulatorInterferometer(
        uv_wavelengths=np.ones(shape=(7, 2)),
        transformer_class=al.TransformerDFT,
        exposure_time=300.0,
        noise_seed=1,
    )

    interferometer = simulator.via_tracer_from(tracer=tracer, grid=grid)

    interferometer = interferometer.apply_settings(
        settings=al.SettingsInterferometer(
            transformer_class=al.TransformerDFT))

    fit = al.FitInterferometer(
        dataset=interferometer,
        tracer=tracer,
        settings_inversion=al.SettingsInversion(use_w_tilde=False),
    )

    assert fit.figure_of_merit == pytest.approx(-5.433894158056919, 1.0e-2)
コード例 #21
0
def test__figure_of_merit__matches_correct_fit_given_galaxy_profiles(
        interferometer_7):
    lens_galaxy = al.Galaxy(redshift=0.5, light=al.lp.EllSersic(intensity=0.1))

    model = af.Collection(galaxies=af.Collection(lens=lens_galaxy))

    analysis = al.AnalysisInterferometer(dataset=interferometer_7)

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

    tracer = analysis.tracer_via_instance_from(instance=instance)

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

    assert fit.log_likelihood == analysis_log_likelihood
コード例 #22
0
def test___fit_figure_of_merit__linear_operator(interferometer_7_lop):

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

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

    tracer = al.Tracer.from_galaxies(galaxies=[al.Galaxy(redshift=0.5), g0])

    fit = al.FitInterferometer(
        dataset=interferometer_7_lop,
        tracer=tracer,
        settings_inversion=al.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)
コード例 #23
0
    def test__hyper_background_changes_background_sky__reflected_in_likelihood(
        self, ):

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

        real_space_mask = al.Mask2D.manual(
            mask=np.array([
                [True, True, True, True, True],
                [True, False, False, False, True],
                [True, True, True, True, True],
            ]),
            pixel_scales=1.0,
        )

        interferometer = al.Interferometer(
            visibilities=al.Visibilities.full(fill_value=5.0,
                                              shape_slim=(3, )),
            noise_map=al.Visibilities.full(fill_value=2.0, shape_slim=(3, )),
            uv_wavelengths=uv_wavelengths,
            real_space_mask=real_space_mask,
            settings=al.SettingsInterferometer(sub_size=1),
        )

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

        g0 = al.Galaxy(redshift=0.5,
                       light_profile=MockLightProfile(value=1.0, size=2))
        tracer = al.Tracer.from_galaxies(galaxies=[g0])

        hyper_background_noise = al.hyper_data.HyperBackgroundNoise(
            noise_scale=1.0)

        fit = al.FitInterferometer(
            interferometer=interferometer,
            tracer=tracer,
            hyper_background_noise=hyper_background_noise,
        )

        assert (fit.visibilities.slim == (1.0 + 1.0j) *
                np.full(fill_value=5.0, shape=(3, ))).all()

        assert (fit.noise_map.slim == (1.0 + 1.0j) *
                np.full(fill_value=3.0, shape=(3, ))).all()
コード例 #24
0
    def test___lens_fit_galaxy_visibilities_dict__corresponds_to_galaxy_visibilities(
            self, interferometer_7_grid):
        g0 = al.Galaxy(
            redshift=0.5,
            light_profile=al.lp.EllSersic(intensity=1.0),
            mass_profile=al.mp.SphIsothermal(einstein_radius=1.0),
        )
        g1 = al.Galaxy(redshift=1.0,
                       light_profile=al.lp.EllSersic(intensity=1.0))
        g2 = al.Galaxy(redshift=1.0)

        tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2])

        fit = al.FitInterferometer(interferometer=interferometer_7_grid,
                                   tracer=tracer)

        traced_grids_of_planes = tracer.traced_grids_of_planes_from_grid(
            grid=interferometer_7_grid.grid)

        g0_profile_visibilities = g0.profile_visibilities_from_grid_and_transformer(
            grid=traced_grids_of_planes[0],
            transformer=interferometer_7_grid.transformer,
        )

        g1_profile_visibilities = g1.profile_visibilities_from_grid_and_transformer(
            grid=traced_grids_of_planes[1],
            transformer=interferometer_7_grid.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.galaxy_model_visibilities_dict[g2].slim == (0.0 + 0.0j) *
                np.zeros((7, ))).all()

        assert fit.model_visibilities.slim == pytest.approx(
            fit.galaxy_model_visibilities_dict[g0].slim +
            fit.galaxy_model_visibilities_dict[g1].slim,
            1.0e-4,
        )
コード例 #25
0
    def test__fit_figure_of_merit__matches_correct_fit_given_galaxy_profiles(
        self, interferometer_7, mask_7x7, visibilities_mask_7
    ):
        lens_galaxy = al.Galaxy(
            redshift=0.5, light=al.lp.EllipticalSersic(intensity=0.1)
        )

        phase_interferometer_7 = al.PhaseInterferometer(
            galaxies=dict(lens=lens_galaxy),
            cosmology=cosmo.FLRW,
            settings=al.SettingsPhaseInterferometer(
                settings_masked_interferometer=al.SettingsMaskedInterferometer(
                    sub_size=2
                )
            ),
            search=mock.MockSearch("test_phase"),
            real_space_mask=mask_7x7,
        )

        analysis = phase_interferometer_7.make_analysis(
            dataset=interferometer_7,
            mask=visibilities_mask_7,
            results=mock.MockResults(),
        )
        instance = phase_interferometer_7.model.instance_from_unit_vector([])
        fit_figure_of_merit = analysis.log_likelihood_function(instance=instance)

        masked_interferometer = al.MaskedInterferometer(
            interferometer=interferometer_7,
            visibilities_mask=visibilities_mask_7,
            real_space_mask=mask_7x7,
            settings=al.SettingsMaskedInterferometer(sub_size=2),
        )
        tracer = analysis.tracer_for_instance(instance=instance)

        fit = al.FitInterferometer(
            masked_interferometer=masked_interferometer, tracer=tracer
        )

        assert fit.log_likelihood == fit_figure_of_merit
コード例 #26
0
def test__positions__likelihood_overwrite__changes_likelihood(
        interferometer_7, mask_2d_7x7):

    lens = al.Galaxy(redshift=0.5, mass=al.mp.SphIsothermal())
    source = al.Galaxy(redshift=1.0, light=al.lp.SphSersic())

    model = af.Collection(galaxies=af.Collection(lens=lens, source=source))

    analysis = al.AnalysisInterferometer(dataset=interferometer_7)

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

    tracer = analysis.tracer_via_instance_from(instance=instance)

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

    assert fit.log_likelihood == analysis_log_likelihood
    assert analysis_log_likelihood == pytest.approx(-127914.36273, 1.0e-4)

    positions_likelihood = al.PositionsLHPenalty(positions=al.Grid2DIrregular([
        (1.0, 100.0), (200.0, 2.0)
    ]),
                                                 threshold=0.01)

    analysis = al.AnalysisInterferometer(
        dataset=interferometer_7, positions_likelihood=positions_likelihood)
    analysis_log_likelihood = analysis.log_likelihood_function(
        instance=instance)

    log_likelihood_penalty_base = positions_likelihood.log_likelihood_penalty_base_from(
        dataset=interferometer_7)
    log_likelihood_penalty = positions_likelihood.log_likelihood_penalty_from(
        tracer=tracer)

    assert analysis_log_likelihood == pytest.approx(
        log_likelihood_penalty_base - log_likelihood_penalty, 1.0e-4)
    assert analysis_log_likelihood == pytest.approx(-22048700567.590656,
                                                    1.0e-4)
コード例 #27
0
    visibilities_mask=np.full(fill_value=False,
                              shape=interferometer.visibilities.shape),
    settings=al.SettingsMaskedInterferometer(
        transformer_class=al.TransformerNUFFT),
)

print("Number of points = " + str(masked_interferometer.grid.sub_shape_slim) +
      "\n")
print("Number of visibilities = " +
      str(masked_interferometer.visibilities.shape_slim) + "\n")

start_overall = time.time()

tracer = al.Tracer.from_galaxies(galaxies=[lens_galaxy, source_galaxy])

start = time.time()

for i in range(repeats):
    fit = al.FitInterferometer(
        masked_interferometer=masked_interferometer,
        tracer=tracer,
        settings_inversion=al.SettingsInversion(use_linear_operators=False),
    )

print(fit.log_likelihood)

diff = time.time() - start
print("Time to compute fit = {}".format(diff / repeats))

aplt.FitInterferometer.subplot_fit_real_space(fit=fit)
コード例 #28
0
def test__fit_figure_of_merit__include_hyper_methods(interferometer_7):

    hyper_background_noise = al.hyper_data.HyperBackgroundNoise(
        noise_scale=1.0)

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

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

    tracer = al.Tracer.from_galaxies(galaxies=[g0, g1])

    fit = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        hyper_background_noise=hyper_background_noise,
    )

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

    fit = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        hyper_background_noise=hyper_background_noise,
        use_hyper_scaling=False,
    )

    assert fit.noise_map == pytest.approx(interferometer_7.noise_map, 1.0e-4)

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

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

    tracer = al.Tracer.from_galaxies(galaxies=[al.Galaxy(redshift=0.5), g0])

    fit = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        hyper_background_noise=hyper_background_noise,
    )

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

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

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

    tracer = al.Tracer.from_galaxies(galaxies=[galaxy_light, galaxy_pix])

    fit = al.FitInterferometer(
        dataset=interferometer_7,
        tracer=tracer,
        hyper_background_noise=hyper_background_noise,
    )

    assert (fit.noise_map.slim == np.full(fill_value=3.0 + 3.0j,
                                          shape=(7, ))).all()
    assert fit.log_evidence == pytest.approx(-892439.04665, 1e-4)
    assert fit.figure_of_merit == pytest.approx(-892439.04665, 1.0e-4)
コード例 #29
0
def test__simulate_interferometer_data_and_fit__chi_squared_is_0__noise_normalization_correct(
):

    grid = al.Grid2D.uniform(shape_native=(51, 51),
                             pixel_scales=0.1,
                             sub_size=1)

    lens_galaxy = al.Galaxy(
        redshift=0.5,
        light=al.lp.EllSersic(centre=(0.1, 0.1), intensity=0.1),
        mass=al.mp.EllIsothermal(centre=(0.1, 0.1), einstein_radius=1.0),
    )

    source_galaxy = al.Galaxy(redshift=1.0,
                              light=al.lp.EllExponential(centre=(0.1, 0.1),
                                                         intensity=0.5))

    tracer = al.Tracer.from_galaxies(galaxies=[lens_galaxy, source_galaxy])

    simulator = al.SimulatorInterferometer(
        uv_wavelengths=np.ones(shape=(7, 2)),
        transformer_class=al.TransformerDFT,
        exposure_time=300.0,
        noise_if_add_noise_false=1.0,
        noise_sigma=None,
    )

    interferometer = simulator.from_tracer_and_grid(tracer=tracer, grid=grid)

    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)

    interferometer.output_to_fits(
        visibilities_path=path.join(file_path, "visibilities.fits"),
        noise_map_path=path.join(file_path, "noise_map.fits"),
        uv_wavelengths_path=path.join(file_path, "uv_wavelengths.fits"),
    )

    real_space_mask = al.Mask2D.unmasked(shape_native=(51, 51),
                                         pixel_scales=0.1,
                                         sub_size=2)

    interferometer = al.Interferometer.from_fits(
        visibilities_path=path.join(file_path, "visibilities.fits"),
        noise_map_path=path.join(file_path, "noise_map.fits"),
        uv_wavelengths_path=path.join(file_path, "uv_wavelengths.fits"),
        real_space_mask=real_space_mask,
    )
    interferometer = interferometer.apply_settings(
        settings=al.SettingsInterferometer(
            transformer_class=al.TransformerDFT))

    tracer = al.Tracer.from_galaxies(galaxies=[lens_galaxy, source_galaxy])

    fit = al.FitInterferometer(
        interferometer=interferometer,
        tracer=tracer,
        settings_pixelization=al.SettingsPixelization(use_border=False),
    )

    assert fit.chi_squared == pytest.approx(0.0)

    pix = al.pix.Rectangular(shape=(7, 7))

    reg = al.reg.Constant(coefficient=0.0001)

    lens_galaxy = al.Galaxy(
        redshift=0.5,
        light=al.lp.EllSersic(centre=(0.1, 0.1), intensity=0.1),
        mass=al.mp.EllIsothermal(centre=(0.1, 0.1), einstein_radius=1.0),
    )

    source_galaxy = al.Galaxy(redshift=1.0,
                              pixelization=pix,
                              regularization=reg)

    tracer = al.Tracer.from_galaxies(galaxies=[lens_galaxy, source_galaxy])

    fit = al.FitInterferometer(
        interferometer=interferometer,
        tracer=tracer,
        settings_pixelization=al.SettingsPixelization(use_border=False),
    )
    assert abs(fit.chi_squared) < 1.0e-4

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

    if path.exists(file_path) is True:
        shutil.rmtree(file_path)
コード例 #30
0
def test___galaxy_model_visibilities_dict(interferometer_7,
                                          interferometer_7_grid):

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

    tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2])

    fit = al.FitInterferometer(dataset=interferometer_7_grid, tracer=tracer)

    traced_grids_of_planes = tracer.traced_grid_list_from(
        grid=interferometer_7_grid.grid)

    g0_profile_visibilities = g0.visibilities_via_transformer_from(
        grid=traced_grids_of_planes[0],
        transformer=interferometer_7_grid.transformer)

    g1_profile_visibilities = g1.visibilities_via_transformer_from(
        grid=traced_grids_of_planes[1],
        transformer=interferometer_7_grid.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.galaxy_model_visibilities_dict[g2].slim == (0.0 + 0.0j) *
            np.zeros((7, ))).all()

    assert fit.model_visibilities.slim == pytest.approx(
        fit.galaxy_model_visibilities_dict[g0].slim +
        fit.galaxy_model_visibilities_dict[g1].slim,
        1.0e-4,
    )
    pix = al.pix.Rectangular(shape=(3, 3))
    reg = al.reg.Constant(coefficient=1.0)

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

    tracer = al.Tracer.from_galaxies(galaxies=[g0, g1])

    fit = al.FitInterferometer(dataset=interferometer_7, tracer=tracer)

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

    inversion = al.Inversion(dataset=interferometer_7,
                             linear_obj_list=[mapper],
                             regularization_list=[reg])

    assert (fit.galaxy_model_visibilities_dict[g0] == (0.0 + 0.0j) * np.zeros(
        (7, ))).all()

    assert fit.galaxy_model_visibilities_dict[g1].slim == pytest.approx(
        inversion.mapped_reconstructed_data.slim, 1.0e-4)

    assert fit.model_visibilities.slim == pytest.approx(
        fit.galaxy_model_visibilities_dict[g1].slim, 1.0e-4)
    g0 = al.Galaxy(redshift=0.5, light_profile=al.lp.EllSersic(intensity=1.0))
    g1 = al.Galaxy(redshift=0.5, light_profile=al.lp.EllSersic(intensity=2.0))
    g2 = al.Galaxy(redshift=0.5)

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

    tracer = al.Tracer.from_galaxies(galaxies=[g0, g1, g2, galaxy_pix])

    fit = al.FitInterferometer(dataset=interferometer_7_grid, tracer=tracer)

    traced_grids = tracer.traced_grid_list_from(
        grid=interferometer_7_grid.grid)

    g0_visibilities = g0.visibilities_via_transformer_from(
        grid=traced_grids[0], transformer=interferometer_7_grid.transformer)

    g1_visibilities = g1.visibilities_via_transformer_from(
        grid=traced_grids[1], transformer=interferometer_7_grid.transformer)

    profile_visibilities = g0_visibilities + g1_visibilities

    profile_subtracted_visibilities = (interferometer_7_grid.visibilities -
                                       profile_visibilities)
    mapper = pix.mapper_from(
        source_grid_slim=interferometer_7_grid.grid,
        settings=al.SettingsPixelization(use_border=False),
    )

    inversion = al.InversionInterferometer(
        visibilities=profile_subtracted_visibilities,
        noise_map=interferometer_7_grid.noise_map,
        transformer=interferometer_7_grid.transformer,
        linear_obj_list=[mapper],
        regularization_list=[reg],
        settings=al.SettingsInversion(use_w_tilde=False),
    )

    assert (fit.galaxy_model_visibilities_dict[g2] == (0.0 + 0.0j) * np.zeros(
        (7, ))).all()

    assert fit.galaxy_model_visibilities_dict[g0].slim == pytest.approx(
        g0_visibilities.slim, 1.0e-4)
    assert fit.galaxy_model_visibilities_dict[g1].slim == pytest.approx(
        g1_visibilities.slim, 1.0e-4)
    assert fit.galaxy_model_visibilities_dict[
        galaxy_pix].slim == pytest.approx(
            inversion.mapped_reconstructed_data.slim, 1.0e-4)

    assert fit.model_visibilities.slim == pytest.approx(
        fit.galaxy_model_visibilities_dict[g0].slim +
        fit.galaxy_model_visibilities_dict[g1].slim +
        inversion.mapped_reconstructed_data.slim,
        1.0e-4,
    )