sxs 2025.0.15__tar.gz → 2025.0.17__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 (137) hide show
  1. {sxs-2025.0.15 → sxs-2025.0.17}/CITATION.cff +2 -2
  2. {sxs-2025.0.15 → sxs-2025.0.17}/PKG-INFO +9 -1
  3. {sxs-2025.0.15 → sxs-2025.0.17}/README.md +8 -0
  4. {sxs-2025.0.15 → sxs-2025.0.17}/docs/tutorials/00-Introduction.ipynb +5 -5
  5. {sxs-2025.0.15 → sxs-2025.0.17}/docs/tutorials/01-Catalog_Dataframe.ipynb +1 -1
  6. {sxs-2025.0.15 → sxs-2025.0.17}/docs/tutorials/02-Simulation.ipynb +2 -2
  7. {sxs-2025.0.15 → sxs-2025.0.17}/docs/tutorials/03-Horizons.ipynb +1 -1
  8. {sxs-2025.0.15 → sxs-2025.0.17}/mkdocs.yml +1 -0
  9. sxs-2025.0.17/mkdocs_preprocess.py +33 -0
  10. {sxs-2025.0.15 → sxs-2025.0.17}/pyproject.toml +3 -0
  11. sxs-2025.0.17/sxs/__version__.py +1 -0
  12. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/simulations/simulation.py +2 -1
  13. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/format_handlers/rotating_paired_diff_multishuffle_bzip2.py +3 -4
  14. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_simulation.py +28 -1
  15. sxs-2025.0.15/sxs/__version__.py +0 -1
  16. {sxs-2025.0.15 → sxs-2025.0.17}/.codecov.yml +0 -0
  17. {sxs-2025.0.15 → sxs-2025.0.17}/.github/ISSUE_TEMPLATE/catalog-data-issue-template.md +0 -0
  18. {sxs-2025.0.15 → sxs-2025.0.17}/.github/dependabot.yml +0 -0
  19. {sxs-2025.0.15 → sxs-2025.0.17}/.github/scripts/parse_bump_rule.py +0 -0
  20. {sxs-2025.0.15 → sxs-2025.0.17}/.github/workflows/build.yml +0 -0
  21. {sxs-2025.0.15 → sxs-2025.0.17}/.github/workflows/pr_rtd_link.yml +0 -0
  22. {sxs-2025.0.15 → sxs-2025.0.17}/.gitignore +0 -0
  23. {sxs-2025.0.15 → sxs-2025.0.17}/.readthedocs.yaml +0 -0
  24. {sxs-2025.0.15 → sxs-2025.0.17}/LICENSE +0 -0
  25. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/catalog.md +0 -0
  26. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/cite.md +0 -0
  27. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/horizons.md +0 -0
  28. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/load.md +0 -0
  29. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/metadata.md +0 -0
  30. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/simulation.md +0 -0
  31. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/simulations.md +0 -0
  32. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/time_series.md +0 -0
  33. {sxs-2025.0.15 → sxs-2025.0.17}/docs/api/waveforms.md +0 -0
  34. {sxs-2025.0.15 → sxs-2025.0.17}/docs/html/main.html +0 -0
  35. {sxs-2025.0.15 → sxs-2025.0.17}/docs/images/favicon.ico +0 -0
  36. {sxs-2025.0.15 → sxs-2025.0.17}/docs/index.md +0 -0
  37. {sxs-2025.0.15 → sxs-2025.0.17}/docs/javascript/mathjax.js +0 -0
  38. {sxs-2025.0.15 → sxs-2025.0.17}/docs/julia.md +0 -0
  39. {sxs-2025.0.15 → sxs-2025.0.17}/docs/mathematica.md +0 -0
  40. {sxs-2025.0.15 → sxs-2025.0.17}/docs/stylesheets/extra.css +0 -0
  41. {sxs-2025.0.15 → sxs-2025.0.17}/docs/tutorials/04-Waveforms.ipynb +0 -0
  42. {sxs-2025.0.15 → sxs-2025.0.17}/docs/tutorials/05-PreprocessingForFFTs.ipynb +0 -0
  43. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/__init__.py +0 -0
  44. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/catalog/__init__.py +0 -0
  45. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/catalog/catalog.py +0 -0
  46. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/catalog/create.py +0 -0
  47. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/catalog/description.py +0 -0
  48. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/citation.py +0 -0
  49. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/handlers.py +0 -0
  50. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/horizons/__init__.py +0 -0
  51. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/horizons/spec_horizons_h5.py +0 -0
  52. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/horizons/xor_multishuffle_bzip2.py +0 -0
  53. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/julia/GWFrames.py +0 -0
  54. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/julia/__init__.py +0 -0
  55. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/juliapkg.json +0 -0
  56. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/metadata/__init__.py +0 -0
  57. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/metadata/metadata.py +0 -0
  58. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/metadata/metric.py +0 -0
  59. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/simulations/__init__.py +0 -0
  60. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/simulations/analyze.py +0 -0
  61. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/simulations/local.py +0 -0
  62. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/simulations/simulations.py +0 -0
  63. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/time_series.py +0 -0
  64. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/__init__.py +0 -0
  65. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/bitwise.py +0 -0
  66. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/decimation/__init__.py +0 -0
  67. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/decimation/greedy_spline.py +0 -0
  68. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/decimation/linear_bisection.py +0 -0
  69. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/decimation/peak_greed.py +0 -0
  70. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/decimation/suppression.py +0 -0
  71. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/dicts.py +0 -0
  72. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/downloads.py +0 -0
  73. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/files.py +0 -0
  74. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/formats.py +0 -0
  75. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/inspire.py +0 -0
  76. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/lvcnr/__init__.py +0 -0
  77. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/lvcnr/comparisons.py +0 -0
  78. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/lvcnr/conversion.py +0 -0
  79. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/lvcnr/dataset.py +0 -0
  80. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/lvcnr/horizons.py +0 -0
  81. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/lvcnr/metadata.py +0 -0
  82. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/lvcnr/waveform_amp_phase.py +0 -0
  83. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/lvcnr/waveforms.py +0 -0
  84. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/monotonicity.py +0 -0
  85. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/pretty_print.py +0 -0
  86. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/references/__init__.py +0 -0
  87. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/references/ads.py +0 -0
  88. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/references/arxiv.py +0 -0
  89. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/references/fairchild_report.py +0 -0
  90. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/references/inspire.py +0 -0
  91. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/references/journal_abbreviations.py +0 -0
  92. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/references/references.py +0 -0
  93. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/select.py +0 -0
  94. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/smooth_functions.py +0 -0
  95. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/string_converters.py +0 -0
  96. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/sxs_directories.py +0 -0
  97. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/sxs_identifiers.py +0 -0
  98. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/utilities/url.py +0 -0
  99. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/__init__.py +0 -0
  100. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/alignment.py +0 -0
  101. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/format_handlers/__init__.py +0 -0
  102. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/format_handlers/grathena.py +0 -0
  103. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/format_handlers/lvc.py +0 -0
  104. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/format_handlers/nrar.py +0 -0
  105. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/format_handlers/rotating_paired_xor_multishuffle_bzip2.py +0 -0
  106. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/format_handlers/spectre_cce_v1.py +0 -0
  107. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/memory.py +0 -0
  108. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/mode_utilities.py +0 -0
  109. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/norms.py +0 -0
  110. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/transformations.py +0 -0
  111. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/waveform_grid.py +0 -0
  112. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/waveform_mixin.py +0 -0
  113. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/waveform_modes.py +0 -0
  114. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/waveform_mts.py +0 -0
  115. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/waveforms/waveform_signal.py +0 -0
  116. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/__init__.py +0 -0
  117. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/api/__init__.py +0 -0
  118. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/api/deposit.py +0 -0
  119. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/api/login.py +0 -0
  120. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/api/records.py +0 -0
  121. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/catalog.py +0 -0
  122. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/creators.py +0 -0
  123. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/simannex.py +0 -0
  124. {sxs-2025.0.15 → sxs-2025.0.17}/sxs/zenodo/surrogatemodeling.py +0 -0
  125. {sxs-2025.0.15 → sxs-2025.0.17}/tests/__init__.py +0 -0
  126. {sxs-2025.0.15 → sxs-2025.0.17}/tests/conftest.py +0 -0
  127. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_alignment.py +0 -0
  128. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_catalog.py +0 -0
  129. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_horizons.py +0 -0
  130. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_julia.py +0 -0
  131. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_loader.py +0 -0
  132. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_metadata.py +0 -0
  133. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_time_series.py +0 -0
  134. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_transformations.py +0 -0
  135. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_utilities.py +0 -0
  136. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_waveform_rotations.py +0 -0
  137. {sxs-2025.0.15 → sxs-2025.0.17}/tests/test_waveforms.py +0 -0
