def test__furthest_separation_of_source_plane_positions(self):

        positions = al.GridIrregularGrouped(grid=[[(0.0, 0.0), (0.0, 1.0)]])
        noise_map = al.ValuesIrregularGrouped([[1.0, 1.0]])

        tracer = MockTracerPositions(positions=positions)
        fit = al.FitPositionsSourceMaxSeparation(
            positions=positions, noise_map=noise_map, tracer=tracer
        )

        assert fit.furthest_separations_of_source_plane_positions.in_grouped_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.GridIrregularGrouped(
            grid=[[(0.0, 0.0), (0.0, 1.0), (0.0, 3.0)], [(0.0, 0.0)]]
        )
        noise_map = al.ValuesIrregularGrouped([[1.0, 1.0], [1.0]])

        tracer = MockTracerPositions(positions=positions)
        fit = al.FitPositionsSourceMaxSeparation(
            positions=positions, noise_map=noise_map, tracer=tracer
        )

        assert fit.furthest_separations_of_source_plane_positions.in_grouped_list == [
            [3.0, 2.0, 3.0],
            [0.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
    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.ValuesIrregularGrouped([[1.0, 1.0]])

        positions = al.GridIrregularGrouped([[(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.GridIrregularGrouped([[(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)
    def test__two_sets_of_positions__residuals_likelihood_correct(self):

        tracer = MockTracerPositions(positions=None)

        positions = al.GridIrregularGrouped([[(0.0, 0.0), (3.0, 4.0)], [(3.0, 3.0)]])

        noise_map = al.ValuesIrregularGrouped([[0.5, 1.0], [1.0]])

        model_positions = al.GridIrregularGrouped(
            [[(3.0, 1.0), (2.0, 3.0)], [(3.0, 3.0)]]
        )

        positions_solver = mock.MockPositionsSolver(model_positions=model_positions)

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

        assert fit.model_positions_all.in_grouped_list == [
            [(3.0, 1.0), (2.0, 3.0)],
            [(3.0, 3.0)],
        ]
        assert fit.model_positions.in_grouped_list == [
            [(3.0, 1.0), (2.0, 3.0)],
            [(3.0, 3.0)],
        ]
        assert fit.noise_map.in_grouped_list == [[0.5, 1.0], [1.0]]
        assert fit.residual_map.in_grouped_list == [
            [np.sqrt(10.0), np.sqrt(2.0)],
            [0.0],
        ]
        assert fit.normalized_residual_map.in_grouped_list == [
            [np.sqrt(10.0) / 0.5, np.sqrt(2.0) / 1.0],
            [0.0],
        ]
        assert fit.chi_squared_map.in_grouped_list == [
            [(np.sqrt(10.0) / 0.5) ** 2, np.sqrt(2.0) ** 2.0],
            [0.0],
        ]
        assert fit.chi_squared == pytest.approx(42.0, 1.0e-4)
        assert fit.noise_normalization == pytest.approx(4.12733, 1.0e-4)
        assert fit.log_likelihood == pytest.approx(-23.06366, 1.0e-4)
    def test__more_model_positions_than_data_positions__pairs_closest_positions(self):

        tracer = MockTracerPositions(positions=None)

        positions = al.GridIrregularGrouped([[(0.0, 0.0), (3.0, 4.0)], [(3.0, 3.0)]])

        noise_map = al.ValuesIrregularGrouped([[0.5, 1.0], [1.0]])

        model_positions = al.GridIrregularGrouped(
            [[(3.0, 1.0), (2.0, 3.0), (1.0, 0.0), (0.0, 1.0)], [(3.0, 3.0), (4.0, 4.0)]]
        )

        positions_solver = mock.MockPositionsSolver(model_positions=model_positions)

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

        assert fit.model_positions_all.in_grouped_list == [
            [(3.0, 1.0), (2.0, 3.0), (1.0, 0.0), (0.0, 1.0)],
            [(3.0, 3.0), (4.0, 4.0)],
        ]
        assert fit.model_positions.in_grouped_list == [
            [(1.0, 0.0), (2.0, 3.0)],
            [(3.0, 3.0)],
        ]
        assert fit.noise_map.in_grouped_list == [[0.5, 1.0], [1.0]]
        assert fit.residual_map.in_grouped_list == [[1.0, np.sqrt(2.0)], [0.0]]
        assert fit.normalized_residual_map.in_grouped_list == [
            [2.0, np.sqrt(2.0) / 1.0],
            [0.0],
        ]
        assert fit.chi_squared_map.in_grouped_list == [
            [4.0, np.sqrt(2.0) ** 2.0],
            [0.0],
        ]
        assert fit.chi_squared == pytest.approx(6.0, 1.0e-4)
        assert fit.noise_normalization == pytest.approx(4.12733, 1.0e-4)
        assert fit.log_likelihood == pytest.approx(-5.06366, 1.0e-4)
Exemplo n.º 5
0
def make_fluxes_noise_map_x2():
    return al.ValuesIrregularGrouped(values=[[1.0, 1.0]])
Exemplo n.º 6
0
def make_fluxes_x2():
    return al.ValuesIrregularGrouped(values=[[1.0, 2.0]])