Coverage for bilby/gw/cosmology.py: 100%
37 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-05-06 04:57 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-05-06 04:57 +0000
1"""
2Wrappers to :code:`Astropy` functionality for specifying the cosmology to use.
3"""
5DEFAULT_COSMOLOGY = None
6COSMOLOGY = [None, str(None)]
9def _set_default_cosmology():
10 from astropy import cosmology as cosmo
11 global DEFAULT_COSMOLOGY, COSMOLOGY
12 if DEFAULT_COSMOLOGY is None:
13 DEFAULT_COSMOLOGY = cosmo.Planck15
14 COSMOLOGY = [DEFAULT_COSMOLOGY, DEFAULT_COSMOLOGY.name]
17def get_cosmology(cosmology=None):
18 """
19 Get an instance of a astropy.cosmology.FLRW subclass.
21 To avoid repeatedly instantiating the same class, test if it is the same
22 as the last used cosmology.
24 Parameters
25 ==========
26 cosmology: astropy.cosmology.FLRW, str, dict
27 Description of cosmology, one of:
28 None - Use DEFAULT_COSMOLOGY
29 Instance of astropy.cosmology.FLRW subclass
30 String with name of known Astropy cosmology, e.g., "Planck13"
32 Returns
33 =======
34 cosmo: astropy.cosmology.FLRW
35 Cosmology instance
36 """
37 from astropy import cosmology as cosmo
38 _set_default_cosmology()
39 if cosmology is None:
40 cosmology = DEFAULT_COSMOLOGY
41 elif isinstance(cosmology, str):
42 cosmology = getattr(cosmo, cosmology)
43 return cosmology
46def set_cosmology(cosmology=None):
47 """
48 Set an instance of a astropy.cosmology.FLRW subclass as the default
49 cosmology.
51 Parameters
52 ==========
53 cosmology: astropy.cosmology.FLRW, str, dict
54 Description of cosmology, one of:
55 None - Use DEFAULT_COSMOLOGY
56 Instance of astropy.cosmology.FLRW subclass
57 String with name of known Astropy cosmology, e.g., "Planck13"
58 Dictionary with arguments required to instantiate the cosmology
59 class.
60 """
61 from astropy import cosmology as cosmo
62 _set_default_cosmology()
63 if cosmology is None:
64 cosmology = DEFAULT_COSMOLOGY
65 elif isinstance(cosmology, cosmo.FLRW):
66 cosmology = cosmology
67 elif isinstance(cosmology, str):
68 cosmology = getattr(cosmo, cosmology)
69 elif isinstance(cosmology, dict):
70 if 'Ode0' in cosmology.keys():
71 if 'w0' in cosmology.keys():
72 cosmology = cosmo.wCDM(**cosmology)
73 else:
74 cosmology = cosmo.LambdaCDM(**cosmology)
75 else:
76 cosmology = cosmo.FlatLambdaCDM(**cosmology)
77 COSMOLOGY[0] = cosmology
78 if cosmology.name is not None:
79 COSMOLOGY[1] = cosmology.name
80 else:
81 COSMOLOGY[1] = repr(cosmology)
84def z_at_value(func, fval, **kwargs):
85 """
86 Wrapped version of :code:`astropy.cosmology.z_at_value` to return float
87 rather than an :code:`astropy Quantity` as returned for :code:`astropy>=5`.
89 See https://docs.astropy.org/en/stable/api/astropy.cosmology.z_at_value.html#astropy.cosmology.z_at_value
90 for detailed documentation.
91 """
92 from astropy.cosmology import z_at_value
93 return z_at_value(func=func, fval=fval, **kwargs).value