Source code for lenstronomy.Cosmo._cosmo_interp_astropy_v5
import astropy
from scipy.integrate import quad
if float(astropy.__version__[0]) < 5.0:
Warning(
"This routines are only supported for astropy version >=5. Current version is %s."
% astropy.__version__
)
elif float(astropy.__version__[0]) < 7.0:
from astropy.cosmology.utils import vectorize_redshift_method
else:
from astropy.cosmology._src.utils import vectorize_redshift_method
# from astropy.cosmology._utils import vectorize_redshift_method
[docs]
class CosmoInterp(object):
"""Class which interpolates the comoving transfer distance and then computes angular
diameter distances from it This class is modifying the astropy.cosmology
routines."""
[docs]
def __init__(self, cosmo):
"""
:param cosmo: astropy.cosmology instance (version 4.0 as private functions need to be supported)
"""
self._cosmo = cosmo
def _integral_comoving_distance_z1z2(self, z1, z2):
"""Comoving line-of-sight distance in Mpc between objects at redshifts ``z1``
and ``z2``. The comoving distance along the line-of-sight between two objects
remains constant with time for objects in the Hubble flow.
Parameters
----------
z1, z2 : Quantity-like ['redshift'] or array-like
Input redshifts.
Returns
-------
d : `~astropy.units.Quantity` ['length']
Comoving distance in Mpc between each input redshift.
"""
return (
self._cosmo.hubble_distance
* self._integral_comoving_distance_z1z2_scalar(z1, z2)
)
@vectorize_redshift_method(nin=2)
def _integral_comoving_distance_z1z2_scalar(self, z1, z2):
"""Comoving line-of-sight distance between objects at redshifts ``z1`` and
``z2``. Value in Mpc.
The comoving distance along the line-of-sight between two objects
remains constant with time for objects in the Hubble flow.
Parameters
----------
z1, z2 : Quantity-like ['redshift'], array-like, or `~numbers.Number`
Input redshifts.
Returns
-------
d : float or ndarray
Comoving distance in Mpc between each input redshift.
Returns `float` if input scalar, `~numpy.ndarray` otherwise.
"""
return quad(
self._cosmo._inv_efunc_scalar,
z1,
z2,
args=self._cosmo._inv_efunc_scalar_args,
)[0]