Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if fastell4py_bool:
npt.assert_almost_equal(f_xx, 0.41789957732890953, decimal=7)
npt.assert_almost_equal(f_yy, 0.14047593655054141, decimal=7)
npt.assert_almost_equal(f_xy, -0.18560737698052343, decimal=7)
else:
npt.assert_almost_equal(f_xx, 0, decimal=7)
npt.assert_almost_equal(f_yy, 0, decimal=7)
npt.assert_almost_equal(f_xy, 0, decimal=7)
x = 1.
y = 2.
phi_E = 1.
gamma = 1.9
q = 0.9
phi_G = 1.
e1, e2 = param_util.phi_q2_ellipticity(phi_G, q)
a = np.zeros_like(x)
f_xx, f_yy,f_xy = self.PEMD.hessian(x, y, phi_E, gamma, e1, e2)
if fastell4py_bool:
npt.assert_almost_equal(f_xx, 0.41789957732890953, decimal=7)
npt.assert_almost_equal(f_yy, 0.14047593655054141, decimal=7)
npt.assert_almost_equal(f_xy, -0.18560737698052343, decimal=7)
else:
npt.assert_almost_equal(f_xx, 0, decimal=7)
npt.assert_almost_equal(f_yy, 0, decimal=7)
npt.assert_almost_equal(f_xy, 0, decimal=7)
a += f_xx
x = np.array([1,3,4])
y = np.array([2,1,1])
values = self.PEMD.hessian(x, y, phi_E, gamma, e1, e2)
print(values, 'values')
if fastell4py_bool:
def test_derivatives(self):
"""
:return:
"""
triplechameleon = TripleChameleon()
chameleon = Chameleon()
x = np.linspace(0.1, 10, 10)
phi_G, q = 0.3, 0.8
ratio12 = 2.
ratio13 = 3
e1, e2 = param_util.phi_q2_ellipticity(phi_G, q)
kwargs_light = {'alpha_1': 1., 'ratio12': ratio12, 'ratio13': ratio13, 'w_c1': .5, 'w_t1': 1., 'e11': e1,
'e21': e2,
'w_c2': .1, 'w_t2': .5, 'e12': e1, 'e22': e2,
'w_c3': .1, 'w_t3': .5, 'e13': e1, 'e23': e2
}
amp1 = 1. / (1. + 1. / ratio12 + 1. / ratio13)
amp2 = amp1 / ratio12
amp3 = amp1 / ratio13
kwargs_1 = {'alpha_1': amp1, 'w_c': .5, 'w_t': 1., 'e1': e1, 'e2': e2}
kwargs_2 = {'alpha_1': amp2, 'w_c': .1, 'w_t': .5, 'e1': e1, 'e2': e2}
kwargs_3 = {'alpha_1': amp3, 'w_c': .1, 'w_t': .5, 'e1': e1, 'e2': e2}
f_x, f_y = triplechameleon.derivatives(x=x, y=1., **kwargs_light)
f_x1, f_y1 = chameleon.derivatives(x=x, y=1., **kwargs_1)
f_x2, f_y2 = chameleon.derivatives(x=x, y=1., **kwargs_2)
f_x3, f_y3 = chameleon.derivatives(x=x, y=1., **kwargs_3)
def test_derivatives(self):
x = np.array([1])
y = np.array([2])
theta_E = 1.
q = 0.7
phi_G = 1.
e1, e2 = param_util.phi_q2_ellipticity(phi_G, q)
values = self.sie.derivatives(x, y, theta_E, e1, e2)
gamma = 2
values_spemd = self.spemd.derivatives(x, y, theta_E, gamma, e1, e2)
assert values == values_spemd
values = self.sie_nie.derivatives(x, y, theta_E, e1, e2)
s_scale = 0.0000001
values_spemd = self.nie.derivatives(x, y, theta_E, e1, e2, s_scale)
npt.assert_almost_equal(values, values_spemd, decimal=6)
sigma_bkg = .05 # background noise per pixel
exp_time = 100 # exposure time (arbitrary units, flux per pixel is in units #photons/exp_time unit)
numPix = 100 # cutout pixel size
deltaPix = 0.05 # pixel size in arcsec (area per pixel = deltaPix**2)
fwhm = 0.5 # full width half max of PSF
# PSF specification
kwargs_data = sim_util.data_configure_simple(numPix, deltaPix, exp_time, sigma_bkg)
data_class = ImageData(**kwargs_data)
kwargs_psf = {'psf_type': 'GAUSSIAN', 'fwhm': fwhm, 'truncation': 5, 'pixel_size': deltaPix}
psf_class = PSF(**kwargs_psf)
# 'EXTERNAL_SHEAR': external shear
kwargs_shear = {'gamma1': 0.01, 'gamma2': 0.01} # gamma_ext: shear strength, psi_ext: shear angel (in radian)
phi, q = 0.2, 0.8
e1, e2 = param_util.phi_q2_ellipticity(phi, q)
kwargs_spemd = {'theta_E': 1., 'gamma': 1.8, 'center_x': 0, 'center_y': 0, 'e1': e1, 'e2': e2}
lens_model_list = ['SPEP', 'SHEAR']
self.kwargs_lens = [kwargs_spemd, kwargs_shear]
lens_model_class = LensModel(lens_model_list=lens_model_list)
# list of light profiles (for lens and source)
# 'SERSIC': spherical Sersic profile
kwargs_sersic = {'amp': 1., 'R_sersic': 0.1, 'n_sersic': 2, 'center_x': 0, 'center_y': 0}
# 'SERSIC_ELLIPSE': elliptical Sersic profile
phi, q = 0.2, 0.9
e1, e2 = param_util.phi_q2_ellipticity(phi, q)
kwargs_sersic_ellipse = {'amp': 1., 'R_sersic': .6, 'n_sersic': 7, 'center_x': 0, 'center_y': 0,
'e1': e1, 'e2': e2}
lens_light_model_list = ['SERSIC']
self.kwargs_lens_light = [kwargs_sersic]
def test_realistic(self):
"""
realistic test example
:return:
"""
light_profile_list = ['HERNQUIST_ELLIPSE', 'PJAFFE_ELLIPSE']
phi, q = 0.74260706384506325, 0.46728323131925864
e1, e2 = param_util.phi_q2_ellipticity(phi, q)
phi2, q2 = -0.33379268413794494, 0.66582356813012267
e12, e22 = param_util.phi_q2_ellipticity(phi2, q2)
kwargs_light = [{'Rs': 0.10535462602138289, 'e1': e1, 'e2': e2, 'center_x': -0.02678473951679429, 'center_y': 0.88691126347462712, 'amp': 3.7114695634960109},
{'Rs': 0.44955054610388684, 'e1': e12, 'e2': e22, 'center_x': 0.019536801118136753, 'center_y': 0.0218888643537157, 'Ra': 0.0010000053334891974, 'amp': 967.00280526319796}]
lightProfile = LightProfile(light_profile_list)
R = 0.01
light2d = lightProfile.light_2d(R=R, kwargs_list=kwargs_light)
out = integrate.quad(lambda x: lightProfile.light_3d(np.sqrt(R**2+x**2), kwargs_light), 0, 100)
print(out, 'out')
npt.assert_almost_equal(light2d/(out[0]*2), 1., decimal=3)
f_x_e, f_y_e = self.nfw_e.derivatives(x, y, Rs, alpha_Rs, r_core, e1, e2)
npt.assert_almost_equal(f_x[0], f_x_e[0], decimal=5)
npt.assert_almost_equal(f_y[0], f_y_e[0], decimal=5)
x = np.array([0])
y = np.array([0])
alpha_Rs = 0
f_x, f_y = self.nfw_e.derivatives(x, y, Rs, alpha_Rs, r_core, e1, e2)
npt.assert_almost_equal(f_x[0], 0, decimal=5)
npt.assert_almost_equal(f_y[0], 0, decimal=5)
x = np.array([1,3,4])
y = np.array([2,1,1])
alpha_Rs = 1.
q = .8
phi_G = 0
e1, e2 = param_util.phi_q2_ellipticity(phi_G, q)
values = self.nfw_e.derivatives(x, y, Rs, alpha_Rs, r_core, e1, e2)
npt.assert_almost_equal(values[0][0], 0.3867896894988756, decimal=5)
npt.assert_almost_equal(values[1][0], 1.1603690684966268, decimal=5)
npt.assert_almost_equal(values[0][1], 0.9371571936062841, decimal=5)
npt.assert_almost_equal(values[1][1], 0.46857859680314207, decimal=5)
def test_function(self):
x = np.array([1])
y = np.array([2])
Rs = 1.
alpha_Rs = 1.
q = 1.
phi_G = 0
e1, e2 = param_util.phi_q2_ellipticity(phi_G, q)
values = self.nfw.function(x, y, Rs, alpha_Rs)
values_e = self.nfw_e.function(x, y, Rs, alpha_Rs, e1, e2)
npt.assert_almost_equal(values[0], values_e[0], decimal=5)
x = np.array([0])
y = np.array([0])
q = .8
phi_G = 0
e1, e2 = param_util.phi_q2_ellipticity(phi_G, q)
values = self.nfw_e.function(x, y, Rs, alpha_Rs,e1, e2)
npt.assert_almost_equal(values[0], 0, decimal=4)
x = np.array([2,3,4])
y = np.array([1,1,1])
values = self.nfw_e.function(x, y, Rs, alpha_Rs, e1, e2)
npt.assert_almost_equal(values[0], 1.8827504143588476, decimal=5)
def test_velocity_dispersion(self):
z_lens = 0.5
z_source = 1.5
kwargs_model = {'lens_model_list': ['SPEP', 'SHEAR', 'SIS', 'SIS', 'SIS'],
'lens_light_model_list': ['SERSIC_ELLIPSE', 'SERSIC']}
theta_E = 1.5
gamma = 1.8
kwargs_lens = [{'theta_E': theta_E, 'e1': 0, 'center_x': -0.044798916793300093, 'center_y': 0.0054408937891703788, 'e2': 0, 'gamma': gamma},
{'e1': -0.050871696555354479, 'e2': -0.0061601733920590464}, {'center_y': 2.79985456, 'center_x': -2.32019894,
'theta_E': 0.28165274714097904}, {'center_y': 3.83985426,
'center_x': -2.32019933, 'theta_E': 0.0038110812674654873},
{'center_y': 4.31985428, 'center_x': -1.68019931, 'theta_E': 0.45552039839735037}]
phi, q = -0.52624727893702705, 0.79703498156919605
e1, e2 = param_util.phi_q2_ellipticity(phi, q)
kwargs_lens_light = [{'n_sersic': 1.1212528655709217,
'center_x': -0.019674496231393473,
'e1': e1, 'e2': e2, 'amp': 1.1091367792010356, 'center_y': 0.076914975081560991,
'R_sersic': 0.42691611878867058},
{'R_sersic': 0.03025682660635394, 'amp': 139.96763298885992, 'n_sersic': 1.90000008624093865,
'center_x': -0.019674496231393473, 'center_y': 0.076914975081560991}]
r_ani = 0.62
kwargs_anisotropy = {'r_ani': r_ani}
R_slit = 3.8
dR_slit = 1.
aperture_type = 'slit'
kwargs_aperture = {'aperture_type': aperture_type, 'center_ra': 0, 'width': dR_slit, 'length': R_slit, 'angle': 0, 'center_dec': 0}
psf_fwhm = 0.7
kwargs_psf = {'psf_type': 'GAUSSIAN', 'fwhm': psf_fwhm}
anisotropy_model = 'OM'
# 'EXERNAL_SHEAR': external shear
kwargs_shear = {'gamma1': 0.01, 'gamma2': 0.01} # gamma_ext: shear strength, psi_ext: shear angel (in radian)
e1, e2 = param_util.phi_q2_ellipticity(0.2, 0.8)
kwargs_spemd = {'theta_E': 1., 'gamma': 1.8, 'center_x': 0, 'center_y': 0, 'e1': e1, 'e2': e2}
lens_model_list = ['SPEP', 'SHEAR']
self.kwargs_lens = [kwargs_spemd, kwargs_shear]
lens_model_class = LensModel(lens_model_list=lens_model_list)
self.LensModel = lens_model_class
# list of light profiles (for lens and source)
# 'SERSIC': spherical Sersic profile
kwargs_sersic = {'amp': 1., 'R_sersic': 0.1, 'n_sersic': 2, 'center_x': 0, 'center_y': 0}
# 'SERSIC_ELLIPSE': elliptical Sersic profile
phi, q = 0.2, 0.9
e1, e2 = param_util.phi_q2_ellipticity(phi, q)
kwargs_sersic_ellipse = {'amp': 1., 'R_sersic': .6, 'n_sersic': 7, 'center_x': 0, 'center_y': 0,
'e1': e1, 'e2': e2}
lens_light_model_list = ['SERSIC']
self.kwargs_lens_light = [kwargs_sersic]
lens_light_model_class = LightModel(light_model_list=lens_light_model_list)
source_model_list = ['SERSIC_ELLIPSE']
self.kwargs_source = [kwargs_sersic_ellipse]
source_model_class = LightModel(light_model_list=source_model_list)
self.kwargs_ps = [{'ra_source': 0.0, 'dec_source': 0.0,
'source_amp': 1.}] # quasar point source position in the source plane and intrinsic brightness
point_source_list = ['SOURCE_POSITION']
point_source_class = PointSource(point_source_type_list=point_source_list, fixed_magnification_list=[True])
kwargs_numerics = {'supersampling_factor': 1}
imageModel = ImageModel(data_class, psf_class, lens_model_class, source_model_class,
lens_light_model_class,
[c10, c01] = x
coeffs = list(kwargs_list[0]['coeffs'])
coeffs[1: 3] = [c10, c01]
kwargs_list[0]['coeffs'] = coeffs
elif self._solver_type == 'THETA_E_PHI':
[theta_E, phi_G] = x
kwargs_list[0]['theta_E'] = theta_E
phi_G_no_sense, gamma_ext = param_util.shear_cartesian2polar(kwargs_list[1]['gamma1'], kwargs_list[1]['gamma2'])
gamma1, gamma2 = param_util.shear_polar2cartesian(phi_G, gamma_ext)
kwargs_list[1]['gamma1'] = gamma1
kwargs_list[1]['gamma2'] = gamma2
elif self._solver_type == 'THETA_E_ELLIPSE':
[theta_E, phi_G] = x
kwargs_list[0]['theta_E'] = theta_E
phi_G_no_sense, q = param_util.ellipticity2phi_q(kwargs_list[0]['e1'], kwargs_list[0]['e2'])
e1, e2 = param_util.phi_q2_ellipticity(phi_G, q)
kwargs_list[0]['e1'] = e1
kwargs_list[0]['e2'] = e2
else:
raise ValueError("Solver type %s not supported for 2-point solver!" % self._solver_type)
return kwargs_list