sxs 2024.0.44__tar.gz → 2025.0.2__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.44 → sxs-2025.0.2}/.github/workflows/build.yml +1 -1
- {sxs-2024.0.44 → sxs-2025.0.2}/CITATION.cff +2 -2
- {sxs-2024.0.44 → sxs-2025.0.2}/PKG-INFO +2 -1
- {sxs-2024.0.44 → sxs-2025.0.2}/pyproject.toml +2 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/__init__.py +1 -1
- sxs-2025.0.2/sxs/__version__.py +1 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/handlers.py +23 -20
- sxs-2025.0.2/sxs/metadata/__init__.py +2 -0
- sxs-2025.0.2/sxs/metadata/metadata.py +2 -0
- sxs-2025.0.2/sxs/metadata/metric.py +1 -0
- sxs-2025.0.2/sxs/simulations/local.py +1 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/simulations/simulation.py +19 -4
- sxs-2025.0.2/sxs/simulations/simulations.py +2 -0
- sxs-2025.0.2/sxs/utilities/downloads.py +2 -0
- sxs-2025.0.2/sxs/utilities/string_converters.py +1 -0
- sxs-2025.0.2/sxs/utilities/sxs_directories.py +69 -0
- sxs-2025.0.2/sxs/utilities/sxs_identifiers.py +2 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/lvc.py +6 -5
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/rotating_paired_diff_multishuffle_bzip2.py +6 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/__init__.py +1 -11
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/conftest.py +1 -1
- sxs-2024.0.44/sxs/__version__.py +0 -1
- sxs-2024.0.44/sxs/caltechdata/__init__.py +0 -342
- sxs-2024.0.44/sxs/caltechdata/catalog.py +0 -85
- sxs-2024.0.44/sxs/caltechdata/login.py +0 -506
- sxs-2024.0.44/sxs/metadata/__init__.py +0 -10
- sxs-2024.0.44/sxs/metadata/metadata.py +0 -641
- sxs-2024.0.44/sxs/metadata/metric.py +0 -152
- sxs-2024.0.44/sxs/simulations/local.py +0 -227
- sxs-2024.0.44/sxs/simulations/simulations.py +0 -573
- sxs-2024.0.44/sxs/utilities/downloads.py +0 -104
- sxs-2024.0.44/sxs/utilities/string_converters.py +0 -47
- sxs-2024.0.44/sxs/utilities/sxs_directories.py +0 -273
- sxs-2024.0.44/sxs/utilities/sxs_identifiers.py +0 -127
- {sxs-2024.0.44 → sxs-2025.0.2}/.codecov.yml +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/.github/dependabot.yml +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/.github/scripts/parse_bump_rule.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/.github/workflows/pr_rtd_link.yml +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/.gitignore +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/.readthedocs.yaml +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/LICENSE +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/README.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/catalog.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/horizons.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/load.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/metadata.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/simulation.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/simulations.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/time_series.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/waveforms.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/html/main.html +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/images/favicon.ico +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/index.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/javascript/mathjax.js +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/julia.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/mathematica.md +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/stylesheets/extra.css +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/00-Introduction.ipynb +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/01-Simulations_and_Metadata.ipynb +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/02-Simulation.ipynb +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/03-Horizons.ipynb +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/04-Waveforms.ipynb +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/05-PreprocessingForFFTs.ipynb +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/mkdocs.yml +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/catalog/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/catalog/catalog.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/catalog/create.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/catalog/description.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/horizons/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/horizons/spec_horizons_h5.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/horizons/xor_multishuffle_bzip2.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/julia/GWFrames.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/julia/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/juliapkg.json +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/simulations/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/time_series.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/bitwise.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/greedy_spline.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/linear_bisection.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/peak_greed.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/suppression.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/dicts.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/files.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/formats.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/inspire.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/comparisons.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/conversion.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/dataset.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/horizons.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/metadata.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/waveform_amp_phase.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/waveforms.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/monotonicity.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/pretty_print.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/ads.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/arxiv.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/fairchild_report.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/inspire.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/journal_abbreviations.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/references.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/select.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/smooth_functions.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/url.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/alignment.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/grathena.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/nrar.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/rotating_paired_xor_multishuffle_bzip2.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/spectre_cce_v1.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/memory.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/mode_utilities.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/transformations.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/waveform_grid.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/waveform_mixin.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/waveform_modes.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/waveform_signal.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/api/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/api/deposit.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/api/login.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/api/records.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/catalog.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/creators.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/simannex.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/surrogatemodeling.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/__init__.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_catalog.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_horizons.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_julia.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_loader.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_metadata.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_simulation.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_time_series.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_transformations.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_utilities.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_waveform_rotations.py +0 -0
- {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_waveforms.py +0 -0
|
@@ -47,7 +47,7 @@ jobs:
|
|
|
47
47
|
if: ${{ env.skipping_build_and_test_replicate != 'true' }}
|
|
48
48
|
uses: actions/cache@v4
|
|
49
49
|
with:
|
|
50
|
-
key: sxs-${{ runner.os }}-
|
|
50
|
+
key: sxs-${{ runner.os }}-2 # Increment this number whenever the cached files should change
|
|
51
51
|
path: |
|
|
52
52
|
${{ runner.os == 'Linux' && '/home/runner/.cache/sxs' || runner.os == 'Windows' && 'C:\Users\runneradmin\.sxs\cache' || '/Users/runner/.sxs/cache' }}
|
|
53
53
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sxs
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2025.0.2
|
|
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/
|
|
@@ -46,6 +46,7 @@ Requires-Dist: quaternionic>=1.0.15
|
|
|
46
46
|
Requires-Dist: requests>=2.24.0
|
|
47
47
|
Requires-Dist: scipy>=1.13
|
|
48
48
|
Requires-Dist: spherical>=1.0.15
|
|
49
|
+
Requires-Dist: sxscatalog>=3.0.0a26
|
|
49
50
|
Requires-Dist: tqdm>=4.63.1
|
|
50
51
|
Requires-Dist: urllib3>=1.25.10
|
|
51
52
|
Provides-Extra: docs
|
|
@@ -18,6 +18,7 @@ classifiers = [
|
|
|
18
18
|
"Topic :: Scientific/Engineering :: Astronomy"
|
|
19
19
|
]
|
|
20
20
|
dependencies = [
|
|
21
|
+
"sxscatalog >=3.0.0a26",
|
|
21
22
|
"numpy >=1.25",
|
|
22
23
|
"scipy >=1.13",
|
|
23
24
|
"numba >=0.55; implementation_name == 'cpython'",
|
|
@@ -72,6 +73,7 @@ path = "sxs/__version__.py"
|
|
|
72
73
|
|
|
73
74
|
[tool.hatch.envs.default]
|
|
74
75
|
dependencies = [
|
|
76
|
+
"ipython",
|
|
75
77
|
"pytest",
|
|
76
78
|
"pytest-cov",
|
|
77
79
|
"pytest-forked >=1.3.0",
|
|
@@ -28,7 +28,7 @@ from .waveforms import WaveformModes, WaveformModesDict, to_lvc_conventions #, W
|
|
|
28
28
|
from .waveforms import rotating_paired_xor_multishuffle_bzip2 as rpxmb
|
|
29
29
|
from .waveforms import rotating_paired_diff_multishuffle_bzip2 as rpdmb
|
|
30
30
|
from .waveforms import spectre_cce_v1
|
|
31
|
-
from . import catalog, metadata, horizons, waveforms, zenodo
|
|
31
|
+
from . import catalog, metadata, horizons, waveforms, zenodo
|
|
32
32
|
from .simulations import Simulation, Simulations, write_local_simulations, local_simulations
|
|
33
33
|
from .handlers import load, load_via_sxs_id, loadcontext, load_lvc
|
|
34
34
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2025.0.2"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Functions to facilitate generic handling of SXS-format data files"""
|
|
2
2
|
|
|
3
3
|
import contextlib
|
|
4
|
+
import sxscatalog
|
|
4
5
|
from . import waveforms, doi_url
|
|
5
6
|
|
|
6
7
|
|
|
@@ -236,7 +237,7 @@ def load(location, download=None, cache=None, progress=None, truepath=None, **kw
|
|
|
236
237
|
import pathlib
|
|
237
238
|
import urllib.request
|
|
238
239
|
from . import Simulations, Simulation, read_config, sxs_directory, Catalog
|
|
239
|
-
from .utilities import url, download_file, sxs_path_to_system_path, sxs_id_version_lev_exact_re, lev_path_re
|
|
240
|
+
from .utilities import url, download_file, sxs_path_to_system_path, sxs_id_version_lev_exact_re, lev_path_re, sxs_identifier_re
|
|
240
241
|
|
|
241
242
|
# Note: `download` and/or `cache` may still be `None` after this
|
|
242
243
|
if download is None:
|
|
@@ -280,25 +281,8 @@ def load(location, download=None, cache=None, progress=None, truepath=None, **kw
|
|
|
280
281
|
elif location == "catalog":
|
|
281
282
|
return Catalog.load(download=download)
|
|
282
283
|
|
|
283
|
-
elif location
|
|
284
|
-
return
|
|
285
|
-
download=download,
|
|
286
|
-
local=kwargs.get("local", False),
|
|
287
|
-
annex_dir=kwargs.get("annex_dir", None),
|
|
288
|
-
output_file=kwargs.get("output_file", None),
|
|
289
|
-
compute_md5=kwargs.get("compute_md5", False),
|
|
290
|
-
show_progress=kwargs.get("show_progress", False)
|
|
291
|
-
)
|
|
292
|
-
|
|
293
|
-
elif location == "dataframe":
|
|
294
|
-
return Simulations.load(
|
|
295
|
-
download=download,
|
|
296
|
-
local=kwargs.get("local", False),
|
|
297
|
-
annex_dir=kwargs.get("annex_dir", None),
|
|
298
|
-
output_file=kwargs.get("output_file", None),
|
|
299
|
-
compute_md5=kwargs.get("compute_md5", False),
|
|
300
|
-
show_progress=kwargs.get("show_progress", False)
|
|
301
|
-
).dataframe
|
|
284
|
+
elif location in ["simulations", "dataframe"]:
|
|
285
|
+
return sxscatalog.load(location, download=download, **kwargs)
|
|
302
286
|
|
|
303
287
|
elif sxs_id_version_lev_exact_re.match(location):
|
|
304
288
|
return Simulation(location, download=download, cache=cache, progress=progress, **kwargs)
|
|
@@ -310,11 +294,30 @@ def load(location, download=None, cache=None, progress=None, truepath=None, **kw
|
|
|
310
294
|
local=kwargs.get("local", False),
|
|
311
295
|
annex_dir=kwargs.get("annex_dir", None)
|
|
312
296
|
)
|
|
297
|
+
# If we chop off any "/LevN", and it's in the simulations, load it as a simulation
|
|
313
298
|
if lev_path_re.sub("", location) in simulations:
|
|
314
299
|
return Simulation(
|
|
315
300
|
location, download=download, cache=cache, progress=progress, **kwargs
|
|
316
301
|
)
|
|
317
302
|
|
|
303
|
+
# Now we look for a file in `simulations`
|
|
304
|
+
if sxs_identifier_re.match(location):
|
|
305
|
+
split_location = sxs_identifier_re.split(location)
|
|
306
|
+
# Currently we can only handle unversioned SXS ID files
|
|
307
|
+
if split_location[5] is None:
|
|
308
|
+
sxs_id = split_location[1]
|
|
309
|
+
file = split_location[-1].lstrip("/").lstrip("\\")
|
|
310
|
+
if sxs_id in simulations:
|
|
311
|
+
simulation = simulations[sxs_id]
|
|
312
|
+
if "files" in simulation:
|
|
313
|
+
file_info = simulation["files"][file]
|
|
314
|
+
location = file_info["link"]
|
|
315
|
+
truepath = truepath or (pathlib.Path(sxs_id) / file)
|
|
316
|
+
return load(
|
|
317
|
+
location, truepath=truepath,
|
|
318
|
+
download=download, cache=cache, progress=progress, **kwargs
|
|
319
|
+
)
|
|
320
|
+
|
|
318
321
|
# Try to find an appropriate SXS file in the catalog
|
|
319
322
|
catalog = Catalog.load(download=download)
|
|
320
323
|
selections = catalog.select_files(location)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from sxscatalog.metadata.metric import *
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from sxscatalog.simulations.local import *
|
|
@@ -124,9 +124,15 @@ def Simulation(location, *args, **kwargs):
|
|
|
124
124
|
metadata = Metadata(simulations[simulation_id])
|
|
125
125
|
series = simulations.dataframe.loc[simulation_id]
|
|
126
126
|
|
|
127
|
+
# If input_version is not the default, remove "files" from metadata
|
|
128
|
+
if input_version and input_version != max(metadata.get("DOI_versions", []), default=""):
|
|
129
|
+
metadata = type(metadata)({
|
|
130
|
+
key: value for key, value in metadata.items() if key != "files"
|
|
131
|
+
})
|
|
132
|
+
|
|
127
133
|
# Check if the specified version exists in the simulation catalog
|
|
128
134
|
if not hasattr(metadata, "DOI_versions"):
|
|
129
|
-
input_version = "v0.0"
|
|
135
|
+
input_version = "v0.0" # A fake version, to signal this sim doesn't know about DOIs
|
|
130
136
|
if input_version != "v0.0" and input_version not in metadata.DOI_versions:
|
|
131
137
|
raise ValueError(f"Version '{input_version}' not found in simulation catalog for '{simulation_id}'")
|
|
132
138
|
|
|
@@ -217,10 +223,14 @@ def Simulation(location, *args, **kwargs):
|
|
|
217
223
|
sim = Simulation_v1(
|
|
218
224
|
metadata, series, version, sxs_id_stem, sxs_id, url, files, lev_numbers, output_lev_number, location, *args, **kwargs
|
|
219
225
|
)
|
|
220
|
-
elif 2 <= version_number < 3.0
|
|
226
|
+
elif 2 <= version_number < 3.0:
|
|
221
227
|
sim = Simulation_v2(
|
|
222
228
|
metadata, series, version, sxs_id_stem, sxs_id, url, files, lev_numbers, output_lev_number, location, *args, **kwargs
|
|
223
229
|
)
|
|
230
|
+
elif 3 <= version_number < 4.0 or version == "v0.0":
|
|
231
|
+
sim = Simulation_v3(
|
|
232
|
+
metadata, series, version, sxs_id_stem, sxs_id, url, files, lev_numbers, output_lev_number, location, *args, **kwargs
|
|
233
|
+
)
|
|
224
234
|
else:
|
|
225
235
|
raise ValueError(f"Version '{version}' not yet supported")
|
|
226
236
|
sim.__file__ = str(sxs_directory("cache") / sxs_path_to_system_path(sim.sxs_id))
|
|
@@ -365,7 +375,7 @@ class SimulationBase:
|
|
|
365
375
|
dataframe = load("simulations").dataframe
|
|
366
376
|
metadata_metric = metadata_metric or MetadataMetric()
|
|
367
377
|
if drop_deprecated:
|
|
368
|
-
dataframe = dataframe[~dataframe
|
|
378
|
+
dataframe = dataframe[~dataframe["deprecated"]]
|
|
369
379
|
return dataframe.apply(
|
|
370
380
|
lambda m: sqrt(metadata_metric(self.metadata, m)),
|
|
371
381
|
axis=1
|
|
@@ -824,16 +834,21 @@ class Simulation_v2(SimulationBase):
|
|
|
824
834
|
json_location = self.files.get(json_path)["link"]
|
|
825
835
|
h5_truepath = Path(sxs_path_to_system_path(sxs_id_path / h5_path))
|
|
826
836
|
json_truepath = Path(sxs_path_to_system_path(sxs_id_path / json_path))
|
|
837
|
+
json_truepath = sxs_directory("cache") / json_truepath
|
|
827
838
|
if not Path(json_location).exists() and not json_truepath.exists():
|
|
828
839
|
if not read_config("download", True):
|
|
829
840
|
raise ValueError(f"{json_truepath} not found and download is disabled")
|
|
830
|
-
download_file(json_location,
|
|
841
|
+
download_file(json_location, json_truepath)
|
|
831
842
|
return load(
|
|
832
843
|
h5_location, truepath=h5_truepath, group=group, metadata=self.metadata,
|
|
833
844
|
transform_to_inertial=transform_to_inertial
|
|
834
845
|
)
|
|
835
846
|
|
|
836
847
|
|
|
848
|
+
class Simulation_v3(Simulation_v2):
|
|
849
|
+
pass
|
|
850
|
+
|
|
851
|
+
|
|
837
852
|
def get_file_info(metadata, sxs_id, download=None):
|
|
838
853
|
# TODO: Allow an existing zenodo_metadata.json file to be used
|
|
839
854
|
from .. import load_via_sxs_id
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from sxscatalog.utilities.string_converters import *
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""Functions to find user-specific config and cache directories"""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
import platform
|
|
5
|
+
import functools
|
|
6
|
+
from sxscatalog.utilities import read_config, write_config, sxs_directory
|
|
7
|
+
from .sxs_identifiers import sxs_path_re
|
|
8
|
+
|
|
9
|
+
_platform_system = platform.system()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def sxs_path_to_system_path(path):
|
|
13
|
+
r"""Translate SXS path to a system-compatible path
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
path : str
|
|
18
|
+
SXS-style path to a file — for example, r"SXS:BBH:0123\Lev4:Horizons.h5"
|
|
19
|
+
becomes r"SXS_BBH_0123\Lev4_Horizons.h5" on Windows. Other systems can
|
|
20
|
+
handle the original path, so are not changed.
|
|
21
|
+
|
|
22
|
+
Notes
|
|
23
|
+
-----
|
|
24
|
+
SXS-style paths begin with SXS IDs, which contain colon characters. These
|
|
25
|
+
colons are incompatible with Windows file systems, so we simply replace the
|
|
26
|
+
colons with underscores.
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
if _platform_system == "Windows":
|
|
30
|
+
return sxs_path_re.sub(lambda s: s.group(0).replace(":", "_"), str(path))
|
|
31
|
+
else:
|
|
32
|
+
return path
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def cached_path(path_pattern):
|
|
36
|
+
"""Return path to file in local cache
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
path_pattern : str
|
|
41
|
+
A pattern to search for among the catalog files. See the docstring of
|
|
42
|
+
`sxs.Catalog.select` for details about how this pattern is used.
|
|
43
|
+
|
|
44
|
+
Returns
|
|
45
|
+
-------
|
|
46
|
+
path : pathlib.Path
|
|
47
|
+
Full path to file on this system. The file may not exist.
|
|
48
|
+
|
|
49
|
+
Raises
|
|
50
|
+
------
|
|
51
|
+
StopIteration
|
|
52
|
+
When no result is found for the input `path_pattern`.
|
|
53
|
+
|
|
54
|
+
Notes
|
|
55
|
+
-----
|
|
56
|
+
This function returns just one path, corresponding to the first result returned
|
|
57
|
+
by `catalog.select_files(path_pattern)`.
|
|
58
|
+
|
|
59
|
+
"""
|
|
60
|
+
import contextlib
|
|
61
|
+
from .. import load
|
|
62
|
+
with contextlib.redirect_stdout(None):
|
|
63
|
+
catalog = load("catalog")
|
|
64
|
+
file_infos = catalog.select_files(path_pattern)
|
|
65
|
+
sxs_path, file_info = next(iter(file_infos.items()))
|
|
66
|
+
cache_path = sxs_directory("cache")
|
|
67
|
+
truepath = sxs_path_to_system_path(file_info.get("truepath", sxs_path))
|
|
68
|
+
path = cache_path / truepath
|
|
69
|
+
return path
|
|
@@ -36,11 +36,12 @@ def to_lvc_conventions(
|
|
|
36
36
|
):
|
|
37
37
|
r"""Return SXS waveform in LVC conventions.
|
|
38
38
|
|
|
39
|
-
This is the function underpinning `
|
|
40
|
-
that function is a
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
outputs, see that
|
|
39
|
+
This is the function underpinning the `to_lvk` method of the
|
|
40
|
+
various `Simulation` types. Essentially, that function is a
|
|
41
|
+
fairly thin wrapper around this one; it just loads the `h` and
|
|
42
|
+
`horizons` data and passes it to this function. For explanation
|
|
43
|
+
of what this function does, the inputs, and outputs, see that
|
|
44
|
+
function's docstring.
|
|
44
45
|
|
|
45
46
|
"""
|
|
46
47
|
if t_ref is None and f_ref is None:
|
|
@@ -413,6 +413,12 @@ def load(
|
|
|
413
413
|
raise ValueError(message)
|
|
414
414
|
|
|
415
415
|
file_name_str = str(file_name)
|
|
416
|
+
if file_name_str.endswith(".json"):
|
|
417
|
+
# This is just a JSON file with the "sxs_format" key, not an H5 file
|
|
418
|
+
# with the data in it. Just return the JSON data.
|
|
419
|
+
from ...handlers import JSONHandler
|
|
420
|
+
return JSONHandler.load(file_name_str)
|
|
421
|
+
|
|
416
422
|
group = kwargs.get("group", None)
|
|
417
423
|
if ".h5" in file_name_str and not file_name_str.endswith(".h5"):
|
|
418
424
|
file_name_str, group = file_name_str.split(".h5")
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import os.path
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
|
|
7
|
+
from sxscatalog.utilities import path_to_invenio, invenio_to_path
|
|
8
8
|
from .api import Login, Deposit, Records
|
|
9
9
|
from . import catalog, simannex, surrogatemodeling
|
|
10
10
|
|
|
@@ -12,16 +12,6 @@ from . import catalog, simannex, surrogatemodeling
|
|
|
12
12
|
# The other python API interface I found is here: https://github.com/moble/zenodo-python
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def path_to_invenio(file_path):
|
|
16
|
-
"""Convert a file path to an invenio-compatible name"""
|
|
17
|
-
return str(file_path).replace(os.path.sep, ":")
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def invenio_to_path(file_name):
|
|
21
|
-
"""Convert an invenio-compatible name to a file path"""
|
|
22
|
-
return Path(file_name.replace(":", os.path.sep))
|
|
23
|
-
|
|
24
|
-
|
|
25
15
|
def translate(sxs_identifier, url=False):
|
|
26
16
|
"""Query data.black-holes.org to get the current Zenodo equivalent of the given SXS ID
|
|
27
17
|
|
|
@@ -29,7 +29,7 @@ GITHUB_ACTIONS_MACOS = (
|
|
|
29
29
|
# will work adequately. Note that if macos tests are failing, it may be
|
|
30
30
|
# time to increment the cache version number in .github/workflows/build.yml;
|
|
31
31
|
# try that before re-enabling this decorator.
|
|
32
|
-
if
|
|
32
|
+
if GITHUB_ACTIONS_MACOS:
|
|
33
33
|
skip_macOS_GH_actions_downloads = pytest.mark.skip(
|
|
34
34
|
reason="macOS runners on GitHub Actions have connectivity problems"
|
|
35
35
|
)
|
sxs-2024.0.44/sxs/__version__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2024.0.44"
|