Beispiel #1
0
    def test__more_model_positions_than_data_positions__pairs_closest_positions(
            self):

        g0 = al.Galaxy(redshift=1.0,
                       point_0=al.ps.PointSource(centre=(0.1, 0.1)))

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

        positions = al.Grid2DIrregular([(0.0, 0.0), (3.0, 4.0)])
        noise_map = al.ValuesIrregular([0.5, 1.0])
        model_positions = al.Grid2DIrregular([(3.0, 1.0), (2.0, 3.0),
                                              (1.0, 0.0), (0.0, 1.0)])

        positions_solver = mock.MockPositionsSolver(
            model_positions=model_positions)

        fit = al.FitPositionsImage(
            name="point_0",
            positions=positions,
            noise_map=noise_map,
            tracer=tracer,
            positions_solver=positions_solver,
        )

        assert fit.model_positions.in_list == [(1.0, 0.0), (2.0, 3.0)]
        assert fit.noise_map.in_list == [0.5, 1.0]
        assert fit.residual_map.in_list == [1.0, np.sqrt(2.0)]
        assert fit.normalized_residual_map.in_list == [2.0, np.sqrt(2.0) / 1.0]
        assert fit.chi_squared_map.in_list == [4.0, np.sqrt(2.0)**2.0]
        assert fit.chi_squared == pytest.approx(6.0, 1.0e-4)
        assert fit.noise_normalization == pytest.approx(2.289459, 1.0e-4)
        assert fit.log_likelihood == pytest.approx(-4.144729, 1.0e-4)
Beispiel #2
0
    def test__same_as_above_with_real_tracer(self):

        tracer = al.Tracer.from_galaxies(
            galaxies=[
                al.Galaxy(
                    redshift=0.5, mass=al.mp.SphericalIsothermal(einstein_radius=1.0)
                ),
                al.Galaxy(redshift=1.0),
            ]
        )

        noise_map = al.ValuesIrregular([1.0, 1.0])

        positions = al.Grid2DIrregular([(1.0, 0.0), (-1.0, 0.0)])
        fit = al.FitPositionsSourceMaxSeparation(
            positions=positions, noise_map=noise_map, tracer=tracer
        )
        assert fit.max_separation_within_threshold(threshold=0.01)

        positions = al.Grid2DIrregular([(1.2, 0.0), (-1.0, 0.0)])
        fit = al.FitPositionsSourceMaxSeparation(
            positions=positions, noise_map=noise_map, tracer=tracer
        )
        assert fit.max_separation_within_threshold(threshold=0.3)
        assert not fit.max_separation_within_threshold(threshold=0.15)
Beispiel #3
0
    def test__furthest_separation_of_source_plane_positions(self):

        positions = al.Grid2DIrregular(grid=[(0.0, 0.0), (0.0, 1.0)])
        noise_map = al.ValuesIrregular([[1.0, 1.0]])

        tracer = mock.MockTracer(traced_grid=positions)
        fit = al.FitPositionsSourceMaxSeparation(positions=positions,
                                                 noise_map=noise_map,
                                                 tracer=tracer)

        assert fit.furthest_separations_of_source_plane_positions.in_list == [
            1.0, 1.0
        ]
        assert fit.max_separation_of_source_plane_positions == 1.0
        assert fit.max_separation_within_threshold(threshold=2.0) == True
        assert fit.max_separation_within_threshold(threshold=0.5) == False

        positions = al.Grid2DIrregular(grid=[(0.0, 0.0), (0.0, 1.0), (0.0,
                                                                      3.0)])
        noise_map = al.ValuesIrregular([1.0, 1.0, 1.0])

        tracer = mock.MockTracer(traced_grid=positions)
        fit = al.FitPositionsSourceMaxSeparation(positions=positions,
                                                 noise_map=noise_map,
                                                 tracer=tracer)

        assert fit.furthest_separations_of_source_plane_positions.in_list == [
            3.0,
            2.0,
            3.0,
        ]
        assert fit.max_separation_of_source_plane_positions == 3.0
        assert fit.max_separation_within_threshold(threshold=3.5) == True
        assert fit.max_separation_within_threshold(threshold=2.0) == False
        assert fit.max_separation_within_threshold(threshold=0.5) == False