@@ -16,5 +16,5 @@ authors:
16
16
  title: "The sxs package"
17
17
  license: MIT
18
18
  doi: 10.5281/zenodo.4034006
19
- version: 2025.0.15
20
- date-released: 2025-05-14
19
+ version: 2025.0.17
20
+ date-released: 2025-06-11
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sxs
3
- Version: 2025.0.15
3
+ Version: 2025.0.17
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/
@@ -83,6 +83,14 @@ Description-Content-Type: text/markdown
83
83
 
84
84
  # Simulating eXtreme Spacetimes package
85
85
 
86
+ > [!NOTE]
87
+ > As described in our [latest paper](https://arxiv.org/abs/2505.13378), our
88
+ > waveforms now include memory effects. Specifically, when using any
89
+ > simulation with version 3 or greater, you should expect to see memory effects,
90
+ > most visible in the $(\ell, 0)$ modes, and generally resulting in ringdowns
91
+ > that do not approach 0 at late times.
92
+
93
+
86
94
  The `sxs` python package provides a high-level interface for using data
87
95
  produced by the SXS collaboration. In particular, the function `sxs.load` can
88
96
  automatically find, download, and load data, returning objects that provide
@@ -8,6 +8,14 @@
8
8
 
9
9
  # Simulating eXtreme Spacetimes package
10
10
 
11
+ > [!NOTE]
12
+ > As described in our [latest paper](https://arxiv.org/abs/2505.13378), our
13
+ > waveforms now include memory effects. Specifically, when using any
14
+ > simulation with version 3 or greater, you should expect to see memory effects,
15
+ > most visible in the $(\ell, 0)$ modes, and generally resulting in ringdowns
16
+ > that do not approach 0 at late times.
17
+
18
+
11
19
  The `sxs` python package provides a high-level interface for using data
12
20
  produced by the SXS collaboration. In particular, the function `sxs.load` can
13
21
  automatically find, download, and load data, returning objects that provide
@@ -6,7 +6,7 @@
6
6
  "source": [
7
7
  "# Introduction\n",
8
8
  "\n",
9
- "This series of notebooks describes the `sxs` python package, which provides an interface to the data produced by the Simulating eXtreme Spacetimes collaboration. All that data is hosted on [Zenodo](https://zenodo.org/communities/sxs) and [CaltechDATA](https://data.caltech.edu/). Each simulation gets its own DOI and its own web page — like [this one](https://doi.org/10.5281/zenodo.1213436), for example. But you want an easier way to get the data than clicking on links. This package will do that for you.\n",
9
+ "This series of notebooks describes the `sxs` python package, which provides an interface to the data produced by the Simulating eXtreme Spacetimes collaboration. All that data is hosted on [Zenodo](https://zenodo.org/communities/sxs) and [CaltechDATA](https://data.caltech.edu/). Each simulation gets its own DOI and its own web page — like [DOI 10.26138/SXS:BBH:4001](https://doi.org/10.26138/SXS:BBH:4001), for example, which redirects to its CaltechDATA page. But you want an easier way to get the data than clicking on links. This package will do that for you.\n",
10
10
  "\n",
11
11
  "The documentation is [here](https://sxs.readthedocs.io/en/main/). The github page is [here](https://github.com/sxs-collaboration/sxs/). Please feel free to open issues to report problems, or pull requests to fix them."
12
12
  ]
@@ -251,10 +251,10 @@
251
251
  "\n",
252
252
  "It is probably best to go through these notebooks in order:\n",
253
253
  "\n",
254
- " 1. [The catalog `DataFrame` interface](/tutorials/01-Catalog_Dataframe)\n",
255
- " 2. [The `Simulation` interface](/tutorials/02-Simulation)\n",
256
- " 3. [Data describing `Horizons`](/tutorials/03-Horizons)\n",
257
- " 4. [Introduction to `WaveformModes` objects](/tutorials/04-Waveforms)"
254
+ " 1. [The catalog `DataFrame` interface](../01-Catalog_Dataframe)\n",
255
+ " 2. [The `Simulation` interface](../02-Simulation)\n",
256
+ " 3. [Data describing `Horizons`](../03-Horizons)\n",
257
+ " 4. [Introduction to `WaveformModes` objects](../04-Waveforms)"
258
258
  ]
259
259
  }
