gwpy 3.0.5__tar.gz → 3.0.7__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.

Potentially problematic release.


This version of gwpy might be problematic. Click here for more details.

Files changed (369) hide show
  1. {gwpy-3.0.5 → gwpy-3.0.7}/.github/workflows/conda.yml +0 -1
  2. {gwpy-3.0.5 → gwpy-3.0.7}/.github/workflows/dependencies.yml +1 -1
  3. {gwpy-3.0.5 → gwpy-3.0.7}/.github/workflows/dist.yml +1 -1
  4. {gwpy-3.0.5 → gwpy-3.0.7}/PKG-INFO +46 -4
  5. gwpy-3.0.7/gwpy/_version.py +16 -0
  6. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/gwpy_plot.py +0 -1
  7. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/channel.py +1 -6
  8. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/io/clf.py +0 -0
  9. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/io/omega.py +0 -0
  10. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/datafind.py +0 -0
  11. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/gwf.py +0 -0
  12. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/axes.py +8 -1
  13. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/plot.py +4 -2
  14. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_axes.py +8 -2
  15. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/core.py +75 -41
  16. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/tests/test_core.py +33 -11
  17. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/tests/test_timeseries.py +50 -12
  18. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/series.py +1 -2
  19. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/test_misc.py +1 -1
  20. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy.egg-info/PKG-INFO +46 -4
  21. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy.egg-info/requires.txt +2 -2
  22. {gwpy-3.0.5 → gwpy-3.0.7}/pyproject.toml +3 -4
  23. gwpy-3.0.5/gwpy/_version.py +0 -4
  24. {gwpy-3.0.5 → gwpy-3.0.7}/.codeclimate.yml +0 -0
  25. {gwpy-3.0.5 → gwpy-3.0.7}/.codecov.yml +0 -0
  26. {gwpy-3.0.5 → gwpy-3.0.7}/.flake8 +0 -0
  27. {gwpy-3.0.5 → gwpy-3.0.7}/.gitattributes +0 -0
  28. {gwpy-3.0.5 → gwpy-3.0.7}/.github/workflows/lint.yml +0 -0
  29. {gwpy-3.0.5 → gwpy-3.0.7}/.gitignore +0 -0
  30. {gwpy-3.0.5 → gwpy-3.0.7}/.pep8speaks.yml +0 -0
  31. {gwpy-3.0.5 → gwpy-3.0.7}/CODE_OF_CONDUCT.rst +0 -0
  32. {gwpy-3.0.5 → gwpy-3.0.7}/CONTRIBUTING.md +0 -0
  33. {gwpy-3.0.5 → gwpy-3.0.7}/LICENSE +0 -0
  34. {gwpy-3.0.5 → gwpy-3.0.7}/MANIFEST.in +0 -0
  35. {gwpy-3.0.5 → gwpy-3.0.7}/README.md +0 -0
  36. {gwpy-3.0.5 → gwpy-3.0.7}/docs/Makefile +0 -0
  37. {gwpy-3.0.5 → gwpy-3.0.7}/docs/_static/css/gwpy-sphinx.css +0 -0
  38. {gwpy-3.0.5 → gwpy-3.0.7}/docs/_static/favicon.png +0 -0
  39. {gwpy-3.0.5 → gwpy-3.0.7}/docs/_static/gwpy_white_24.png +0 -0
  40. {gwpy-3.0.5 → gwpy-3.0.7}/docs/_templates/autoclass/class.rst +0 -0
  41. {gwpy-3.0.5 → gwpy-3.0.7}/docs/_templates/autosummary/base.rst +0 -0
  42. {gwpy-3.0.5 → gwpy-3.0.7}/docs/_templates/autosummary/class.rst +0 -0
  43. {gwpy-3.0.5 → gwpy-3.0.7}/docs/_templates/autosummary/module.rst +0 -0
  44. {gwpy-3.0.5 → gwpy-3.0.7}/docs/astro/index.rst +0 -0
  45. {gwpy-3.0.5 → gwpy-3.0.7}/docs/citing.rst.in +0 -0
  46. {gwpy-3.0.5 → gwpy-3.0.7}/docs/cli/examples.ini +0 -0
  47. {gwpy-3.0.5 → gwpy-3.0.7}/docs/cli/index.rst +0 -0
  48. {gwpy-3.0.5 → gwpy-3.0.7}/docs/conf.py +0 -0
  49. {gwpy-3.0.5 → gwpy-3.0.7}/docs/detector/channel.rst +0 -0
  50. {gwpy-3.0.5 → gwpy-3.0.7}/docs/dev/release.rst +0 -0
  51. {gwpy-3.0.5 → gwpy-3.0.7}/docs/env.rst +0 -0
  52. {gwpy-3.0.5 → gwpy-3.0.7}/docs/examples/table/H1-LDAS_STRAIN-968654552-10.xml.gz +0 -0
  53. {gwpy-3.0.5 → gwpy-3.0.7}/docs/external/framecpp.rst +0 -0
  54. {gwpy-3.0.5 → gwpy-3.0.7}/docs/external/framel.rst +0 -0
  55. {gwpy-3.0.5 → gwpy-3.0.7}/docs/external/lalsuite.rst +0 -0
  56. {gwpy-3.0.5 → gwpy-3.0.7}/docs/external/nds2.rst +0 -0
  57. {gwpy-3.0.5 → gwpy-3.0.7}/docs/gwpy-docs-logo.png +0 -0
  58. {gwpy-3.0.5 → gwpy-3.0.7}/docs/index.rst +0 -0
  59. {gwpy-3.0.5 → gwpy-3.0.7}/docs/install.rst +0 -0
  60. {gwpy-3.0.5 → gwpy-3.0.7}/docs/overview.rst +0 -0
  61. {gwpy-3.0.5 → gwpy-3.0.7}/docs/plot/colorbars.rst +0 -0
  62. {gwpy-3.0.5 → gwpy-3.0.7}/docs/plot/colors.rst +0 -0
  63. {gwpy-3.0.5 → gwpy-3.0.7}/docs/plot/filter.rst +0 -0
  64. {gwpy-3.0.5 → gwpy-3.0.7}/docs/plot/gps.rst +0 -0
  65. {gwpy-3.0.5 → gwpy-3.0.7}/docs/plot/index.rst +0 -0
  66. {gwpy-3.0.5 → gwpy-3.0.7}/docs/plot/legend.rst +0 -0
  67. {gwpy-3.0.5 → gwpy-3.0.7}/docs/plot/log.rst +0 -0
  68. {gwpy-3.0.5 → gwpy-3.0.7}/docs/references.rst +0 -0
  69. {gwpy-3.0.5 → gwpy-3.0.7}/docs/segments/dqsegdb.rst +0 -0
  70. {gwpy-3.0.5 → gwpy-3.0.7}/docs/segments/index.rst +0 -0
  71. {gwpy-3.0.5 → gwpy-3.0.7}/docs/segments/io.rst +0 -0
  72. {gwpy-3.0.5 → gwpy-3.0.7}/docs/segments/thresholding.rst +0 -0
  73. {gwpy-3.0.5 → gwpy-3.0.7}/docs/signal/index.rst +0 -0
  74. {gwpy-3.0.5 → gwpy-3.0.7}/docs/spectrogram/index.rst +0 -0
  75. {gwpy-3.0.5 → gwpy-3.0.7}/docs/spectrum/filtering.rst +0 -0
  76. {gwpy-3.0.5 → gwpy-3.0.7}/docs/spectrum/index.rst +0 -0
  77. {gwpy-3.0.5 → gwpy-3.0.7}/docs/spectrum/io.rst +0 -0
  78. {gwpy-3.0.5 → gwpy-3.0.7}/docs/table/H1-LDAS_STRAIN-968654552-10.xml.gz +0 -0
  79. {gwpy-3.0.5 → gwpy-3.0.7}/docs/table/filter.rst +0 -0
  80. {gwpy-3.0.5 → gwpy-3.0.7}/docs/table/histogram.rst +0 -0
  81. {gwpy-3.0.5 → gwpy-3.0.7}/docs/table/index.rst +0 -0
  82. {gwpy-3.0.5 → gwpy-3.0.7}/docs/table/io.rst +0 -0
  83. {gwpy-3.0.5 → gwpy-3.0.7}/docs/table/plot.rst +0 -0
  84. {gwpy-3.0.5 → gwpy-3.0.7}/docs/table/rate.rst +0 -0
  85. {gwpy-3.0.5 → gwpy-3.0.7}/docs/time/index.rst +0 -0
  86. {gwpy-3.0.5 → gwpy-3.0.7}/docs/timeseries/datafind.rst +0 -0
  87. {gwpy-3.0.5 → gwpy-3.0.7}/docs/timeseries/index.rst +0 -0
  88. {gwpy-3.0.5 → gwpy-3.0.7}/docs/timeseries/io.rst +0 -0
  89. {gwpy-3.0.5 → gwpy-3.0.7}/docs/timeseries/opendata.rst +0 -0
  90. {gwpy-3.0.5 → gwpy-3.0.7}/docs/timeseries/plot.rst +0 -0
  91. {gwpy-3.0.5 → gwpy-3.0.7}/docs/timeseries/statevector.rst +0 -0
  92. {gwpy-3.0.5 → gwpy-3.0.7}/examples/frequencyseries/coherence.py +0 -0
  93. {gwpy-3.0.5 → gwpy-3.0.7}/examples/frequencyseries/hoff.py +0 -0
  94. {gwpy-3.0.5 → gwpy-3.0.7}/examples/frequencyseries/index.rst +0 -0
  95. {gwpy-3.0.5 → gwpy-3.0.7}/examples/frequencyseries/inject.py +0 -0
  96. {gwpy-3.0.5 → gwpy-3.0.7}/examples/frequencyseries/percentiles.py +0 -0
  97. {gwpy-3.0.5 → gwpy-3.0.7}/examples/frequencyseries/rayleigh.py +0 -0
  98. {gwpy-3.0.5 → gwpy-3.0.7}/examples/frequencyseries/transfer_function.py +0 -0
  99. {gwpy-3.0.5 → gwpy-3.0.7}/examples/frequencyseries/variance.py +0 -0
  100. {gwpy-3.0.5 → gwpy-3.0.7}/examples/miscellaneous/index.rst +0 -0
  101. {gwpy-3.0.5 → gwpy-3.0.7}/examples/miscellaneous/open-data-spectrogram.py +0 -0
  102. {gwpy-3.0.5 → gwpy-3.0.7}/examples/miscellaneous/range-spectrogram.py +0 -0
  103. {gwpy-3.0.5 → gwpy-3.0.7}/examples/miscellaneous/range-timeseries.py +0 -0
  104. {gwpy-3.0.5 → gwpy-3.0.7}/examples/segments/index.rst +0 -0
  105. {gwpy-3.0.5 → gwpy-3.0.7}/examples/segments/open-data.py +0 -0
  106. {gwpy-3.0.5 → gwpy-3.0.7}/examples/signal/gw150914.py +0 -0
  107. {gwpy-3.0.5 → gwpy-3.0.7}/examples/signal/index.rst +0 -0
  108. {gwpy-3.0.5 → gwpy-3.0.7}/examples/signal/qscan.py +0 -0
  109. {gwpy-3.0.5 → gwpy-3.0.7}/examples/spectrogram/coherence.py +0 -0
  110. {gwpy-3.0.5 → gwpy-3.0.7}/examples/spectrogram/index.rst +0 -0
  111. {gwpy-3.0.5 → gwpy-3.0.7}/examples/spectrogram/plot.py +0 -0
  112. {gwpy-3.0.5 → gwpy-3.0.7}/examples/spectrogram/ratio.py +0 -0
  113. {gwpy-3.0.5 → gwpy-3.0.7}/examples/spectrogram/rayleigh.py +0 -0
  114. {gwpy-3.0.5 → gwpy-3.0.7}/examples/spectrogram/spectrogram2.py +0 -0
  115. {gwpy-3.0.5 → gwpy-3.0.7}/examples/table/H1-LDAS_STRAIN-968654552-10.xml.gz +0 -0
  116. {gwpy-3.0.5 → gwpy-3.0.7}/examples/table/histogram.py +0 -0
  117. {gwpy-3.0.5 → gwpy-3.0.7}/examples/table/index.rst +0 -0
  118. {gwpy-3.0.5 → gwpy-3.0.7}/examples/table/rate.py +0 -0
  119. {gwpy-3.0.5 → gwpy-3.0.7}/examples/table/rate_binned.py +0 -0
  120. {gwpy-3.0.5 → gwpy-3.0.7}/examples/table/scatter.py +0 -0
  121. {gwpy-3.0.5 → gwpy-3.0.7}/examples/table/tiles.py +0 -0
  122. {gwpy-3.0.5 → gwpy-3.0.7}/examples/test_examples.py +0 -0
  123. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/blrms.py +0 -0
  124. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/correlate.py +0 -0
  125. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/filter.py +0 -0
  126. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/index.rst +0 -0
  127. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/inject.py +0 -0
  128. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/public.py +0 -0
  129. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/pycbc-snr.py +0 -0
  130. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/qscan.py +0 -0
  131. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/statevector.py +0 -0
  132. {gwpy-3.0.5 → gwpy-3.0.7}/examples/timeseries/whiten.py +0 -0
  133. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/__init__.py +0 -0
  134. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/astro/__init__.py +0 -0
  135. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/astro/range.py +0 -0
  136. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/astro/tests/__init__.py +0 -0
  137. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/astro/tests/test_range.py +0 -0
  138. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/__init__.py +0 -0
  139. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/cliproduct.py +0 -0
  140. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/coherence.py +0 -0
  141. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/coherencegram.py +0 -0
  142. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/qtransform.py +0 -0
  143. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/spectrogram.py +0 -0
  144. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/spectrum.py +0 -0
  145. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/__init__.py +0 -0
  146. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/base.py +0 -0
  147. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/test_coherence.py +0 -0
  148. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/test_coherencegram.py +0 -0
  149. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/test_gwpy_plot.py +0 -0
  150. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/test_qtransform.py +0 -0
  151. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/test_spectrogram.py +0 -0
  152. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/test_spectrum.py +0 -0
  153. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/test_timeseries.py +0 -0
  154. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/tests/test_transferfunction.py +0 -0
  155. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/timeseries.py +0 -0
  156. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/cli/transferfunction.py +0 -0
  157. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/conftest.py +0 -0
  158. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/__init__.py +0 -0
  159. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/io/__init__.py +0 -0
  160. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/io/cis.py +0 -0
  161. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/tests/__init__.py +0 -0
  162. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/tests/test_channel.py +0 -0
  163. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/tests/test_units.py +0 -0
  164. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/detector/units.py +0 -0
  165. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/__init__.py +0 -0
  166. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/_fdcommon.py +0 -0
  167. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/frequencyseries.py +0 -0
  168. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/hist.py +0 -0
  169. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/io/__init__.py +0 -0
  170. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/io/ascii.py +0 -0
  171. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/io/hdf5.py +0 -0
  172. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/io/ligolw.py +0 -0
  173. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/tests/__init__.py +0 -0
  174. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/tests/test_frequencyseries.py +0 -0
  175. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/frequencyseries/tests/test_hist.py +0 -0
  176. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/__init__.py +0 -0
  177. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/_framecpp.py +0 -0
  178. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/cache.py +0 -0
  179. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/ffldatafind.py +0 -0
  180. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/hdf5.py +0 -0
  181. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/kerberos.py +0 -0
  182. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/ligolw.py +0 -0
  183. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/mp.py +0 -0
  184. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/nds2.py +0 -0
  185. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/registry.py +0 -0
  186. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/__init__.py +0 -0
  187. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_cache.py +0 -0
  188. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_datafind.py +0 -0
  189. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_ffldatafind.py +0 -0
  190. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_gwf.py +0 -0
  191. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_kerberos.py +0 -0
  192. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_ligolw.py +0 -0
  193. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_mp.py +0 -0
  194. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_nds2.py +0 -0
  195. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/tests/test_utils.py +0 -0
  196. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/io/utils.py +0 -0
  197. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/__init__.py +0 -0
  198. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/bode.py +0 -0
  199. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/colorbar.py +0 -0
  200. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/colors.py +0 -0
  201. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/gps.py +0 -0
  202. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/legend.py +0 -0
  203. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/log.py +0 -0
  204. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/rc.py +0 -0
  205. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/segments.py +0 -0
  206. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/__init__.py +0 -0
  207. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_bode.py +0 -0
  208. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_colors.py +0 -0
  209. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_gps.py +0 -0
  210. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_log.py +0 -0
  211. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_plot.py +0 -0
  212. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_rc.py +0 -0
  213. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_segments.py +0 -0
  214. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_tex.py +0 -0
  215. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_text.py +0 -0
  216. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/test_utils.py +0 -0
  217. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tests/utils.py +0 -0
  218. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/tex.py +0 -0
  219. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/text.py +0 -0
  220. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/units.py +0 -0
  221. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/plot/utils.py +0 -0
  222. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/__init__.py +0 -0
  223. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/flag.py +0 -0
  224. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/io/__init__.py +0 -0
  225. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/io/hdf5.py +0 -0
  226. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/io/json.py +0 -0
  227. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/io/ligolw.py +0 -0
  228. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/io/segwizard.py +0 -0
  229. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/segments.py +0 -0
  230. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/tests/__init__.py +0 -0
  231. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/tests/test_flag.py +0 -0
  232. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/segments/tests/test_segments.py +0 -0
  233. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/__init__.py +0 -0
  234. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/fft.py +0 -0
  235. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/filter_design.py +0 -0
  236. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/qtransform.py +0 -0
  237. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/spectral/__init__.py +0 -0
  238. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/spectral/_lal.py +0 -0
  239. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/spectral/_median_mean.py +0 -0
  240. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/spectral/_pycbc.py +0 -0
  241. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/spectral/_registry.py +0 -0
  242. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/spectral/_scipy.py +0 -0
  243. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/spectral/_ui.py +0 -0
  244. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/spectral/_utils.py +0 -0
  245. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/__init__.py +0 -0
  246. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_coherence.py +0 -0
  247. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_filter_design.py +0 -0
  248. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_qtransform.py +0 -0
  249. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_spectral_lal.py +0 -0
  250. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_spectral_median_mean.py +0 -0
  251. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_spectral_pycbc.py +0 -0
  252. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_spectral_registry.py +0 -0
  253. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_spectral_scipy.py +0 -0
  254. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_spectral_ui.py +0 -0
  255. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_spectral_utils.py +0 -0
  256. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/tests/test_window.py +0 -0
  257. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/signal/window.py +0 -0
  258. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/spectrogram/__init__.py +0 -0
  259. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/spectrogram/coherence.py +0 -0
  260. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/spectrogram/io/__init__.py +0 -0
  261. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/spectrogram/io/hdf5.py +0 -0
  262. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/spectrogram/spectrogram.py +0 -0
  263. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/spectrogram/tests/__init__.py +0 -0
  264. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/spectrogram/tests/test_spectrogram.py +0 -0
  265. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/__init__.py +0 -0
  266. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/filter.py +0 -0
  267. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/filters.py +0 -0
  268. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/gravityspy.py +0 -0
  269. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/__init__.py +0 -0
  270. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/cwb.py +0 -0
  271. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/fetch.py +0 -0
  272. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/gravityspy.py +0 -0
  273. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/gstlal.py +0 -0
  274. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/gwf.py +0 -0
  275. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/hacr.py +0 -0
  276. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/ligolw.py +0 -0
  277. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/losc.py +0 -0
  278. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/omega.py +0 -0
  279. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/omicron.py +0 -0
  280. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/pycbc.py +0 -0
  281. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/root.py +0 -0
  282. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/snax.py +0 -0
  283. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/sql.py +0 -0
  284. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/io/utils.py +0 -0
  285. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/table.py +0 -0
  286. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/tests/__init__.py +0 -0
  287. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/tests/test_gravityspy.py +0 -0
  288. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/tests/test_io_gstlal.py +0 -0
  289. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/tests/test_io_ligolw.py +0 -0
  290. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/tests/test_io_pycbc.py +0 -0
  291. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/table/tests/test_table.py +0 -0
  292. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/__init__.py +0 -0
  293. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/data/H1-LDAS_STRAIN-968654552-10.xml.gz +0 -0
  294. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/data/HLV-HW100916-968654552-1.gwf +0 -0
  295. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/data/HLV-HW100916-968654552-1.hdf +0 -0
  296. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/data/X1-GWPY_TEST_SEGMENTS-0-10.txt +0 -0
  297. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/data/X1-GWPY_TEST_SEGMENTS-0-10.xml.gz +0 -0
  298. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/errors.py +0 -0
  299. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/fixtures.py +0 -0
  300. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/marks.py +0 -0
  301. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/mocks.py +0 -0
  302. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/testing/utils.py +0 -0
  303. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/time/__init__.py +0 -0
  304. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/time/__main__.py +0 -0
  305. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/time/_tconvert.py +0 -0
  306. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/time/tests/__init__.py +0 -0
  307. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/time/tests/test_main.py +0 -0
  308. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/time/tests/test_time.py +0 -0
  309. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/__init__.py +0 -0
  310. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/__init__.py +0 -0
  311. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/ascii.py +0 -0
  312. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/cache.py +0 -0
  313. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/core.py +0 -0
  314. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/gwf/__init__.py +0 -0
  315. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/gwf/framecpp.py +0 -0
  316. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/gwf/framel.py +0 -0
  317. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/gwf/lalframe.py +0 -0
  318. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/hdf5.py +0 -0
  319. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/losc.py +0 -0
  320. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/nds2.py +0 -0
  321. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/io/wav.py +0 -0
  322. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/statevector.py +0 -0
  323. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/tests/__init__.py +0 -0
  324. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/tests/test_io_gwf_framecpp.py +0 -0
  325. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/tests/test_io_gwf_lalframe.py +0 -0
  326. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/tests/test_io_losc.py +0 -0
  327. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/tests/test_statevector.py +0 -0
  328. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/timeseries/timeseries.py +0 -0
  329. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/__init__.py +0 -0
  330. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/array.py +0 -0
  331. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/array2d.py +0 -0
  332. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/index.py +0 -0
  333. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/io/__init__.py +0 -0
  334. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/io/ascii.py +0 -0
  335. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/io/hdf5.py +0 -0
  336. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/io/ligolw.py +0 -0
  337. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/sliceutils.py +0 -0
  338. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/tests/__init__.py +0 -0
  339. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/tests/test_array.py +0 -0
  340. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/tests/test_array2d.py +0 -0
  341. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/tests/test_index.py +0 -0
  342. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/types/tests/test_series.py +0 -0
  343. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/__init__.py +0 -0
  344. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/decorators.py +0 -0
  345. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/enum.py +0 -0
  346. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/env.py +0 -0
  347. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/lal.py +0 -0
  348. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/misc.py +0 -0
  349. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/mp.py +0 -0
  350. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/progress.py +0 -0
  351. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/shell.py +0 -0
  352. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/sphinx/__init__.py +0 -0
  353. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/sphinx/epydoc.py +0 -0
  354. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/sphinx/ex2rst.py +0 -0
  355. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/sphinx/zenodo.py +0 -0
  356. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/__init__.py +0 -0
  357. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/test_decorators.py +0 -0
  358. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/test_enum.py +0 -0
  359. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/test_env.py +0 -0
  360. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/test_lal.py +0 -0
  361. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/test_mp.py +0 -0
  362. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/test_shell.py +0 -0
  363. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy/utils/tests/test_sphinx_ex2rst.py +0 -0
  364. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy.egg-info/SOURCES.txt +0 -0
  365. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy.egg-info/dependency_links.txt +0 -0
  366. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy.egg-info/entry_points.txt +0 -0
  367. {gwpy-3.0.5 → gwpy-3.0.7}/gwpy.egg-info/top_level.txt +0 -0
  368. {gwpy-3.0.5 → gwpy-3.0.7}/setup.cfg +0 -0
  369. {gwpy-3.0.5 → gwpy-3.0.7}/setup_utils.py +0 -0