Beispiel #4
0
def test__check_positions_on_instantiation():

    al.PositionsLHResample(positions=al.Grid2DIrregular([(1.0, 2.0),
                                                         (3.0, 4.0)]),
                           threshold=0.1)

    # Positions input with threshold but positions are length 1.

    with pytest.raises(exc.PositionsException):

        al.PositionsLHResample(positions=al.Grid2DIrregular([(1.0, 2.0)]),
                               threshold=0.1)
Beispiel #5
0
    def test__results_include_positions__available_as_property(
            self, analysis_imaging_7x7, masked_imaging_7x7,
            samples_with_result):

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

        assert result.positions == None

        analysis = al.AnalysisImaging(
            dataset=masked_imaging_7x7,
            positions=al.Grid2DIrregular([[(1.0, 1.0)]]),
            settings_lens=al.SettingsLens(positions_threshold=1.0),
        )

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

        assert (result.positions[0] == np.array([1.0, 1.0])).all()
Beispiel #6
0
def test__multi_plane_position_solving():

    g0 = al.Galaxy(redshift=0.5, mass=al.mp.SphIsothermal(einstein_radius=1.0))
    g1 = al.Galaxy(redshift=1.0, point_0=al.ps.Point(centre=(0.1, 0.1)))
    g2 = al.Galaxy(redshift=2.0, point_1=al.ps.Point(centre=(0.1, 0.1)))

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

    positions = al.Grid2DIrregular([(0.0, 1.0), (0.0, 2.0)])
    noise_map = al.ValuesIrregular([0.5, 1.0])

    traced_grids = tracer.traced_grid_2d_list_from(grid=positions)

    fit_0 = al.FitPositionsSource(name="point_0",
                                  positions=positions,
                                  noise_map=noise_map,
                                  tracer=tracer)

    assert fit_0.model_positions[0, 1] == pytest.approx(0.326054, 1.0e-1)
    assert fit_0.model_positions[1, 1] == pytest.approx(1.326054, 1.0e-1)

    assert (fit_0.model_positions == traced_grids[1]).all()

    fit_1 = al.FitPositionsSource(name="point_1",
                                  positions=positions,
                                  noise_map=noise_map,
                                  tracer=tracer)

    assert (fit_1.model_positions == traced_grids[2]).all()
Beispiel #7
0
    def test__one_set_of_fluxes__residuals_likelihood_correct(self):

        tracer = mock.MockTracer(
            magnification=al.ValuesIrregular([2.0, 2.0]),
            profile=al.ps.PointSourceFlux(flux=2.0),
        )

        fluxes = al.ValuesIrregular([1.0, 2.0])
        noise_map = al.ValuesIrregular([3.0, 1.0])
        positions = al.Grid2DIrregular([(0.0, 0.0), (3.0, 4.0)])

        fit = al.FitFluxes(
            name="point_0",
            fluxes=fluxes,
            noise_map=noise_map,
            positions=positions,
            tracer=tracer,
        )

        assert fit.fluxes.in_list == [1.0, 2.0]
        assert fit.noise_map.in_list == [3.0, 1.0]
        assert fit.model_fluxes.in_list == [4.0, 4.0]
        assert fit.residual_map.in_list == [-3.0, -2.0]
        assert fit.normalized_residual_map.in_list == [-1.0, -2.0]
        assert fit.chi_squared_map.in_list == [1.0, 4.0]
        assert fit.chi_squared == pytest.approx(5.0, 1.0e-4)
        assert fit.noise_normalization == pytest.approx(5.87297, 1.0e-4)
        assert fit.log_likelihood == pytest.approx(-5.43648, 1.0e-4)
    def test__results_of_phase_include_positions__available_as_property(
        self, imaging_7x7, mask_7x7, samples_with_result
    ):

        phase_imaging_7x7 = al.PhaseImaging(
            search=mock.MockSearch("test_phase", samples=samples_with_result)
        )

        result = phase_imaging_7x7.run(
            dataset=imaging_7x7, mask=mask_7x7, results=mock.MockResults()
        )

        assert result.positions == None

        phase_imaging_7x7 = al.PhaseImaging(
            galaxies=dict(lens=al.Galaxy(redshift=0.5), source=al.Galaxy(redshift=1.0)),
            search=mock.MockSearch("test_phase", samples=samples_with_result),
            settings=al.SettingsPhaseImaging(
                settings_lens=al.SettingsLens(positions_threshold=1.0)
            ),
        )

        imaging_7x7.positions = al.Grid2DIrregular([[(1.0, 1.0)]])

        result = phase_imaging_7x7.run(
            dataset=imaging_7x7, mask=mask_7x7, results=mock.MockResults()
        )

        assert (result.positions[0] == np.array([1.0, 1.0])).all()
