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.
Files changed (141) hide show
  1. {sxs-2024.0.44 → sxs-2025.0.2}/.github/workflows/build.yml +1 -1
  2. {sxs-2024.0.44 → sxs-2025.0.2}/CITATION.cff +2 -2
  3. {sxs-2024.0.44 → sxs-2025.0.2}/PKG-INFO +2 -1
  4. {sxs-2024.0.44 → sxs-2025.0.2}/pyproject.toml +2 -0
  5. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/__init__.py +1 -1
  6. sxs-2025.0.2/sxs/__version__.py +1 -0
  7. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/handlers.py +23 -20
  8. sxs-2025.0.2/sxs/metadata/__init__.py +2 -0
  9. sxs-2025.0.2/sxs/metadata/metadata.py +2 -0
  10. sxs-2025.0.2/sxs/metadata/metric.py +1 -0
  11. sxs-2025.0.2/sxs/simulations/local.py +1 -0
  12. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/simulations/simulation.py +19 -4
  13. sxs-2025.0.2/sxs/simulations/simulations.py +2 -0
  14. sxs-2025.0.2/sxs/utilities/downloads.py +2 -0
  15. sxs-2025.0.2/sxs/utilities/string_converters.py +1 -0
  16. sxs-2025.0.2/sxs/utilities/sxs_directories.py +69 -0
  17. sxs-2025.0.2/sxs/utilities/sxs_identifiers.py +2 -0
  18. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/lvc.py +6 -5
  19. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/rotating_paired_diff_multishuffle_bzip2.py +6 -0
  20. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/__init__.py +1 -11
  21. {sxs-2024.0.44 → sxs-2025.0.2}/tests/conftest.py +1 -1
  22. sxs-2024.0.44/sxs/__version__.py +0 -1
  23. sxs-2024.0.44/sxs/caltechdata/__init__.py +0 -342
  24. sxs-2024.0.44/sxs/caltechdata/catalog.py +0 -85
  25. sxs-2024.0.44/sxs/caltechdata/login.py +0 -506
  26. sxs-2024.0.44/sxs/metadata/__init__.py +0 -10
  27. sxs-2024.0.44/sxs/metadata/metadata.py +0 -641
  28. sxs-2024.0.44/sxs/metadata/metric.py +0 -152
  29. sxs-2024.0.44/sxs/simulations/local.py +0 -227
  30. sxs-2024.0.44/sxs/simulations/simulations.py +0 -573
  31. sxs-2024.0.44/sxs/utilities/downloads.py +0 -104
  32. sxs-2024.0.44/sxs/utilities/string_converters.py +0 -47
  33. sxs-2024.0.44/sxs/utilities/sxs_directories.py +0 -273
  34. sxs-2024.0.44/sxs/utilities/sxs_identifiers.py +0 -127
  35. {sxs-2024.0.44 → sxs-2025.0.2}/.codecov.yml +0 -0
  36. {sxs-2024.0.44 → sxs-2025.0.2}/.github/dependabot.yml +0 -0
  37. {sxs-2024.0.44 → sxs-2025.0.2}/.github/scripts/parse_bump_rule.py +0 -0
  38. {sxs-2024.0.44 → sxs-2025.0.2}/.github/workflows/pr_rtd_link.yml +0 -0
  39. {sxs-2024.0.44 → sxs-2025.0.2}/.gitignore +0 -0
  40. {sxs-2024.0.44 → sxs-2025.0.2}/.readthedocs.yaml +0 -0
  41. {sxs-2024.0.44 → sxs-2025.0.2}/LICENSE +0 -0
  42. {sxs-2024.0.44 → sxs-2025.0.2}/README.md +0 -0
  43. {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/catalog.md +0 -0
  44. {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/horizons.md +0 -0
  45. {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/load.md +0 -0
  46. {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/metadata.md +0 -0
  47. {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/simulation.md +0 -0
  48. {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/simulations.md +0 -0
  49. {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/time_series.md +0 -0
  50. {sxs-2024.0.44 → sxs-2025.0.2}/docs/api/waveforms.md +0 -0
  51. {sxs-2024.0.44 → sxs-2025.0.2}/docs/html/main.html +0 -0
  52. {sxs-2024.0.44 → sxs-2025.0.2}/docs/images/favicon.ico +0 -0
  53. {sxs-2024.0.44 → sxs-2025.0.2}/docs/index.md +0 -0
  54. {sxs-2024.0.44 → sxs-2025.0.2}/docs/javascript/mathjax.js +0 -0
  55. {sxs-2024.0.44 → sxs-2025.0.2}/docs/julia.md +0 -0
  56. {sxs-2024.0.44 → sxs-2025.0.2}/docs/mathematica.md +0 -0
  57. {sxs-2024.0.44 → sxs-2025.0.2}/docs/stylesheets/extra.css +0 -0
  58. {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/00-Introduction.ipynb +0 -0
  59. {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/01-Simulations_and_Metadata.ipynb +0 -0
  60. {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/02-Simulation.ipynb +0 -0
  61. {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/03-Horizons.ipynb +0 -0
  62. {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/04-Waveforms.ipynb +0 -0
  63. {sxs-2024.0.44 → sxs-2025.0.2}/docs/tutorials/05-PreprocessingForFFTs.ipynb +0 -0
  64. {sxs-2024.0.44 → sxs-2025.0.2}/mkdocs.yml +0 -0
  65. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/catalog/__init__.py +0 -0
  66. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/catalog/catalog.py +0 -0
  67. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/catalog/create.py +0 -0
  68. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/catalog/description.py +0 -0
  69. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/horizons/__init__.py +0 -0
  70. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/horizons/spec_horizons_h5.py +0 -0
  71. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/horizons/xor_multishuffle_bzip2.py +0 -0
  72. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/julia/GWFrames.py +0 -0
  73. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/julia/__init__.py +0 -0
  74. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/juliapkg.json +0 -0
  75. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/simulations/__init__.py +0 -0
  76. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/time_series.py +0 -0
  77. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/__init__.py +0 -0
  78. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/bitwise.py +0 -0
  79. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/__init__.py +0 -0
  80. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/greedy_spline.py +0 -0
  81. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/linear_bisection.py +0 -0
  82. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/peak_greed.py +0 -0
  83. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/decimation/suppression.py +0 -0
  84. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/dicts.py +0 -0
  85. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/files.py +0 -0
  86. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/formats.py +0 -0
  87. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/inspire.py +0 -0
  88. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/__init__.py +0 -0
  89. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/comparisons.py +0 -0
  90. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/conversion.py +0 -0
  91. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/dataset.py +0 -0
  92. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/horizons.py +0 -0
  93. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/metadata.py +0 -0
  94. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/waveform_amp_phase.py +0 -0
  95. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/lvcnr/waveforms.py +0 -0
  96. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/monotonicity.py +0 -0
  97. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/pretty_print.py +0 -0
  98. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/__init__.py +0 -0
  99. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/ads.py +0 -0
  100. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/arxiv.py +0 -0
  101. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/fairchild_report.py +0 -0
  102. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/inspire.py +0 -0
  103. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/journal_abbreviations.py +0 -0
  104. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/references/references.py +0 -0
  105. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/select.py +0 -0
  106. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/smooth_functions.py +0 -0
  107. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/utilities/url.py +0 -0
  108. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/__init__.py +0 -0
  109. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/alignment.py +0 -0
  110. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/__init__.py +0 -0
  111. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/grathena.py +0 -0
  112. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/nrar.py +0 -0
  113. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/rotating_paired_xor_multishuffle_bzip2.py +0 -0
  114. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/format_handlers/spectre_cce_v1.py +0 -0
  115. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/memory.py +0 -0
  116. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/mode_utilities.py +0 -0
  117. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/transformations.py +0 -0
  118. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/waveform_grid.py +0 -0
  119. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/waveform_mixin.py +0 -0
  120. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/waveform_modes.py +0 -0
  121. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/waveforms/waveform_signal.py +0 -0
  122. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/api/__init__.py +0 -0
  123. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/api/deposit.py +0 -0
  124. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/api/login.py +0 -0
  125. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/api/records.py +0 -0
  126. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/catalog.py +0 -0
  127. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/creators.py +0 -0
  128. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/simannex.py +0 -0
  129. {sxs-2024.0.44 → sxs-2025.0.2}/sxs/zenodo/surrogatemodeling.py +0 -0
  130. {sxs-2024.0.44 → sxs-2025.0.2}/tests/__init__.py +0 -0
  131. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_catalog.py +0 -0
  132. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_horizons.py +0 -0
  133. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_julia.py +0 -0
  134. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_loader.py +0 -0
  135. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_metadata.py +0 -0
  136. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_simulation.py +0 -0
  137. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_time_series.py +0 -0
  138. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_transformations.py +0 -0
  139. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_utilities.py +0 -0
  140. {sxs-2024.0.44 → sxs-2025.0.2}/tests/test_waveform_rotations.py +0 -0
  141. {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 }}-1 # Increment this number whenever the cached files should change
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
 
@@ -10,5 +10,5 @@ authors:
10
10
  title: "The sxs package"
11
11
  license: MIT
12
12
  doi: 10.5281/zenodo.4034006
13
- version: 2024.0.44
14
- date-released: 2025-03-06
13
+ version: 2025.0.2
14
+ date-released: 2025-03-26
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sxs
3
- Version: 2024.0.44
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, caltechdata
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 == "simulations":
284
- return Simulations.load(
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,2 @@
1
+ """Interface to SXS metadata files"""
2
+ from sxscatalog.metadata import *
@@ -0,0 +1,2 @@
1
+ """Container for metadata of individual simulations"""
2
+ from sxscatalog.metadata.metadata import *
@@ -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 or version == "v0.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.deprecated]
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, sxs_directory("cache") / json_truepath)
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,2 @@
1
+ """Container interface to the catalog of SXS simulations"""
2
+ from sxscatalog.simulations.simulations import *
@@ -0,0 +1,2 @@
1
+ """A core utility function for downloading efficiently and robustly"""
2
+ from sxscatalog.utilities.downloads import *
@@ -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
@@ -0,0 +1,2 @@
1
+ """Simple regexes to understand SXS IDs"""
2
+ from sxscatalog.utilities.sxs_identifiers import *
@@ -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 `sxs.load_lvc`. Essentially,
40
- that function is a fairly thin wrapper around this one; it just
41
- loads the `h` and `horizons` data and passes it to this function.
42
- For explanation of what this function does, the inputs, and
43
- outputs, see that function's docstring.
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 False: # GITHUB_ACTIONS_MACOS:
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
  )
@@ -1 +0,0 @@
1
- __version__ = "2024.0.44"