@@ -38,7 +38,6 @@ jobs:
38
38
  - Ubuntu
39
39
  - Windows
40
40
  python-version:
41
- - "3.7"
42
41
  - "3.8"
43
42
  - "3.9"
44
43
  - "3.10"
@@ -40,7 +40,7 @@ jobs:
40
40
  matrix:
41
41
  include:
42
42
  - name: "Minimum"
43
- python-version: "3.7"
43
+ python-version: "3.8"
44
44
  experimental: false
45
45
  extras: "test"
46
46
  pip-opts: "--upgrade-strategy=only-if-needed"
@@ -80,10 +80,10 @@ jobs:
80
80
  - Ubuntu
81
81
  - Windows
82
82
  python-version:
83
- - "3.7"
84
83
  - "3.8"
85
84
  - "3.9"
86
85
  - "3.10"
86
+ - "3.11"
87
87
  runs-on: ${{ matrix.os }}-latest
88
88
 
89
89
  defaults:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gwpy
3
- Version: 3.0.5
3
+ Version: 3.0.7
4
4
  Summary: A python package for gravitational-wave astrophysics
5
5
  Author-email: Duncan Macleod <duncan.macleod@ligo.org>
6
6
  License: GPL-3.0-or-later
@@ -15,21 +15,63 @@ Classifier: Natural Language :: English
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
17
  Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.7