Beispiel #9
0
    def test__positions_are_input__are_used_in_analysis(
            self, image_7x7, noise_map_7x7, mask_7x7):
        # If position threshold is input (not None) and positions are input, make the positions part of the lens dataset.

        imaging_7x7 = al.Imaging(
            image=image_7x7,
            noise_map=noise_map_7x7,
            positions=al.Grid2DIrregular([(1.0, 1.0), (2.0, 2.0)]),
        )

        phase_imaging_7x7 = al.PhaseImaging(
            search=mock.MockSearch("test_phase"),
            settings=al.SettingsPhaseImaging(settings_lens=al.SettingsLens(
                positions_threshold=0.2)),
        )

        phase_imaging_7x7.modify_dataset(dataset=imaging_7x7,
                                         results=mock.MockResults())
        phase_imaging_7x7.modify_settings(dataset=imaging_7x7,
                                          results=mock.MockResults())

        analysis = phase_imaging_7x7.make_analysis(dataset=imaging_7x7,
                                                   mask=mask_7x7,
                                                   results=mock.MockResults())

        assert (analysis.masked_dataset.positions.in_list[0] == np.array(
            [1.0, 1.0])).all()
        assert (analysis.masked_dataset.positions.in_list[1] == np.array(
            [2.0, 2.0])).all()
        assert analysis.settings.settings_lens.positions_threshold == 0.2
    def test__positions_do_not_trace_within_threshold__raises_exception(
        self, phase_interferometer_7, interferometer_7, mask_7x7, visibilities_mask_7
    ):
        interferometer_7.positions = al.Grid2DIrregular([(1.0, 100.0), (200.0, 2.0)])

        phase_interferometer_7 = al.PhaseInterferometer(
            real_space_mask=mask_7x7,
            galaxies=dict(
                lens=al.Galaxy(redshift=0.5, mass=al.mp.SphericalIsothermal()),
                source=al.Galaxy(redshift=1.0),
            ),
            settings=al.SettingsPhaseInterferometer(
                settings_lens=al.SettingsLens(positions_threshold=0.01)
            ),
            search=mock.MockSearch("test_phase"),
        )

        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([])

        with pytest.raises(exc.RayTracingException):
            analysis.log_likelihood_function(instance=instance)
def make_dataset():
    return al.PointSourceDataset(
        "name",
        positions=al.Grid2DIrregular([(1, 2)]),
        positions_noise_map=al.ValuesIrregular([1]),
        fluxes=al.ValuesIrregular([2]),
        fluxes_noise_map=al.ValuesIrregular([3]),
    )
