sxs 2024.0.28__tar.gz → 2024.0.30__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-2024.0.28 → sxs-2024.0.30}/.github/workflows/build.yml +7 -29
- {sxs-2024.0.28 → sxs-2024.0.30}/CITATION.cff +2 -2
- {sxs-2024.0.28 → sxs-2024.0.30}/PKG-INFO +1 -1
- sxs-2024.0.30/sxs/__version__.py +1 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/metadata/metadata.py +22 -9
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/simulations/simulation.py +7 -1
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/simulations/simulations.py +25 -3
- sxs-2024.0.30/tests/test_simulation.py +67 -0
- sxs-2024.0.28/sxs/__version__.py +0 -1
- sxs-2024.0.28/tests/test_simulation.py +0 -67
- {sxs-2024.0.28 → sxs-2024.0.30}/.codecov.yml +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/.github/dependabot.yml +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/.github/scripts/parse_bump_rule.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/.github/workflows/pr_rtd_link.yml +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/.gitignore +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/.readthedocs.yaml +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/LICENSE +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/README.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/api/catalog.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/api/horizons.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/api/load.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/api/metadata.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/api/simulation.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/api/simulations.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/api/time_series.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/api/waveforms.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/html/main.html +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/images/favicon.ico +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/index.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/javascript/mathjax.js +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/julia.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/mathematica.md +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/stylesheets/extra.css +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/tutorials/00-Introduction.ipynb +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/tutorials/01-Simulations_and_Metadata.ipynb +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/tutorials/02-Simulation.ipynb +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/tutorials/03-Horizons.ipynb +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/tutorials/04-Waveforms.ipynb +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/docs/tutorials/05-PreprocessingForFFTs.ipynb +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/mkdocs.yml +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/pyproject.toml +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/caltechdata/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/caltechdata/catalog.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/caltechdata/login.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/catalog/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/catalog/catalog.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/catalog/create.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/catalog/description.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/handlers.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/horizons/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/horizons/spec_horizons_h5.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/horizons/xor_multishuffle_bzip2.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/julia/GWFrames.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/julia/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/juliapkg.json +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/metadata/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/simulations/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/simulations/local.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/time_series.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/bitwise.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/decimation/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/decimation/greedy_spline.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/decimation/linear_bisection.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/decimation/peak_greed.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/decimation/suppression.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/dicts.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/downloads.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/files.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/formats.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/inspire.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/lvcnr/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/lvcnr/comparisons.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/lvcnr/conversion.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/lvcnr/dataset.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/lvcnr/horizons.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/lvcnr/metadata.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/lvcnr/waveform_amp_phase.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/lvcnr/waveforms.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/monotonicity.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/pretty_print.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/references/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/references/ads.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/references/arxiv.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/references/fairchild_report.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/references/inspire.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/references/journal_abbreviations.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/references/references.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/select.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/smooth_functions.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/sxs_directories.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/sxs_identifiers.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/utilities/url.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/alignment.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/format_handlers/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/format_handlers/grathena.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/format_handlers/lvc.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/format_handlers/nrar.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/format_handlers/rotating_paired_diff_multishuffle_bzip2.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/format_handlers/rotating_paired_xor_multishuffle_bzip2.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/format_handlers/spectre_cce_v1.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/memory.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/mode_utilities.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/transformations.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/waveform_grid.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/waveform_mixin.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/waveform_modes.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/waveforms/waveform_signal.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/api/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/api/deposit.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/api/login.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/api/records.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/catalog.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/creators.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/simannex.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/sxs/zenodo/surrogatemodeling.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/__init__.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/conftest.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_catalog.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_horizons.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_julia.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_loader.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_metadata.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_time_series.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_transformations.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_utilities.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_waveform_rotations.py +0 -0
- {sxs-2024.0.28 → sxs-2024.0.30}/tests/test_waveforms.py +0 -0
|
@@ -30,7 +30,10 @@ jobs:
|
|
|
30
30
|
fail-fast: false
|
|
31
31
|
matrix:
|
|
32
32
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
33
|
-
python-version: ['3.10', '3.
|
|
33
|
+
python-version: ['3.10', '3.13']
|
|
34
|
+
exclude:
|
|
35
|
+
- os: windows-latest
|
|
36
|
+
python-version: '3.13'
|
|
34
37
|
|
|
35
38
|
steps:
|
|
36
39
|
- name: Skip replicates on main branch
|
|
@@ -78,7 +81,7 @@ jobs:
|
|
|
78
81
|
run: hatch run test
|
|
79
82
|
|
|
80
83
|
- name: Upload coverage
|
|
81
|
-
if: "matrix.python-version == '3.
|
|
84
|
+
if: "matrix.python-version == '3.13' && matrix.os == 'ubuntu-latest'"
|
|
82
85
|
uses: codecov/codecov-action@v5
|
|
83
86
|
with:
|
|
84
87
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -98,10 +101,10 @@ jobs:
|
|
|
98
101
|
- name: Check out code
|
|
99
102
|
uses: actions/checkout@v4
|
|
100
103
|
|
|
101
|
-
- name: Set up Python
|
|
104
|
+
- name: Set up Python
|
|
102
105
|
uses: actions/setup-python@v5
|
|
103
106
|
with:
|
|
104
|
-
python-version:
|
|
107
|
+
python-version: '3.13'
|
|
105
108
|
|
|
106
109
|
- name: Install Hatch
|
|
107
110
|
run: python -m pip install --disable-pip-version-check --upgrade hatch
|
|
@@ -168,28 +171,3 @@ jobs:
|
|
|
168
171
|
run: |
|
|
169
172
|
hatch build
|
|
170
173
|
hatch publish
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
binder:
|
|
174
|
-
name: Trigger a binder rebuild
|
|
175
|
-
needs: release
|
|
176
|
-
runs-on: ubuntu-latest
|
|
177
|
-
if: >-
|
|
178
|
-
github.ref == 'refs/heads/main'
|
|
179
|
-
&& !contains(github.event.head_commit.message, '[no release]')
|
|
180
|
-
&& (success() || contains(github.event.head_commit.message, '[skip tests]'))
|
|
181
|
-
|
|
182
|
-
steps:
|
|
183
|
-
- name: Trigger other repository
|
|
184
|
-
# I created a new personal access token via github profile > settings > developer settings >
|
|
185
|
-
# personal access tokens. I clicked the "repo" checkbox, created the token, and copied it.
|
|
186
|
-
# Then, I went to this repo's settings > secrets, and created a new secret named
|
|
187
|
-
# "MOBLE_TOKEN" with a value of "moble:<token>", where <token> is the copied token. This
|
|
188
|
-
# command sends a POST to the other repo, which is set up to build on `workflow_dispatch`.
|
|
189
|
-
run: |
|
|
190
|
-
curl \
|
|
191
|
-
-X POST \
|
|
192
|
-
-H "Accept: application/vnd.github.v3+json" \
|
|
193
|
-
-u ${{ secrets.MOBLE_TOKEN }} \
|
|
194
|
-
https://api.github.com/repos/moble/sxs_notebooks/actions/workflows/binder.yml/dispatches \
|
|
195
|
-
-d '{"ref":"refs/heads/master"}'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sxs
|
|
3
|
-
Version: 2024.0.
|
|
3
|
+
Version: 2024.0.30
|
|
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/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2024.0.30"
|
|
@@ -23,6 +23,17 @@ def _valid_identifier_to_metadata_key(key):
|
|
|
23
23
|
return _metadata_key_map.get(key, key.replace('_', '-'))
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def _backwards_compatibility(metadata):
|
|
27
|
+
"""Deal with the fact that keys have been removed/renamed"""
|
|
28
|
+
# See also `sxs.simulations.simulations.Simulations.dataframe`;
|
|
29
|
+
# it's probably a good idea to duplicate whatever is included here
|
|
30
|
+
# in that function, just to make sure nothing slips through the
|
|
31
|
+
# cracks.
|
|
32
|
+
if "number_of_orbits" not in metadata and "number_of_orbits_from_start" in metadata:
|
|
33
|
+
metadata["number_of_orbits"] = metadata["number_of_orbits_from_start"]
|
|
34
|
+
return metadata
|
|
35
|
+
|
|
36
|
+
|
|
26
37
|
class Metadata(collections.OrderedDict):
|
|
27
38
|
"""Interface to metadata
|
|
28
39
|
|
|
@@ -72,25 +83,27 @@ class Metadata(collections.OrderedDict):
|
|
|
72
83
|
txt_path = path.with_suffix(".txt")
|
|
73
84
|
|
|
74
85
|
if path.suffix == ".json":
|
|
75
|
-
|
|
86
|
+
metadata = cls.from_json_file(json_path)
|
|
76
87
|
elif path.suffix == ".txt":
|
|
77
|
-
|
|
88
|
+
metadata = cls.from_txt_file(txt_path, ignore_invalid_lines=ignore_invalid_lines, cache_json=cache_json)
|
|
78
89
|
else:
|
|
79
90
|
json_exists = json_path.exists()
|
|
80
91
|
txt_exists = txt_path.exists()
|
|
81
92
|
if json_exists and not txt_exists:
|
|
82
|
-
|
|
93
|
+
metadata = cls.from_json_file(json_path)
|
|
83
94
|
elif txt_exists and not json_exists:
|
|
84
|
-
|
|
95
|
+
metadata = cls.from_txt_file(txt_path, ignore_invalid_lines=ignore_invalid_lines, cache_json=cache_json)
|
|
85
96
|
elif json_exists and txt_exists:
|
|
86
97
|
json_time = json_path.stat().st_mtime
|
|
87
98
|
txt_time = txt_path.stat().st_mtime
|
|
88
99
|
if txt_time > json_time:
|
|
89
|
-
|
|
100
|
+
metadata = cls.from_txt_file(txt_path, ignore_invalid_lines=ignore_invalid_lines, cache_json=cache_json)
|
|
90
101
|
else:
|
|
91
|
-
|
|
102
|
+
metadata = cls.from_json_file(json_path)
|
|
92
103
|
else:
|
|
93
104
|
raise ValueError(f"Could not find file named '{json_path}' or '{txt_path}'")
|
|
105
|
+
|
|
106
|
+
return _backwards_compatibility(metadata)
|
|
94
107
|
|
|
95
108
|
load = from_file
|
|
96
109
|
|
|
@@ -113,7 +126,7 @@ class Metadata(collections.OrderedDict):
|
|
|
113
126
|
"""
|
|
114
127
|
import json
|
|
115
128
|
# noinspection PyTypeChecker
|
|
116
|
-
return json.load(json_data, object_pairs_hook=cls)
|
|
129
|
+
return _backwards_compatibility(json.load(json_data, object_pairs_hook=cls))
|
|
117
130
|
|
|
118
131
|
@classmethod
|
|
119
132
|
def from_json_file(cls, json_file):
|
|
@@ -136,7 +149,7 @@ class Metadata(collections.OrderedDict):
|
|
|
136
149
|
# noinspection PyTypeChecker
|
|
137
150
|
metadata = json.load(metadata_file, object_pairs_hook=cls)
|
|
138
151
|
metadata["metadata_path"] = str(json_file)
|
|
139
|
-
return metadata
|
|
152
|
+
return _backwards_compatibility(metadata)
|
|
140
153
|
|
|
141
154
|
@classmethod
|
|
142
155
|
def from_txt_file(cls, txt_file, ignore_invalid_lines=False, cache_json=True):
|
|
@@ -259,7 +272,7 @@ class Metadata(collections.OrderedDict):
|
|
|
259
272
|
metadata.to_json_file(path.with_suffix(".json"))
|
|
260
273
|
|
|
261
274
|
metadata["metadata_path"] = str(txt_file)
|
|
262
|
-
return metadata
|
|
275
|
+
return _backwards_compatibility(metadata)
|
|
263
276
|
|
|
264
277
|
def to_json(self, indent=4, separators=(",", ": ")):
|
|
265
278
|
"""Export to JSON string"""
|
|
@@ -133,7 +133,7 @@ def Simulation(location, *args, **kwargs):
|
|
|
133
133
|
url = f"{doi_url}{sxs_id}"
|
|
134
134
|
|
|
135
135
|
# Deal with "superseded_by" field, or "deprecated" keyword in the metadata
|
|
136
|
-
deprecated = ("deprecated" in metadata.get("keywords", []) or metadata.get("superseded_by", False))
|
|
136
|
+
deprecated = ("deprecated" in metadata.get("keywords", []) )#or metadata.get("superseded_by", False))
|
|
137
137
|
if not kwargs.get("ignore_deprecation", False):
|
|
138
138
|
auto_supersede = kwargs.get("auto_supersede", read_config("auto_supersede", False))
|
|
139
139
|
if (
|
|
@@ -160,6 +160,12 @@ def Simulation(location, *args, **kwargs):
|
|
|
160
160
|
+ "specify a version to load this waveform anyway."
|
|
161
161
|
)
|
|
162
162
|
elif auto_supersede and isinstance(superseded_by, str):
|
|
163
|
+
# raise NotImplementedError(
|
|
164
|
+
# f"\nSimulation '{sxs_id}' cannot be automatically superseded.\n"
|
|
165
|
+
# + "The auto_supersede option is temporarily disabled. The superseding\n"
|
|
166
|
+
# + "simulations have been removed from the metadata, and the new function\n"
|
|
167
|
+
# + "to load them has not yet been implemented. Please specify a version.\n"
|
|
168
|
+
# )
|
|
163
169
|
message = f"\nSimulation '{sxs_id}' is being automatically superseded by '{superseded_by}'."
|
|
164
170
|
warn(message)
|
|
165
171
|
new_location = f"{superseded_by}{input_version}"
|
|
@@ -404,6 +404,18 @@ class Simulations(collections.OrderedDict):
|
|
|
404
404
|
|
|
405
405
|
simulations = pd.DataFrame.from_dict(self, orient="index")
|
|
406
406
|
|
|
407
|
+
# See also below for "number_of_orbits" field.
|
|
408
|
+
# See also `sxs.metadata.metadata._backwards_compatibility`;
|
|
409
|
+
# it's probably a good idea to duplicate whatever is included
|
|
410
|
+
# here in that function, just to make sure nothing slips
|
|
411
|
+
# through the cracks.
|
|
412
|
+
for col in [
|
|
413
|
+
"number_of_orbits", "number_of_orbits_from_start",
|
|
414
|
+
"number_of_orbits_from_reference_time"
|
|
415
|
+
]:
|
|
416
|
+
if col not in simulations.columns:
|
|
417
|
+
simulations[col] = np.nan
|
|
418
|
+
|
|
407
419
|
def floater(x):
|
|
408
420
|
try:
|
|
409
421
|
f = float(x)
|
|
@@ -509,7 +521,9 @@ class Simulations(collections.OrderedDict):
|
|
|
509
521
|
# simulations["end_of_trajectory_time"].map(floater),
|
|
510
522
|
# simulations["merger_time"].map(floater),
|
|
511
523
|
simulations["number_of_orbits"].map(floater),
|
|
512
|
-
simulations["
|
|
524
|
+
simulations["number_of_orbits_from_start"].map(floater),
|
|
525
|
+
simulations["number_of_orbits_from_reference_time"].map(floater),
|
|
526
|
+
# simulations["superseded_by"],
|
|
513
527
|
simulations["DOI_versions"],
|
|
514
528
|
simulations["keywords"],
|
|
515
529
|
simulations["date_link_earliest"].map(datetime_from_string),
|
|
@@ -519,10 +533,18 @@ class Simulations(collections.OrderedDict):
|
|
|
519
533
|
), axis=1))
|
|
520
534
|
|
|
521
535
|
sims_df.insert(0, "deprecated", (
|
|
522
|
-
~sims_df.superseded_by.isna()
|
|
523
|
-
|
|
536
|
+
# ~sims_df.superseded_by.isna() |
|
|
537
|
+
sims_df["keywords"].map(lambda ks: "deprecated" in ks)
|
|
524
538
|
))
|
|
525
539
|
|
|
540
|
+
# See also `sxs.metadata.metadata._backwards_compatibility`;
|
|
541
|
+
# it's probably a good idea to duplicate whatever is included
|
|
542
|
+
# here in that function, just to make sure nothing slips
|
|
543
|
+
# through the cracks.
|
|
544
|
+
sims_df["number_of_orbits"] = sims_df["number_of_orbits"].fillna(
|
|
545
|
+
sims_df["number_of_orbits_from_start"]
|
|
546
|
+
)
|
|
547
|
+
|
|
526
548
|
# We have ignored the following fields present in the
|
|
527
549
|
# simulations.json file (as of 2024-08-04), listed here with
|
|
528
550
|
# the number of non-null entries:
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
import sxs
|
|
3
|
+
from .conftest import skip_macOS_GH_actions_downloads
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_sxs_load_v2():
|
|
7
|
+
s = sxs.load("SXS:BBH:0001v2.0")
|
|
8
|
+
assert s.sxs_id_stem == "SXS:BBH:0001"
|
|
9
|
+
assert s.version == "v2.0"
|
|
10
|
+
s.h
|
|
11
|
+
s.horizons
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# @skip_macOS_GH_actions_downloads
|
|
15
|
+
# @pytest.mark.parametrize("loader", [sxs.Simulation, sxs.load])
|
|
16
|
+
# def test_superseded_by_single(loader):
|
|
17
|
+
# simulation = "SXS:BBH:0001"
|
|
18
|
+
# # NOTE: These tests as written will only work so long as only one
|
|
19
|
+
# # simulation is listed in the given simulation's `superseded_by`
|
|
20
|
+
# # field. If more are added, this test will need to be changed to
|
|
21
|
+
# # use a simulation that still has just one.
|
|
22
|
+
# with pytest.raises(ValueError):
|
|
23
|
+
# loader(f"{simulation}")
|
|
24
|
+
# with pytest.warns(UserWarning):
|
|
25
|
+
# s = loader(f"{simulation}v2.0")
|
|
26
|
+
# assert s.sxs_id_stem == simulation
|
|
27
|
+
# s = loader(f"{simulation}", ignore_deprecation=True)
|
|
28
|
+
# assert s.sxs_id_stem == simulation
|
|
29
|
+
# s = loader(f"{simulation}v2.0", ignore_deprecation=True)
|
|
30
|
+
# assert s.sxs_id_stem == simulation
|
|
31
|
+
# with pytest.warns(UserWarning):
|
|
32
|
+
# s = loader(f"{simulation}", auto_supersede=True)
|
|
33
|
+
# assert s.sxs_id_stem != simulation
|
|
34
|
+
# with pytest.warns(UserWarning):
|
|
35
|
+
# s = loader(f"{simulation}v2.0", auto_supersede=True)
|
|
36
|
+
# assert s.sxs_id_stem != simulation
|
|
37
|
+
# s = loader(f"{simulation}", ignore_deprecation=True, auto_supersede=True)
|
|
38
|
+
# assert s.sxs_id_stem == simulation
|
|
39
|
+
# s = loader(f"{simulation}v2.0", ignore_deprecation=True, auto_supersede=True)
|
|
40
|
+
# assert s.sxs_id_stem == simulation
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# @skip_macOS_GH_actions_downloads
|
|
44
|
+
# @pytest.mark.parametrize("loader", [sxs.Simulation, sxs.load])
|
|
45
|
+
# def test_superseded_by_multiple(loader):
|
|
46
|
+
# simulation = "SXS:BBH:0030"
|
|
47
|
+
# # NOTE: These tests assume that multiple simulations are listed in
|
|
48
|
+
# # the given simulation's `superseded_by` field. If that changes
|
|
49
|
+
# # for some reason, this test will need to be changed to use a
|
|
50
|
+
# # simulation that still has multiple simulations.
|
|
51
|
+
# with pytest.raises(ValueError):
|
|
52
|
+
# loader(f"{simulation}")
|
|
53
|
+
# with pytest.warns(UserWarning):
|
|
54
|
+
# s = loader(f"{simulation}v2.0")
|
|
55
|
+
# assert s.sxs_id_stem == simulation
|
|
56
|
+
# s = loader(f"{simulation}", ignore_deprecation=True)
|
|
57
|
+
# assert s.sxs_id_stem == simulation
|
|
58
|
+
# s = loader(f"{simulation}v2.0", ignore_deprecation=True)
|
|
59
|
+
# assert s.sxs_id_stem == simulation
|
|
60
|
+
# with pytest.raises(ValueError):
|
|
61
|
+
# loader(f"{simulation}", auto_supersede=True)
|
|
62
|
+
# with pytest.raises(ValueError):
|
|
63
|
+
# loader(f"{simulation}v2.0", auto_supersede=True)
|
|
64
|
+
# s = loader(f"{simulation}", ignore_deprecation=True, auto_supersede=True)
|
|
65
|
+
# assert s.sxs_id_stem == simulation
|
|
66
|
+
# s = loader(f"{simulation}v2.0", ignore_deprecation=True, auto_supersede=True)
|
|
67
|
+
# assert s.sxs_id_stem == simulation
|
sxs-2024.0.28/sxs/__version__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2024.0.28"
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import pytest
|
|
2
|
-
import sxs
|
|
3
|
-
from .conftest import skip_macOS_GH_actions_downloads
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def test_sxs_load_v2():
|
|
7
|
-
s = sxs.load("SXS:BBH:0001v2.0")
|
|
8
|
-
assert s.sxs_id_stem == "SXS:BBH:0001"
|
|
9
|
-
assert s.version == "v2.0"
|
|
10
|
-
s.h
|
|
11
|
-
s.horizons
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@skip_macOS_GH_actions_downloads
|
|
15
|
-
@pytest.mark.parametrize("loader", [sxs.Simulation, sxs.load])
|
|
16
|
-
def test_superseded_by_single(loader):
|
|
17
|
-
simulation = "SXS:BBH:0001"
|
|
18
|
-
# NOTE: These tests as written will only work so long as only one
|
|
19
|
-
# simulation is listed in the given simulation's `superseded_by`
|
|
20
|
-
# field. If more are added, this test will need to be changed to
|
|
21
|
-
# use a simulation that still has just one.
|
|
22
|
-
with pytest.raises(ValueError):
|
|
23
|
-
loader(f"{simulation}")
|
|
24
|
-
with pytest.warns(UserWarning):
|
|
25
|
-
s = loader(f"{simulation}v2.0")
|
|
26
|
-
assert s.sxs_id_stem == simulation
|
|
27
|
-
s = loader(f"{simulation}", ignore_deprecation=True)
|
|
28
|
-
assert s.sxs_id_stem == simulation
|
|
29
|
-
s = loader(f"{simulation}v2.0", ignore_deprecation=True)
|
|
30
|
-
assert s.sxs_id_stem == simulation
|
|
31
|
-
with pytest.warns(UserWarning):
|
|
32
|
-
s = loader(f"{simulation}", auto_supersede=True)
|
|
33
|
-
assert s.sxs_id_stem != simulation
|
|
34
|
-
with pytest.warns(UserWarning):
|
|
35
|
-
s = loader(f"{simulation}v2.0", auto_supersede=True)
|
|
36
|
-
assert s.sxs_id_stem != simulation
|
|
37
|
-
s = loader(f"{simulation}", ignore_deprecation=True, auto_supersede=True)
|
|
38
|
-
assert s.sxs_id_stem == simulation
|
|
39
|
-
s = loader(f"{simulation}v2.0", ignore_deprecation=True, auto_supersede=True)
|
|
40
|
-
assert s.sxs_id_stem == simulation
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
@skip_macOS_GH_actions_downloads
|
|
44
|
-
@pytest.mark.parametrize("loader", [sxs.Simulation, sxs.load])
|
|
45
|
-
def test_superseded_by_multiple(loader):
|
|
46
|
-
simulation = "SXS:BBH:0030"
|
|
47
|
-
# NOTE: These tests assume that multiple simulations are listed in
|
|
48
|
-
# the given simulation's `superseded_by` field. If that changes
|
|
49
|
-
# for some reason, this test will need to be changed to use a
|
|
50
|
-
# simulation that still has multiple simulations.
|
|
51
|
-
with pytest.raises(ValueError):
|
|
52
|
-
loader(f"{simulation}")
|
|
53
|
-
with pytest.warns(UserWarning):
|
|
54
|
-
s = loader(f"{simulation}v2.0")
|
|
55
|
-
assert s.sxs_id_stem == simulation
|
|
56
|
-
s = loader(f"{simulation}", ignore_deprecation=True)
|
|
57
|
-
assert s.sxs_id_stem == simulation
|
|
58
|
-
s = loader(f"{simulation}v2.0", ignore_deprecation=True)
|
|
59
|
-
assert s.sxs_id_stem == simulation
|
|
60
|
-
with pytest.raises(ValueError):
|
|
61
|
-
loader(f"{simulation}", auto_supersede=True)
|
|
62
|
-
with pytest.raises(ValueError):
|
|
63
|
-
loader(f"{simulation}v2.0", auto_supersede=True)
|
|
64
|
-
s = loader(f"{simulation}", ignore_deprecation=True, auto_supersede=True)
|
|
65
|
-
assert s.sxs_id_stem == simulation
|
|
66
|
-
s = loader(f"{simulation}v2.0", ignore_deprecation=True, auto_supersede=True)
|
|
67
|
-
assert s.sxs_id_stem == simulation
|
|
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
|