19
18
  Classifier: Programming Language :: Python :: 3.8
20
19
  Classifier: Programming Language :: Python :: 3.9
21
20
  Classifier: Programming Language :: Python :: 3.10
22
21
  Classifier: Programming Language :: Python :: 3.11
23
22
  Classifier: Topic :: Scientific/Engineering :: Astronomy
24
23
  Classifier: Topic :: Scientific/Engineering :: Physics
25
- Requires-Python: >=3.7
24
+ Requires-Python: >=3.8
26
25
  Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: astropy>=4.3.0
28
+ Requires-Dist: dqsegdb2
29
+ Requires-Dist: gwdatafind>=1.1.0
30
+ Requires-Dist: gwosc>=0.5.3
31
+ Requires-Dist: h5py>=3.0.0
32
+ Requires-Dist: ligo-segments>=1.0.0
33
+ Requires-Dist: ligotimegps>=1.2.1
34
+ Requires-Dist: matplotlib>=3.3.0
35
+ Requires-Dist: numpy>=1.19
36
+ Requires-Dist: python-dateutil
37
+ Requires-Dist: requests
38
+ Requires-Dist: scipy>=1.5.0
39
+ Requires-Dist: tqdm>=4.10.0
27
40
  Provides-Extra: test
41
+ Requires-Dist: coverage[toml]>=5.0; extra == "test"
42
+ Requires-Dist: pytest>=3.9.1; extra == "test"
43
+ Requires-Dist: pytest-freezegun; extra == "test"
44
+ Requires-Dist: pytest-cov>=2.4.0; extra == "test"
45
+ Requires-Dist: pytest-requires; extra == "test"
46
+ Requires-Dist: pytest-socket; extra == "test"
47
+ Requires-Dist: pytest-xdist; extra == "test"
48
+ Requires-Dist: requests-mock; extra == "test"
28
49
  Provides-Extra: astro