Beispiel #12
0
def test__fits_dataset__positions_only():

    point_source = al.ps.Point(centre=(0.1, 0.1))
    galaxy_point_source = al.Galaxy(redshift=1.0, point_0=point_source)

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

    positions = al.Grid2DIrregular([(0.0, 0.0), (3.0, 4.0)])
    noise_map = al.ValuesIrregular([0.5, 1.0])
    model_positions = al.Grid2DIrregular([(3.0, 1.0), (2.0, 3.0)])

    point_solver = al.m.MockPointSolver(model_positions=model_positions)

    point_dataset_0 = al.PointDataset(name="point_0",
                                      positions=positions,
                                      positions_noise_map=noise_map)

    point_dict = al.PointDict(point_dataset_list=[point_dataset_0])

    fit = al.FitPointDict(point_dict=point_dict,
                          tracer=tracer,
                          point_solver=point_solver)

    assert fit["point_0"].positions.log_likelihood == pytest.approx(
        -22.14472, 1.0e-4)
    assert fit["point_0"].flux == None
    assert fit.log_likelihood == fit["point_0"].positions.log_likelihood

    point_dataset_1 = al.PointDataset(name="point_1",
                                      positions=positions,
                                      positions_noise_map=noise_map)

    point_dict = al.PointDict(
        point_dataset_list=[point_dataset_0, point_dataset_1])

    fit = al.FitPointDict(point_dict=point_dict,
                          tracer=tracer,
                          point_solver=point_solver)

    assert fit["point_0"].positions.log_likelihood == pytest.approx(
        -22.14472, 1.0e-4)
    assert fit["point_0"].flux == None
    assert fit["point_1"].positions == None
    assert fit["point_1"].flux == None
    assert fit.log_likelihood == fit["point_0"].positions.log_likelihood
    def test__figure_of_merit__matches_correct_fit_given_galaxy_profiles(
            self, positions_x2, positions_x2_noise_map):

        point_source_dataset = al.PointSourceDataset(
            name="point_0",
            positions=positions_x2,
            positions_noise_map=positions_x2_noise_map,
        )

        point_source_dict = al.PointSourceDict(
            point_source_dataset_list=[point_source_dataset])

        model = af.Collection(galaxies=af.Collection(lens=al.Galaxy(
            redshift=0.5, point_0=al.ps.PointSource(centre=(0.0, 0.0)))))

        solver = mock.MockPositionsSolver(model_positions=positions_x2)

        analysis = al.AnalysisPointSource(point_source_dict=point_source_dict,
                                          solver=solver)

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

        tracer = analysis.tracer_for_instance(instance=instance)

        fit_positions = al.FitPositionsImage(
            name="point_0",
            positions=positions_x2,
            noise_map=positions_x2_noise_map,
            tracer=tracer,
            positions_solver=solver,
        )

        assert fit_positions.chi_squared == 0.0
        assert fit_positions.log_likelihood == analysis_log_likelihood

        model_positions = al.Grid2DIrregular([(0.0, 1.0), (1.0, 2.0)])
        solver = mock.MockPositionsSolver(model_positions=model_positions)

        analysis = al.AnalysisPointSource(point_source_dict=point_source_dict,
                                          solver=solver)

        analysis_log_likelihood = analysis.log_likelihood_function(
            instance=instance)

        fit_positions = al.FitPositionsImage(
            name="point_0",
            positions=positions_x2,
            noise_map=positions_x2_noise_map,
            tracer=tracer,
            positions_solver=solver,
        )

        assert fit_positions.residual_map.in_list == [1.0, 1.0]
        assert fit_positions.chi_squared == 2.0
        assert fit_positions.log_likelihood == analysis_log_likelihood
Beispiel #14
0
def test__from_json_and_output_to_json():

    point_dataset_0 = al.PointDataset(
        name="source_1",
        positions=al.Grid2DIrregular([[1.0, 1.0]]),
        positions_noise_map=al.ValuesIrregular([1.0]),
    )

    point_dataset_1 = al.PointDataset(
        name="source_2",
        positions=al.Grid2DIrregular([[1.0, 1.0]]),
        positions_noise_map=al.ValuesIrregular([1.0]),
        fluxes=al.ValuesIrregular([2.0, 3.0]),
        fluxes_noise_map=al.ValuesIrregular([4.0, 5.0]),
    )

    point_dict = al.PointDict(point_dataset_list=[point_dataset_0, point_dataset_1])

    dir_path = path.join("{}".format(path.dirname(path.realpath(__file__))), "files")

    if path.exists(dir_path):
        shutil.rmtree(dir_path)

    os.makedirs(dir_path)

    file_path = path.join(dir_path, "point_dict.json")

    point_dict.output_to_json(file_path=file_path, overwrite=True)

    point_dict_via_json = al.PointDict.from_json(file_path=file_path)

    assert point_dict_via_json["source_1"].name == "source_1"
    assert point_dict_via_json["source_1"].positions.in_list == [(1.0, 1.0)]
    assert point_dict_via_json["source_1"].positions_noise_map.in_list == [1.0]
    assert point_dict_via_json["source_1"].fluxes == None
    assert point_dict_via_json["source_1"].fluxes_noise_map == None

    assert point_dict_via_json["source_2"].name == "source_2"
    assert point_dict_via_json["source_2"].positions.in_list == [(1.0, 1.0)]
    assert point_dict_via_json["source_2"].positions_noise_map.in_list == [1.0]
    assert point_dict_via_json["source_2"].fluxes.in_list == [2.0, 3.0]
    assert point_dict_via_json["source_2"].fluxes_noise_map.in_list == [4.0, 5.0]
    def test__analysis_no_positions__removes_positions_and_threshold(
            self, masked_imaging_7x7):

        analysis = al.AnalysisImaging(
            dataset=masked_imaging_7x7,
            positions=al.Grid2DIrregular([(1.0, 100.0), (200.0, 2.0)]),
            settings_lens=al.SettingsLens(positions_threshold=0.01),
        )

        assert analysis.no_positions.positions == None
        assert analysis.no_positions.settings_lens.positions_threshold == None