260
260
  ],
@@ -3345,7 +3345,7 @@
3345
3345
  "source": [
3346
3346
  "The `simulations` object, especially when agumented with the `dataframe`, provides powerful methods for selecting the particular simulations we are interested in. Once we have done so, we need to load and interact with the simulations.\n",
3347
3347
  "\n",
3348
- "Continue with the [introduction to the `Simulation` objects](/tutorials/02-Simulation)."
3348
+ "Continue with the [introduction to the `Simulation` objects](../02-Simulation)."
3349
3349
  ]
3350
3350
  }
3351
3351
  ],
@@ -664,8 +664,8 @@
664
664
  "source": [
665
665
  "The objects returned will be the subject of the next two notebooks in this series:\n",
666
666
  "\n",
667
- "- [`Horizons`](/tutorials/03-Horizons)\n",
668
- "- [`WaveformModes`](/tutorials/04-Waveforms)"
667
+ "- [`Horizons`](../03-Horizons)\n",
668
+ "- [`WaveformModes`](../04-Waveforms)"
669
669
  ]
670
670
  }
671
671
  ],
@@ -394,7 +394,7 @@
394
394
  "cell_type": "markdown",
395
395
  "metadata": {},
396
396
  "source": [
397
- "Continue with the [introduction to waveforms](/tutorials/04-Waveforms)."
397
+ "Continue with the [introduction to waveforms](../04-Waveforms)."
398
398
  ]
