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

1""" 

2Wrappers to :code:`Astropy` functionality for specifying the cosmology to use. 

3""" 

4 

5DEFAULT_COSMOLOGY = None 

6COSMOLOGY = [None, str(None)] 

7 

8 

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] 

15 

16 

17def get_cosmology(cosmology=None): 

18 """ 

19 Get an instance of a astropy.cosmology.FLRW subclass. 

20 

21 To avoid repeatedly instantiating the same class, test if it is the same 

22 as the last used cosmology. 

23 

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" 

31 

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 

44 

45 

46def set_cosmology(cosmology=None): 

47 """ 

48 Set an instance of a astropy.cosmology.FLRW subclass as the default 

49 cosmology. 

50 

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) 

82 

83 

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`. 

88 

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