Beispiel #16
0
def test__model_has_image_and_source_chi_squared__fits_both_correctly():

    galaxy_point_image = al.Galaxy(redshift=1.0,
                                   point_0=al.ps.Point(centre=(0.1, 0.1)))

    galaxy_point_source = al.Galaxy(redshift=1.0,
                                    point_1=al.ps.PointSourceChi(centre=(0.1,
                                                                         0.1)))

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

    positions = al.Grid2DIrregular([(0.0, 0.0), (3.0, 4.0)])
    noise_map = al.ValuesIrregular([0.5, 1.0])
    model_positions = al.Grid2DIrregular([(3.0, 1.0), (2.0, 3.0)])

    point_solver = al.m.MockPointSolver(model_positions=model_positions)

    point_dataset_0 = al.PointDataset(name="point_0",
                                      positions=positions,
                                      positions_noise_map=noise_map)

    point_dataset_1 = al.PointDataset(name="point_1",
                                      positions=positions,
                                      positions_noise_map=noise_map)

    point_dict = al.PointDict(
        point_dataset_list=[point_dataset_0, point_dataset_1])

    fit = al.FitPointDict(point_dict=point_dict,
                          tracer=tracer,
                          point_solver=point_solver)

    assert isinstance(fit["point_0"].positions, al.FitPositionsImage)
    assert isinstance(fit["point_1"].positions, al.FitPositionsSource)

    assert fit[
        "point_0"].positions.model_positions.in_list == model_positions.in_list
    assert fit[
        "point_1"].positions.model_positions.in_list == positions.in_list
Beispiel #17
0
def test__point_dataset_structures_as_dict():

    point_dataset_0 = al.PointDataset(
        name="source_1",
        positions=al.Grid2DIrregular([[1.0, 1.0]]),
        positions_noise_map=al.ValuesIrregular([1.0]),
    )

    point_dict = al.PointDict(point_dataset_list=[point_dataset_0])

    assert point_dict["source_1"].name == "source_1"
    assert point_dict["source_1"].positions.in_list == [(1.0, 1.0)]
    assert point_dict["source_1"].positions_noise_map.in_list == [1.0]
    assert point_dict["source_1"].fluxes == None
    assert point_dict["source_1"].fluxes_noise_map == None

    point_dataset_1 = al.PointDataset(
        name="source_2",
        positions=al.Grid2DIrregular([[1.0, 1.0]]),
        positions_noise_map=al.ValuesIrregular([1.0]),
        fluxes=al.ValuesIrregular([2.0, 3.0]),
        fluxes_noise_map=al.ValuesIrregular([4.0, 5.0]),
    )

    point_dict = al.PointDict(point_dataset_list=[point_dataset_0, point_dataset_1])

    assert point_dict["source_1"].name == "source_1"
    assert point_dict["source_1"].positions.in_list == [(1.0, 1.0)]
    assert point_dict["source_1"].positions_noise_map.in_list == [1.0]
    assert point_dict["source_1"].fluxes == None
    assert point_dict["source_1"].fluxes_noise_map == None

    assert point_dict["source_2"].name == "source_2"
    assert point_dict["source_2"].positions.in_list == [(1.0, 1.0)]
    assert point_dict["source_2"].positions_noise_map.in_list == [1.0]
    assert point_dict["source_2"].fluxes.in_list == [2.0, 3.0]
    assert point_dict["source_2"].fluxes_noise_map.in_list == [4.0, 5.0]

    assert (point_dict.positions_list[0] == np.array([1.0, 1.0])).all()
    assert (point_dict.positions_list[1] == np.array([1.0, 1.0])).all()