50
+ Requires-Dist: inspiral-range; extra == "astro"
29
51
  Provides-Extra: docs
52
+ Requires-Dist: numpydoc>=0.8.0; extra == "docs"
53
+ Requires-Dist: Sphinx>=4.4.0; extra == "docs"
54
+ Requires-Dist: sphinx-automodapi; extra == "docs"
55
+ Requires-Dist: sphinx-immaterial>=0.7.3; extra == "docs"
56
+ Requires-Dist: sphinx-panels>=0.6.0; extra == "docs"
57
+ Requires-Dist: sphinxcontrib-programoutput; extra == "docs"
30
58
  Provides-Extra: dev
59
+ Requires-Dist: ciecplib; extra == "dev"
60
+ Requires-Dist: dateparser>=1.1.2; extra == "dev"
61
+ Requires-Dist: lalsuite; sys_platform != "win32" and extra == "dev"
62
+ Requires-Dist: lscsoft-glue; sys_platform != "win32" and extra == "dev"
63
+ Requires-Dist: maya; python_version < "3.11" and extra == "dev"
64
+ Requires-Dist: psycopg2; extra == "dev"
65
+ Requires-Dist: pycbc>=1.13.4; sys_platform != "win32" and extra == "dev"
66
+ Requires-Dist: pymysql; extra == "dev"
67
+ Requires-Dist: pyRXP; extra == "dev"
68
+ Requires-Dist: python-ligo-lw>=1.7.0; sys_platform != "win32" and extra == "dev"
69
+ Requires-Dist: sqlalchemy; extra == "dev"
70
+ Requires-Dist: uproot>=4.1.5; extra == "dev"
31
71
  Provides-Extra: conda
