sxs 2025.0.18__tar.gz → 2025.0.20__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.
- {sxs-2025.0.18 → sxs-2025.0.20}/.github/workflows/build.yml +10 -19
- {sxs-2025.0.18 → sxs-2025.0.20}/CITATION.cff +2 -2
- {sxs-2025.0.18 → sxs-2025.0.20}/PKG-INFO +5 -26
- {sxs-2025.0.18 → sxs-2025.0.20}/pyproject.toml +8 -7
- sxs-2025.0.20/sxs/__version__.py +1 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/horizons/__init__.py +35 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/juliapkg.json +2 -2
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/simulations/simulation.py +2 -2
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/time_series.py +13 -1
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_waveform_rotations.py +2 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_waveforms.py +18 -11
- sxs-2025.0.18/sxs/__version__.py +0 -1
- {sxs-2025.0.18 → sxs-2025.0.20}/.codecov.yml +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/.github/ISSUE_TEMPLATE/catalog-data-issue-template.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/.github/dependabot.yml +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/.github/scripts/parse_bump_rule.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/.github/workflows/pr_rtd_link.yml +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/.gitignore +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/.readthedocs.yaml +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/LICENSE +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/README.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/catalog.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/cite.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/horizons.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/load.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/metadata.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/simulation.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/simulations.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/time_series.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/api/waveforms.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/html/main.html +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/images/favicon.ico +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/index.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/javascript/mathjax.js +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/julia.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/mathematica.md +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/stylesheets/extra.css +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/tutorials/00-Introduction.ipynb +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/tutorials/01-Catalog_Dataframe.ipynb +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/tutorials/02-Simulation.ipynb +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/tutorials/03-Horizons.ipynb +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/tutorials/04-Waveforms.ipynb +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/docs/tutorials/05-PreprocessingForFFTs.ipynb +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/mkdocs.yml +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/mkdocs_preprocess.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/catalog/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/catalog/catalog.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/catalog/create.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/catalog/description.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/citation.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/handlers.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/horizons/spec_horizons_h5.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/horizons/xor_multishuffle_bzip2.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/julia/GWFrames.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/julia/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/metadata/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/metadata/metadata.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/metadata/metric.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/simulations/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/simulations/analyze.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/simulations/local.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/simulations/simulations.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/bitwise.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/decimation/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/decimation/greedy_spline.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/decimation/linear_bisection.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/decimation/peak_greed.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/decimation/suppression.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/dicts.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/downloads.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/files.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/formats.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/inspire.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/lvcnr/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/lvcnr/comparisons.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/lvcnr/conversion.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/lvcnr/dataset.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/lvcnr/horizons.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/lvcnr/metadata.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/lvcnr/waveform_amp_phase.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/lvcnr/waveforms.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/monotonicity.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/pretty_print.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/references/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/references/ads.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/references/arxiv.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/references/fairchild_report.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/references/inspire.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/references/journal_abbreviations.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/references/references.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/select.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/smooth_functions.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/string_converters.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/sxs_directories.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/sxs_identifiers.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/utilities/url.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/alignment.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/format_handlers/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/format_handlers/grathena.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/format_handlers/lvc.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/format_handlers/nrar.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/format_handlers/rotating_paired_diff_multishuffle_bzip2.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/format_handlers/rotating_paired_xor_multishuffle_bzip2.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/format_handlers/spectre_cce_v1.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/memory.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/mode_utilities.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/norms.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/transformations.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/waveform_grid.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/waveform_mixin.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/waveform_modes.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/waveform_mts.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/waveforms/waveform_signal.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/api/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/api/deposit.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/api/login.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/api/records.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/catalog.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/creators.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/simannex.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/sxs/zenodo/surrogatemodeling.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/__init__.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/conftest.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_alignment.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_catalog.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_horizons.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_julia.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_loader.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_metadata.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_simulation.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_time_series.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_transformations.py +0 -0
- {sxs-2025.0.18 → sxs-2025.0.20}/tests/test_utilities.py +0 -0
|
@@ -31,14 +31,6 @@ jobs:
|
|
|
31
31
|
matrix:
|
|
32
32
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
33
33
|
python-version: ['3.10', '3.13']
|
|
34
|
-
exclude:
|
|
35
|
-
- os: windows-latest
|
|
36
|
-
python-version: '3.13'
|
|
37
|
-
- os: macos-latest
|
|
38
|
-
python-version: '3.13'
|
|
39
|
-
include:
|
|
40
|
-
- os: macos-latest
|
|
41
|
-
python-version: '3.12'
|
|
42
34
|
|
|
43
35
|
steps:
|
|
44
36
|
- name: Skip replicates unless on main branch or using ubuntu-latest
|
|
@@ -52,7 +44,7 @@ jobs:
|
|
|
52
44
|
if: ${{ env.skipping_build_and_test_replicate != 'true' }}
|
|
53
45
|
uses: actions/cache@v4
|
|
54
46
|
with:
|
|
55
|
-
key: sxs-${{ runner.os }}-
|
|
47
|
+
key: sxs-${{ runner.os }}-4 # Increment this number whenever the cached files should change
|
|
56
48
|
path: |
|
|
57
49
|
${{ runner.os == 'Linux' && '/home/runner/.cache/sxs' || runner.os == 'Windows' && 'C:\Users\runneradmin\.sxs\cache' || '/Users/runner/.sxs/cache' }}
|
|
58
50
|
|
|
@@ -68,17 +60,14 @@ jobs:
|
|
|
68
60
|
|
|
69
61
|
- name: Check out code
|
|
70
62
|
if: ${{ env.skipping_build_and_test_replicate != 'true' }}
|
|
71
|
-
uses: actions/checkout@
|
|
63
|
+
uses: actions/checkout@v6
|
|
72
64
|
|
|
73
|
-
- name: Set up Python ${{ matrix.python-version }}
|
|
65
|
+
- name: Set up Python ${{ matrix.python-version }} with uv
|
|
74
66
|
if: ${{ env.skipping_build_and_test_replicate != 'true' }}
|
|
75
|
-
uses:
|
|
67
|
+
uses: astral-sh/setup-uv@v6
|
|
76
68
|
with:
|
|
77
69
|
python-version: ${{ matrix.python-version }}
|
|
78
|
-
|
|
79
|
-
- name: Install Hatch
|
|
80
|
-
if: ${{ env.skipping_build_and_test_replicate != 'true' }}
|
|
81
|
-
run: python -m pip install --disable-pip-version-check --upgrade hatch
|
|
70
|
+
enable-cache: true
|
|
82
71
|
|
|
83
72
|
- name: Run tests
|
|
84
73
|
if: ${{ env.skipping_build_and_test_replicate != 'true' }}
|
|
@@ -86,7 +75,9 @@ jobs:
|
|
|
86
75
|
env:
|
|
87
76
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
88
77
|
run: |
|
|
89
|
-
hatch run
|
|
78
|
+
uv run --with hatch hatch run python -c 'import ssl; print("openssl: ", ssl.OPENSSL_VERSION_INFO)'
|
|
79
|
+
# Run the tests, but skip Julia installation on windows because these runners come with openssl 1!!!
|
|
80
|
+
uv run --with hatch hatch run test --durations=0 ${{ runner.os == 'Windows' && '--ignore=tests/test_julia.py' || '' }}
|
|
90
81
|
|
|
91
82
|
- name: Upload coverage
|
|
92
83
|
if: "matrix.python-version == '3.13' && matrix.os == 'ubuntu-latest'"
|
|
@@ -107,10 +98,10 @@ jobs:
|
|
|
107
98
|
|
|
108
99
|
steps:
|
|
109
100
|
- name: Check out code
|
|
110
|
-
uses: actions/checkout@
|
|
101
|
+
uses: actions/checkout@v5
|
|
111
102
|
|
|
112
103
|
- name: Set up Python
|
|
113
|
-
uses: actions/setup-python@
|
|
104
|
+
uses: actions/setup-python@v6
|
|
114
105
|
with:
|
|
115
106
|
python-version: '3.13'
|
|
116
107
|
|
|
@@ -1,35 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sxs
|
|
3
|
-
Version: 2025.0.
|
|
3
|
+
Version: 2025.0.20
|
|
4
4
|
Summary: Interface to data produced by the Simulating eXtreme Spacetimes collaboration
|
|
5
5
|
Project-URL: Homepage, https://github.com/sxs-collaboration/sxs
|
|
6
6
|
Project-URL: Documentation, https://sxs.readthedocs.io/
|
|
7
7
|
Author-email: Michael Boyle <michael.oliver.boyle@gmail.com>
|
|
8
|
-
License:
|
|
9
|
-
|
|
10
|
-
Copyright (c) 2020 Michael Boyle
|
|
11
|
-
|
|
12
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
-
in the Software without restriction, including without limitation the rights
|
|
15
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
-
furnished to do so, subject to the following conditions:
|
|
18
|
-
|
|
19
|
-
The above copyright notice and this permission notice shall be included in all
|
|
20
|
-
copies or substantial portions of the Software.
|
|
21
|
-
|
|
22
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
-
SOFTWARE.
|
|
8
|
+
License-Expression: MIT
|
|
29
9
|
License-File: LICENSE
|
|
30
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
31
11
|
Classifier: Intended Audience :: Science/Research
|
|
32
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
33
12
|
Classifier: Operating System :: OS Independent
|
|
34
13
|
Classifier: Programming Language :: Python :: 3
|
|
35
14
|
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
@@ -38,9 +17,9 @@ Requires-Python: >=3.10
|
|
|
38
17
|
Requires-Dist: bibtexparser>=2.0.0b8
|
|
39
18
|
Requires-Dist: h5py>=3
|
|
40
19
|
Requires-Dist: inflection>=0.5.1
|
|
41
|
-
Requires-Dist: juliacall>=0.9.
|
|
20
|
+
Requires-Dist: juliacall>=0.9.30
|
|
42
21
|
Requires-Dist: numba>=0.55; implementation_name == 'cpython'
|
|
43
|
-
Requires-Dist: numpy
|
|
22
|
+
Requires-Dist: numpy<3.0,>=2.0
|
|
44
23
|
Requires-Dist: packaging
|
|
45
24
|
Requires-Dist: pandas>=1.1.2
|
|
46
25
|
Requires-Dist: pytz>=2020.1
|
|
@@ -64,7 +43,7 @@ Requires-Dist: line-profiler>=3.0.2; extra == 'ecosystem'
|
|
|
64
43
|
Requires-Dist: matplotlib>=2.1.1; extra == 'ecosystem'
|
|
65
44
|
Requires-Dist: memory-profiler>=0.57.0; extra == 'ecosystem'
|
|
66
45
|
Requires-Dist: numpy-quaternion>=2023.0.4; extra == 'ecosystem'
|
|
67
|
-
Requires-Dist: numpy<
|
|
46
|
+
Requires-Dist: numpy<3.0,>=2.0; extra == 'ecosystem'
|
|
68
47
|
Requires-Dist: qgridnext>=2.0; extra == 'ecosystem'
|
|
69
48
|
Requires-Dist: rise>=5.6.1; extra == 'ecosystem'
|
|
70
49
|
Requires-Dist: scri>=2020.8.18; (sys_platform != 'win32') and extra == 'ecosystem'
|
|
@@ -4,12 +4,12 @@ dynamic = ["version"]
|
|
|
4
4
|
description = "Interface to data produced by the Simulating eXtreme Spacetimes collaboration"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
7
|
-
license =
|
|
7
|
+
license = "MIT"
|
|
8
|
+
license-files = ["LICENSE"]
|
|
8
9
|
authors = [
|
|
9
10
|
{ name = "Michael Boyle", email = "michael.oliver.boyle@gmail.com" }
|
|
10
11
|
]
|
|
11
12
|
classifiers = [
|
|
12
|
-
"License :: OSI Approved :: MIT License",
|
|
13
13
|
"Development Status :: 5 - Production/Stable",
|
|
14
14
|
"Programming Language :: Python :: 3",
|
|
15
15
|
"Operating System :: OS Independent",
|
|
@@ -19,7 +19,7 @@ classifiers = [
|
|
|
19
19
|
]
|
|
20
20
|
dependencies = [
|
|
21
21
|
"sxscatalog >=3.0.14",
|
|
22
|
-
"numpy >=
|
|
22
|
+
"numpy >=2.0, <3.0",
|
|
23
23
|
"scipy >=1.13",
|
|
24
24
|
"numba >=0.55; implementation_name == 'cpython'",
|
|
25
25
|
"quaternionic >=1.0.15",
|
|
@@ -32,7 +32,7 @@ dependencies = [
|
|
|
32
32
|
"urllib3 >=1.25.10",
|
|
33
33
|
"pandas >=1.1.2",
|
|
34
34
|
"bibtexparser >=2.0.0b8",
|
|
35
|
-
"juliacall >=0.9.
|
|
35
|
+
"juliacall >=0.9.30",
|
|
36
36
|
"packaging",
|
|
37
37
|
]
|
|
38
38
|
|
|
@@ -50,7 +50,7 @@ ecosystem = [
|
|
|
50
50
|
"line_profiler >=3.0.2",
|
|
51
51
|
"memory_profiler >=0.57.0",
|
|
52
52
|
"matplotlib >=2.1.1",
|
|
53
|
-
"numpy >=
|
|
53
|
+
"numpy >=2.0, <3.0",
|
|
54
54
|
"sympy >=1.6.2",
|
|
55
55
|
"seaborn >=0.13",
|
|
56
56
|
"qgridnext >=2.0",
|
|
@@ -77,13 +77,14 @@ build-backend = "hatchling.build"
|
|
|
77
77
|
path = "sxs/__version__.py"
|
|
78
78
|
|
|
79
79
|
[tool.hatch.envs.default]
|
|
80
|
+
installer = "uv"
|
|
80
81
|
dependencies = [
|
|
81
82
|
"ipython",
|
|
82
83
|
"pytest",
|
|
83
84
|
"pytest-cov",
|
|
84
85
|
"pytest-forked >=1.3.0",
|
|
85
86
|
"juliapkg >=0.1.13",
|
|
86
|
-
"numpy >=
|
|
87
|
+
"numpy >=2.0, <3.0"
|
|
87
88
|
]
|
|
88
89
|
[tool.hatch.envs.default.scripts]
|
|
89
90
|
# Run these as `hatch run test`
|
|
@@ -114,7 +115,7 @@ dependencies = [
|
|
|
114
115
|
|
|
115
116
|
[tool.black]
|
|
116
117
|
line-length = 120
|
|
117
|
-
target-version = ["
|
|
118
|
+
target-version = ["py310"]
|
|
118
119
|
|
|
119
120
|
|
|
120
121
|
[tool.pytest.ini_options]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2025.0.20"
|
|
@@ -530,3 +530,38 @@ class Horizons(object):
|
|
|
530
530
|
ω = Ω
|
|
531
531
|
Omega = Ω
|
|
532
532
|
omega = Ω
|
|
533
|
+
|
|
534
|
+
@property
|
|
535
|
+
def χₚ(self):
|
|
536
|
+
"""Effective spin precession parameter χₚ as function of time
|
|
537
|
+
|
|
538
|
+
Returns
|
|
539
|
+
-------
|
|
540
|
+
χₚ : TimeSeries
|
|
541
|
+
This represents the effective spin precession parameter as
|
|
542
|
+
a function of time.
|
|
543
|
+
|
|
544
|
+
Notes
|
|
545
|
+
-----
|
|
546
|
+
There are multiple definitions of the effective spin
|
|
547
|
+
precession parameter in the literature. This implementation
|
|
548
|
+
follows the definition given in Eq. (16) of the LVK's most
|
|
549
|
+
recent paper as of this writing,
|
|
550
|
+
[*GWTC-4.0*](https://arxiv.org/pdf/2508.18080). See [this
|
|
551
|
+
paper](https://arxiv.org/abs/2011.11948) for discussion of the
|
|
552
|
+
differences between various definitions.
|
|
553
|
+
|
|
554
|
+
"""
|
|
555
|
+
m1 = self.A.christodoulou_mass
|
|
556
|
+
m2 = self.B.christodoulou_mass
|
|
557
|
+
S1 = m1[:, np.newaxis] ** 2 * self.A.chi_inertial
|
|
558
|
+
S2 = m2[:, np.newaxis] ** 2 * self.B.chi_inertial
|
|
559
|
+
L̂ = self.ℓ̂
|
|
560
|
+
χₚ = (1 / m1) * np.maximum(
|
|
561
|
+
np.linalg.norm(np.cross(L̂, S1), axis=1) / m1,
|
|
562
|
+
((3*m1 + 4*m2)/(3*m2+4*m1)) * np.linalg.norm(np.cross(L̂, S2), axis=1) / m2
|
|
563
|
+
)
|
|
564
|
+
return χₚ
|
|
565
|
+
|
|
566
|
+
χp = χₚ
|
|
567
|
+
chi_p = χₚ
|
|
@@ -915,7 +915,7 @@ class Simulation_v2(SimulationBase):
|
|
|
915
915
|
f"/rMPsi4_Asymptotic_GeometricUnits_CoM_Mem/{extrapolation}"
|
|
916
916
|
)
|
|
917
917
|
|
|
918
|
-
def load_waveform(self, file_name, group, transform_to_inertial=True):
|
|
918
|
+
def load_waveform(self, file_name, group, transform_to_inertial=True, drop_times_before=0):
|
|
919
919
|
from .. import load
|
|
920
920
|
# Note that `name` should not have the file ending on input,
|
|
921
921
|
# but we will replace it regardless with `.with_suffix`.
|
|
@@ -934,7 +934,7 @@ class Simulation_v2(SimulationBase):
|
|
|
934
934
|
download_file(json_location, json_truepath)
|
|
935
935
|
return load(
|
|
936
936
|
h5_location, truepath=h5_truepath, group=group, metadata=self.metadata,
|
|
937
|
-
transform_to_inertial=transform_to_inertial, drop_times_before=
|
|
937
|
+
transform_to_inertial=transform_to_inertial, drop_times_before=drop_times_before,
|
|
938
938
|
)
|
|
939
939
|
|
|
940
940
|
|
|
@@ -121,8 +121,20 @@ class TimeSeries(np.ndarray):
|
|
|
121
121
|
"""
|
|
122
122
|
from numbers import Integral
|
|
123
123
|
|
|
124
|
+
# The docs at
|
|
125
|
+
# https://numpy.org/doc/stable/user/basics.indexing.html#detailed-notes
|
|
126
|
+
# say, "An empty (tuple) index is a full scalar index into a
|
|
127
|
+
# zero-dimensional array. `x[()]` returns a *scalar* if `x`
|
|
128
|
+
# is zero-dimensional and a view otherwise. On the other hand,
|
|
129
|
+
# `x[...]` always returns a view." This was true in numpy 1 as well,
|
|
130
|
+
# but the behavior has actually changed in numpy 2 for non-0d arrays,
|
|
131
|
+
# which causes downstream errors. So we have to change to handle this.
|
|
124
132
|
if isinstance(key, tuple) and len(key) == 0:
|
|
125
|
-
|
|
133
|
+
if self.ndim == 0:
|
|
134
|
+
return super().__getitem__(key), key
|
|
135
|
+
else:
|
|
136
|
+
return self, key
|
|
137
|
+
# raise ValueError(f"Empty index to {type(self).__name__} does not make sense")
|
|
126
138
|
|
|
127
139
|
def newaxis_type(e):
|
|
128
140
|
return isinstance(e, (type(np.newaxis), type(None)))
|
|
@@ -151,6 +151,10 @@ def test_modes_squared_angular_momenta():
|
|
|
151
151
|
import spherical as sf
|
|
152
152
|
tolerance = 1e-13
|
|
153
153
|
np.random.seed(1234)
|
|
154
|
+
|
|
155
|
+
def allclose(a, b):
|
|
156
|
+
return np.allclose(a.ndarray, b.ndarray, rtol=tolerance, atol=tolerance)
|
|
157
|
+
|
|
154
158
|
L2 = sf.Modes.Lsquared
|
|
155
159
|
Lz = sf.Modes.Lz
|
|
156
160
|
Lp = sf.Modes.Lplus
|
|
@@ -168,17 +172,17 @@ def test_modes_squared_angular_momenta():
|
|
|
168
172
|
# Test L^2 = 0.5(L+L- + L-L+) + LzLz
|
|
169
173
|
m1 = L2(m)
|
|
170
174
|
m2 = 0.5 * (Lp(Lm(m)) + Lm(Lp(m))) + Lz(Lz(m))
|
|
171
|
-
assert
|
|
175
|
+
assert allclose(m1, m2)
|
|
172
176
|
|
|
173
177
|
# Test R^2 = 0.5(R+R- + R-R+) + RzRz
|
|
174
178
|
m1 = R2(m)
|
|
175
179
|
m2 = 0.5 * (Rp(Rm(m)) + Rm(Rp(m))) + Rz(Rz(m))
|
|
176
|
-
assert
|
|
180
|
+
assert allclose(m1, m2)
|
|
177
181
|
|
|
178
182
|
# Test L^2 = R^2
|
|
179
183
|
m1 = L2(m)
|
|
180
184
|
m2 = R2(m)
|
|
181
|
-
assert
|
|
185
|
+
assert allclose(m1, m2)
|
|
182
186
|
|
|
183
187
|
|
|
184
188
|
def test_modes_derivative_commutators():
|
|
@@ -188,7 +192,6 @@ def test_modes_derivative_commutators():
|
|
|
188
192
|
# Note that post-fix operators are in the opposite order compared
|
|
189
193
|
# to prefixed commutators, so we pull the post-fix operators out
|
|
190
194
|
# as functions to make things look right.
|
|
191
|
-
np.random.seed(1234)
|
|
192
195
|
L2 = sf.Modes.Lsquared
|
|
193
196
|
Lz = sf.Modes.Lz
|
|
194
197
|
Lp = sf.Modes.Lplus
|
|
@@ -199,6 +202,10 @@ def test_modes_derivative_commutators():
|
|
|
199
202
|
Rm = sf.Modes.Rminus
|
|
200
203
|
eth = lambda modes: modes.eth
|
|
201
204
|
ethbar = lambda modes: modes.ethbar
|
|
205
|
+
|
|
206
|
+
def allclose(a, b):
|
|
207
|
+
return np.allclose(a.ndarray, b.ndarray, rtol=tolerance, atol=tolerance)
|
|
208
|
+
|
|
202
209
|
for s in range(-2, 2+1):
|
|
203
210
|
ell_min = abs(s)
|
|
204
211
|
ell_max = 8
|
|
@@ -215,19 +222,19 @@ def test_modes_derivative_commutators():
|
|
|
215
222
|
for R in [Rz, Rp, Rm]:
|
|
216
223
|
assert np.max(np.abs(R2(R(m)) - R(R2(m)))) < 5*tolerance
|
|
217
224
|
# Test [Lz, Lp] = Lp
|
|
218
|
-
assert
|
|
225
|
+
assert allclose(Lz(Lp(m)) - Lp(Lz(m)), Lp(m))
|
|
219
226
|
# Test [Lz, Lm] = -Lm
|
|
220
|
-
assert
|
|
227
|
+
assert allclose(Lz(Lm(m)) - Lm(Lz(m)), -Lm(m))
|
|
221
228
|
# Test [Lp, Lm] = 2Lz
|
|
222
|
-
assert
|
|
229
|
+
assert allclose(Lp(Lm(m)) - Lm(Lp(m)), 2 * Lz(m))
|
|
223
230
|
# Test [Rz, Rp] = Rp
|
|
224
|
-
assert
|
|
231
|
+
assert allclose(Rz(Rp(m)) - Rp(Rz(m)), Rp(m))
|
|
225
232
|
# Test [Rz, Rm] = -Rm
|
|
226
|
-
assert
|
|
233
|
+
assert allclose(Rz(Rm(m)) - Rm(Rz(m)), -Rm(m))
|
|
227
234
|
# Test [Rp, Rm] = 2Rz
|
|
228
|
-
assert
|
|
235
|
+
assert allclose(Rp(Rm(m)) - Rm(Rp(m)), 2 * Rz(m))
|
|
229
236
|
# Test [ethbar, eth] = 2s
|
|
230
|
-
assert
|
|
237
|
+
assert allclose(ethbar(eth(m)) - eth(ethbar(m)), 2 * m.s * m)
|
|
231
238
|
|
|
232
239
|
|
|
233
240
|
@skip_macOS_GH_actions_downloads
|
sxs-2025.0.18/sxs/__version__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2025.0.18"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|