Beispiel #18
0
    def test__positions_do_not_trace_within_threshold__raises_exception(self,):

        tracer = al.Tracer.from_galaxies(
            galaxies=[
                al.Galaxy(redshift=0.5, mass=al.mp.SphericalIsothermal()),
                al.Galaxy(redshift=1.0),
            ]
        )

        settings = al.SettingsLens(positions_threshold=50.0)
        settings.check_positions_trace_within_threshold_via_tracer(
            tracer=tracer, positions=al.Grid2DIrregular([(1.0, 1.0), (2.0, 2.0)])
        )

        settings = al.SettingsLens(positions_threshold=0.0)
        with pytest.raises(exc.RayTracingException):
            settings.check_positions_trace_within_threshold_via_tracer(
                tracer=tracer, positions=al.Grid2DIrregular([(1.0, 1.0), (2.0, 2.0)])
            )

        # No mass profile - doesnt raise exception

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

        settings.check_positions_trace_within_threshold_via_tracer(
            tracer=tracer, positions=al.Grid2DIrregular([(1.0, 1.0), (2.0, 2.0)])
        )

        # Single plane - doesnt raise exception

        tracer = al.Tracer.from_galaxies(
            galaxies=[al.Galaxy(redshift=0.5, mass=al.mp.SphericalIsothermal())]
        )

        settings.check_positions_trace_within_threshold_via_tracer(
            tracer=tracer, positions=al.Grid2DIrregular([(1.0, 1.0), (2.0, 2.0)])
        )
Beispiel #19
0
    def test__two_sets_of_positions__residuals_likelihood_correct(self):

        point_source = al.ps.PointSource(centre=(0.1, 0.1))
        galaxy_point_source = al.Galaxy(redshift=1.0, point_0=point_source)
        tracer = al.Tracer.from_galaxies(
            galaxies=[al.Galaxy(redshift=0.5), galaxy_point_source])

        positions = al.Grid2DIrregular([(0.0, 0.0), (3.0, 4.0)])
        noise_map = al.ValuesIrregular([0.5, 1.0])
        model_positions = al.Grid2DIrregular([(3.0, 1.0), (2.0, 3.0)])

        positions_solver = mock.MockPositionsSolver(
            model_positions=model_positions)

        fit = al.FitPositionsImage(
            name="point_0",
            positions=positions,
            noise_map=noise_map,
            tracer=tracer,
            positions_solver=positions_solver,
        )

        assert fit.model_positions.in_list == [(3.0, 1.0), (2.0, 3.0)]

        assert fit.model_positions.in_list == [(3.0, 1.0), (2.0, 3.0)]

        assert fit.noise_map.in_list == [0.5, 1.0]
        assert fit.residual_map.in_list == [np.sqrt(10.0), np.sqrt(2.0)]
        assert fit.normalized_residual_map.in_list == [
            np.sqrt(10.0) / 0.5,
            np.sqrt(2.0) / 1.0,
        ]
        assert fit.chi_squared_map.in_list == [
            (np.sqrt(10.0) / 0.5)**2,
            np.sqrt(2.0)**2.0,
        ]
        assert fit.chi_squared == pytest.approx(42.0, 1.0e-4)
        assert fit.noise_normalization == pytest.approx(2.28945, 1.0e-4)
        assert fit.log_likelihood == pytest.approx(-22.14472, 1.0e-4)
Beispiel #20
0
def test__output_positions_info():

    output_path = path.join(
        "{}".format(os.path.dirname(os.path.realpath(__file__))), "files")

    positions_likelihood = al.PositionsLHResample(positions=al.Grid2DIrregular(
        [(1.0, 2.0), (3.0, 4.0)]),
                                                  threshold=0.1)

    tracer = al.m.MockTracer(traced_grid_2d_list_from=al.Grid2DIrregular(
        grid=[[(0.5, 1.5), (2.5, 3.5)]]))

    positions_likelihood.output_positions_info(output_path=output_path,
                                               tracer=tracer)

    positions_file = path.join(output_path, "positions.info")

    with open_(positions_file, "r") as f:
        output = f.readlines()

    assert "Positions" in output[0]

    os.remove(positions_file)
Beispiel #21
0
    def test__multi_plane_calculation(self, gal_x1_mp):

        g0 = al.Galaxy(redshift=0.5,
                       mass=al.mp.SphIsothermal(einstein_radius=1.0))
        g1 = al.Galaxy(redshift=1.0, point_0=al.ps.PointSourceFlux(flux=1.0))
        g2 = al.Galaxy(redshift=2.0, point_1=al.ps.PointSourceFlux(flux=2.0))

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

        fluxes = al.ValuesIrregular([1.0])
        noise_map = al.ValuesIrregular([3.0])
        positions = al.Grid2DIrregular([(2.0, 0.0)])

        fit_0 = al.FitFluxes(
            name="point_0",
            fluxes=fluxes,
            noise_map=noise_map,
            positions=positions,
            tracer=tracer,
        )

        deflections_func = partial(tracer.deflections_between_planes_from_grid,
                                   plane_i=0,
                                   plane_j=1)

        magnification_0 = tracer.magnification_via_hessian_from_grid(
            grid=positions, deflections_func=deflections_func)

        assert fit_0.magnifications[0] == magnification_0

        fit_1 = al.FitFluxes(
            name="point_1",
            fluxes=fluxes,
            noise_map=noise_map,
            positions=positions,
            tracer=tracer,
        )

        deflections_func = partial(tracer.deflections_between_planes_from_grid,
                                   plane_i=0,
                                   plane_j=2)

        magnification_1 = tracer.magnification_via_hessian_from_grid(
            grid=positions, deflections_func=deflections_func)

        assert fit_1.magnifications[0] == magnification_1

        assert fit_0.magnifications[0] != pytest.approx(
            fit_1.magnifications[0], 1.0e-1)
