def test___all_fit_quantities__hyper_background_noise(self, interferometer_7): hyper_background_noise = ag.hyper_data.HyperBackgroundNoise(noise_scale=1.0) hyper_noise_map = hyper_background_noise.hyper_noise_map_from_complex_noise_map( noise_map=interferometer_7.noise_map ) g0 = ag.Galaxy( redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0), mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0), ) g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0)) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer( interferometer=interferometer_7, plane=plane, hyper_background_noise=hyper_background_noise, ) assert hyper_noise_map.slim == pytest.approx(fit.noise_map.slim) fit = ag.FitInterferometer( interferometer=interferometer_7, plane=plane, hyper_background_noise=hyper_background_noise, use_hyper_scalings=False, ) assert fit.noise_map == pytest.approx(interferometer_7.noise_map, 1.0e-4) assert fit.noise_map != pytest.approx(hyper_noise_map.slim, 1.0e-4)
def test__fit_figure_of_merit(interferometer_7): g0 = ag.Galaxy( redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0), mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0), ) g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0)) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane) assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j, shape=(7, ))).all() assert fit.log_likelihood == pytest.approx(-2398107.3849, 1e-4) assert fit.figure_of_merit == pytest.approx(-2398107.3849, 1.0e-4) pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=0.01) g0 = ag.Galaxy(redshift=0.5, pixelization=pix, regularization=reg) plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5), g0]) fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane) assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j, shape=(7, ))).all() assert fit.log_evidence == pytest.approx(-66.90612, 1e-4) assert fit.figure_of_merit == pytest.approx(-66.90612, 1.0e-4) galaxy_light = ag.Galaxy(redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0)) pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=1.0) galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(redshift=0.75, galaxies=[galaxy_light, galaxy_pix]) fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane) assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j, shape=(7, ))).all() assert fit.log_evidence == pytest.approx(-283424.48941, 1e-4) assert fit.figure_of_merit == pytest.approx(-283424.48941, 1.0e-4)
def test___fit_galaxy_model_image_dict__images_and_inversion_mapped_reconstructed_image( self, interferometer_7 ): pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=1.0) g0 = ag.Galaxy(redshift=0.5) g1 = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane) mapper = pix.mapper_from_grid_and_sparse_grid( grid=interferometer_7.grid, sparse_grid=None ) inversion = inversions.InversionInterferometerMatrix.from_data_mapper_and_regularization( mapper=mapper, regularization=reg, visibilities=interferometer_7.visibilities, noise_map=interferometer_7.noise_map, transformer=interferometer_7.transformer, ) assert (fit.galaxy_model_image_dict[g0].native == np.zeros((7, 7))).all() assert fit.galaxy_model_image_dict[g1].slim == pytest.approx( inversion.mapped_reconstructed_image.slim, 1.0e-4 )
def test___fit_galaxy_visibilities_dict__corresponds_to_galaxy_visibilities( self, interferometer_7 ): g0 = ag.Galaxy( redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0), mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0), ) g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0)) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane) g0_profile_visibilities = g0.profile_visibilities_from_grid_and_transformer( grid=interferometer_7.grid, transformer=interferometer_7.transformer ) g1_profile_visibilities = g1.profile_visibilities_from_grid_and_transformer( grid=interferometer_7.grid, transformer=interferometer_7.transformer ) assert fit.galaxy_model_visibilities_dict[g0].slim == pytest.approx( g0_profile_visibilities, 1.0e-4 ) assert fit.galaxy_model_visibilities_dict[g1].slim == pytest.approx( g1_profile_visibilities, 1.0e-4 ) assert fit.model_visibilities.slim == pytest.approx( fit.galaxy_model_visibilities_dict[g0].slim + fit.galaxy_model_visibilities_dict[g1].slim, 1.0e-4, )
def test__fit_figure_of_merit__includes_hyper_image_and_noise__matches_fit( self, interferometer_7 ): 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_background_noise=hyper_background_noise, galaxies=af.Collection(galaxy=galaxy), ) analysis = ag.AnalysisInterferometer(dataset=interferometer_7) 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.FitInterferometer( interferometer=interferometer_7, plane=plane, hyper_background_noise=hyper_background_noise, ) assert fit.log_likelihood == fit_figure_of_merit
def test___all_fit_quantities__hyper_background_noise(self, interferometer_7): hyper_background_noise = ag.hyper_data.HyperBackgroundNoise(noise_scale=1.0) hyper_noise_map = hyper_background_noise.hyper_noise_map_from_complex_noise_map( noise_map=interferometer_7.noise_map ) galaxy_light = ag.Galaxy( redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0) ) pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=1.0) galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(redshift=0.75, galaxies=[galaxy_light, galaxy_pix]) fit = ag.FitInterferometer( interferometer=interferometer_7, plane=plane, hyper_background_noise=hyper_background_noise, ) assert hyper_noise_map.slim == pytest.approx(fit.inversion.noise_map, 1.0e-4) assert hyper_noise_map.slim == pytest.approx(fit.noise_map.slim)
def test___all_fit_quantities__no_hyper_methods(self, interferometer_7): g0 = ag.Galaxy( redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0), mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0), ) g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0)) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane) assert interferometer_7.noise_map == pytest.approx(fit.noise_map) model_visibilities = plane.profile_visibilities_from_grid_and_transformer( grid=interferometer_7.grid, transformer=interferometer_7.transformer ) assert model_visibilities == pytest.approx(fit.model_visibilities, 1e-4) residual_map = ag.util.fit.residual_map_from( data=interferometer_7.visibilities, model_data=model_visibilities ) assert residual_map == pytest.approx(fit.residual_map, 1e-4) normalized_residual_map = ag.util.fit.normalized_residual_map_complex_from( residual_map=residual_map, noise_map=interferometer_7.noise_map ) assert normalized_residual_map == pytest.approx( fit.normalized_residual_map, 1e-4 ) chi_squared_map = ag.util.fit.chi_squared_map_complex_from( residual_map=residual_map, noise_map=interferometer_7.noise_map ) assert chi_squared_map == pytest.approx(fit.chi_squared_map, 1e-4) chi_squared = ag.util.fit.chi_squared_complex_from( chi_squared_map=fit.chi_squared_map ) noise_normalization = ag.util.fit.noise_normalization_complex_from( noise_map=interferometer_7.noise_map ) log_likelihood = ag.util.fit.log_likelihood_from( chi_squared=chi_squared, noise_normalization=noise_normalization ) assert log_likelihood == pytest.approx(fit.log_likelihood, 1e-4) assert log_likelihood == fit.figure_of_merit
def test__model_visibilities(interferometer_7): g0 = ag.Galaxy(redshift=0.5, light_profile=MockLightProfile(image_2d=np.ones(2))) plane = ag.Plane(galaxies=[g0]) fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane) assert fit.model_visibilities.slim[0] == pytest.approx( np.array([1.2933 + 0.2829j]), 1.0e-4) assert fit.log_likelihood == pytest.approx(-27.06284, 1.0e-4)
def test___fit_galaxy_model_visibilities_dict__has_image_and_inversion_mapped_reconstructed_image( self, interferometer_7 ): g0 = ag.Galaxy(redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0)) g1 = ag.Galaxy(redshift=0.5, light_profile=ag.lp.EllSersic(intensity=2.0)) pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=1.0) galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1, galaxy_pix]) fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane) g0_visibilities = g0.profile_visibilities_from_grid_and_transformer( grid=interferometer_7.grid, transformer=interferometer_7.transformer ) g1_visibilities = g1.profile_visibilities_from_grid_and_transformer( grid=interferometer_7.grid, transformer=interferometer_7.transformer ) profile_visibilities = g0_visibilities + g1_visibilities profile_subtracted_visibilities = ( interferometer_7.visibilities - profile_visibilities ) mapper = pix.mapper_from_grid_and_sparse_grid( grid=interferometer_7.grid, settings=ag.SettingsPixelization(use_border=False), ) inversion = inversions.InversionInterferometerMatrix.from_data_mapper_and_regularization( visibilities=profile_subtracted_visibilities, noise_map=interferometer_7.noise_map, transformer=interferometer_7.transformer, mapper=mapper, regularization=reg, ) g0_image = g0.image_2d_from_grid(grid=interferometer_7.grid) g1_image = g1.image_2d_from_grid(grid=interferometer_7.grid) assert fit.galaxy_model_image_dict[g0].slim == pytest.approx( g0_image.slim, 1.0e-4 ) assert fit.galaxy_model_image_dict[g1].slim == pytest.approx( g1_image.slim, 1.0e-4 ) assert fit.galaxy_model_image_dict[galaxy_pix].slim == pytest.approx( inversion.mapped_reconstructed_image.slim, 1.0e-4 )
def test__noise_map__with_and_without_hyper_background(interferometer_7): g0 = ag.Galaxy(redshift=0.5, light_profile=MockLightProfile(image_2d=np.ones(2))) plane = ag.Plane(galaxies=[g0]) fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane) assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j, shape=(7, ))).all() hyper_background_noise = ag.hyper_data.HyperBackgroundNoise( noise_scale=1.0) fit = ag.FitInterferometer( dataset=interferometer_7, plane=plane, 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)
def test__1x2_image__1x2_visibilities__simple_fourier_transform(self): # The image plane image generated by the galaxy is [1.0, 1.0] # Thus the chi squared is 4.0**2.0 + 3.0**2.0 = 25.0 real_space_mask = ag.Mask2D.manual( mask=[ [True, True, True, True], [True, False, False, True], [True, True, True, True], ], pixel_scales=1.0, ) interferometer = ag.Interferometer( visibilities=ag.Visibilities.full(fill_value=5.0, shape_slim=(1,)), noise_map=ag.Visibilities.ones(shape_slim=(1,)), uv_wavelengths=np.array([[0.0, 0.0]]), real_space_mask=real_space_mask, settings=ag.SettingsInterferometer( grid_class=ag.Grid2D, sub_size=1, transformer_class=ag.TransformerDFT ), ) interferometer.visibilities[0] = 5.0 + 4.0j # Setup as a ray trace instance, using a light profile for the galaxy g0 = ag.Galaxy(redshift=0.5, light_profile=MockLightProfile(value=1.0, size=2)) plane = ag.Plane(galaxies=[g0]) fit = ag.FitInterferometer(interferometer=interferometer, plane=plane) assert (fit.visibilities.slim == np.array([5.0 + 4.0j])).all() assert (fit.noise_map.slim == np.array([1.0 + 1.0j])).all() assert (fit.model_visibilities.slim == np.array([2.0 + 0.0j])).all() assert (fit.residual_map.slim == np.array([3.0 + 4.0j])).all() assert (fit.normalized_residual_map.slim == np.array([3.0 + 4.0j])).all() assert (fit.chi_squared_map.slim == np.array([9.0 + 16.0j])).all() assert fit.chi_squared == 25.0 assert fit.noise_normalization == pytest.approx( 2.0 * np.log(2 * np.pi * 1.0 ** 2.0), 1.0e-4 ) assert fit.log_likelihood == pytest.approx( -0.5 * (25.0 + 2.0 * np.log(2 * np.pi * 1.0 ** 2.0)), 1.0e-4 )
def test__fit_figure_of_merit__matches_correct_fit_given_galaxy_profiles( self, interferometer_7 ): galaxy = ag.Galaxy(redshift=0.5, light=ag.lp.EllSersic(intensity=0.1)) model = af.Collection(galaxies=af.Collection(galaxy=galaxy)) analysis = ag.AnalysisInterferometer(dataset=interferometer_7) 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.FitInterferometer(interferometer=interferometer_7, plane=plane) assert fit.log_likelihood == fit_figure_of_merit
def test___fit_figure_of_merit__linear_operator(interferometer_7_lop): pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=0.01) g0 = ag.Galaxy(redshift=0.5, pixelization=pix, regularization=reg) plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5), g0]) fit = ag.FitInterferometer( dataset=interferometer_7_lop, plane=plane, settings_inversion=ag.SettingsInversion(use_linear_operators=True), ) assert (fit.noise_map.slim == np.full(fill_value=2.0 + 2.0j, shape=(7, ))).all() assert fit.log_evidence == pytest.approx(-71.5177, 1e-4) assert fit.figure_of_merit == pytest.approx(-71.5177, 1.0e-4)
def test___fit_galaxy_model_image_dict__corresponds_to_profile_galaxy_images( self, interferometer_7 ): g0 = ag.Galaxy( redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0), mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0), ) g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0)) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane) g0_image = g0.image_2d_from_grid(grid=interferometer_7.grid) g1_image = g1.image_2d_from_grid(grid=interferometer_7.grid) assert fit.galaxy_model_image_dict[g0].slim == pytest.approx(g0_image, 1.0e-4) assert fit.galaxy_model_image_dict[g1].slim == pytest.approx(g1_image, 1.0e-4)
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 = ag.Mask2D.manual( mask=[ [True, True, True, True, True], [True, False, False, False, True], [True, True, True, True, True], ], pixel_scales=1.0, ) interferometer = ag.Interferometer( visibilities=ag.Visibilities.full(fill_value=5.0, shape_slim=(3,)), noise_map=ag.Visibilities.full(fill_value=2.0, shape_slim=(3,)), uv_wavelengths=uv_wavelengths, real_space_mask=real_space_mask, settings=ag.SettingsInterferometer(grid_class=ag.Grid2D, sub_size=1), ) # Setup as a ray trace instance, using a light profile for the galaxy g0 = ag.Galaxy(redshift=0.5, light_profile=MockLightProfile(value=1.0, size=2)) plane = ag.Plane(galaxies=[g0]) hyper_background_noise = ag.hyper_data.HyperBackgroundNoise(noise_scale=1.0) fit = ag.FitInterferometer( interferometer=interferometer, plane=plane, hyper_background_noise=hyper_background_noise, ) assert ( fit.visibilities.slim == np.array([5.0 + 5.0j, 5.0 + 5.0j, 5.0 + 5.0j]) ).all() assert ( fit.noise_map.slim == np.array([3.0 + 3.0j, 3.0 + 3.0j, 3.0 + 3.0j]) ).all()
def fit_interferometer_from_agg_obj(agg_obj): """ 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 PyAutoGalaxy model-fits.""" interferometer = interferometer_from_agg_obj(agg_obj=agg_obj) plane = plane_from_agg_obj(agg_obj=agg_obj) return ag.FitInterferometer( interferometer=interferometer, plane=plane, settings_pixelization=agg_obj.settings_pixelization, settings_inversion=agg_obj.settings_inversion, )
def fit_interferometer_via_database_from( fit: Fit, real_space_mask: Optional[ag.Mask2D] = None, settings_interferometer: Optional[ag.SettingsInterferometer] = None, settings_pixelization: Optional[ag.SettingsPixelization] = None, settings_inversion: Optional[ag.SettingsInversion] = None, ): """ 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 PyAutoGalaxy model-fits. """ settings_pixelization = settings_pixelization or fit.value( name="settings_pixelization" ) settings_inversion = settings_inversion or fit.value(name="settings_inversion") interferometer = interferometer_via_database_from( fit=fit, real_space_mask=real_space_mask, settings_interferometer=settings_interferometer, ) plane = plane_via_database_from(fit=fit) return ag.FitInterferometer( interferometer=interferometer, plane=plane, settings_pixelization=settings_pixelization, settings_inversion=settings_inversion, )
def test__fit_figure_of_merit__include_hyper_methods(interferometer_7): hyper_background_noise = ag.hyper_data.HyperBackgroundNoise( noise_scale=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), ) g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0)) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer( dataset=interferometer_7, plane=plane, 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(-1065843.7193, 1e-4) assert fit.figure_of_merit == pytest.approx(-1065843.7193, 1.0e-4) fit = ag.FitInterferometer( dataset=interferometer_7, plane=plane, hyper_background_noise=hyper_background_noise, use_hyper_scalings=False, ) assert fit.noise_map == pytest.approx(interferometer_7.noise_map, 1.0e-4) pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=0.01) g0 = ag.Galaxy(redshift=0.5, pixelization=pix, regularization=reg) plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5), g0]) fit = ag.FitInterferometer( dataset=interferometer_7, plane=plane, 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 = ag.Galaxy(redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0)) pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=1.0) galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(redshift=0.75, galaxies=[galaxy_light, galaxy_pix]) fit = ag.FitInterferometer( dataset=interferometer_7, plane=plane, 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(-161108.8377, 1e-4) assert fit.figure_of_merit == pytest.approx(-161108.8377, 1.0e-4)
def test___all_fit_quantities__uses_linear_operator_inversion( self, interferometer_7_lop ): # Ensures the inversion grid is used, as this would cause the test to fail. interferometer_7_lop.grid[0, 0] = -100.0 pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=0.01) g0 = ag.Galaxy(redshift=0.5, pixelization=pix, regularization=reg) plane = ag.Plane(galaxies=[ag.Galaxy(redshift=0.5), g0]) fit = ag.FitInterferometer( interferometer=interferometer_7_lop, plane=plane, settings_inversion=ag.SettingsInversion(use_linear_operators=True), ) mapper = pix.mapper_from_grid_and_sparse_grid( grid=interferometer_7_lop.grid_inversion, sparse_grid=None ) inversion = inversions.InversionInterferometerLinearOperator.from_data_mapper_and_regularization( mapper=mapper, regularization=reg, visibilities=interferometer_7_lop.visibilities, noise_map=interferometer_7_lop.noise_map, transformer=interferometer_7_lop.transformer, settings=ag.SettingsInversion(use_linear_operators=True), ) assert inversion.mapped_reconstructed_visibilities == pytest.approx( fit.model_visibilities, 1.0e-4 ) residual_map = ag.util.fit.residual_map_from( data=interferometer_7_lop.visibilities, model_data=inversion.mapped_reconstructed_visibilities, ) assert residual_map.slim == pytest.approx(fit.residual_map.slim, 1.0e-4) normalized_residual_map = ag.util.fit.normalized_residual_map_complex_from( residual_map=residual_map, noise_map=interferometer_7_lop.noise_map ) assert normalized_residual_map.slim == pytest.approx( fit.normalized_residual_map.slim, 1.0e-4 ) chi_squared_map = ag.util.fit.chi_squared_map_complex_from( residual_map=residual_map, noise_map=interferometer_7_lop.noise_map ) assert chi_squared_map.slim == pytest.approx(fit.chi_squared_map.slim, 1.0e-4) chi_squared = ag.util.fit.chi_squared_complex_from( chi_squared_map=chi_squared_map ) noise_normalization = ag.util.fit.noise_normalization_complex_from( noise_map=interferometer_7_lop.noise_map ) log_likelihood = ag.util.fit.log_likelihood_from( chi_squared=chi_squared, noise_normalization=noise_normalization ) assert log_likelihood == pytest.approx(fit.log_likelihood, 1e-4) log_likelihood_with_regularization = ag.util.fit.log_likelihood_with_regularization_from( chi_squared=chi_squared, regularization_term=inversion.regularization_term, noise_normalization=noise_normalization, ) assert log_likelihood_with_regularization == pytest.approx( fit.log_likelihood_with_regularization, 1e-4 ) log_evidence = ag.util.fit.log_evidence_from( chi_squared=chi_squared, regularization_term=inversion.regularization_term, log_curvature_regularization_term=inversion.log_det_curvature_reg_matrix_term, log_regularization_term=inversion.log_det_regularization_matrix_term, noise_normalization=noise_normalization, ) assert log_evidence == fit.log_evidence assert log_evidence == fit.figure_of_merit mapped_reconstructed_image = ag.util.inversion.mapped_reconstructed_data_from( mapping_matrix=fit.inversion.mapper.mapping_matrix, reconstruction=fit.inversion.reconstruction, ) assert ( fit.inversion.mapped_reconstructed_image.slim == mapped_reconstructed_image ).all()
def test___galaxy_model_visibilities_dict(interferometer_7): g0 = ag.Galaxy( redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0), mass_profile=ag.mp.SphIsothermal(einstein_radius=1.0), ) g1 = ag.Galaxy(redshift=1.0, light_profile=ag.lp.EllSersic(intensity=1.0)) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane) g0_visibilities = g0.visibilities_via_transformer_from( grid=interferometer_7.grid, transformer=interferometer_7.transformer) g1_visibilities = g1.visibilities_via_transformer_from( grid=interferometer_7.grid, transformer=interferometer_7.transformer) assert fit.galaxy_model_visibilities_dict[g0].slim == pytest.approx( g0_visibilities, 1.0e-4) assert fit.galaxy_model_visibilities_dict[g1].slim == pytest.approx( g1_visibilities, 1.0e-4) assert fit.model_visibilities.slim == pytest.approx( fit.galaxy_model_visibilities_dict[g0].slim + fit.galaxy_model_visibilities_dict[g1].slim, 1.0e-4, ) pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=1.0) g0 = ag.Galaxy(redshift=0.5) g1 = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1]) fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane) mapper = pix.mapper_from(source_grid_slim=interferometer_7.grid, source_pixelization_grid=None) inversion = ag.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 = 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) galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(redshift=0.75, galaxies=[g0, g1, g2, galaxy_pix]) fit = ag.FitInterferometer(dataset=interferometer_7, plane=plane) g0_visibilities = g0.visibilities_via_transformer_from( grid=interferometer_7.grid, transformer=interferometer_7.transformer) g1_visibilities = g1.visibilities_via_transformer_from( grid=interferometer_7.grid, transformer=interferometer_7.transformer) profile_visibilities = g0_visibilities + g1_visibilities profile_subtracted_visibilities = (interferometer_7.visibilities - profile_visibilities) mapper = pix.mapper_from( source_grid_slim=interferometer_7.grid, settings=ag.SettingsPixelization(use_border=False), ) inversion = ag.InversionInterferometer( visibilities=profile_subtracted_visibilities, noise_map=interferometer_7.noise_map, transformer=interferometer_7.transformer, linear_obj_list=[mapper], regularization_list=[reg], ) 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, )
def test___all_fit_quantities__no_hyper_methods(self, interferometer_7): galaxy_light = ag.Galaxy( redshift=0.5, light_profile=ag.lp.EllSersic(intensity=1.0) ) pix = ag.pix.Rectangular(shape=(3, 3)) reg = ag.reg.Constant(coefficient=1.0) galaxy_pix = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(redshift=0.75, galaxies=[galaxy_light, galaxy_pix]) fit = ag.FitInterferometer(interferometer=interferometer_7, plane=plane) profile_visibilities = plane.profile_visibilities_from_grid_and_transformer( grid=interferometer_7.grid, transformer=interferometer_7.transformer ) assert profile_visibilities.slim == pytest.approx(fit.profile_visibilities.slim) profile_subtracted_visibilities = ( interferometer_7.visibilities - profile_visibilities ) assert profile_subtracted_visibilities.slim == pytest.approx( fit.profile_subtracted_visibilities.slim ) mapper = pix.mapper_from_grid_and_sparse_grid( grid=interferometer_7.grid, settings=ag.SettingsPixelization(use_border=False), ) inversion = inversions.InversionInterferometerMatrix.from_data_mapper_and_regularization( visibilities=profile_subtracted_visibilities, noise_map=interferometer_7.noise_map, transformer=interferometer_7.transformer, mapper=mapper, regularization=reg, ) model_visibilities = ( profile_visibilities + inversion.mapped_reconstructed_visibilities ) assert model_visibilities.slim == pytest.approx(fit.model_visibilities.slim) residual_map = ag.util.fit.residual_map_from( data=interferometer_7.visibilities, model_data=model_visibilities ) assert residual_map.slim == pytest.approx(fit.residual_map.slim) normalized_residual_map = ag.util.fit.normalized_residual_map_complex_from( residual_map=residual_map, noise_map=interferometer_7.noise_map ) assert normalized_residual_map.slim == pytest.approx( fit.normalized_residual_map.slim ) chi_squared_map = ag.util.fit.chi_squared_map_complex_from( residual_map=residual_map, noise_map=interferometer_7.noise_map ) assert chi_squared_map.slim == pytest.approx(fit.chi_squared_map.slim) chi_squared = ag.util.fit.chi_squared_complex_from( chi_squared_map=chi_squared_map ) noise_normalization = ag.util.fit.noise_normalization_complex_from( noise_map=interferometer_7.noise_map ) log_likelihood = ag.util.fit.log_likelihood_from( chi_squared=chi_squared, noise_normalization=noise_normalization ) assert log_likelihood == pytest.approx(fit.log_likelihood, 1e-4) log_likelihood_with_regularization = ag.util.fit.log_likelihood_with_regularization_from( chi_squared=chi_squared, regularization_term=inversion.regularization_term, noise_normalization=noise_normalization, ) assert log_likelihood_with_regularization == pytest.approx( fit.log_likelihood_with_regularization, 1e-4 ) log_evidence = ag.util.fit.log_evidence_from( chi_squared=chi_squared, regularization_term=inversion.regularization_term, log_curvature_regularization_term=inversion.log_det_curvature_reg_matrix_term, log_regularization_term=inversion.log_det_regularization_matrix_term, noise_normalization=noise_normalization, ) assert log_evidence == fit.log_evidence assert log_evidence == fit.figure_of_merit mapped_reconstructed_image = ag.util.inversion.mapped_reconstructed_data_from( mapping_matrix=fit.inversion.mapper.mapping_matrix, reconstruction=fit.inversion.reconstruction, ) assert ( fit.inversion.mapped_reconstructed_image.slim == mapped_reconstructed_image ).all()
def make_fit_interferometer_x2_galaxy_inversion_7x7(): return ag.FitInterferometer( interferometer=make_interferometer_7(), plane=make_plane_x2_galaxy_inversion_7x7(), )
def test__simulate_interferometer_data_and_fit__chi_squared_is_0__noise_normalization_correct( ): grid = ag.Grid2D.uniform(shape_native=(51, 51), pixel_scales=0.1, sub_size=2) 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.0), ) 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.SimulatorInterferometer( uv_wavelengths=np.ones(shape=(7, 2)), transformer_class=ag.TransformerDFT, exposure_time=300.0, noise_if_add_noise_false=1.0, noise_sigma=None, ) interferometer = simulator.from_plane_and_grid(plane=plane, 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 = ag.Mask2D.unmasked(shape_native=(51, 51), pixel_scales=0.1, sub_size=2) interferometer = ag.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, settings=ag.SettingsInterferometer(grid_class=ag.Grid2D, transformer_class=ag.TransformerDFT, sub_size=2), ) plane = ag.Plane(galaxies=[lens_galaxy, source_galaxy]) fit = ag.FitInterferometer( interferometer=interferometer, plane=plane, settings_pixelization=ag.SettingsPixelization(use_border=False), ) assert fit.chi_squared == pytest.approx(0.0) pix = ag.pix.Rectangular(shape=(7, 7)) reg = ag.reg.Constant(coefficient=0.0001) 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.0), ) source_galaxy = ag.Galaxy(redshift=1.0, pixelization=pix, regularization=reg) plane = ag.Plane(galaxies=[lens_galaxy, source_galaxy]) fit = ag.FitInterferometer( interferometer=interferometer, plane=plane, settings_pixelization=ag.SettingsPixelization(use_border=False), ) assert abs(fit.chi_squared) < 1.0e-4 file_path = path.join("{}".format(path.dirname(path.realpath(__file__))), "data_temp") shutil.rmtree(file_path, ignore_errors=True)
def make_fit_interferometer_7x7(): return ag.FitInterferometer(interferometer=make_interferometer_7(), plane=make_plane_7x7())