def test__no_use_method__raises_exception( self, image_7x7, noise_map_7x7, sub_mask_7x7 ): gal_data_7x7 = aast.galaxy_data( image=image_7x7, noise_map=noise_map_7x7, pixel_scales=3.0 ) with pytest.raises(exc.GalaxyException): aast.masked_galaxy_data(galaxy_data=gal_data_7x7, mask=sub_mask_7x7)
def test__1x1_image__light_profile_fits_data_perfectly__lh_is_noise(self): image = aa.array.ones(shape_2d=(3, 3), pixel_scales=1.0) noise_map = aa.array.ones(shape_2d=(3, 3), pixel_scales=1.0) galaxy_data = aast.galaxy_data(image=image, noise_map=noise_map, pixel_scales=3.0) mask = aa.mask.manual( mask_2d=np.array([[True, True, True], [True, False, True], [True, True, True]]), pixel_scales=1.0, sub_size=1, ) g0 = MockGalaxy(value=1.0) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_image=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.model_galaxies == [g0] assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_convergence=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.model_galaxies == [g0] assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_potential=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.model_galaxies == [g0] assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_deflections_y=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.model_galaxies == [g0] assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_deflections_x=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.model_galaxies == [g0] assert fit.likelihood == -0.5 * np.log(2 * np.pi * 1.0)
def test__multiple_use_methods__raises_exception( self, image_7x7, noise_map_7x7, sub_mask_7x7 ): gal_data_7x7 = aast.galaxy_data( image=image_7x7, noise_map=noise_map_7x7, pixel_scales=3.0 ) with pytest.raises(exc.GalaxyException): aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True, use_convergence=True, ) with pytest.raises(exc.GalaxyException): aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True, use_potential=True, ) with pytest.raises(exc.GalaxyException): aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True, use_deflections_y=True, ) with pytest.raises(exc.GalaxyException): aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True, use_convergence=True, use_potential=True, ) with pytest.raises(exc.GalaxyException): aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True, use_convergence=True, use_potential=True, use_deflections_x=True, )
def test__convergence(self, gal_data_7x7, sub_mask_7x7): galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_convergence=True) galaxy = aast.Galaxy( redshift=0.5, mass=aast.mp.SphericalIsothermal(centre=(1.0, 2.0), einstein_radius=1.0), ) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[galaxy]) assert fit.model_galaxies == [galaxy] model_data = galaxy.convergence_from_grid(grid=galaxy_fit_data.grid) residual_map = aa.util.fit.residual_map_from_data_and_model_data( data=galaxy_fit_data.image, model_data=model_data.in_1d_binned) assert residual_map == pytest.approx(fit.residual_map, 1e-4) chi_squared_map = aa.util.fit.chi_squared_map_from_residual_map_and_noise_map( residual_map=residual_map, noise_map=galaxy_fit_data.noise_map) assert chi_squared_map == pytest.approx(fit.chi_squared_map, 1e-4) chi_squared = aa.util.fit.chi_squared_from_chi_squared_map( chi_squared_map=chi_squared_map) noise_normalization = aa.util.fit.noise_normalization_from_noise_map( noise_map=galaxy_fit_data.noise_map) likelihood = aa.util.fit.likelihood_from_chi_squared_and_noise_normalization( chi_squared=chi_squared, noise_normalization=noise_normalization) assert likelihood == pytest.approx(fit.likelihood, 1e-4)
def test__grid(self, gal_data_7x7, sub_mask_7x7, sub_grid_7x7): galaxy_fit_data = aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True ) assert (galaxy_fit_data.grid == sub_grid_7x7).all()
def test__image_noise_map_and_mask(self, gal_data_7x7, sub_mask_7x7): galaxy_fit_data = aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True ) assert galaxy_fit_data.pixel_scales == (1.0, 1.0) assert (galaxy_fit_data.galaxy_data.image.in_2d == np.ones((7, 7))).all() assert ( galaxy_fit_data.galaxy_data.noise_map.in_2d == 2.0 * np.ones((7, 7)) ).all() assert (galaxy_fit_data.image.in_1d == np.ones(9)).all() assert (galaxy_fit_data.noise_map.in_1d == 2.0 * np.ones(9)).all() assert ( galaxy_fit_data.mask == np.array( [ [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, False, False, False, True, True], [True, True, False, False, False, True, True], [True, True, False, False, False, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], ] ) ).all() assert ( galaxy_fit_data.image.in_2d == np.array( [ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ] ) ).all() assert ( galaxy_fit_data.noise_map.in_2d == np.array( [ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ] ) ).all()
def test__pixel_scale_interpolation_grid(self, image_7x7, sub_mask_7x7): noise_map = aa.array.full(fill_value=2.0, shape_2d=(7, 7), pixel_scales=3.0) gal_data_7x7 = aast.galaxy_data( image=image_7x7, noise_map=noise_map, pixel_scales=3.0 ) gal_data_7x7 = aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, pixel_scale_interpolation_grid=1.0, use_image=True, ) grid = aa.masked_grid.from_mask(mask=sub_mask_7x7) new_grid = grid.new_grid_with_interpolator(pixel_scale_interpolation_grid=1.0) assert (gal_data_7x7.grid == new_grid).all() assert (gal_data_7x7.grid.interpolator.vtx == new_grid.interpolator.vtx).all() assert (gal_data_7x7.grid.interpolator.wts == new_grid.interpolator.wts).all()
def test__1x2_image__noise_not_1__alls_correct(self): image = aa.array.full(fill_value=5.0, shape_2d=(3, 4), pixel_scales=1.0) image[6] = 4.0 noise_map = aa.array.full(fill_value=2.0, shape_2d=(3, 4), pixel_scales=1.0) galaxy_data = aast.galaxy_data(image=image, noise_map=noise_map, pixel_scales=3.0) mask = aa.mask.manual( mask_2d=np.array([ [True, True, True, True], [True, False, False, True], [True, True, True, True], ]), pixel_scales=1.0, sub_size=1, ) g0 = MockGalaxy(value=1.0, shape=2) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_image=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.model_galaxies == [g0] assert fit.chi_squared == (25.0 / 4.0) assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0 assert fit.likelihood == -0.5 * ( (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2)) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_convergence=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.model_galaxies == [g0] assert fit.chi_squared == (25.0 / 4.0) assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0 assert fit.likelihood == -0.5 * ( (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2)) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_potential=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.model_galaxies == [g0] assert fit.chi_squared == (25.0 / 4.0) assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0 assert fit.likelihood == -0.5 * ( (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2)) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_deflections_y=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.chi_squared == (25.0 / 4.0) assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0 assert fit.likelihood == -0.5 * ( (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2)) galaxy_fit_data = aast.masked_galaxy_data(galaxy_data=galaxy_data, mask=mask, use_deflections_x=True) fit = aast.fit_galaxy(galaxy_data=galaxy_fit_data, model_galaxies=[g0]) assert fit.chi_squared == (25.0 / 4.0) assert fit.reduced_chi_squared == (25.0 / 4.0) / 2.0 assert fit.likelihood == -0.5 * ( (25.0 / 4.0) + 2.0 * np.log(2 * np.pi * 2.0**2))
def make_gal_fit_data_7x7_deflections_x(gal_data_7x7, sub_mask_7x7): return aast.masked_galaxy_data(galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_deflections_x=True)
def make_gal_fit_data_7x7_potential(gal_data_7x7, sub_mask_7x7): return aast.masked_galaxy_data(galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_potential=True)
def make_gal_fit_data_7x7_convergence(gal_data_7x7, sub_mask_7x7): return aast.masked_galaxy_data(galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_convergence=True)
def make_gal_fit_data_7x7_image(gal_data_7x7, sub_mask_7x7): return aast.masked_galaxy_data(galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True)
def test__gal_data_7x7_deflections_x(self, gal_data_7x7, sub_mask_7x7): galaxy_fit_data = aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_deflections_x=True ) assert galaxy_fit_data.pixel_scales == (1.0, 1.0) assert (galaxy_fit_data.galaxy_data.image.in_2d == np.ones((7, 7))).all() assert ( galaxy_fit_data.galaxy_data.noise_map.in_2d == 2.0 * np.ones((7, 7)) ).all() assert (galaxy_fit_data.image.in_1d == np.ones(9)).all() assert (galaxy_fit_data.noise_map.in_1d == 2.0 * np.ones(9)).all() assert ( galaxy_fit_data.mask == np.array( [ [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, False, False, False, True, True], [True, True, False, False, False, True, True], [True, True, False, False, False, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], ] ) ).all() assert ( galaxy_fit_data.image.in_2d == np.array( [ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ] ) ).all() assert ( galaxy_fit_data.noise_map.in_2d == np.array( [ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ] ) ).all() galaxy = mock_galaxy.MockGalaxy(value=1, shape=36) deflections_x = galaxy_fit_data.profile_quantity_from_galaxies( galaxies=[galaxy] ) assert (deflections_x.in_1d_binned == np.ones(9)).all() galaxy = aast.Galaxy( redshift=0.5, mass=aast.mp.SphericalIsothermal(einstein_radius=1.0) ) deflections_gal = galaxy.deflections_from_grid(grid=galaxy_fit_data.grid) deflections_gal = np.asarray( [ galaxy_fit_data.grid.mapping.array_stored_1d_binned_from_sub_array_1d( deflections_gal[:, 0] ), galaxy_fit_data.grid.mapping.array_stored_1d_binned_from_sub_array_1d( deflections_gal[:, 1] ), ] ).T deflections_gd = galaxy_fit_data.profile_quantity_from_galaxies( galaxies=[galaxy] ) assert (deflections_gal[:, 1] == deflections_gd.in_1d_binned).all()
def test__gal_data_7x7_potential(self, gal_data_7x7, sub_mask_7x7): galaxy_fit_data = aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_potential=True ) assert galaxy_fit_data.pixel_scales == (1.0, 1.0) assert (galaxy_fit_data.galaxy_data.image.in_2d == np.ones((7, 7))).all() assert ( galaxy_fit_data.galaxy_data.noise_map.in_2d == 2.0 * np.ones((7, 7)) ).all() assert (galaxy_fit_data.image.in_1d == np.ones(9)).all() assert (galaxy_fit_data.noise_map.in_1d == 2.0 * np.ones(9)).all() assert ( galaxy_fit_data.mask == np.array( [ [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, False, False, False, True, True], [True, True, False, False, False, True, True], [True, True, False, False, False, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], ] ) ).all() assert ( galaxy_fit_data.image.in_2d == np.array( [ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ] ) ).all() assert ( galaxy_fit_data.noise_map.in_2d == np.array( [ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ] ) ).all() galaxy = mock_galaxy.MockGalaxy(value=1, shape=36) potential = galaxy_fit_data.profile_quantity_from_galaxies(galaxies=[galaxy]) assert (potential.in_1d_binned == np.ones(9)).all() galaxy = aast.Galaxy( redshift=0.5, mass=aast.mp.SphericalIsothermal(einstein_radius=1.0) ) potential_gal = galaxy.potential_from_grid(grid=galaxy_fit_data.grid) potential_gd = galaxy_fit_data.profile_quantity_from_galaxies(galaxies=[galaxy]) assert (potential_gal == potential_gd).all()
def test__gal_data_7x7_image(self, gal_data_7x7, sub_mask_7x7): galaxy_fit_data = aast.masked_galaxy_data( galaxy_data=gal_data_7x7, mask=sub_mask_7x7, use_image=True ) assert galaxy_fit_data.pixel_scales == (1.0, 1.0) assert (galaxy_fit_data.galaxy_data.image.in_2d == np.ones((7, 7))).all() assert ( galaxy_fit_data.galaxy_data.noise_map.in_2d == 2.0 * np.ones((7, 7)) ).all() assert (galaxy_fit_data.image.in_1d == np.ones(9)).all() assert (galaxy_fit_data.noise_map.in_1d == 2.0 * np.ones(9)).all() assert ( galaxy_fit_data.mask == np.array( [ [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, False, False, False, True, True], [True, True, False, False, False, True, True], [True, True, False, False, False, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True], ] ) ).all() assert ( galaxy_fit_data.image.in_2d == np.array( [ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ] ) ).all() assert ( galaxy_fit_data.noise_map.in_2d == np.array( [ [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ] ) ).all() galaxy = mock_galaxy.MockGalaxy(value=1, shape=36) image = galaxy_fit_data.profile_quantity_from_galaxies(galaxies=[galaxy]) assert (image.in_1d_binned == np.ones(9)).all() galaxy = aast.Galaxy(redshift=0.5, light=aast.lp.SphericalSersic(intensity=1.0)) image_gal = galaxy.profile_image_from_grid(grid=galaxy_fit_data.grid) image_gd = galaxy_fit_data.profile_quantity_from_galaxies(galaxies=[galaxy]) assert (image_gal == image_gd).all()