Beispiel #22
0
    def test__multi_plane_position_solving(self):

        grid = al.Grid2D.uniform(shape_native=(100, 100),
                                 pixel_scales=0.05,
                                 sub_size=1)

        g0 = al.Galaxy(redshift=0.5,
                       mass=al.mp.SphIsothermal(einstein_radius=1.0))
        g1 = al.Galaxy(redshift=1.0,
                       point_0=al.ps.PointSource(centre=(0.1, 0.1)))
        g2 = al.Galaxy(redshift=2.0,
                       point_1=al.ps.PointSource(centre=(0.1, 0.1)))

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

        positions = al.Grid2DIrregular([(0.0, 0.0), (3.0, 4.0)])
        noise_map = al.ValuesIrregular([0.5, 1.0])

        positions_solver = al.PositionsSolver(grid=grid,
                                              pixel_scale_precision=0.01)

        fit_0 = al.FitPositionsImage(
            name="point_0",
            positions=positions,
            noise_map=noise_map,
            tracer=tracer,
            positions_solver=positions_solver,
        )

        fit_1 = al.FitPositionsImage(
            name="point_1",
            positions=positions,
            noise_map=noise_map,
            tracer=tracer,
            positions_solver=positions_solver,
        )

        scaling_factor = al.util.cosmology.scaling_factor_between_redshifts_from(
            redshift_0=0.5,
            redshift_1=1.0,
            redshift_final=2.0,
            cosmology=tracer.cosmology,
        )

        assert fit_0.model_positions[0, 0] == pytest.approx(
            scaling_factor * fit_1.model_positions[0, 0], 1.0e-1)
        assert fit_0.model_positions[0, 1] == pytest.approx(
            scaling_factor * fit_1.model_positions[0, 1], 1.0e-1)
Beispiel #23
0
    def test__use_real_tracer(self, gal_x1_mp):

        point_source = al.ps.PointSourceFlux(centre=(0.1, 0.1), flux=2.0)
        galaxy_point_source = al.Galaxy(redshift=1.0, point_0=point_source)
        tracer = al.Tracer.from_galaxies(galaxies=[gal_x1_mp, galaxy_point_source])

        fluxes = al.ValuesIrregular([1.0, 2.0])
        noise_map = al.ValuesIrregular([3.0, 1.0])
        positions = al.Grid2DIrregular([(0.0, 0.0), (3.0, 4.0)])

        fit = al.FitFluxes(
            fluxes=fluxes, noise_map=noise_map, positions=positions, tracer=tracer
        )

        assert fit.model_fluxes.in_list[1] == pytest.approx(2.5, 1.0e-4)
        assert fit.log_likelihood == pytest.approx(-3.11702, 1.0e-4)
    def test__positions_do_not_trace_within_threshold__raises_exception(
            self, masked_imaging_7x7):

        model = af.Collection(galaxies=af.Collection(
            lens=al.Galaxy(redshift=0.5, mass=al.mp.SphIsothermal()),
            source=al.Galaxy(redshift=1.0),
        ))

        analysis = al.AnalysisImaging(
            dataset=masked_imaging_7x7,
            positions=al.Grid2DIrregular([(1.0, 100.0), (200.0, 2.0)]),
            settings_lens=al.SettingsLens(positions_threshold=0.01),
        )

        instance = model.instance_from_unit_vector([])

        with pytest.raises(exc.RayTracingException):
            analysis.log_likelihood_function(instance=instance)
