Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALSimulation 6.2.0.1-8a6b96f
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
test_enum_compatibility.py
Go to the documentation of this file.
1"""
2This script checks that the list of approximants
3has not been changed in a backward-incompatible way
4by reordering the Approximant enum.
5"""
6import sys
7import pytest
8import lalsimulation as lalsim
9
10known_approximants = {
11 'TaylorT1': 0,
12 'TaylorT2': 1,
13 'TaylorT3': 2,
14 'TaylorF1': 3,
15 'EccentricFD': 4,
16 'TaylorF2': 5,
17 'TaylorF2Ecc': 6,
18 'TaylorF2NLTides': 7,
19 'TaylorR2F4': 8,
20 'TaylorF2RedSpin': 9,
21 'TaylorF2RedSpinTidal': 10,
22 'PadeT1': 11,
23 'PadeF1': 12,
24 'EOB': 13,
25 'BCV': 14,
26 'BCVSpin': 15,
27 'SpinTaylorT1': 16,
28 'SpinTaylorT3': 18,
29 'SpinTaylorT4': 19,
30 'SpinTaylorT5': 20,
31 'SpinTaylorF2': 21,
32 'SpinTaylorFrameless': 22,
33 'SpinTaylor': 23,
34 'PhenSpinTaylor': 24,
35 'PhenSpinTaylorRD': 25,
36 'SpinQuadTaylor': 26,
37 'FindChirpSP': 27,
38 'FindChirpPTF': 28,
39 'GeneratePPN': 29,
40 'BCVC': 30,
41 'FrameFile': 31,
42 'AmpCorPPN': 32,
43 'NumRel': 33,
44 'NumRelNinja2': 34,
45 'Eccentricity': 35,
46 'EOBNR': 36,
47 'EOBNRv2': 37,
48 'EOBNRv2HM': 38,
49 'EOBNRv2_ROM': 39,
50 'EOBNRv2HM_ROM': 40,
51 'TEOBResum_ROM': 41,
52 'SEOBNRv1': 42,
53 'SEOBNRv2': 43,
54 'SEOBNRv2_opt': 44,
55 'SEOBNRv3': 45,
56 'SEOBNRv3_pert': 46,
57 'SEOBNRv3_opt': 47,
58 'SEOBNRv3_opt_rk4': 48,
59 'SEOBNRv4': 49,
60 'SEOBNRv4_opt': 50,
61 'SEOBNRv4P': 51,
62 'SEOBNRv4PHM': 52,
63 'SEOBNRv2T': 53,
64 'SEOBNRv4T': 54,
65 'SEOBNRv1_ROM_EffectiveSpin': 55,
66 'SEOBNRv1_ROM_DoubleSpin': 56,
67 'SEOBNRv2_ROM_EffectiveSpin': 57,
68 'SEOBNRv2_ROM_DoubleSpin': 58,
69 'SEOBNRv2_ROM_DoubleSpin_HI': 59,
70 'Lackey_Tidal_2013_SEOBNRv2_ROM': 60,
71 'SEOBNRv4_ROM': 61,
72 'SEOBNRv4HM_ROM': 62,
73 'SEOBNRv4_ROM_NRTidal': 63,
74 'SEOBNRv4_ROM_NRTidalv2': 64,
75 'SEOBNRv4_ROM_NRTidalv2_NSBH': 65,
76 'SEOBNRv4T_surrogate': 66,
77 'HGimri': 67,
78 'IMRPhenomA': 68,
79 'IMRPhenomB': 69,
80 'IMRPhenomFA': 70,
81 'IMRPhenomFB': 71,
82 'IMRPhenomC': 72,
83 'IMRPhenomD': 73,
84 'IMRPhenomD_NRTidal': 74,
85 'IMRPhenomD_NRTidalv2': 75,
86 'IMRPhenomNSBH': 76,
87 'IMRPhenomHM': 77,
88 'IMRPhenomP': 78,
89 'IMRPhenomPv2': 79,
90 'IMRPhenomPv2_NRTidal': 80,
91 'IMRPhenomPv2_NRTidalv2': 81,
92 'IMRPhenomFC': 82,
93 'TaylorEt': 83,
94 'TaylorT4': 84,
95 'EccentricTD': 85,
96 'TaylorN': 86,
97 'SpinTaylorT4Fourier': 87,
98 'SpinTaylorT5Fourier': 88,
99 'SpinDominatedWf': 89,
100 'NR_hdf5': 90,
101 'NRSur4d2s': 91,
102 'NRSur7dq2': 92,
103 'NRSur7dq4': 93,
104 'SEOBNRv4HM': 94,
105 'NRHybSur3dq8': 95,
106 'IMRPhenomXAS': 96,
107 'IMRPhenomXHM': 97,
108 'IMRPhenomPv3': 98,
109 'IMRPhenomPv3HM': 99,
110 'IMRPhenomXP': 100,
111 'IMRPhenomXPHM': 101,
112 'TEOBResumS': 102,
113 'IMRPhenomT': 103,
114 'IMRPhenomTHM': 104,
115 'IMRPhenomTP': 105,
116 'IMRPhenomTPHM': 106,
117 'SEOBNRv5_ROM': 107,
118 'SEOBNRv4HM_PA': 108,
119 'pSEOBNRv4HM_PA': 109,
120 'IMRPhenomXAS_NRTidalv2': 110,
121 'IMRPhenomXP_NRTidalv2': 111,
122 'IMRPhenomXO4a': 112,
123 'ExternalPython': 113,
124 'SEOBNRv5HM_ROM': 114,
125 'IMRPhenomXAS_NRTidalv3': 115,
126 'IMRPhenomXP_NRTidalv3': 116,
127 'SEOBNRv5_ROM_NRTidalv3': 117
128}
129
130@pytest.mark.parametrize("name, i", known_approximants.items())
131def test_approximant(name, i):
132 a = lalsim.GetApproximantFromString(name)
133 assert a == i, (
134 "The Approximant enum is modified in an non-backward-compatible way, "
135 "Approximant {name} is {a} but it should be {i}; "
136 "please append new approximants to the Approximants enum in LALSimInspiral.h, "
137 "rather than reordering the list".format(
138 i=i,
139 a=a,
140 name=name,
141 )
142 )
143
144
146 """
147 Function here for convenience if you need to regenerate the list
148 Not used in test
149 """
150 appx = {}
151 for i in range(lalsim.NumApproximants):
152 try:
153 appx[lalsim.GetStringFromApproximant(i)]=i
154 except RuntimeError:
155 # Integer which is not used in enum?
156 print('No approximant numbered {}'.format(i))
157 print(appx)
158 return appx
159
160if __name__ == '__main__':
161 args = sys.argv[1:] or ["-v", "-rs", "--junit-xml=junit-enum_compatibility.xml"]
162 sys.exit(pytest.main(args=[__file__] + args))
def regenerate_known_approximants()
Function here for convenience if you need to regenerate the list Not used in test.