32
- License-File: LICENSE
72
+ Requires-Dist: python-framel>=8.40.1; extra == "conda"
73
+ Requires-Dist: python-ldas-tools-framecpp; sys_platform != "win32" and extra == "conda"
74
+ Requires-Dist: python-nds2-client; extra == "conda"
33
75
 
34
76
  GWpy is a collaboration-driven Python package providing tools for
35
77
  studying data from ground-based gravitational-wave detectors.
@@ -0,0 +1,16 @@
1
+ # file generated by setuptools_scm
2
+ # don't change, don't track in version control
3
+ TYPE_CHECKING = False
4
+ if TYPE_CHECKING:
5
+ from typing import Tuple, Union
6
+ VERSION_TUPLE = Tuple[Union[int, str], ...]
7
+ else:
8
+ VERSION_TUPLE = object
9
+
10
+ version: str
11
+ __version__: str
12
+ __version_tuple__: VERSION_TUPLE
13
+ version_tuple: VERSION_TUPLE
14
+
15
+ __version__ = version = '3.0.7'
16
+ __version_tuple__ = version_tuple = (3, 0, 7)
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env python
2
1
  # -*- coding: utf-8 -*-
3
2
  # Copyright (C) Joseph Areeda (2015-2020)
4
3
  #
@@ -34,11 +34,6 @@ from .units import parse_unit
34
34
 
35
35
  __author__ = 'Duncan Macleod <duncan.macleod@ligo.org>'
36
36
 
37
- try: # python >= 3.7
38
- Pattern = re.Pattern
39
- except AttributeError: # python < 3.7
40
- Pattern = re._pattern_type
41
-
42
37
  QUOTE_REGEX = re.compile(r'^[\s\"\']+|[\s\"\']+$')
43
38
 
44
39
 
@@ -729,7 +724,7 @@ class ChannelList(list):
729
724
  a new `ChannelList` containing the matching channels
730
725
  """
731
726
  # format name regex
732
- if isinstance(name, Pattern):
727
+ if isinstance(name, re.Pattern):
733
728
  flags = name.flags
734
729
  name = name.pattern
735
730
  else:
File without changes
File without changes
File without changes
File without changes
@@ -162,7 +162,10 @@ class Axes(_Axes):
162
162
  super().__init__(*args, **kwargs)
163
163
 
164
164
  # handle Series in `ax.plot()`
165
- self._get_lines = PlotArgsProcessor(self)
165
+ if matplotlib_version >= "3.8.0":
166
+ self._get_lines = PlotArgsProcessor()
167
+ else:
168
+ self._get_lines = PlotArgsProcessor(self)
166
169
 
167
170
  # reset data formatters (for interactive plots) to support
168
171
  # GPS time display
@@ -635,6 +638,10 @@ class PlotArgsProcessor(_process_plot_var_args):
635
638
  """Find `Series` data in `plot()` args and unwrap
636
639
  """
637
640
  newargs = []
641
+ # matplotlib 3.8.0 includes the Axes object up-front
642
+ if args and isinstance(args[0], Axes):
643
+ newargs.append(args[0])
644
+ args = args[1:]
638
645
  while args:
639
646
  # strip first argument
640
647
  this, args = args[:1], args[1:]
@@ -519,9 +519,11 @@ class Plot(figure.Figure):
519
519
  pass
520
520
 
521
521
  # add new axes
522
- if ax.get_axes_locator():
522
+ try:
523
523
  divider = ax.get_axes_locator()._axes_divider
524
- else:
524
+ except AttributeError:
525
+ # get_axes_locator() is None _or_ the _axes_divider property
526
+ # has been removed
525
527
  from mpl_toolkits.axes_grid1 import make_axes_locatable
526
528
  divider = make_axes_locatable(ax)
527
529
  if location not in {'top', 'bottom'}:
@@ -23,7 +23,10 @@ import pytest
23
23
 
24
24
  import numpy
25
25
 
26
- from matplotlib import rcParams
26
+ from matplotlib import (
27
+ __version__ as matplotlib_version,
28
+ rcParams,
29
+ )
27
30
  from matplotlib.collections import PolyCollection
28
31
  from matplotlib.lines import Line2D
29
32
 
@@ -169,7 +172,10 @@ class TestAxes(AxesTestBase):
169
172
  array = Array2D(numpy.random.random((10, 10)), dx=.1, dy=.2)
170
173
  ax.grid(True, which="both", axis="both")
171
174
  mesh = ax.pcolormesh(array)
172
- utils.assert_array_equal(mesh.get_array(), array.T.flatten())
175
+ if matplotlib_version >= "3.8.0":
176
+ utils.assert_array_equal(mesh.get_array(), array.T)
177
+ else: # matplotlib < 3.8.0
178
+ utils.assert_array_equal(mesh.get_array(), array.T.flatten())
173
179
  utils.assert_array_equal(mesh.get_paths()[-1].vertices[2],
174
180
  (array.xspan[1], array.yspan[1]))
175
181
  # check that restore_grid decorator did its job
@@ -245,8 +245,6 @@ class TimeSeriesBase(Series):
245
245
  del self.dt
246
246
  return
247
247
  self.dt = (1 / units.Quantity(val, units.Hertz)).to(self.xunit)
248
- if numpy.isclose(self.dt.value, round(self.dt.value)):
249
- self.dt = units.Quantity(round(self.dt.value), self.dt.unit)
250
248
 
251
249
  # -- duration
252
250
  @property
@@ -1187,48 +1185,61 @@ class TimeSeriesBaseDict(OrderedDict):
1187
1185
  verbose=False, allow_tape=True, observatory=None, **readargs):
1188
1186
  """Find and read data from frames for a number of channels.
