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.
- gwframes-2.0.0/.gitignore +25 -0
- gwframes-2.0.0/.gitmodules +16 -0
- gwframes-2.0.0/CMakeLists.txt +101 -0
- gwframes-2.0.0/LICENSE +31 -0
- gwframes-2.0.0/PKG-INFO +187 -0
- gwframes-2.0.0/README.md +162 -0
- gwframes-2.0.0/cpp/Errors.hpp +35 -0
- gwframes-2.0.0/cpp/Interpolate.cpp +336 -0
- gwframes-2.0.0/cpp/Interpolate.hpp +90 -0
- gwframes-2.0.0/cpp/NoiseCurves/AdvLIGO_ZeroDet_HighP.ipp +6024 -0
- gwframes-2.0.0/cpp/NoiseCurves/AdvLIGO_ZeroDet_LowP.ipp +6023 -0
- gwframes-2.0.0/cpp/NoiseCurves/BHBH_20deg.txt +3000 -0
- gwframes-2.0.0/cpp/NoiseCurves/ConvertToProgram.pl +33 -0
- gwframes-2.0.0/cpp/NoiseCurves/High_Freq.txt +3000 -0
- gwframes-2.0.0/cpp/NoiseCurves/NO_SRM.txt +3000 -0
- gwframes-2.0.0/cpp/NoiseCurves/NSNS_Opt.txt +3000 -0
- gwframes-2.0.0/cpp/NoiseCurves/ZERO_DET_high_P.txt +3000 -0
- gwframes-2.0.0/cpp/NoiseCurves/ZERO_DET_low_P.txt +3000 -0
- gwframes-2.0.0/cpp/NoiseCurves.cpp +125 -0
- gwframes-2.0.0/cpp/NoiseCurves.hpp +39 -0
- gwframes-2.0.0/cpp/PNWaveforms.cpp +235 -0
- gwframes-2.0.0/cpp/PNWaveforms.hpp +86 -0
- gwframes-2.0.0/cpp/Scri.cpp +1169 -0
- gwframes-2.0.0/cpp/Scri.hpp +222 -0
- gwframes-2.0.0/cpp/Utilities.cpp +1247 -0
- gwframes-2.0.0/cpp/Utilities.hpp +129 -0
- gwframes-2.0.0/cpp/Waveforms.cpp +4084 -0
- gwframes-2.0.0/cpp/Waveforms.hpp +316 -0
- gwframes-2.0.0/cpp/WaveformsAtAPointFT.cpp +304 -0
- gwframes-2.0.0/cpp/WaveformsAtAPointFT.hpp +73 -0
- gwframes-2.0.0/cpp/Waveforms_BinaryOp.ipp +161 -0
- gwframes-2.0.0/cpp/bindings/bindings.hpp +61 -0
- gwframes-2.0.0/cpp/bindings/casters.hpp +246 -0
- gwframes-2.0.0/cpp/bindings/docstrings.hpp +6008 -0
- gwframes-2.0.0/cpp/bindings/module.cpp +75 -0
- gwframes-2.0.0/cpp/bindings/quaternions.cpp +255 -0
- gwframes-2.0.0/cpp/bindings/scri.cpp +213 -0
- gwframes-2.0.0/cpp/bindings/utilities.cpp +87 -0
- gwframes-2.0.0/cpp/bindings/waveforms.cpp +363 -0
- gwframes-2.0.0/cpp/fft.cpp +220 -0
- gwframes-2.0.0/cpp/fft.hpp +40 -0
- gwframes-2.0.0/extern/PostNewtonian/.gitignore +49 -0
- gwframes-2.0.0/extern/PostNewtonian/.gitmodules +4 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/.gitignore +6 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/EvolvePN.cpp +97 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/EvolvePN_Q.cpp +97 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Makefile +56 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNApproximants.ipp +3437 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNApproximants_Q.ipp +3362 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNEvolution.cpp +504 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNEvolution.hpp +67 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNEvolution.i +164 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNEvolution_Q.cpp +459 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNWaveformModes.cpp +63 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNWaveformModes.hpp +32 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/PNWaveformModes.ipp +2569 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/.gitignore +19 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Errors.hpp +34 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/IntegrateAngularVelocity.cpp +511 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/IntegrateAngularVelocity.hpp +24 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/LICENSE +20 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Makefile +94 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/QuaternionUtilities.cpp +85 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/QuaternionUtilities.hpp +14 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Quaternions.cpp +2262 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Quaternions.hpp +216 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Quaternions.i +189 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/Quaternions_typemaps.i +239 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/README.md +76 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/.gitignore +3 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/Doxyfile +1867 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/Makefile +9 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/Quaternions_Doc.i +2405 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/docs/doxygen2docstring.py +339 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/numpy.i +3085 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/setup.py +170 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/tests/.gitignore +2 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/tests/Makefile +26 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/tests/TestAngularVelocityIntegration.cpp +59 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/tests/TestAngularVelocityIntegration_2D.cpp +62 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/Quaternions/vector_typemaps.i +539 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/README.md +36 -0
- gwframes-2.0.0/extern/PostNewtonian/C++/setup.py +133 -0
- gwframes-2.0.0/extern/PostNewtonian/LICENSE +20 -0
- gwframes-2.0.0/extern/PostNewtonian/README.md +154 -0
- gwframes-2.0.0/extern/PostNewtonian/Utilities/CodeOutput.py +273 -0
- gwframes-2.0.0/extern/PostNewtonian/Utilities/ExecNotebook.ipy +118 -0
- gwframes-2.0.0/extern/PostNewtonian/Utilities/PNObjects.py +158 -0
- gwframes-2.0.0/extern/PostNewtonian/Utilities/__init__.py +3 -0
- gwframes-2.0.0/extern/Quaternions/.gitignore +19 -0
- gwframes-2.0.0/extern/Quaternions/Errors.hpp +34 -0
- gwframes-2.0.0/extern/Quaternions/IntegrateAngularVelocity.cpp +511 -0
- gwframes-2.0.0/extern/Quaternions/IntegrateAngularVelocity.hpp +24 -0
- gwframes-2.0.0/extern/Quaternions/LICENSE +20 -0
- gwframes-2.0.0/extern/Quaternions/Makefile +94 -0
- gwframes-2.0.0/extern/Quaternions/QuaternionUtilities.cpp +85 -0
- gwframes-2.0.0/extern/Quaternions/QuaternionUtilities.hpp +14 -0
- gwframes-2.0.0/extern/Quaternions/Quaternions.cpp +2270 -0
- gwframes-2.0.0/extern/Quaternions/Quaternions.hpp +218 -0
- gwframes-2.0.0/extern/Quaternions/Quaternions.i +189 -0
- gwframes-2.0.0/extern/Quaternions/Quaternions_typemaps.i +239 -0
- gwframes-2.0.0/extern/Quaternions/README.md +80 -0
- gwframes-2.0.0/extern/Quaternions/docs/.gitignore +3 -0
- gwframes-2.0.0/extern/Quaternions/docs/Doxyfile +1867 -0
- gwframes-2.0.0/extern/Quaternions/docs/Makefile +9 -0
- gwframes-2.0.0/extern/Quaternions/docs/Quaternions_Doc.i +2405 -0
- gwframes-2.0.0/extern/Quaternions/docs/doxygen2docstring.py +339 -0
- gwframes-2.0.0/extern/Quaternions/numpy.i +3085 -0
- gwframes-2.0.0/extern/Quaternions/setup.py +170 -0
- gwframes-2.0.0/extern/Quaternions/tests/.gitignore +2 -0
- gwframes-2.0.0/extern/Quaternions/tests/Makefile +26 -0
- gwframes-2.0.0/extern/Quaternions/tests/TestAngularVelocityIntegration.cpp +59 -0
- gwframes-2.0.0/extern/Quaternions/tests/TestAngularVelocityIntegration_2D.cpp +62 -0
- gwframes-2.0.0/extern/Quaternions/vector_typemaps.i +539 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/.gitignore +20 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/Doxyfile +258 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/Makefile +38 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.cpp +3225 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.hpp +6378 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.xml +310 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra.xsl +118 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebraInput.xml +192 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/CodeGenerators/SpacetimeAlgebra_parse_mv.cpp +305 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/LICENSE +21 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/Makefile +5 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/README.md +32 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/SpacetimeAlgebra.cpp +1 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/SpacetimeAlgebra.hpp +1 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/setup.py +30 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/spacetime.pxd +183 -0
- gwframes-2.0.0/extern/SpacetimeAlgebra/spacetime.pyx +409 -0
- gwframes-2.0.0/extern/SphericalFunctions/.gitignore +23 -0
- gwframes-2.0.0/extern/SphericalFunctions/.gitmodules +4 -0
- gwframes-2.0.0/extern/SphericalFunctions/Combinatorics.cpp +260 -0
- gwframes-2.0.0/extern/SphericalFunctions/Combinatorics.hpp +208 -0
- gwframes-2.0.0/extern/SphericalFunctions/Errors.hpp +32 -0
- gwframes-2.0.0/extern/SphericalFunctions/LICENSE +20 -0
- gwframes-2.0.0/extern/SphericalFunctions/Makefile +90 -0
- gwframes-2.0.0/extern/SphericalFunctions/README.md +75 -0
- gwframes-2.0.0/extern/SphericalFunctions/SWSHs.cpp +49 -0
- gwframes-2.0.0/extern/SphericalFunctions/SWSHs.hpp +41 -0
- gwframes-2.0.0/extern/SphericalFunctions/SphericalFunctions.i +224 -0
- gwframes-2.0.0/extern/SphericalFunctions/WignerDMatrices.cpp +99 -0
- gwframes-2.0.0/extern/SphericalFunctions/WignerDMatrices.hpp +83 -0
- gwframes-2.0.0/extern/SphericalFunctions/docs/Doxyfile +2320 -0
- gwframes-2.0.0/extern/SphericalFunctions/docs/Makefile +9 -0
- gwframes-2.0.0/extern/SphericalFunctions/docs/SphericalFunctions_Doc.i +438 -0
- gwframes-2.0.0/extern/SphericalFunctions/docs/doxygen2docstring.py +339 -0
- gwframes-2.0.0/extern/SphericalFunctions/setup.py +191 -0
- gwframes-2.0.0/extern/spinsfast/COPYING +674 -0
- gwframes-2.0.0/extern/spinsfast/Makefile +47 -0
- gwframes-2.0.0/extern/spinsfast/README +29 -0
- gwframes-2.0.0/extern/spinsfast/VERSION +1 -0
- gwframes-2.0.0/extern/spinsfast/code/alm.c +57 -0
- gwframes-2.0.0/extern/spinsfast/code/dump_cimage.c +74 -0
- gwframes-2.0.0/extern/spinsfast/code/healpix_convert.c +155 -0
- gwframes-2.0.0/extern/spinsfast/code/module.mk +48 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_backward_Gmm.c +250 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_backward_Gmm_alm2iqu.c +264 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_backward_transform.c +119 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_Imm.c +421 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_Jmm.c +93 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_transform.c +195 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_transform_eo.c +248 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_transform_from_Imm.c +123 -0
- gwframes-2.0.0/extern/spinsfast/code/spinsfast_forward_transform_iqu2alm.c +313 -0
- gwframes-2.0.0/extern/spinsfast/code/wigner_d_halfpi_Risbo.c +337 -0
- gwframes-2.0.0/extern/spinsfast/code/wigner_d_halfpi_TN.c +429 -0
- gwframes-2.0.0/extern/spinsfast/code/wigner_d_halfpi_methods.c +86 -0
- gwframes-2.0.0/extern/spinsfast/example/example_iqu.c +251 -0
- gwframes-2.0.0/extern/spinsfast/example/example_multispin.c +216 -0
- gwframes-2.0.0/extern/spinsfast/example/example_spin.c +190 -0
- gwframes-2.0.0/extern/spinsfast/example/example_spin.py +79 -0
- gwframes-2.0.0/extern/spinsfast/example/module.mk +12 -0
- gwframes-2.0.0/extern/spinsfast/include/alm.h +41 -0
- gwframes-2.0.0/extern/spinsfast/include/healpix_convert.h +42 -0
- gwframes-2.0.0/extern/spinsfast/include/spinsfast_backward.h +43 -0
- gwframes-2.0.0/extern/spinsfast/include/spinsfast_forward.h +63 -0
- gwframes-2.0.0/extern/spinsfast/include/wigner_d_halfpi.h +34 -0
- gwframes-2.0.0/extern/spinsfast/include/wigner_d_halfpi_Risbo.h +60 -0
- gwframes-2.0.0/extern/spinsfast/include/wigner_d_halfpi_TN.h +74 -0
- gwframes-2.0.0/extern/spinsfast/include/wigner_d_halfpi_methods.h +34 -0
- gwframes-2.0.0/extern/spinsfast/python/module.mk +4 -0
- gwframes-2.0.0/extern/spinsfast/python/setup.py +43 -0
- gwframes-2.0.0/extern/spinsfast/python/spinsfast_module.c +273 -0
- gwframes-2.0.0/pyproject.toml +81 -0
- gwframes-2.0.0/src/GWFrames/Extrapolation.py +1023 -0
- gwframes-2.0.0/src/GWFrames/__init__.py +377 -0
- gwframes-2.0.0/src/GWFrames/plot.py +179 -0
- gwframes-2.0.0/tests/data/swig_reference.npz +0 -0
- gwframes-2.0.0/tests/reference/generate_swig_reference.py +119 -0
- gwframes-2.0.0/tests/test_quaternions.py +79 -0
- gwframes-2.0.0/tests/test_swig_reference.py +111 -0
- 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.
|
gwframes-2.0.0/PKG-INFO
ADDED
|
@@ -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
|
+
[](https://github.com/moble/GWFrames/actions/workflows/tests.yml)
|
|
35
|
+
[](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.
|
gwframes-2.0.0/README.md
ADDED
|
@@ -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
|
+
[](https://github.com/moble/GWFrames/actions/workflows/tests.yml)
|
|
10
|
+
[](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
|