GWFrames 2.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. gwframes-2.0.0/.gitignore +25 -0
  2. gwframes-2.0.0/.gitmodules +16 -0
  3. gwframes-2.0.0/CMakeLists.txt +101 -0
  4. gwframes-2.0.0/LICENSE +31 -0
  5. gwframes-2.0.0/PKG-INFO +187 -0
  6. gwframes-2.0.0/README.md +162 -0
  7. gwframes-2.0.0/cpp/Errors.hpp +35 -0
  8. gwframes-2.0.0/cpp/Interpolate.cpp +336 -0
  9. gwframes-2.0.0/cpp/Interpolate.hpp +90 -0
  10. gwframes-2.0.0/cpp/NoiseCurves/AdvLIGO_ZeroDet_HighP.ipp +6024 -0
  11. gwframes-2.0.0/cpp/NoiseCurves/AdvLIGO_ZeroDet_LowP.ipp +6023 -0
  12. gwframes-2.0.0/cpp/NoiseCurves/BHBH_20deg.txt +3000 -0
  13. gwframes-2.0.0/cpp/NoiseCurves/ConvertToProgram.pl +33 -0
  14. gwframes-2.0.0/cpp/NoiseCurves/High_Freq.txt +3000 -0
  15. gwframes-2.0.0/cpp/NoiseCurves/NO_SRM.txt +3000 -0
  16. gwframes-2.0.0/cpp/NoiseCurves/NSNS_Opt.txt +3000 -0
  17. gwframes-2.0.0/cpp/NoiseCurves/ZERO_DET_high_P.txt +3000 -0
  18. gwframes-2.0.0/cpp/NoiseCurves/ZERO_DET_low_P.txt +3000 -0
  19. gwframes-2.0.0/cpp/NoiseCurves.cpp +125 -0
  20. gwframes-2.0.0/cpp/NoiseCurves.hpp +39 -0
  21. gwframes-2.0.0/cpp/PNWaveforms.cpp +235 -0
  22. gwframes-2.0.0/cpp/PNWaveforms.hpp +86 -0
  23. gwframes-2.0.0/cpp/Scri.cpp +1169 -0
  24. gwframes-2.0.0/cpp/Scri.hpp +222 -0
  25. gwframes-2.0.0/cpp/Utilities.cpp +1247 -0
  26. gwframes-2.0.0/cpp/Utilities.hpp +129 -0
  27. gwframes-2.0.0/cpp/Waveforms.cpp +4084 -0
  28. gwframes-2.0.0/cpp/Waveforms.hpp +316 -0
  29. gwframes-2.0.0/cpp/WaveformsAtAPointFT.cpp +304 -0
  30. gwframes-2.0.0/cpp/WaveformsAtAPointFT.hpp +73 -0
  31. gwframes-2.0.0/cpp/Waveforms_BinaryOp.ipp +161 -0
  32. gwframes-2.0.0/cpp/bindings/bindings.hpp +61 -0
  33. gwframes-2.0.0/cpp/bindings/casters.hpp +246 -0
  34. gwframes-2.0.0/cpp/bindings/docstrings.hpp +6008 -0
  35. gwframes-2.0.0/cpp/bindings/module.cpp +75 -0
  36. gwframes-2.0.0/cpp/bindings/quaternions.cpp +255 -0
  37. gwframes-2.0.0/cpp/bindings/scri.cpp +213 -0
  38. gwframes-2.0.0/cpp/bindings/utilities.cpp +87 -0
  39. gwframes-2.0.0/cpp/bindings/waveforms.cpp +363 -0
  40. gwframes-2.0.0/cpp/fft.cpp +220 -0
  41. gwframes-2.0.0/cpp/fft.hpp +40 -0
  42. gwframes-2.0.0/extern/PostNewtonian/.gitignore +49 -0
  43. gwframes-2.0.0/extern/PostNewtonian/.gitmodules +4 -0
  44. gwframes-2.0.0/extern/PostNewtonian/C++/.gitignore +6 -0
  45. gwframes-2.0.0/extern/PostNewtonian/C++/EvolvePN.cpp +97 -0
  46. gwframes-2.0.0/extern/PostNewtonian/C++/EvolvePN_Q.cpp +97 -0
  47. gwframes-2.0.0/extern/PostNewtonian/C++/Makefile +56 -0
  48. gwframes-2.0.0/extern/PostNewtonian/C++/PNApproximants.ipp +3437 -0
  49. gwframes-2.0.0/extern/PostNewtonian/C++/PNApproximants_Q.ipp +3362 -0
  50. gwframes-2.0.0/extern/PostNewtonian/C++/PNEvolution.cpp +504 -0
  51. gwframes-2.0.0/extern/PostNewtonian/C++/PNEvolution.hpp +67 -0
  52. gwframes-2.0.0/extern/PostNewtonian/C++/PNEvolution.i +164 -0
  53. gwframes-2.0.0/extern/PostNewtonian/C++/PNEvolution_Q.cpp +459 -0
  54. gwframes-2.0.0/extern/PostNewtonian/C++/PNWaveformModes.cpp +63 -0
  55. gwframes-2.0.0/extern/PostNewtonian/C++/PNWaveformModes.hpp +32 -0
  56. gwframes-2.0.0/extern/PostNewtonian/C++/PNWaveformModes.ipp +2569 -0
  57. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/.gitignore +19 -0
  58. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Errors.hpp +34 -0
  59. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/IntegrateAngularVelocity.cpp +511 -0
  60. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/IntegrateAngularVelocity.hpp +24 -0
  61. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/LICENSE +20 -0
  62. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Makefile +94 -0
  63. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/QuaternionUtilities.cpp +85 -0
  64. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/QuaternionUtilities.hpp +14 -0
  65. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Quaternions.cpp +2262 -0
  66. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Quaternions.hpp +216 -0
  67. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Quaternions.i +189 -0
  68. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Quaternions_typemaps.i +239 -0
  69. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/README.md +76 -0
  70. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/.gitignore +3 -0
  71. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/Doxyfile +1867 -0
  72. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/Makefile +9 -0
  73. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/Quaternions_Doc.i +2405 -0
  74. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/doxygen2docstring.py +339 -0
  75. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/numpy.i +3085 -0
  76. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/setup.py +170 -0
  77. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/tests/.gitignore +2 -0
  78. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/tests/Makefile +26 -0
  79. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/tests/TestAngularVelocityIntegration.cpp +59 -0
  80. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/tests/TestAngularVelocityIntegration_2D.cpp +62 -0
  81. gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/vector_typemaps.i +539 -0
  82. gwframes-2.0.0/extern/PostNewtonian/C++/README.md +36 -0
  83. gwframes-2.0.0/extern/PostNewtonian/C++/setup.py +133 -0
  84. gwframes-2.0.0/extern/PostNewtonian/LICENSE +20 -0
  85. gwframes-2.0.0/extern/PostNewtonian/README.md +154 -0
  86. gwframes-2.0.0/extern/PostNewtonian/Utilities/CodeOutput.py +273 -0
  87. gwframes-2.0.0/extern/PostNewtonian/Utilities/ExecNotebook.ipy +118 -0
  88. gwframes-2.0.0/extern/PostNewtonian/Utilities/PNObjects.py +158 -0
  89. gwframes-2.0.0/extern/PostNewtonian/Utilities/__init__.py +3 -0
  90. gwframes-2.0.0/extern/Quaternions/.gitignore +19 -0
  91. gwframes-2.0.0/extern/Quaternions/Errors.hpp +34 -0
  92. gwframes-2.0.0/extern/Quaternions/IntegrateAngularVelocity.cpp +511 -0
  93. gwframes-2.0.0/extern/Quaternions/IntegrateAngularVelocity.hpp +24 -0
  94. gwframes-2.0.0/extern/Quaternions/LICENSE +20 -0
  95. gwframes-2.0.0/extern/Quaternions/Makefile +94 -0
  96. gwframes-2.0.0/extern/Quaternions/QuaternionUtilities.cpp +85 -0
  97. gwframes-2.0.0/extern/Quaternions/QuaternionUtilities.hpp +14 -0
  98. gwframes-2.0.0/extern/Quaternions/Quaternions.cpp +2270 -0
  99. gwframes-2.0.0/extern/Quaternions/Quaternions.hpp +218 -0
  100. gwframes-2.0.0/extern/Quaternions/Quaternions.i +189 -0
  101. gwframes-2.0.0/extern/Quaternions/Quaternions_typemaps.i +239 -0
  102. gwframes-2.0.0/extern/Quaternions/README.md +80 -0
  103. gwframes-2.0.0/extern/Quaternions/docs/.gitignore +3 -0
  104. gwframes-2.0.0/extern/Quaternions/docs/Doxyfile +1867 -0
  105. gwframes-2.0.0/extern/Quaternions/docs/Makefile +9 -0
  106. gwframes-2.0.0/extern/Quaternions/docs/Quaternions_Doc.i +2405 -0
  107. gwframes-2.0.0/extern/Quaternions/docs/doxygen2docstring.py +339 -0
  108. gwframes-2.0.0/extern/Quaternions/numpy.i +3085 -0
  109. gwframes-2.0.0/extern/Quaternions/setup.py +170 -0
  110. gwframes-2.0.0/extern/Quaternions/tests/.gitignore +2 -0
  111. gwframes-2.0.0/extern/Quaternions/tests/Makefile +26 -0
  112. gwframes-2.0.0/extern/Quaternions/tests/TestAngularVelocityIntegration.cpp +59 -0
  113. gwframes-2.0.0/extern/Quaternions/tests/TestAngularVelocityIntegration_2D.cpp +62 -0
  114. gwframes-2.0.0/extern/Quaternions/vector_typemaps.i +539 -0
  115. gwframes-2.0.0/extern/SpacetimeAlgebra/.gitignore +20 -0
  116. gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/Doxyfile +258 -0
  117. gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/Makefile +38 -0
  118. gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.cpp +3225 -0
  119. gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.hpp +6378 -0
  120. gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.xml +310 -0
  121. gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.xsl +118 -0
  122. gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebraInput.xml +192 -0
  123. gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra_parse_mv.cpp +305 -0
  124. gwframes-2.0.0/extern/SpacetimeAlgebra/LICENSE +21 -0
  125. gwframes-2.0.0/extern/SpacetimeAlgebra/Makefile +5 -0
  126. gwframes-2.0.0/extern/SpacetimeAlgebra/README.md +32 -0
  127. gwframes-2.0.0/extern/SpacetimeAlgebra/SpacetimeAlgebra.cpp +1 -0
  128. gwframes-2.0.0/extern/SpacetimeAlgebra/SpacetimeAlgebra.hpp +1 -0
  129. gwframes-2.0.0/extern/SpacetimeAlgebra/setup.py +30 -0
  130. gwframes-2.0.0/extern/SpacetimeAlgebra/spacetime.pxd +183 -0
  131. gwframes-2.0.0/extern/SpacetimeAlgebra/spacetime.pyx +409 -0
  132. gwframes-2.0.0/extern/SphericalFunctions/.gitignore +23 -0
  133. gwframes-2.0.0/extern/SphericalFunctions/.gitmodules +4 -0
  134. gwframes-2.0.0/extern/SphericalFunctions/Combinatorics.cpp +260 -0
  135. gwframes-2.0.0/extern/SphericalFunctions/Combinatorics.hpp +208 -0
  136. gwframes-2.0.0/extern/SphericalFunctions/Errors.hpp +32 -0
  137. gwframes-2.0.0/extern/SphericalFunctions/LICENSE +20 -0
  138. gwframes-2.0.0/extern/SphericalFunctions/Makefile +90 -0
  139. gwframes-2.0.0/extern/SphericalFunctions/README.md +75 -0
  140. gwframes-2.0.0/extern/SphericalFunctions/SWSHs.cpp +49 -0
  141. gwframes-2.0.0/extern/SphericalFunctions/SWSHs.hpp +41 -0
  142. gwframes-2.0.0/extern/SphericalFunctions/SphericalFunctions.i +224 -0
  143. gwframes-2.0.0/extern/SphericalFunctions/WignerDMatrices.cpp +99 -0
  144. gwframes-2.0.0/extern/SphericalFunctions/WignerDMatrices.hpp +83 -0
  145. gwframes-2.0.0/extern/SphericalFunctions/docs/Doxyfile +2320 -0
  146. gwframes-2.0.0/extern/SphericalFunctions/docs/Makefile +9 -0
  147. gwframes-2.0.0/extern/SphericalFunctions/docs/SphericalFunctions_Doc.i +438 -0
  148. gwframes-2.0.0/extern/SphericalFunctions/docs/doxygen2docstring.py +339 -0
  149. gwframes-2.0.0/extern/SphericalFunctions/setup.py +191 -0
  150. gwframes-2.0.0/extern/spinsfast/COPYING +674 -0
  151. gwframes-2.0.0/extern/spinsfast/Makefile +47 -0
  152. gwframes-2.0.0/extern/spinsfast/README +29 -0
  153. gwframes-2.0.0/extern/spinsfast/VERSION +1 -0
  154. gwframes-2.0.0/extern/spinsfast/code/alm.c +57 -0
  155. gwframes-2.0.0/extern/spinsfast/code/dump_cimage.c +74 -0
  156. gwframes-2.0.0/extern/spinsfast/code/healpix_convert.c +155 -0
  157. gwframes-2.0.0/extern/spinsfast/code/module.mk +48 -0
  158. gwframes-2.0.0/extern/spinsfast/code/spinsfast_backward_Gmm.c +250 -0
  159. gwframes-2.0.0/extern/spinsfast/code/spinsfast_backward_Gmm_alm2iqu.c +264 -0
  160. gwframes-2.0.0/extern/spinsfast/code/spinsfast_backward_transform.c +119 -0
  161. gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_Imm.c +421 -0
  162. gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_Jmm.c +93 -0
  163. gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_transform.c +195 -0
  164. gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_transform_eo.c +248 -0
  165. gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_transform_from_Imm.c +123 -0
  166. gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_transform_iqu2alm.c +313 -0
  167. gwframes-2.0.0/extern/spinsfast/code/wigner_d_halfpi_Risbo.c +337 -0
  168. gwframes-2.0.0/extern/spinsfast/code/wigner_d_halfpi_TN.c +429 -0
  169. gwframes-2.0.0/extern/spinsfast/code/wigner_d_halfpi_methods.c +86 -0
  170. gwframes-2.0.0/extern/spinsfast/example/example_iqu.c +251 -0
  171. gwframes-2.0.0/extern/spinsfast/example/example_multispin.c +216 -0
  172. gwframes-2.0.0/extern/spinsfast/example/example_spin.c +190 -0
  173. gwframes-2.0.0/extern/spinsfast/example/example_spin.py +79 -0
  174. gwframes-2.0.0/extern/spinsfast/example/module.mk +12 -0
  175. gwframes-2.0.0/extern/spinsfast/include/alm.h +41 -0
  176. gwframes-2.0.0/extern/spinsfast/include/healpix_convert.h +42 -0
  177. gwframes-2.0.0/extern/spinsfast/include/spinsfast_backward.h +43 -0
  178. gwframes-2.0.0/extern/spinsfast/include/spinsfast_forward.h +63 -0
  179. gwframes-2.0.0/extern/spinsfast/include/wigner_d_halfpi.h +34 -0
  180. gwframes-2.0.0/extern/spinsfast/include/wigner_d_halfpi_Risbo.h +60 -0
  181. gwframes-2.0.0/extern/spinsfast/include/wigner_d_halfpi_TN.h +74 -0
  182. gwframes-2.0.0/extern/spinsfast/include/wigner_d_halfpi_methods.h +34 -0
  183. gwframes-2.0.0/extern/spinsfast/python/module.mk +4 -0
  184. gwframes-2.0.0/extern/spinsfast/python/setup.py +43 -0
  185. gwframes-2.0.0/extern/spinsfast/python/spinsfast_module.c +273 -0
  186. gwframes-2.0.0/pyproject.toml +81 -0
  187. gwframes-2.0.0/src/GWFrames/Extrapolation.py +1023 -0
  188. gwframes-2.0.0/src/GWFrames/__init__.py +377 -0
  189. gwframes-2.0.0/src/GWFrames/plot.py +179 -0
  190. gwframes-2.0.0/tests/data/swig_reference.npz +0 -0
  191. gwframes-2.0.0/tests/reference/generate_swig_reference.py +119 -0
  192. gwframes-2.0.0/tests/test_quaternions.py +79 -0
  193. gwframes-2.0.0/tests/test_swig_reference.py +111 -0
  194. gwframes-2.0.0/tests/test_waveforms.py +124 -0
