Source code for astropy.cosmology._src.traits.curvature

# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""Global Curvature.

This is private API. See `~astropy.cosmology.traits` for public API.

"""

__all__ = ["CurvatureComponent"]

import abc

import numpy as np
from numpy.typing import ArrayLike, NDArray

from astropy.cosmology._src.utils import aszarr, deprecated_keywords
from astropy.units import Quantity


[docs] class CurvatureComponent: """The object has attributes and methods related to the global curvature. This is a trait class; it is not meant to be instantiated directly, but instead to be used as a mixin to other classes. """ @property @abc.abstractmethod def Ok0(self) -> float | np.floating: """Omega curvature; the effective curvature density/critical density at z=0.""" raise NotImplementedError @property @abc.abstractmethod def is_flat(self) -> bool: """Return `bool`; `True` if the cosmology is globally flat.""" raise NotImplementedError
[docs] @deprecated_keywords("z", since="7.0") def Ok(self, z: Quantity | ArrayLike) -> NDArray[np.floating]: """Return the equivalent density parameter for curvature at redshift ``z``. Parameters ---------- z : Quantity-like ['redshift'], array-like Input redshift. .. versionchanged:: 7.0 Passing z as a keyword argument is deprecated. Returns ------- Ok : ndarray The equivalent density parameter for curvature at each redshift. .. versionchanged:: 7.2 Always returns a numpy object, never a `float`. Examples -------- >>> import numpy as np >>> from astropy.cosmology import Planck18, units as cu >>> Planck18.Ok(2) array(0.) >>> Planck18.Ok([1, 2]) array([0., 0.]) >>> Planck18.Ok(np.array([2])) array([0.]) >>> Planck18.Ok(2 * cu.redshift) array(0.) >>> cosmo = Planck18.clone(Ode0=0.71, to_nonflat=True) >>> cosmo.Ok0 np.float64(-0.021153694455455927) >>> cosmo.Ok(100) np.float64(-0.0006557825253017665) """ z = aszarr(z) if self.Ok0 == 0: # Common enough to be worth checking explicitly return np.zeros(getattr(z, "shape", ())) return self.Ok0 * (z + 1.0) ** 2 * self.inv_efunc(z) ** 2