1189
1187
 
1188
+ This method uses :mod:`gwdatafind` to discover the (`file://`) URLs
1189
+ that provide the requested data, then reads those files using
1190
+ :meth:`TimeSeriesDict.read()`.
1191
+
1190
1192
  Parameters
1191
1193
  ----------
1192
1194
  channels : `list`
1193
- required data channels.
1195
+ Required data channels.
1194
1196
 
1195
1197
  start : `~gwpy.time.LIGOTimeGPS`, `float`, `str`
1196
1198
  GPS start time of required data,
1197
1199
  any input parseable by `~gwpy.time.to_gps` is fine
1198
1200
 
1199
- end : `~gwpy.time.LIGOTimeGPS`, `float`, `str`, optional
1201
+ end : `~gwpy.time.LIGOTimeGPS`, `float`, `str`
1200
1202
  GPS end time of required data, defaults to end of data found;
1201
1203
  any input parseable by `~gwpy.time.to_gps` is fine
1202
1204
 
1203
- frametype : `str`, optional
1204
- name of frametype in which this channel is stored, by default
1205
- will search for all required frame types
1205
+ frametype : `str`
1206
+ Name of frametype in which this channel is stored; if not given
1207
+ all frametypes discoverable via GWDataFind will be searched for
1208
+ the required channels.
1206
1209
 
1207
- frametype_match : `str`, optional
1208
- regular expression to use for frametype matching
1210
+ frametype_match : `str`
1211
+ Regular expression to use for frametype matching.
1209
1212
 
1210
- pad : `float`, optional
1211
- value with which to fill gaps in the source data,
1213
+ pad : `float`
1214
+ Value with which to fill gaps in the source data,
1212
1215
  by default gaps will result in a `ValueError`.
1213
1216
 
1214
- scaled : `bool`, optional
1215
- apply slope and bias calibration to ADC data, for non-ADC data
1217
+ scaled : `bool`
1218
+ Apply slope and bias calibration to ADC data, for non-ADC data
1216
1219
  this option has no effect.
1217
1220
 
1218
- nproc : `int`, optional, default: `1`
1219
- number of parallel processes to use, serial process by
1220
- default.
1221
+ nproc : `int`
1222
+ Number of parallel processes to use.
1221
1223
 
1222
- allow_tape : `bool`, optional, default: `True`
1223
- allow reading from frame files on (slow) magnetic tape
1224
+ allow_tape : `bool`
1225
+ Allow reading from frame files on (slow) magnetic tape.
1224
1226
 
1225
1227
  verbose : `bool`, optional
1226
- print verbose output about read progress, if ``verbose``
1228
+ Print verbose output about read progress, if ``verbose``
1227
1229
  is specified as a string, this defines the prefix for the
1228
- progress meter
1230
+ progress meter.
1229
1231
 
1230
- **readargs
1231
- any other keyword arguments to be passed to `.read()`
1232
+ readargs
1233
+ Any other keyword arguments to be passed to `.read()`.
1234
+
1235
+ Raises
1236
+ ------
1237
+ requests.exceptions.HTTPError
1238
+ If the GWDataFind query fails for any reason.
1239
+
1240
+ RuntimeError
1241
+ If no files are found to read, or if the read operation
1242
+ fails.
1232
1243
  """
1233
1244
  from ..io import datafind as io_datafind
1234
1245
 
@@ -1236,11 +1247,18 @@ class TimeSeriesBaseDict(OrderedDict):
1236
1247
  end = to_gps(end)
1237
1248
 
1238
1249
  # -- find frametype(s)
1250
+
1251
+ frametypes = {}
1252
+
1239
1253
  if frametype is None:
1240
1254
  matched = io_datafind.find_best_frametype(
1241
- channels, start, end, frametype_match=frametype_match,
1242
- allow_tape=allow_tape)
1243
- frametypes = {}
1255
+ channels,
1256
+ start,
1257
+ end,
1258
+ frametype_match=frametype_match,
1259
+ allow_tape=allow_tape,
1260
+ )
1261
+
1244
1262
  # flip dict to frametypes with a list of channels
1245
1263
  for name, ftype in matched.items():
1246
1264
  try:
@@ -1249,30 +1267,34 @@ class TimeSeriesBaseDict(OrderedDict):
1249
1267
  frametypes[ftype] = [name]
1250
1268
 
1251
1269
  if verbose and len(frametypes) > 1:
1252
- gprint("Determined %d frametypes to read" % len(frametypes))
1270
+ gprint(f"Determined {len(frametypes)} frametypes to read")
1253
1271
  elif verbose:
1254
- gprint("Determined best frametype as %r"
1255
- % list(frametypes.keys())[0])
1256
- else:
1257
- frametypes = {frametype: channels}
1272
+ gprint(f"Determined best frametype as '{list(frametypes)[0]}'")
1273
+ else: # use the given frametype for all channels
1274
+ frametypes[frametype] = channels
1258
1275
 
1259
1276
  # -- read data
1277
+
1260
1278
  out = cls()
1261
1279
  for frametype, clist in frametypes.items():
1262
1280
  if verbose:
1263
- verbose = "Reading {} frames".format(frametype)
1281
+ verbose = f"Reading '{frametype}' data"
1282
+
1264
1283
  # parse as a ChannelList
1265
1284
  channellist = ChannelList.from_names(*clist)
1266
1285
  # strip trend tags from channel names
1267
1286
  names = [c.name for c in channellist]
1287
+
1268
1288
  # find observatory for this group
1269
1289
  if observatory is None:
1270
1290
  try:
1271
1291
  observatory = ''.join(
1272
1292
  sorted(set(c.ifo[0] for c in channellist)))
1273
1293
  except TypeError as exc:
1274
- exc.args = "Cannot parse list of IFOs from channel names",
1275
- raise
1294
+ raise ValueError(
1295
+ "Cannot parse list of IFOs from channel names",
1296
+ ) from exc
1297
+
1276
1298
  # find frames
1277
1299
  cache = io_datafind.find_urls(
1278
1300
  observatory,
@@ -1282,16 +1304,28 @@ class TimeSeriesBaseDict(OrderedDict):
1282
1304
  on_gaps="error" if pad is None else "warn",
1283
1305
  )
1284
1306
  if not cache:
1285
- raise RuntimeError("No %s-%s frame files found for [%d, %d)"
1286
- % (observatory, frametype, start, end))
1307
+ raise RuntimeError(
1308
+ f"No {observatory}-{frametype} URLs found for "
1309
+ f"[{start}, {end})",
1310
+ )
1311
+
1287
1312
  # read data
1288
- readargs.setdefault('format', 'gwf')
1289
- new = cls.read(cache, names, start=start, end=end, pad=pad,
1290
- scaled=scaled, nproc=nproc,
1291
- verbose=verbose, **readargs)
1313
+ new = cls.read(
1314
+ cache,
1315
+ names,
1316
+ start=start,
1317
+ end=end,
1318
+ pad=pad,
1319
+ scaled=scaled,
1320
+ nproc=nproc,
1321
+ verbose=verbose,
1322
+ **readargs,
1323
+ )
1324
+
1292
1325
  # map back to user-given channel name and append
1293
- out.append(type(new)((key, new[chan]) for
1294
- (key, chan) in zip(clist, names)))
1326
+ out.append(type(new)(
1327
+ (key, new[chan]) for (key, chan) in zip(clist, names)
1328
+ ))
1295
1329
  return out
1296
1330
 
1297
1331
  @classmethod
@@ -107,26 +107,48 @@ class TestTimeSeriesBase(_TestSeries):
107
107
  a.t0, units.Quantity(1126259462, 's'))
108
108
 
109
109
  def test_sample_rate(self):
110
- """Test `gwpy.timeseries.TimeSeriesBase.sample_rate`
110
+ """Test `gwpy.timeseries.TimeSeriesBase.sample_rate`.
111
111
  """