@@ -0,0 +1,25 @@
1
+ # Build products
2
+ build/
3
+ dist/
4
+ wheelhouse/
5
+ *.o
6
+ *.so
7
+ *.dylib
8
+ *.a
9
+ *.egg-info/
10
+
11
+ # Python
12
+ __pycache__/
13
+ *.py[cod]
14
+ .venv/
15
+ .pytest_cache/
16
+ .ipynb_checkpoints/
17
+ uv.lock
18
+
19
+ # Editors and operating systems
20
+ .DS_Store
21
+ .vscode/
22
+ .idea/
23
+
24
+ # Local review notes
25
+ .diffreview/
@@ -0,0 +1,16 @@
1
+ [submodule "Code/PostNewtonian"]
2
+ path = extern/PostNewtonian
3
+ url = https://github.com/moble/PostNewtonian.git
4
+ branch = master
5
+ [submodule "Code/SphericalFunctions"]
6
+ path = extern/SphericalFunctions
7
+ url = https://github.com/moble/SphericalFunctions.git
8
+ branch = master
9
+ [submodule "Code/SpacetimeAlgebra"]
10
+ path = extern/SpacetimeAlgebra
11
+ url = https://github.com/moble/SpacetimeAlgebra.git
12
+ branch = master
13
+ [submodule "Code/Quaternions"]
14
+ path = extern/Quaternions
15
+ url = https://github.com/moble/Quaternions.git
16
+ branch = master
@@ -0,0 +1,101 @@
1
+ cmake_minimum_required(VERSION 3.20...3.31)
2
+ project(GWFrames LANGUAGES C CXX)
3
+
4
+ set(CMAKE_CXX_STANDARD 17)
5
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
6
+ set(CMAKE_C_STANDARD 99)
7
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
8
+ # Let the installed module find shared GSL and FFTW libraries outside system paths
9
+ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON)
10
+ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
11
+ set(CMAKE_BUILD_TYPE Release)
12
+ endif()
13
+
14
+ # External libraries. GSL has a module that ships with CMake; FFTW does
15
+ # not, so it is found through pkg-config when that is available, and by
16
+ # searching the usual paths otherwise.
17
+ find_package(GSL 2.0 REQUIRED)
18
+ find_package(PkgConfig QUIET)
19
+ if(PkgConfig_FOUND)
20
+ pkg_check_modules(FFTW3 QUIET IMPORTED_TARGET fftw3)
21
+ endif()
22
+ if(TARGET PkgConfig::FFTW3)
23
+ add_library(FFTW3::fftw3 ALIAS PkgConfig::FFTW3)
24
+ else()
25
+ find_path(FFTW3_INCLUDE_DIR fftw3.h REQUIRED)
26
+ find_library(FFTW3_LIBRARY NAMES fftw3 REQUIRED)
27
+ add_library(FFTW3::fftw3 UNKNOWN IMPORTED)
28
+ set_target_properties(FFTW3::fftw3 PROPERTIES
29
+ IMPORTED_LOCATION "${FFTW3_LIBRARY}"
30
+ INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIR}")
31
+ endif()
32
+
33
+ # The vendored copy of spinsfast is plain C.
34
+ file(GLOB SPINSFAST_SOURCES CONFIGURE_DEPENDS extern/spinsfast/code/*.c)
35
+ add_library(spinsfast STATIC ${SPINSFAST_SOURCES})
36
+ target_include_directories(spinsfast PUBLIC extern/spinsfast/include)
37
+ target_link_libraries(spinsfast PUBLIC FFTW3::fftw3)
38
+
39
+ # GWFrames itself, together with the C++ code it uses from the submodules.
40
+ add_library(gwframes STATIC
41
+ extern/Quaternions/Quaternions.cpp
42
+ extern/Quaternions/IntegrateAngularVelocity.cpp
43
+ extern/Quaternions/QuaternionUtilities.cpp
44
+ extern/PostNewtonian/C++/PNEvolution.cpp
45
+ extern/PostNewtonian/C++/PNEvolution_Q.cpp
46
+ extern/PostNewtonian/C++/PNWaveformModes.cpp
47
+ extern/SphericalFunctions/Combinatorics.cpp
48
+ extern/SphericalFunctions/WignerDMatrices.cpp
49
+ extern/SphericalFunctions/SWSHs.cpp
50
+ extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.cpp
51
+ cpp/Utilities.cpp
52
+ cpp/Waveforms.cpp
53
+ cpp/PNWaveforms.cpp
54
+ cpp/WaveformsAtAPointFT.cpp
55
+ cpp/fft.cpp
56
+ cpp/NoiseCurves.cpp
57
+ cpp/Interpolate.cpp
58
+ cpp/Scri.cpp
59
+ )
60
+ target_include_directories(gwframes PUBLIC
61
+ cpp
62
+ extern
63
+ extern/Quaternions
64
+ extern/SphericalFunctions
65
+ extern/SpacetimeAlgebra/CodeGenerators
66
+ )
67
+ target_compile_definitions(gwframes PUBLIC USE_GSL)
68
+ target_link_libraries(gwframes PUBLIC spinsfast GSL::gsl FFTW3::fftw3)
69
+
70
+ # Waveform histories record the code revision: the git commit when building
71
+ # from a clone, and the package version otherwise (as when building an sdist).
72
+ set(GWFRAMES_CODE_REVISION "${SKBUILD_PROJECT_VERSION}")
73
+ find_package(Git QUIET)
74
+ if(Git_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
75
+ execute_process(
76
+ COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD
77
+ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
78
+ OUTPUT_VARIABLE GWFRAMES_GIT_REVISION
79
+ OUTPUT_STRIP_TRAILING_WHITESPACE
80
+ ERROR_QUIET)
81
+ if(GWFRAMES_GIT_REVISION)
82
+ set(GWFRAMES_CODE_REVISION "${GWFRAMES_GIT_REVISION}")
83
+ endif()
84
+ endif()
85
+ if(NOT GWFRAMES_CODE_REVISION)
86
+ set(GWFRAMES_CODE_REVISION "unknown")
87
+ endif()
88
+ target_compile_definitions(gwframes PRIVATE "CodeRevision=\"${GWFRAMES_CODE_REVISION}\"")
89
+
90
+ # The Python extension module, installed inside the `GWFrames` package
91
+ find_package(Python 3.11 REQUIRED COMPONENTS Interpreter Development.Module)
92
+ find_package(pybind11 CONFIG REQUIRED)
93
+ pybind11_add_module(_GWFrames
94
+ cpp/bindings/module.cpp
95
+ cpp/bindings/quaternions.cpp
96
+ cpp/bindings/utilities.cpp
97
+ cpp/bindings/waveforms.cpp
98
+ cpp/bindings/scri.cpp
99
+ )
100
+ target_link_libraries(_GWFrames PRIVATE gwframes)
101
+ install(TARGETS _GWFrames LIBRARY DESTINATION GWFrames)
gwframes-2.0.0/LICENSE ADDED
@@ -0,0 +1,31 @@
1
+ Copyright (c) 2026, Michael Boyle
2
+
3
+ If this software is used in any academic research, the author would
4
+ very much appreciate if resulting works cite the original paper on
5
+ which this software is based: <http://arxiv.org/abs/1302.2919>. This
6
+ software is covered under the open source MIT license, shown below,
7
+ with the exception of the 'spinsfast' software package. The
8
+ 'spinsfast' software (rev104) is included with this software without
9
+ modification, and is covered separately under the GNU GPL license, as
10
+ documented in its subdirectory. See its home page:
11
+ <http://www.physics.miami.edu/~huffenbe/research/spinsfast/>.
12
+
13
+
14
+ Permission is hereby granted, free of charge, to any person obtaining
15
+ a copy of this software and associated documentation files (the
16
+ "Software"), to deal in the Software without restriction, including
17
+ without limitation the rights to use, copy, modify, merge, publish,
18
+ distribute, sublicense, and/or sell copies of the Software, and to
19
+ permit persons to whom the Software is furnished to do so, subject to
20
+ the following conditions:
21
+
22
+ The above copyright notice and this permission notice shall be
23
+ included in all copies or substantial portions of the Software.
24
+
25
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,187 @@
1
+ Metadata-Version: 2.4
2
+ Name: GWFrames
3
+ Version: 2.0.0
4
+ Summary: Manipulate gravitational waveforms — changing frames, and so on
5
+ Author-Email: Michael Boyle <mob22@cornell.edu>
6
+ License-Expression: MIT AND GPL-3.0-or-later
7
+ License-File: LICENSE
8
+ License-File: extern/spinsfast/COPYING
9
+ Classifier: Programming Language :: C++
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Operating System :: POSIX :: Linux
12
+ Classifier: Operating System :: MacOS
13
+ Classifier: Topic :: Scientific/Engineering :: Astronomy
14
+ Classifier: Topic :: Scientific/Engineering :: Physics
15
+ Project-URL: Homepage, https://github.com/moble/GWFrames
16
+ Project-URL: Issues, https://github.com/moble/GWFrames/issues
17
+ Project-URL: Paper, https://arxiv.org/abs/1302.2919
18
+ Requires-Python: >=3.11
19
+ Requires-Dist: numpy>=1.24
20
+ Requires-Dist: scipy>=1.10
21
+ Requires-Dist: h5py>=3.8
22
+ Provides-Extra: plot
23
+ Requires-Dist: matplotlib>=3.7; extra == "plot"
24
+ Description-Content-Type: text/markdown
25
+
26
+ > [!NOTE]
27
+ > **For post-Newtonian waveforms, use [PostNewtonian.jl](https://github.com/moble/PostNewtonian.jl).**
28
+ > It is far more complete, accurate, and flexible than the post-Newtonian code
29
+ > in this package. Most of the rest of the functionality here has moved to
30
+ > [`scri`](https://github.com/moble/scri) and [`sxs`](https://github.com/sxs-collaboration/sxs).
31
+ > GWFrames is kept working mainly as a reference implementation to compare
32
+ > other codes against.
33
+
34
+ [![Tests](https://github.com/moble/GWFrames/actions/workflows/tests.yml/badge.svg)](https://github.com/moble/GWFrames/actions/workflows/tests.yml)
35
+ [![Wheels](https://github.com/moble/GWFrames/actions/workflows/wheels.yml/badge.svg)](https://github.com/moble/GWFrames/actions/workflows/wheels.yml)
36
+
37
+ GWFrames
38
+ ========
39
+
40
+ Manipulate gravitational waveforms — changing frames, and so on.
41
+
42
+ The code in this project extends code written for the paper "[Angular velocity
43
+ of gravitational radiation from precessing binaries and the corotating
44
+ frame](https://arxiv.org/abs/1302.2919)", giving an explicit implementation of
45
+ the methods discussed in it. The first commit of this project is the last
46
+ commit of the paper's project.
47
+
48
+ The license for using this software is basically open (see the LICENSE file in
49
+ this directory), though citations to the original paper are appreciated, where
50
+ relevant. Also, if your work depends on features found in this module that
51
+ have not been described in a separate publication of mine, I would appreciate
52
+ the opportunity to be a coauthor.
53
+
54
+ Note that this code is not optimized. In many cases, obvious optimizations
55
+ were rejected in favor of clearer or simpler code, or code that simply
56
+ reflected the discussion in the paper more directly. The code is generally
57
+ more than fast enough for interactive use on individual waveforms, but there is
58
+ plenty of room for improvement. In particular, rotations may be painfully slow
59
+ for large data sets.
60
+
61
+
62
+ Installation
63
+ ============
64
+
65
+ GWFrames requires Python 3.11 or newer, on Linux or macOS.
66
+
67
+ With `uv` or `pip`
68
+ ------------------
69
+
70
+ Binary wheels for Linux and macOS (x86_64 and arm64) are published on PyPI, so
71
+ the simplest installation is
72
+
73
+ ```bash
74
+ uv add GWFrames # in a uv project
75
+ uv pip install GWFrames # or in any virtual environment
76
+ pip install GWFrames # or with pip
77
+ ```
78
+
79
+ To install the latest code from GitHub, or on any platform without a wheel,
80
+ GWFrames is compiled from source. That needs a C++ compiler,
81
+ [GSL](https://www.gnu.org/software/gsl/), and [FFTW](https://www.fftw.org/),
82
+ which are available from most package managers:
83
+
84
+ ```bash
85
+ sudo apt-get install libgsl-dev libfftw3-dev # Debian or Ubuntu
86
+ brew install gsl fftw # macOS with Homebrew
87
+ ```
88
+
89
+ after which
90
+
91
+ ```bash
92
+ uv pip install "git+https://github.com/moble/GWFrames"
93
+ ```
94
+
95
+ builds and installs it. (The submodules are fetched automatically.) If GSL or
96
+ FFTW is installed somewhere unusual, set `CMAKE_PREFIX_PATH` to its prefix.
97
+
98
+ With `mamba` or `conda`
99
+ -----------------------
100
+
101
+ All of the build requirements are available from conda-forge:
102
+
103
+ ```bash
104
+ mamba create -n gwframes -c conda-forge python numpy scipy h5py gsl fftw \
105
+ cxx-compiler cmake ninja pkg-config pybind11 scikit-build-core
106
+ mamba activate gwframes
107
+ python -m pip install --no-deps --no-build-isolation "git+https://github.com/moble/GWFrames"
108
+ ```
109
+
110
+ Checking the installation
111
+ -------------------------
112
+
113
+ ```bash
114
+ python -c 'import GWFrames; W = GWFrames.PNWaveform("TaylorT4", 0.0, [0., 0., 0.9], [0.0, 0.0, 0.9], 0.01); print("That worked!")'
115
+ ```
116
+
117
+
118
+ Usage
119
+ =====
120
+
121
+ The primary objects are `Waveform` and `PNWaveform`, with various methods
122
+ defined for each; quaternions and functions of arrays of quaternions are in
123
+ `GWFrames.Quaternions`. Detailed documentation of most functions may be found
124
+ through Python's `help` function, as in `help(GWFrames.Waveform)`. A Jupyter
125
+ notebook in the `Docs` directory contains extensive examples, following the
126
+ outline of the paper.
127
+
128
+ Changes from the SWIG-based versions
129
+ ------------------------------------
130
+
131
+ Version 2 replaces the SWIG bindings with [pybind11](https://pybind11.readthedocs.io/),
132
+ and the old `setup.py` with CMake and
133
+ [scikit-build-core](https://scikit-build-core.readthedocs.io/). The Python
134
+ interface is almost entirely unchanged, apart from these differences:
135
+
136
+ * The separate `Quaternions` module is now `GWFrames.Quaternions`, so
137
+ `import Quaternions` becomes `from GWFrames import Quaternions`, and
138
+ `GWFrames.Quaternion` is also available.
139
+ * Methods that modify a `Waveform` in place and return it (such as
140
+ `TransformToCorotatingFrame`) return the very same Python object, including
141
+ for `PNWaveform`.
142
+
143
+ Several bugs were fixed along the way, notably that `Quaternion` objects
144
+ compared equal exactly when they were *not* equal, and that `Hybridize` read
145
+ past the end of an array and could not handle waveforms in an inertial frame.
146
+
147
+
148
+ Development
149
+ ===========
150
+
151
+ Clone the repository with its submodules, then build and test it with `uv`:
152
+
153
+ ```bash
154
+ git clone --recursive https://github.com/moble/GWFrames.git
155
+ cd GWFrames
156
+ uv sync --no-editable
157
+ uv run --no-sync pytest
158
+ ```
159
+
160
+ The C++ code is in `cpp/`, the pybind11 bindings in `cpp/bindings/`, and the
161
+ Python package in `src/GWFrames/`. The submodules `Quaternions`,
162
+ `SphericalFunctions`, `SpacetimeAlgebra`, and `PostNewtonian`, along with a
163
+ vendored copy of [spinsfast](https://github.com/moble/spinsfast), are in
164
+ `extern/`. The tests include a comparison with results recorded from the last
165
+ SWIG-based build; see `tests/reference/generate_swig_reference.py`.
166
+
167
+ Releases are published to PyPI automatically when a GitHub release is created.
168
+
169
+ Note on licensing: spinsfast, GSL, and FFTW are licensed under the GNU GPL, and
170
+ the binary wheels link all three statically, so the wheels as a whole are
171
+ covered by the GPL.
172
+
173
+
174
+ Contributions
175
+ =============
176
+
177
+ The code is primarily written by me (Mike Boyle). Dan Hemberger helped by
178
+ porting some of my older code from [Triton](https://github.com/moble/Triton) to
179
+ perform noise-weighted overlap calculations, and with numerous bug reports and
180
+ helpful suggestions. Serguei Ossokine also helped substantially by
181
+ cross-checking the post-Newtonian formulas and results. Dante Iozzo has done
182
+ his best to keep things working as this code enters its dotage.
183
+
184
+ Other contributions are entirely welcome. If you have a bug report, just go to
185
+ the [issues](https://github.com/moble/GWFrames/issues) page for this repo,
186
+ check for related issues, and if this is new click "New Issue". If you want to
187
+ contribute code, please open a pull request.
@@ -0,0 +1,162 @@
1
+ > [!NOTE]
2
+ > **For post-Newtonian waveforms, use [PostNewtonian.jl](https://github.com/moble/PostNewtonian.jl).**
3
+ > It is far more complete, accurate, and flexible than the post-Newtonian code
4
+ > in this package. Most of the rest of the functionality here has moved to
5
+ > [`scri`](https://github.com/moble/scri) and [`sxs`](https://github.com/sxs-collaboration/sxs).
6
+ > GWFrames is kept working mainly as a reference implementation to compare
7
+ > other codes against.
8
+
9
+ [![Tests](https://github.com/moble/GWFrames/actions/workflows/tests.yml/badge.svg)](https://github.com/moble/GWFrames/actions/workflows/tests.yml)
10
+ [![Wheels](https://github.com/moble/GWFrames/actions/workflows/wheels.yml/badge.svg)](https://github.com/moble/GWFrames/actions/workflows/wheels.yml)
11
+
12
+ GWFrames
13
+ ========
14
+
15
+ Manipulate gravitational waveforms — changing frames, and so on.
16
+
17
+ The code in this project extends code written for the paper "[Angular velocity
18
+ of gravitational radiation from precessing binaries and the corotating
19
+ frame](https://arxiv.org/abs/1302.2919)", giving an explicit implementation of
20
+ the methods discussed in it. The first commit of this project is the last
21
+ commit of the paper's project.
22
+
23
+ The license for using this software is basically open (see the LICENSE file in
24
+ this directory), though citations to the original paper are appreciated, where
25
+ relevant. Also, if your work depends on features found in this module that
26
+ have not been described in a separate publication of mine, I would appreciate
27
+ the opportunity to be a coauthor.
28
+
29
+ Note that this code is not optimized. In many cases, obvious optimizations
30
+ were rejected in favor of clearer or simpler code, or code that simply
31
+ reflected the discussion in the paper more directly. The code is generally
32
+ more than fast enough for interactive use on individual waveforms, but there is
33
+ plenty of room for improvement. In particular, rotations may be painfully slow
34
+ for large data sets.
35
+
36
+
37
+ Installation
38
+ ============
39
+
40
+ GWFrames requires Python 3.11 or newer, on Linux or macOS.
41
+
42
+ With `uv` or `pip`
43
+ ------------------
44
+
45
+ Binary wheels for Linux and macOS (x86_64 and arm64) are published on PyPI, so
46
+ the simplest installation is
47
+
48
+ ```bash
49
+ uv add GWFrames # in a uv project
50
+ uv pip install GWFrames # or in any virtual environment
51
+ pip install GWFrames # or with pip
52
+ ```
53
+
54
+ To install the latest code from GitHub, or on any platform without a wheel,
55
+ GWFrames is compiled from source. That needs a C++ compiler,
56
+ [GSL](https://www.gnu.org/software/gsl/), and [FFTW](https://www.fftw.org/),
57
+ which are available from most package managers:
58
+
59
+ ```bash
60
+ sudo apt-get install libgsl-dev libfftw3-dev # Debian or Ubuntu
61
+ brew install gsl fftw # macOS with Homebrew
62
+ ```
63
+
64
+ after which
65
+
66
+ ```bash
67
+ uv pip install "git+https://github.com/moble/GWFrames"
68
+ ```
69
+
70
+ builds and installs it. (The submodules are fetched automatically.) If GSL or
71
+ FFTW is installed somewhere unusual, set `CMAKE_PREFIX_PATH` to its prefix.
72
+
73
+ With `mamba` or `conda`
74
+ -----------------------
75
+
76
+ All of the build requirements are available from conda-forge:
77
+
78
+ ```bash
79
+ mamba create -n gwframes -c conda-forge python numpy scipy h5py gsl fftw \
80
+ cxx-compiler cmake ninja pkg-config pybind11 scikit-build-core
81
+ mamba activate gwframes
82
+ python -m pip install --no-deps --no-build-isolation "git+https://github.com/moble/GWFrames"
83
+ ```
84
+
85
+ Checking the installation
86
+ -------------------------
87
+
88
+ ```bash
89
+ python -c 'import GWFrames; W = GWFrames.PNWaveform("TaylorT4", 0.0, [0., 0., 0.9], [0.0, 0.0, 0.9], 0.01); print("That worked!")'
90
+ ```
91
+
92
+
93
+ Usage
94
+ =====
95
+
96
+ The primary objects are `Waveform` and `PNWaveform`, with various methods
97
+ defined for each; quaternions and functions of arrays of quaternions are in
98
+ `GWFrames.Quaternions`. Detailed documentation of most functions may be found
99
+ through Python's `help` function, as in `help(GWFrames.Waveform)`. A Jupyter
100
+ notebook in the `Docs` directory contains extensive examples, following the
101
+ outline of the paper.
102
+
103
+ Changes from the SWIG-based versions
104
+ ------------------------------------
105
+
106
+ Version 2 replaces the SWIG bindings with [pybind11](https://pybind11.readthedocs.io/),
107
+ and the old `setup.py` with CMake and
108
+ [scikit-build-core](https://scikit-build-core.readthedocs.io/). The Python
109
+ interface is almost entirely unchanged, apart from these differences:
110
+
111
+ * The separate `Quaternions` module is now `GWFrames.Quaternions`, so
112
+ `import Quaternions` becomes `from GWFrames import Quaternions`, and
113
+ `GWFrames.Quaternion` is also available.
114
+ * Methods that modify a `Waveform` in place and return it (such as
115
+ `TransformToCorotatingFrame`) return the very same Python object, including
116
+ for `PNWaveform`.
117
+
118
+ Several bugs were fixed along the way, notably that `Quaternion` objects
119
+ compared equal exactly when they were *not* equal, and that `Hybridize` read
120
+ past the end of an array and could not handle waveforms in an inertial frame.
121
+
122
+
123
+ Development
124
+ ===========
125
+
126
+ Clone the repository with its submodules, then build and test it with `uv`:
127
+
128
+ ```bash
129
+ git clone --recursive https://github.com/moble/GWFrames.git
130
+ cd GWFrames
131
+ uv sync --no-editable
132
+ uv run --no-sync pytest
133
+ ```
134
+
135
+ The C++ code is in `cpp/`, the pybind11 bindings in `cpp/bindings/`, and the
136
+ Python package in `src/GWFrames/`. The submodules `Quaternions`,
137
+ `SphericalFunctions`, `SpacetimeAlgebra`, and `PostNewtonian`, along with a
138
+ vendored copy of [spinsfast](https://github.com/moble/spinsfast), are in
139
+ `extern/`. The tests include a comparison with results recorded from the last
140
+ SWIG-based build; see `tests/reference/generate_swig_reference.py`.
141
+
142
+ Releases are published to PyPI automatically when a GitHub release is created.
143
+
144
+ Note on licensing: spinsfast, GSL, and FFTW are licensed under the GNU GPL, and
145
+ the binary wheels link all three statically, so the wheels as a whole are
146
+ covered by the GPL.
147
+
148
+
149
+ Contributions
150
+ =============
151
+
152
+ The code is primarily written by me (Mike Boyle). Dan Hemberger helped by
153
+ porting some of my older code from [Triton](https://github.com/moble/Triton) to
154
+ perform noise-weighted overlap calculations, and with numerous bug reports and
155
+ helpful suggestions. Serguei Ossokine also helped substantially by
156
+ cross-checking the post-Newtonian formulas and results. Dante Iozzo has done
157
+ his best to keep things working as this code enters its dotage.
158
+
159
+ Other contributions are entirely welcome. If you have a bug report, just go to
160
+ the [issues](https://github.com/moble/GWFrames/issues) page for this repo,
161
+ check for related issues, and if this is new click "New Issue". If you want to
162
+ contribute code, please open a pull request.
@@ -0,0 +1,35 @@
1
+ // Copyright (c) 2026, Michael Boyle
2
+ // See LICENSE file for details
3
+
4
+ #ifndef ERRORS_HPP
5
+ #define ERRORS_HPP
6
+
7
+ // Note: These error codes are used in SWIG/Exceptions.i.
8
+ // If you change them here, change them there.
9
+
10
+ #define GWFrames_NotYetImplemented 0
11
+ #define GWFrames_FailedSystemCall 1
12
+ #define GWFrames_BadFileName 2
13
+ #define GWFrames_FailedGSLCall 3
14
+ // #define GWFrames_ 4
15
+ // #define GWFrames_ 5
16
+ // #define GWFrames_ 6
17
+ // #define GWFrames_ 7
18
+ // #define GWFrames_ 8
19
+ // #define GWFrames_ 9
20
+ #define GWFrames_ValueError 10
21
+ #define GWFrames_BadSwitches 11
22
+ #define GWFrames_IndexOutOfBounds 12
23
+ // #define GWFrames_ 13
24
+ // #define GWFrames_ 14
25
+ #define GWFrames_VectorSizeMismatch 15
26
+ #define GWFrames_MatrixSizeMismatch 16
27
+ #define GWFrames_MatrixSizeAssumedToBeThree 17
28
+ #define GWFrames_NotEnoughPointsForDerivative 18
29
+ #define GWFrames_EmptyIntersection 19
30
+ #define GWFrames_WaveformMissingLMIndex 20
31
+ #define GWFrames_WrongFrameType 21
32
+ #define GWFrames_BadWaveformInformation 22
33
+ #define GWFrames_UnknownDetector 23
34
+
35
+ #endif // ERRORS_HPP