399
399
  }
400
400
  ],
@@ -12,6 +12,7 @@ plugins:
12
12
  options:
13
13
  docstring_style: numpy
14
14
  show_source: true
15
+ - admonitions_translation
15
16
 
16
17
  nav:
17
18
  - Home: "index.md"
@@ -0,0 +1,33 @@
1
+ import re
2
+ import difflib
3
+ from mkdocs.plugins import BasePlugin
4
+
5
+
6
+ class AdmonitionTranslationPlugin(BasePlugin):
7
+ """
8
+ Convert GitHub-flavored admonitions to MkDocs numpy-style admonitions.
9
+ """
10
+
11
+ def on_page_markdown(self, markdown, page, config, files):
12
+ lines = markdown.splitlines(keepends=True)
13
+ out = []
14
+ i = 0
15
+ while i < len(lines):
16
+ m = re.match(r'> \[\!(?P<tag>\w+)\]\s*$', lines[i])
17
+ if m:
18
+ tag = m.group('tag').lower()
19
+ # emit the MkDocs admonition start
20
+ out.append(f"!!! {tag}\n")
21
+ i += 1
22
+ # consume all the > … lines as the body
23
+ while i < len(lines) and lines[i].startswith('>'):
24
+ # strip leading "> " (or just ">") and rstrip newline
25
+ body = lines[i].lstrip('> ').rstrip('\n')
26
+ out.append(f" {body}\n")
27
+ i += 1
28
+ continue
29
+ # otherwise, copy line verbatim
30
+ out.append(lines[i])
31
+ i += 1
32
+
33
+ return "".join(out)
@@ -64,6 +64,9 @@ ecosystem = [
64
64
  Homepage = "https://github.com/sxs-collaboration/sxs"
65
65
  Documentation = "https://sxs.readthedocs.io/"
66
66
 
67
+ [project.entry-points."mkdocs.plugins"]
68
+ admonitions_translation = "mkdocs_preprocess:AdmonitionTranslationPlugin"
69
+
67
70
 
68
71
  [build-system]
69
72
  requires = ["hatchling"]
@@ -0,0 +1 @@
1
+ __version__ = "2025.0.17"
@@ -782,6 +782,7 @@ class SimulationBase:
782
782
  strain = self.load_waveform(
783
783
  *self.strain_path,
784
784
  transform_to_inertial=False,
785
+ drop_times_before=kwargs.pop("drop_times_before", 0)
785
786
  )
786
787
  return to_lvc_conventions(strain, self.horizons, **kwargs)
787
788
 
@@ -933,7 +934,7 @@ class Simulation_v2(SimulationBase):
933
934
  download_file(json_location, json_truepath)
934
935
  return load(
935
936
  h5_location, truepath=h5_truepath, group=group, metadata=self.metadata,
936
- transform_to_inertial=transform_to_inertial
937
+ transform_to_inertial=transform_to_inertial, drop_times_before=0,
937
938
  )
938
939
 
939
940
 
@@ -387,9 +387,8 @@ def load(
387
387
  a string is given, the corresponding time will be used. The
388
388
  "begin" option represents the earliest time in the data, so no
389
389
  data will be dropped; "reference" is the `reference_time`
390
- reported in the metadata. If `None`, the default, t=0 will be
391
- used if present in the data, and the first time step
392
- otherwise.
390
+ reported in the metadata. If no argument is given, all times
391
+ will be used ("begin").
393
392
  metadata : Metadata, optional
394
393
  If given, this metadata will be used instead of attempting to
395
394
  load the metadata from an accompanying file.
@@ -582,7 +581,7 @@ def load(
582
581
  except ValueError as e:
583
582
  invalid(f"\n{e},\nbut one is expected for this data format.")
584
583
 
585
- dtb = kwargs.pop("drop_times_before", 0)
584
+ dtb = kwargs.pop("drop_times_before", "begin")
586
585
  if dtb=="begin":
587
586
  i0 = 0
588
587
  elif dtb==0:
@@ -36,6 +36,7 @@ def test_sxs_load_v2():
36
36
  s.Horizons
37
37
  s.psi4
38
38
  s.Psi4
39
+ assert s.h.t[0] >= 0
39
40
 
40
41
 
41
42
  @skip_macOS_GH_actions_downloads
@@ -63,6 +64,7 @@ def test_sxs_load_v2_levs():
63
64
  s.Strain
64
65
  s.horizons
65
66
  s.Horizons
67
+ assert s.h.t[0] >= 0
66
68
 
67
69
 
68
70
  @skip_macOS_GH_actions_downloads
@@ -81,6 +83,7 @@ def test_sxs_load_v3():
81
83
  s.Horizons
82
84
  s.psi4
83
85
  s.Psi4
86
+ assert s.h.t[0] >= 0
84
87
 
85
88
 
86
89
  @skip_macOS_GH_actions_downloads
@@ -108,6 +111,7 @@ def test_sxs_load_v3_levs():
108
111
  s.Strain
109
112
  s.horizons
110
113
  s.Horizons
114
+ assert s.h.t[0] >= 0
111
115
  # Check that Lev-1 and Lev0 work and are not the same as the highest Lev
112
116
  s = sxs.load(f"SXS:BBH:1132v3.0", ignore_deprecation=True)
113
117
  sm1 = sxs.load(f"SXS:BBH:1132v3.0/Lev-1", ignore_deprecation=True)
@@ -144,6 +148,7 @@ def test_sxs_load_v3_catalog():
144
148
  # at each Lev with each extrapolation order, but doesn't download
145
149
  # any data
146
150
  from pathlib import Path
151
+ from tqdm.auto import tqdm
147
152
 
148
153
  def fake_load_metadata(self):
149
154
  metadata_path = self.metadata_path
@@ -186,7 +191,7 @@ def test_sxs_load_v3_catalog():
186
191
  simulations = sxs.load("simulations")
187
192
 
188
193
  success = True
189
- for sxs_id, metadata in simulations.items():
194
+ for sxs_id, metadata in tqdm(simulations.items()):
190
195
  if "NSNS" in sxs_id or "BHNS" in sxs_id:
191
196
  continue
192
197
 
@@ -263,3 +268,25 @@ def test_superseding(loader):
263
268
  # Version, ignore_deprecation, auto_supersede
264
269
  s = loader(f"{simulation}v2.0", ignore_deprecation=True, auto_supersede=True)
265
270
  assert s.sxs_id_stem == simulation
271
+
272
+
273
+ def test_issue_116():
274
+ import tempfile
275
+ import contextlib
276
+ # Test that loading the strain as a user normally would drops
277
+ # times before 0
278
+ h = sxs.load("SXS:BBH:4000v3.0").h
279
+ assert h.t[0] >= 0
280
+ # Test that loading that same file directly *keeps* times before 0
281
+ h2 = sxs.load(h.__file__, metadata={})
282
+ assert h2.t[0] < 0
283
+ # Test that manually changing the time array and round-tripping
284
+ # through RPDMB preserves times
285
+ h3 = h.copy()
286
+ h3.t -= h3.max_norm_time()
287
+ with tempfile.TemporaryDirectory() as temp_dir:
288
+ with contextlib.redirect_stdout(None):
289
+ sxs.rpdmb.save(h3, f"{temp_dir}/test")
290
+ h4 = sxs.load(f"{temp_dir}/test", metadata={})
291
+ assert h4.t.size == h3.t.size == h.t.size
292
+ assert h4.t[0] == h3.t[0]
@@ -1 +0,0 @@
1
- __version__ = "2025.0.15"
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