112
112
  # check basic conversion from dt -> sample_rate
113
113
  a = self.create(dt=0.5)
114
114
  assert a.sample_rate == 2 * units.Hz
115
115
 
116
+ def test_sample_rate_del(self, array):
117
+ """Test that `sample_rate` cannot be deleted.
118
+ """
116
119
  # test that we can't delete sample_rate
117
- with pytest.raises(AttributeError):
118
- del a.sample_rate
120
+ with pytest.raises(
121
+ AttributeError,
122
+ match="(can't delete attribute|has no deleter)",
123
+ ):
124
+ del array.sample_rate
119
125
 
126
+ def test_sample_rate_none(self, array):
127
+ """Test that `sample_rate = None` is effectively a deletion.
128
+ """
120
129
  # check None gets preserved
121
- a.sample_rate = None
122
- with pytest.raises(AttributeError):
123
- a._t0
130
+ array.sample_rate = None
131
+ with pytest.raises(AttributeError, match="_t0"):
132
+ array._t0
133
+
134
+ @pytest.mark.parametrize(("samp", "dt"), [
135
+ (128 * units.Hz, units.s / 128.),
136
+ (16.384 * units.kiloHertz, units.s / 16384),
137
+ (10 / units.s, units.s / 10),
138
+ ])
139
+ def test_sample_rate_type(self, array, samp, dt):
140
+ """Test that units and types are handled when setting `sample_rate`.
141
+ """
142
+ array.sample_rate = samp
143
+ utils.assert_quantity_equal(array.dt, dt)
124
144
 
125
- # check other types
126
- a.sample_rate = units.Quantity(128, units.Hz)
127
- utils.assert_quantity_equal(a.dt, units.s / 128.)
128
- a.sample_rate = units.Quantity(16.384, units.kiloHertz)
129
- utils.assert_quantity_equal(a.dt, units.s / 16384)
145
+ def test_sample_rate_ghz(self, array):
146
+ """Test that very large sample rates don't get rounded to dt=0.
147
+
148
+ Regression: https://github.com/gwpy/gwpy/issues/1646
149
+ """
150
+ array.sample_rate = 1e9
151
+ assert array.dt.value > 0.
130
152
 
131
153
  def test_duration(self, array):
132
154
  assert array.duration == array.t0 + array.shape[0] * array.dt
@@ -30,6 +30,8 @@ import pytest
30
30
  import numpy
31
31
  from numpy import testing as nptest
32
32
 
33
+ from requests.exceptions import HTTPError
34
+
33
35
  from scipy import signal
34
36
 
35
37
  from astropy import units
@@ -646,24 +648,34 @@ class TestTimeSeries(_TestTimeSeriesBase):
646
648
  "os.environ",
647
649
  {"GWDATAFIND_SERVER": GWOSC_DATAFIND_SERVER},
648
650
  )
649
- def test_find(self, gw150914_16384):
651
+ @pytest.mark.parametrize("kwargs", [
652
+ pytest.param({"verbose": True}, id="default"),
653
+ pytest.param({"observatory": GWOSC_GW150914_IFO[0]}, id="observatory"),
654
+ ])
655
+ def test_find(self, gw150914_16384, kwargs):
656
+ """Test that `TimeSeries.find()` can actually find data.
657
+ """
650
658
  ts = self.TEST_CLASS.find(
651
659
  GWOSC_GW150914_CHANNEL,
652
660
  *GWOSC_GW150914_SEGMENT,
653
661
  frametype=GWOSC_GW150914_FRAMETYPE,
662
+ **kwargs,
654
663
  )