Beispiel #25
0
def test__positions__resample__raises_exception(masked_imaging_7x7):

    model = af.Collection(galaxies=af.Collection(
        lens=al.Galaxy(redshift=0.5, mass=al.mp.SphIsothermal()),
        source=al.Galaxy(redshift=1.0),
    ))

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

    analysis = al.AnalysisImaging(dataset=masked_imaging_7x7,
                                  positions_likelihood=positions_likelihood)

    instance = model.instance_from_unit_vector([])

    with pytest.raises(exc.RayTracingException):
        analysis.log_likelihood_function(instance=instance)
Beispiel #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)
Beispiel #27
0
def test__positions__likelihood_overwrites__changes_likelihood(
        masked_imaging_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))

    instance = model.instance_from_unit_vector([])

    analysis = al.AnalysisImaging(dataset=masked_imaging_7x7)
    analysis_log_likelihood = analysis.log_likelihood_function(
        instance=instance)

    tracer = analysis.tracer_via_instance_from(instance=instance)

    fit = al.FitImaging(dataset=masked_imaging_7x7, tracer=tracer)

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

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

    analysis = al.AnalysisImaging(dataset=masked_imaging_7x7,
                                  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=masked_imaging_7x7)
    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(-22048700558.9052, 1.0e-4)
    def test__two_sets_of_positions__residuals_likelihood_correct(self):

        point_source = al.ps.PointSourceChi(centre=(0.0, 0.0))
        galaxy_point_source = al.Galaxy(redshift=1.0, point_0=point_source)
        tracer = al.Tracer.from_galaxies(
            galaxies=[al.Galaxy(redshift=0.5), galaxy_point_source])

        positions = al.Grid2DIrregular([(0.0, 1.0), (0.0, 2.0)])
        noise_map = al.ValuesIrregular([0.5, 1.0])

        fit = al.FitPositionsSource(name="point_0",
                                    positions=positions,
                                    noise_map=noise_map,
                                    tracer=tracer)

        assert fit.model_positions.in_list == [(0.0, 1.0), (0.0, 2.0)]
        assert fit.noise_map.in_list == [0.5, 1.0]
        assert fit.residual_map.in_list == [1.0, 2.0]
        assert fit.normalized_residual_map.in_list == [1.0 / 0.5, 2.0 / 1.0]
        assert fit.chi_squared_map.in_list == [(1.0 / 0.5)**2.0, 2.0**2.0]
        assert fit.chi_squared == pytest.approx(8.0, 1.0e-4)
        assert fit.noise_normalization == pytest.approx(2.28945, 1.0e-4)
        assert fit.log_likelihood == pytest.approx(-5.14472988, 1.0e-4)

        galaxy_mass = al.Galaxy(
            redshift=0.5,
            mass=al.mp.SphIsothermal(centre=(0.0, 0.0), einstein_radius=1.0),
        )

        tracer = al.Tracer.from_galaxies(
            galaxies=[galaxy_mass, galaxy_point_source])

        fit = al.FitPositionsSource(name="point_0",
                                    positions=positions,
                                    noise_map=noise_map,
                                    tracer=tracer)

        assert fit.model_positions.in_list == [(0.0, 0.0), (0.0, 1.0)]
        assert fit.log_likelihood == pytest.approx(-1.6447298, 1.0e-4)
Beispiel #29
0
def test__modify_before_fit__inversion_no_positions_likelihood__raises_exception(
        masked_imaging_7x7):

    lens = al.Galaxy(redshift=0.5, mass=al.mp.SphIsothermal())
    source = al.Galaxy(redshift=1.0,
                       pixelization=al.pix.Rectangular,
                       regularization=al.reg.Constant())

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

    analysis = al.AnalysisImaging(dataset=masked_imaging_7x7)

    with pytest.raises(exc.AnalysisException):
        analysis.modify_before_fit(paths=af.DirectoryPaths(), model=model)

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

    analysis = al.AnalysisImaging(dataset=masked_imaging_7x7,
                                  positions_likelihood=positions_likelihood)
    analysis.modify_before_fit(paths=af.DirectoryPaths(), model=model)
Beispiel #30
0
def test__results_include_positions__available_as_property(
        analysis_imaging_7x7, masked_imaging_7x7, samples_with_result):

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

    assert result.positions == None

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

    analysis = al.AnalysisImaging(
        dataset=masked_imaging_7x7,
        positions_likelihood=positions_likelihood,
        settings_lens=al.SettingsLens(threshold=1.0),
    )

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

    assert (result.positions[0] == np.array([1.0, 100.0])).all()