655
- utils.assert_quantity_sub_equal(ts, gw150914_16384,
656
- exclude=['name', 'channel', 'unit'])
657
-
658
- # test observatory
659
- ts2 = self.TEST_CLASS.find(
660
- GWOSC_GW150914_CHANNEL,
661
- *GWOSC_GW150914_SEGMENT,
662
- frametype=GWOSC_GW150914_FRAMETYPE,
663
- observatory=GWOSC_GW150914_IFO[0],
664
+ utils.assert_quantity_sub_equal(
665
+ ts,
666
+ gw150914_16384,
667
+ exclude=['name', 'channel', 'unit'],
664
668
  )
665
- utils.assert_quantity_sub_equal(ts, ts2)
666
- with pytest.raises(RuntimeError):
669
+
670
+ @pytest_skip_network_error
671
+ @mock.patch.dict(
672
+ "os.environ",
673
+ {"GWDATAFIND_SERVER": GWOSC_DATAFIND_SERVER},
674
+ )
675
+ def test_find_datafind_httperror(self):
676
+ """Test that HTTPErrors are presented in `find()`.
677
+ """
678
+ with pytest.raises(HTTPError):
667
679
  self.TEST_CLASS.find(
668
680
  GWOSC_GW150914_CHANNEL,
669
681
  *GWOSC_GW150914_SEGMENT,
@@ -671,6 +683,32 @@ class TestTimeSeries(_TestTimeSeriesBase):
671
683
  observatory='X',
672
684
  )
673
685
 
686
+ @mock.patch.dict(
687
+ "os.environ",
688
+ {"GWDATAFIND_SERVER": GWOSC_DATAFIND_SERVER},
689
+ )
690
+ def test_find_datafind_runtimeerror(self):
691
+ """Test that empty datafind caches result in RuntimeErrors in `find()`.
692
+ """
693
+ with pytest.raises(RuntimeError):
694
+ self.TEST_CLASS.find(
695
+ GWOSC_GW150914_CHANNEL,
696
+ *GWOSC_GW150914_SEGMENT.shift(-1e8), # no data available here!
697
+ frametype=GWOSC_GW150914_FRAMETYPE,
698
+ )
699
+
700
+ def test_find_observatory_error(self):
701
+ with pytest.raises(
702
+ ValueError,
703
+ match="Cannot parse list of IFOs from channel names",
704
+ ):
705
+ self.TEST_CLASS.find(
706
+ "Test",
707
+ 0,
708
+ 1,
709
+ frametype="X1_TEST",
710
+ )
711
+
674
712
  @_gwosc_cvmfs
675
713
  @mock.patch.dict(
676
714
  "os.environ",
@@ -839,8 +839,7 @@ class Series(Array):
839
839
  N = min(self.shape[0], other.shape[0])
840
840
 
841
841
  # if units are the same, can shortcut
842
- # NOTE: why not use isinstance here?
843
- if type(other) == type(self) and other.unit == self.unit:
842
+ if isinstance(other, Series) and other.unit == self.unit:
844
843
  self.value[-N:] = other.value[-N:]
845
844
  # otherwise if its just a numpy array
846
845
  elif type(other) is type(self.value) or ( # noqa: E721
@@ -60,7 +60,7 @@ def test_round_to_power():
60
60
  base = 10.
61
61
  rounded = utils_misc.round_to_power(9, base=base)
62
62
  assert base == rounded
63
- assert type(base) == type(rounded)
63
+ assert type(base) == type(rounded) # noqa: E721
64
64
 
65
65
 
66
66
  def test_round_to_power_error():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gwpy
3
- Version: 3.0.5
3
+ Version: 3.0.7
4
4
  Summary: A python package for gravitational-wave astrophysics
5
5
  Author-email: Duncan Macleod <duncan.macleod@ligo.org>
6
6
  License: GPL-3.0-or-later
@@ -15,21 +15,63 @@ Classifier: Natural Language :: English
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
17
  Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.7
19
18
  Classifier: Programming Language :: Python :: 3.8
20
19
  Classifier: Programming Language :: Python :: 3.9
21
20
  Classifier: Programming Language :: Python :: 3.10
22
21
  Classifier: Programming Language :: Python :: 3.11
23
22
  Classifier: Topic :: Scientific/Engineering :: Astronomy
24
23
  Classifier: Topic :: Scientific/Engineering :: Physics
25
- Requires-Python: >=3.7
24
+ Requires-Python: >=3.8
26
25
  Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: astropy>=4.3.0
28
+ Requires-Dist: dqsegdb2
29
+ Requires-Dist: gwdatafind>=1.1.0
30
+ Requires-Dist: gwosc>=0.5.3
31
+ Requires-Dist: h5py>=3.0.0
32
+ Requires-Dist: ligo-segments>=1.0.0
33
+ Requires-Dist: ligotimegps>=1.2.1
34
+ Requires-Dist: matplotlib>=3.3.0
35
+ Requires-Dist: numpy>=1.19
36
+ Requires-Dist: python-dateutil
37
+ Requires-Dist: requests
38
+ Requires-Dist: scipy>=1.5.0
39
+ Requires-Dist: tqdm>=4.10.0
27
40
  Provides-Extra: test
41
+ Requires-Dist: coverage[toml]>=5.0; extra == "test"
42
+ Requires-Dist: pytest>=3.9.1; extra == "test"
43
+ Requires-Dist: pytest-freezegun; extra == "test"
44
+ Requires-Dist: pytest-cov>=2.4.0; extra == "test"
45
+ Requires-Dist: pytest-requires; extra == "test"
46
+ Requires-Dist: pytest-socket; extra == "test"
47
+ Requires-Dist: pytest-xdist; extra == "test"
48
+ Requires-Dist: requests-mock; extra == "test"
28
49
  Provides-Extra: astro
50
+ Requires-Dist: inspiral-range; extra == "astro"
29
51
  Provides-Extra: docs
52
+ Requires-Dist: numpydoc>=0.8.0; extra == "docs"
53
+ Requires-Dist: Sphinx>=4.4.0; extra == "docs"
54
+ Requires-Dist: sphinx-automodapi; extra == "docs"
55
+ Requires-Dist: sphinx-immaterial>=0.7.3; extra == "docs"
56
+ Requires-Dist: sphinx-panels>=0.6.0; extra == "docs"
57
+ Requires-Dist: sphinxcontrib-programoutput; extra == "docs"
30
58
  Provides-Extra: dev
59
+ Requires-Dist: ciecplib; extra == "dev"
60
+ Requires-Dist: dateparser>=1.1.2; extra == "dev"
61
+ Requires-Dist: lalsuite; sys_platform != "win32" and extra == "dev"
62
+ Requires-Dist: lscsoft-glue; sys_platform != "win32" and extra == "dev"
63
+ Requires-Dist: maya; python_version < "3.11" and extra == "dev"
64
+ Requires-Dist: psycopg2; extra == "dev"
65
+ Requires-Dist: pycbc>=1.13.4; sys_platform != "win32" and extra == "dev"
66
+ Requires-Dist: pymysql; extra == "dev"
67
+ Requires-Dist: pyRXP; extra == "dev"
68
+ Requires-Dist: python-ligo-lw>=1.7.0; sys_platform != "win32" and extra == "dev"
69
+ Requires-Dist: sqlalchemy; extra == "dev"
70
+ Requires-Dist: uproot>=4.1.5; extra == "dev"
31
71
  Provides-Extra: conda
32
- License-File: LICENSE
72
+ Requires-Dist: python-framel>=8.40.1; extra == "conda"
73
+ Requires-Dist: python-ldas-tools-framecpp; sys_platform != "win32" and extra == "conda"
74
+ Requires-Dist: python-nds2-client; extra == "conda"
33
75
 
34
76
  GWpy is a collaboration-driven Python package providing tools for
35
77
  studying data from ground-based gravitational-wave detectors.