gwpy 3.0.9__py3-none-any.whl → 3.0.10__py3-none-any.whl

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.

gwpy/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.0.9'
16
- __version_tuple__ = version_tuple = (3, 0, 9)
15
+ __version__ = version = '3.0.10'
16
+ __version_tuple__ = version_tuple = (3, 0, 10)
gwpy/cli/gwpy_plot.py CHANGED
@@ -55,7 +55,7 @@ Examples:
55
55
  $ gwpy-plot coherencegram --chan H1:GDS-CALIB_STRAIN H1:PEM-CS_ACC_PSL_PERISCOPE_X_DQ --start 1126260017 --duration 600
56
56
 
57
57
  Written by {__author__}.
58
- Report bugs to https://github.com/gwpy/gwpy/issues/.
58
+ Report bugs to https://gitlab.com/gwpy/gwpy/-/issues/.
59
59
  """ # noqa: E501
60
60
 
61
61
 
gwpy/cli/tests/base.py CHANGED
@@ -19,6 +19,7 @@
19
19
  """Unit tests for :mod:`gwpy.cli`
20
20
  """
21
21
 
22
+ import warnings
22
23
  from argparse import ArgumentParser
23
24
  from unittest import mock
24
25
 
@@ -237,7 +238,16 @@ class _TestCliProduct(object):
237
238
  xmin = min(series.xspan[0] for series in data)
238
239
  xmax = max(series.xspan[1] for series in data)
239
240
 
240
- plotprod.set_plot_properties()
241
+ # ignore warnings from matplotlib about having no labels
242
+ # (because we have cut some corners in preparing this test)
243
+ with warnings.catch_warnings():
244
+ warnings.filterwarnings(
245
+ "ignore",
246
+ message="No artists with labels found to put in legend",
247
+ category=UserWarning,
248
+ )
249
+ plotprod.set_plot_properties()
250
+
241
251
  ax = plotprod.ax
242
252
 
243
253
  ymin, ymax = ax.get_ylim()
gwpy/detector/units.py CHANGED
@@ -187,7 +187,7 @@ units.def_unit(['NONE', 'undef'], namespace=_ns,
187
187
 
188
188
  # other dimenionless units
189
189
  units.def_unit('strain', namespace=_ns)
190
- units.def_unit('coherence', namespace=_ns)
190
+ units.def_unit('coherence', represents=units.dimensionless_unscaled, namespace=_ns)
191
191
 
192
192
  # alias for 'second' but with prefices
193
193
  units.def_unit((['sec'], ['sec']), represents=units.second, prefixes=True,
@@ -77,7 +77,8 @@ class TestSpectralVariance(_TestArray2D):
77
77
  utils.assert_array_equal(array.yindex, array.bins[:-1])
78
78
 
79
79
  def test_transpose(self, array):
80
- return NotImplemented
80
+ with pytest.raises(NotImplementedError):
81
+ array.T
81
82
 
82
83
  # -- test utilities -------------------------
83
84
 
@@ -110,10 +111,10 @@ class TestSpectralVariance(_TestArray2D):
110
111
  pytest.skip("float precision test not supported for SpectralVariance")
111
112
 
112
113
  def test_is_compatible_yindex(self, array):
113
- return NotImplemented
114
+ pytest.skip(f"not implemented for {type(self).__name__}")
114
115
 
115
116
  def test_is_compatible_error_yindex(self, array):
116
- return NotImplemented
117
+ pytest.skip(f"not implemented for {type(self).__name__}")
117
118
 
118
119
  def test_plot(self, array):
119
120
  with rc_context(rc={'text.usetex': False}):
gwpy/plot/plot.py CHANGED
@@ -27,7 +27,12 @@ from itertools import zip_longest
27
27
 
28
28
  import numpy
29
29
 
30
- from matplotlib import (figure, get_backend, _pylab_helpers)
30
+ from matplotlib import (
31
+ _pylab_helpers,
32
+ backends,
33
+ figure,
34
+ get_backend,
35
+ )
31
36
  from matplotlib.artist import setp
32
37
  from matplotlib.gridspec import GridSpec
33
38
  from matplotlib.ticker import LogFormatterSciNotation
@@ -53,7 +58,12 @@ iterable_types = (list, tuple, KeysView, ValuesView,)
53
58
  def interactive_backend():
54
59
  """Returns `True` if the current backend is interactive
55
60
  """
56
- from matplotlib.rcsetup import interactive_bk
61
+ try:
62
+ interactive_bk = backends.backend_registry.list_builtin(
63
+ backends.BackendFilter.INTERACTIVE,
64
+ )
65
+ except AttributeError: # matplotlib < 3.9.0
66
+ from matplotlib.rcsetup import interactive_bk
57
67
  return get_backend() in interactive_bk
58
68
 
59
69
 
@@ -136,7 +136,7 @@ class TestSegmentAxes(_TestAxes):
136
136
  # -- disable tests from upstream
137
137
 
138
138
  def test_imshow(self):
139
- return NotImplemented
139
+ pytest.skip(f"not implemented for {type(self).__name__}")
140
140
 
141
141
 
142
142
  def test_segmentrectangle():
gwpy/segments/flag.py CHANGED
@@ -453,18 +453,20 @@ class DataQualityFlag(object):
453
453
  Examples
454
454
  --------
455
455
  >>> from gwpy.segments import DataQualityFlag
456
- >>> print(DataQualityFlag.fetch_open_data('H1_DATA', 'Jan 1 2010',
457
- ... 'Jan 2 2010'))
456
+ >>> print(DataQualityFlag.fetch_open_data(
457
+ ... "H1_DATA",
458
+ ... "Sep 14 2015",
459
+ ... "Sep 15 2015",
460
+ ... ))
458
461
  <DataQualityFlag('H1:DATA',
459
- known=[[946339215 ... 946425615)],
460
- active=[[946340946 ... 946351800)
461
- [946356479 ... 946360620)
462
- [946362652 ... 946369150)
463
- [946372854 ... 946382630)
464
- [946395595 ... 946396751)
465
- [946400173 ... 946404977)
466
- [946412312 ... 946413577)
467
- [946415770 ... 946422986)],
462
+ known=[[1126224017 ... 1126310417)]
463
+ active=[[1126251604 ... 1126252133)
464
+ [1126252291 ... 1126274322)
465
+ [1126276234 ... 1126281754)
466
+ ...
467
+ [1126308670 ... 1126309577)
468
+ [1126309637 ... 1126309817)
469
+ [1126309877 ... 1126310417)]
468
470
  description=None)>
469
471
  """
470
472
  start = to_gps(start).gpsSeconds
@@ -89,7 +89,7 @@ def _design_fir(wp, ws, sample_rate, gpass, gstop, window='hamming', **kwargs):
89
89
  if wp[0] > ws[0]:
90
90
  kwargs.setdefault('pass_zero', False)
91
91
  if ws.shape == (1,):
92
- kwargs.setdefault('width', ws - wp)
92
+ kwargs.setdefault("width", ws.item() - wp.item())
93
93
  kwargs.setdefault('fs', sample_rate)
94
94
  return signal.firwin(nt, wp, window=window, **kwargs)
95
95
 
@@ -21,6 +21,8 @@
21
21
 
22
22
  __author__ = "Alex Southgate <alex.southgate@ligo.org>"
23
23
 
24
+ import warnings
25
+
24
26
  import numpy as np
25
27
  import pytest
26
28
  import scipy.signal as sig
@@ -121,7 +123,11 @@ def test_coherence_resample(unequal_fs_series_data):
121
123
  # the first coherence val coh12 is broken intentionally since
122
124
  # secondarr data should not have fs_1, instead fs_2
123
125
  coh12 = spectral.coherence(first, second, segmentlength=seglen)
124
- coh13 = spectral.coherence(first, third, segmentlength=seglen)
126
+ with pytest.warns(
127
+ UserWarning,
128
+ match="Sampling frequencies are unequal",
129
+ ):
130
+ coh13 = spectral.coherence(first, third, segmentlength=seglen)
125
131
 
126
132
  # get the frequency at minimum coherence, this should be the extra
127
133
  # component in secondarr
@@ -136,7 +142,7 @@ def test_coherence_resample(unequal_fs_series_data):
136
142
  assert not (4 <= maxf12.value <= 6)
137
143
 
138
144
 
139
- def test_coherence_resample_arg(series_data):
145
+ def test_coherence_resample_downsample(series_data):
140
146
  """Ensure warning is raised by unequal sampling frequencies.
141
147
  """
142
148
  firstarr, secondarr, seglen = series_data
@@ -145,15 +151,30 @@ def test_coherence_resample_arg(series_data):
145
151
  first = TimeSeries(firstarr, sample_rate=f_s)
146
152
  second = TimeSeries(secondarr, sample_rate=f_s * 2.32)
147
153
 
148
- with pytest.warns(UserWarning, match="Sampling frequencies are unequal"):
149
- spectral.coherence(first, second, segmentlength=seglen)
154
+ with pytest.warns(
155
+ UserWarning,
156
+ match="Sampling frequencies are unequal",
157
+ ):
158
+ coh1 = spectral.coherence(first, second, segmentlength=seglen)
150
159
 
160
+ # check that forcibly disabling downsample results in an error
151
161
  with pytest.raises(ValueError):
152
- spectral.coherence(first, second, segmentlength=seglen,
153
- downsample=False)
154
-
155
- coh1 = spectral.coherence(first, second, segmentlength=seglen)
156
- coh2 = spectral.coherence(first, second, segmentlength=seglen,
157
- downsample=True)
162
+ spectral.coherence(
163
+ first,
164
+ second,
165
+ segmentlength=seglen,
166
+ downsample=False,
167
+ )
168
+
169
+ # but that accepting downsampling gives you the same result as
170
+ # doing nothing (but doesn't emit a warning)
171
+ with warnings.catch_warnings():
172
+ warnings.simplefilter("error", DeprecationWarning)
173
+ coh2 = spectral.coherence(
174
+ first,
175
+ second,
176
+ segmentlength=seglen,
177
+ downsample=True,
178
+ )
158
179
 
159
180
  assert all(np.array(coh1.data) == np.array(coh2.data))
gwpy/table/io/ligolw.py CHANGED
@@ -58,7 +58,7 @@ try:
58
58
  except ImportError:
59
59
  pass
60
60
  else:
61
- NUMPY_TYPE_MAP[LIGOTimeGPS] = numpy.float_
61
+ NUMPY_TYPE_MAP[LIGOTimeGPS] = numpy.float64
62
62
 
63
63
 
64
64
  # -- utilities ----------------------------------------------------------------
@@ -70,7 +70,7 @@ def test_to_astropy_table_empty():
70
70
  tab = EventTable(llwtable, columns=["peak", "ifo"])
71
71
  assert set(tab.colnames) == {"peak", "ifo"}
72
72
  assert tab['peak'].dtype.type is numpy.object_
73
- assert tab['ifo'].dtype.type is numpy.unicode_
73
+ assert tab['ifo'].dtype.type is numpy.str_
74
74
 
75
75
 
76
76
  @pytest.mark.requires("ligo.lw.lsctables")
gwpy/testing/errors.py CHANGED
@@ -31,6 +31,7 @@ import requests.exceptions
31
31
  NETWORK_ERROR = (
32
32
  ConnectionError,
33
33
  requests.exceptions.ConnectionError,
34
+ requests.exceptions.ReadTimeout,
34
35
  socket.timeout,
35
36
  SSLError,
36
37
  URLError,
gwpy/timeseries/core.py CHANGED
@@ -793,7 +793,6 @@ class TimeSeriesBase(Series):
793
793
  op_ = ufunc.__name__
794
794
  out = out.view(StateTimeSeries)
795
795
  out.__metadata_finalize__(orig)
796
- out.override_unit('')
797
796
  oname = orig.name if isinstance(orig, type(self)) else orig
798
797
  vname = value.name if isinstance(value, type(self)) else value
799
798
  out.name = '{0!s} {1!s} {2!s}'.format(oname, op_, vname)
@@ -184,8 +184,10 @@ class StateTimeSeries(TimeSeriesBase):
184
184
  def unit(self):
185
185
  return units.dimensionless_unscaled
186
186
 
187
- def override_unit(self, unit, parse_strict='raise'):
188
- return NotImplemented
187
+ def override_unit(self, *args, **kwargs):
188
+ raise NotImplementedError(
189
+ f"overriding units is not supported for {type(self).__name__}",
190
+ )
189
191
 
190
192
  def _to_own_unit(self, value, check_precision=True):
191
193
  if isinstance(value, units.Quantity) and value.unit != self.unit:
@@ -53,7 +53,8 @@ class TestTimeSeriesBase(_TestSeries):
53
53
  def test_new(self):
54
54
  """Test `gwpy.timeseries.TimeSeriesBase` constructor
55
55
  """
56
- array = super().test_new()
56
+ array = self.create()
57
+ super().test_new()
57
58
 
58
59
  # check time-domain metadata
59
60
  assert array.epoch == GPS_EPOCH
@@ -145,7 +146,7 @@ class TestTimeSeriesBase(_TestSeries):
145
146
  def test_sample_rate_ghz(self, array):
146
147
  """Test that very large sample rates don't get rounded to dt=0.
147
148
 
148
- Regression: https://github.com/gwpy/gwpy/issues/1646
149
+ Regression: https://gitlab.com/gwpy/gwpy/-/issues/1646
149
150
  """
150
151
  array.sample_rate = 1e9
151
152
  assert array.dt.value > 0.
@@ -400,20 +401,13 @@ class TestTimeSeriesBaseDict(object):
400
401
 
401
402
  def test_resample(self, instance):
402
403
  if self.ENTRY_CLASS is TimeSeriesBase: # currently only for subclasses
403
- return NotImplemented
404
+ pytest.skip(f"not implemented for {type(instance).__name__}")
405
+
406
+ # for all subclasses
404
407
  a = instance.resample(.5)
405
408
  for key in a:
406
409
  assert a[key].dx == 1/.5 * a[key].xunit
407
410
 
408
- def test_fetch(self):
409
- return NotImplemented
410
-
411
- def test_find(self):
412
- return NotImplemented
413
-
414
- def test_get(self):
415
- return NotImplemented
416
-
417
411
  @pytest.mark.requires("nds2")
418
412
  def test_from_nds2_buffers(self):
419
413
  buffers = [
@@ -445,7 +439,7 @@ class TestTimeSeriesBaseDict(object):
445
439
  def test_plot_separate(self, instance):
446
440
  """Test plotting `TimeSeriesDict` on separate axes.
447
441
 
448
- See https://github.com/gwpy/gwpy/issues/1609
442
+ See https://gitlab.com/gwpy/gwpy/-/issues/1609
449
443
  """
450
444
  with rc_context(rc={'text.usetex': False}):
451
445
  plot = instance.plot(separate=True)
@@ -63,7 +63,7 @@ def test_read_scaled_type_change(int32ts, tmp_path):
63
63
 
64
64
 
65
65
  def test_read_write_frvect_name(tmp_path):
66
- """Test against regression of https://github.com/gwpy/gwpy/issues/1206
66
+ """Test against regression of https://gitlab.com/gwpy/gwpy/-/issues/1206
67
67
  """
68
68
  data = TimeSeries(
69
69
  numpy.random.random(10),
@@ -144,29 +144,39 @@ class TestStateTimeSeries(_TestTimeSeriesBase):
144
144
  assert flag.label == 'Label'
145
145
  assert flag.description == 'Description'
146
146
 
147
- def test_override_unit(self):
148
- return NotImplemented
147
+ def test_override_unit(self, array):
148
+ with pytest.raises(NotImplementedError):
149
+ super().test_override_unit(array)
149
150
 
150
151
  def test_is_compatible_error_unit(self):
151
- return NotImplemented
152
+ pytest.skip(f"not implemented for {self.TEST_CLASS.__name__}")
152
153
 
153
154
  def test_to_from_pycbc(self):
154
- return NotImplemented
155
+ pytest.skip(f"not implemented for {self.TEST_CLASS.__name__}")
155
156
 
156
- def test_to_from_lal(self):
157
- return NotImplemented
157
+ def test_to_from_lal(self, array):
158
+ with pytest.raises(NotImplementedError):
159
+ super().test_to_from_lal(array)
158
160
 
159
- def test_to_from_lal_no_copy(self):
160
- return NotImplemented
161
+ @pytest.mark.parametrize("copy", (False, True))
162
+ def test_to_from_lal_no_copy(self, array, copy):
163
+ with pytest.raises(NotImplementedError):
164
+ super().test_to_from_lal_no_copy(array, copy)
161
165
 
162
- def test_to_from_lal_pow10_units(self):
163
- return NotImplemented
166
+ @pytest.mark.requires("lal")
167
+ def test_to_from_lal_pow10_units(self, array):
168
+ with pytest.raises(NotImplementedError):
169
+ super().test_to_from_lal_pow10_units(array)
164
170
 
165
- def test_to_from_lal_scaled_units(self):
166
- return NotImplemented
171
+ @pytest.mark.requires("lal")
172
+ def test_to_from_lal_scaled_units(self, array):
173
+ with pytest.raises(NotImplementedError):
174
+ super().test_to_from_lal_scaled_units(array)
167
175
 
168
- def test_to_from_lal_unrecognised_units(self):
169
- return NotImplemented
176
+ @pytest.mark.requires("lal")
177
+ def test_to_from_lal_unrecognised_units(self, array):
178
+ with pytest.raises(NotImplementedError):
179
+ super().test_to_from_lal_unrecognised_units(array)
170
180
 
171
181
 
172
182
  # -- StateTimeSeriesDict ------------------------------------------------------
@@ -176,8 +186,8 @@ class TestStateTimeSeriesDict(_TestTimeSeriesBaseDict):
176
186
  ENTRY_CLASS = StateTimeSeries
177
187
  DTYPE = 'bool'
178
188
 
179
- def test_resample(self):
180
- return NotImplemented
189
+ def test_resample(self, instance):
190
+ pytest.skip(f"not implemented for {type(instance).__name__}")
181
191
 
182
192
 
183
193
  # -- Bits ---------------------------------------------------------------------
@@ -326,7 +336,9 @@ class TestStateVector(_TestTimeSeriesBase):
326
336
  array.resample(array.sample_rate * 1.5)
327
337
 
328
338
  def test_to_from_lal_scaled_units(self):
329
- return NotImplemented
339
+ pytest.skip(
340
+ f"not implemented for {self.TEST_CLASS.__name__}",
341
+ )
330
342
 
331
343
  # -- data access ----------------------------
332
344
 
@@ -201,7 +201,7 @@ class TestTimeSeries(_TestTimeSeriesBase):
201
201
  def test_read_ascii_header(self, tmpdir):
202
202
  """Check that ASCII files with headers are read without extra options
203
203
 
204
- [regression: https://github.com/gwpy/gwpy/issues/1473]
204
+ [regression: https://gitlab.com/gwpy/gwpy/-/issues/1473]
205
205
  """
206
206
  txt = tmpdir / "text.txt"
207
207
  txt.write_text(
@@ -284,7 +284,7 @@ class TestTimeSeries(_TestTimeSeriesBase):
284
284
  """Check that each GWF API can read a series of files, either in
285
285
  a single process, or in multiple processes
286
286
 
287
- Regression: https://github.com/gwpy/gwpy/issues/1486
287
+ Regression: https://gitlab.com/gwpy/gwpy/-/issues/1486
288
288
  """
289
289
  fmt = "gwf" if api is None else "gwf." + api
290
290
  a1 = self.create(name='TEST')
@@ -512,7 +512,7 @@ class TestTimeSeries(_TestTimeSeriesBase):
512
512
  """Check that `TimeSeries.read` with `gap='raise'` actually
513
513
  raises appropriately.
514
514
 
515
- [regression: https://github.com/gwpy/gwpy/issues/1211]
515
+ [regression: https://gitlab.com/gwpy/gwpy/-/issues/1211]
516
516
  """
517
517
  from gwpy.io.cache import file_segment
518
518
  span = file_segment(utils.TEST_HDF5_FILE)
@@ -846,9 +846,7 @@ class TestTimeSeries(_TestTimeSeriesBase):
846
846
  gw150914.psd(abs(gw150914.span), method='lal_median_mean')
847
847
 
848
848
  # odd number of segments should warn
849
- # pytest hides the second DeprecationWarning that should have been
850
- # triggered here, for some reason
851
- with pytest.warns(UserWarning):
849
+ with pytest.warns(UserWarning), pytest.deprecated_call():
852
850
  gw150914.psd(1, .5, method='lal_median_mean')
853
851
 
854
852
  @pytest.mark.parametrize('method', ('welch', 'bartlett', 'median'))
@@ -1022,18 +1020,16 @@ class TestTimeSeries(_TestTimeSeriesBase):
1022
1020
  pytest.param('pycbc', marks=pytest.mark.requires("pycbc.psd")),
1023
1021
  ])
1024
1022
  def test_spectrogram_median_mean(self, gw150914, library):
1025
- method = '{0}-median-mean'.format(library)
1023
+ method = f"{library}-median-mean"
1026
1024
 
1027
- # median-mean warn on LAL if not given the correct data for an
1028
- # even number of FFTs.
1029
- # pytest only asserts a single warning, and UserWarning will take
1030
- # precedence apparently, so check that for lal
1025
+ # the LAL implementation of median-mean warns if not given the
1026
+ # correct amount of data for an even number of FFTs.
1031
1027
  if library == 'lal':
1032
- warn_ctx = pytest.warns(UserWarning)
1028
+ lal_warn_ctx = pytest.warns(UserWarning)
1033
1029
  else:
1034
- warn_ctx = pytest.deprecated_call()
1030
+ lal_warn_ctx = nullcontext()
1035
1031
 
1036
- with warn_ctx:
1032
+ with pytest.deprecated_call(), lal_warn_ctx:
1037
1033
  sg = gw150914.spectrogram(
1038
1034
  1.5,
1039
1035
  fftlength=.5,
@@ -88,23 +88,25 @@ class TestArray(object):
88
88
 
89
89
  # -- test basic construction ----------------
90
90
 
91
- def test_new(self):
92
- """Test Array creation
91
+ def assert_new(self, array):
92
+ """Run basic assertions for a new instance of the type under test.
93
93
  """
94
- # test basic empty contructor
95
- with pytest.raises(TypeError):
96
- self.TEST_CLASS()
97
-
98
- # test with some data
99
- array = self.create()
100
94
  utils.assert_array_equal(array.value, self.data)
101
95
 
102
96
  # test that copy=True ensures owndata
103
97
  assert self.create(copy=False).flags.owndata is False
104
98
  assert self.create(copy=True).flags.owndata is True
105
99
 
106
- # return array for subclasses to use
107
- return array
100
+ def test_new_empty(self):
101
+ """Test that `Array()` raises an exception.
102
+ """
103
+ with pytest.raises(TypeError):
104
+ self.TEST_CLASS()
105
+
106
+ def test_new(self):
107
+ """Test Array creation.
108
+ """
109
+ self.assert_new(self.create())
108
110
 
109
111
  def test_unit(self, array):
110
112
  # test default unit is dimensionless
@@ -198,7 +198,7 @@ class TestArray2D(_TestSeries):
198
198
 
199
199
  But still represent the output as an `Array2D` with `Index` arrays.
200
200
 
201
- This tests regression of https://github.com/gwpy/gwpy/issues/1504.
201
+ This tests regression of https://gitlab.com/gwpy/gwpy/-/issues/1504.
202
202
  """
203
203
  # create an array with indices
204
204
  a = self.create()
@@ -239,18 +239,14 @@ class TestArray2D(_TestSeries):
239
239
  with pytest.raises(IndexError):
240
240
  array.value_at(1.6, 4.8)
241
241
 
242
- @pytest.mark.skip("not implemented for >1D arrays")
243
242
  def test_pad(self):
244
- return NotImplemented
243
+ pytest.skip("not implemented for >1D arrays")
245
244
 
246
- @pytest.mark.skip("not implemented for >1D arrays")
247
245
  def test_pad_index(self):
248
- return NotImplemented
246
+ pytest.skip("not implemented for >1D arrays")
249
247
 
250
- @pytest.mark.skip("not implemented for >1D arrays")
251
248
  def test_pad_asymmetric(self):
252
- return NotImplemented
249
+ pytest.skip("not implemented for >1D arrays")
253
250
 
254
- @pytest.mark.skip("not applicable for >1D arrays")
255
251
  def test_single_getitem_not_created(self):
256
- return NotImplemented
252
+ pytest.skip("not implemented for >1D arrays")
@@ -36,11 +36,10 @@ from .test_array import TestArray as _TestArray
36
36
  class TestSeries(_TestArray):
37
37
  TEST_CLASS = Series
38
38
 
39
- def test_new(self):
40
- array = super().test_new()
39
+ def assert_new(self, array):
40
+ super().assert_new(array)
41
41
  assert array.x0 == units.Quantity(0, self.TEST_CLASS._default_xunit)
42
42
  assert array.dx == units.Quantity(1, self.TEST_CLASS._default_xunit)
43
- return array
44
43
 
45
44
  # -- test properties ------------------------
46
45
 
@@ -168,7 +167,7 @@ class TestSeries(_TestArray):
168
167
 
169
168
  When subsetting a Series with an iterable of integer indices,
170
169
  make sure that the xindex, if it exists, is also subsetted. Tests
171
- regression against https://github.com/gwpy/gwpy/issues/1680.
170
+ regression against https://gitlab.com/gwpy/gwpy/-/issues/1680.
172
171
  """
173
172
  array.xindex # create xindex
174
173
  indices = numpy.array([0, 1, len(array)-1])
@@ -250,7 +249,8 @@ class TestSeries(_TestArray):
250
249
  def test_crop_float_precision(self):
251
250
  """Verify the float precision of the crop function.
252
251
 
253
- This tests regression against https://github.com/gwpy/gwpy/issues/1601.
252
+ This tests against regression of
253
+ https://gitlab.com/gwpy/gwpy/-/issues/1601.
254
254
  """
255
255
  # construct empty data array with the right shape for this array object
256
256
  shape = (101,) * self.TEST_CLASS._ndim
@@ -62,7 +62,11 @@ def format_citations(
62
62
  "page": 1,
63
63
  "size": int(hits),
64
64
  }
65
- resp = requests.get(apiurl, params) # make the request
65
+ resp = requests.get( # make the request
66
+ apiurl,
67
+ params=params,
68
+ timeout=30,
69
+ )
66
70
  resp.raise_for_status() # make sure it worked
67
71
  records = resp.json() # parse the response
68
72
 
@@ -85,15 +85,20 @@ MOCK_ZENODO_API_RST = """
85
85
  """.strip()
86
86
 
87
87
 
88
- def pytest_skip_rate_limit(func):
89
- """Execute `func` but skip if it raises a rate limit error
88
+ def pytest_skip_zenodo_http_errors(func):
89
+ """Execute `func` but skip if it raises a known server-side error.
90
90
  """
91
91
  @wraps(func)
92
92
  def wrapper(*args, **kwargs):
93
93
  try:
94
94
  return func(*args, **kwargs)
95
95
  except requests.HTTPError as exc: # pragma: no cover
96
- if str(exc).startswith("403 Client Error: rate limit exceeded"):
96
+ if (
97
+ # API rate limit
98
+ str(exc).startswith("403 Client Error: rate limit exceeded")
99
+ # Bad Gateway
100
+ or exc.response.status_code == 502
101
+ ):
97
102
  pytest.skip(str(exc))
98
103
  raise
99
104
  return wrapper
@@ -101,7 +106,7 @@ def pytest_skip_rate_limit(func):
101
106
 
102
107
  @pytest.fixture
103
108
  @pytest_skip_network_error
104
- @pytest_skip_rate_limit
109
+ @pytest_skip_zenodo_http_errors
105
110
  def latest():
106
111
  """Get the latest release of GWpy from the GitHub API.
107
112
  """
@@ -114,7 +119,7 @@ def latest():
114
119
 
115
120
 
116
121
  @pytest_skip_network_error
117
- @pytest_skip_rate_limit
122
+ @pytest_skip_zenodo_http_errors
118
123
  def test_zenodo_format_citations_latest(latest):
119
124
  """Check that :func:`gwpy.utils.sphinx.zenodo.format_citations` includes
120
125
  the latest actual release in the output.
@@ -0,0 +1,125 @@
1
+ Metadata-Version: 2.1
2
+ Name: gwpy
3
+ Version: 3.0.10
4
+ Summary: A python package for gravitational-wave astrophysics
5
+ Author-email: Duncan Macleod <duncan.macleod@ligo.org>
6
+ License: GPL-3.0-or-later
7
+ Project-URL: Bug Tracker, https://gitlab.com/gwpy/gwpy/-/issues
8
+ Project-URL: Discussion Forum, https://gwpy.slack.com
9
+ Project-URL: Documentation, https://gwpy.github.io/docs/
10
+ Project-URL: Source Code, https://gitlab.com/gwpy/gwpy
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
14
+ Classifier: Natural Language :: English
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.8
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Scientific/Engineering :: Astronomy
24
+ Classifier: Topic :: Scientific/Engineering :: Physics
25
+ Requires-Python: >=3.8
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: astropy>=4.3.0
29
+ Requires-Dist: dateparser>=1.1.4
30
+ Requires-Dist: dqsegdb2
31
+ Requires-Dist: gwdatafind>=1.1.0
32
+ Requires-Dist: gwosc>=0.5.3
33
+ Requires-Dist: h5py>=3.0.0
34
+ Requires-Dist: ligo-segments>=1.0.0
35
+ Requires-Dist: ligotimegps>=1.2.1
36
+ Requires-Dist: matplotlib>=3.3.0
37
+ Requires-Dist: numpy>=1.19
38
+ Requires-Dist: python-dateutil
39
+ Requires-Dist: requests>=2.20.0
40
+ Requires-Dist: scipy>=1.6.0
41
+ Requires-Dist: tqdm>=4.10.0
42
+ Provides-Extra: astro
43
+ Requires-Dist: inspiral-range>=0.5.0; extra == "astro"
44
+ Provides-Extra: conda
45
+ Requires-Dist: python-framel!=8.46.0,>=8.40.1; extra == "conda"
46
+ Requires-Dist: python-nds2-client; extra == "conda"
47
+ Requires-Dist: python-ldas-tools-framecpp; sys_platform != "win32" and extra == "conda"
48
+ Requires-Dist: lxml!=4.9.1; sys_platform == "win32" and extra == "conda"
49
+ Provides-Extra: dev
50
+ Requires-Dist: ciecplib; extra == "dev"
51
+ Requires-Dist: inspiral-range>=0.5.0; extra == "dev"
52
+ Requires-Dist: pymysql; extra == "dev"
53
+ Requires-Dist: sqlalchemy; extra == "dev"
54
+ Requires-Dist: uproot>=4.1.5; extra == "dev"
55
+ Requires-Dist: lalsuite; sys_platform != "win32" and extra == "dev"
56
+ Requires-Dist: lscsoft-glue; sys_platform != "win32" and extra == "dev"
57
+ Requires-Dist: pycbc>=1.13.4; sys_platform != "win32" and extra == "dev"
58
+ Requires-Dist: python-ligo-lw>=1.7.0; sys_platform != "win32" and extra == "dev"
59
+ Requires-Dist: psycopg2; sys_platform == "linux" and extra == "dev"
60
+ Provides-Extra: docs
61
+ Requires-Dist: numpydoc>=0.8.0; extra == "docs"
62
+ Requires-Dist: Sphinx>=4.4.0; extra == "docs"
63
+ Requires-Dist: sphinx-automodapi; extra == "docs"
64
+ Requires-Dist: sphinx-immaterial>=0.7.3; extra == "docs"
65
+ Requires-Dist: sphinxcontrib-programoutput; extra == "docs"
66
+ Provides-Extra: test
67
+ Requires-Dist: coverage[toml]>=5.0; extra == "test"
68
+ Requires-Dist: pytest>=3.9.1; extra == "test"
69
+ Requires-Dist: pytest-freezer; extra == "test"
70
+ Requires-Dist: pytest-cov>=2.4.0; extra == "test"
71
+ Requires-Dist: pytest-requires; extra == "test"
72
+ Requires-Dist: pytest-socket; extra == "test"
73
+ Requires-Dist: pytest-xdist; extra == "test"
74
+ Requires-Dist: requests-mock; extra == "test"
75
+
76
+ GWpy is a collaboration-driven Python package providing tools for
77
+ studying data from ground-based gravitational-wave detectors.
78
+
79
+ GWpy provides a user-friendly, intuitive interface to the common
80
+ time-domain and frequency-domain data produced by the LIGO and Virgo
81
+ observatories and their analyses, with easy-to-follow tutorials at each
82
+ step.
83
+
84
+ <https://gwpy.github.io>
85
+
86
+ # Release status
87
+
88
+ [![PyPI version](https://badge.fury.io/py/gwpy.svg)](http://badge.fury.io/py/gwpy)
89
+ [![Conda version](https://img.shields.io/conda/vn/conda-forge/gwpy.svg)](https://anaconda.org/conda-forge/gwpy/)
90
+
91
+ [![License](https://img.shields.io/pypi/l/gwpy.svg)](https://choosealicense.com/licenses/gpl-3.0/)
92
+ ![Supported Python versions](https://img.shields.io/pypi/pyversions/gwpy.svg)
93
+
94
+ # Development status
95
+
96
+ [![Build status](https://gitlab.com/gwpy/gwpy/badges/main/pipeline.svg)](https://gitlab.com/gwpy/gwpy/-/pipelines/?ref=main)
97
+ [![Coverage status](https://gitlab.com/gwpy/gwpy/badges/main/coverage.svg)](https://gitlab.com/gwpy/gwpy/-/pipelines/?ref=main)
98
+
99
+ # Installation
100
+
101
+ To install, you can do:
102
+
103
+ ```
104
+ conda install -c conda-forge gwpy
105
+ ```
106
+
107
+ or
108
+
109
+ ```
110
+ python -m pip install gwpy
111
+ ```
112
+
113
+ You can test your installation, and its version by
114
+
115
+ ```
116
+ python -c "import gwpy; print(gwpy.__version__)"
117
+ ```
118
+
119
+ # License
120
+
121
+ GWpy is released under the GNU General Public License v3.0 or later, see
122
+ [here](https://choosealicense.com/licenses/gpl-3.0/) for a description of
123
+ this license, or see the
124
+ [LICENSE](https://gitlab.com/gwpy/gwpy/-/blob/main/LICENSE) file for the
125
+ full text.
@@ -1,5 +1,5 @@
1
1
  gwpy/__init__.py,sha256=3chu5cxfVA08qkFYk3lyXBlFXO6lrgytIIdh_nL9YzU,1533
2
- gwpy/_version.py,sha256=tG9pPVh8tGuhiLuhmkU2HBdW-0Eea4piRXA-Q5yaT30,411
2
+ gwpy/_version.py,sha256=8x3USMh-QXDOqs112oCeNZdt7w1M5P5hyLCG9bkT-c4,413
3
3
  gwpy/conftest.py,sha256=nMqidKFNcwTCvDb-vHzzCmzUyyL0TH9DwbmagfdE1II,1639
4
4
  gwpy/astro/__init__.py,sha256=DtaqsbVdlI4Qy6eRlXuLtraTCLXjpQYadk5pEFwXrM8,1909
5
5
  gwpy/astro/range.py,sha256=BcRrJkgxiceL1QsOy1uUtCMslEeic0MUxWFs76LgY0Y,24892
@@ -9,14 +9,14 @@ gwpy/cli/__init__.py,sha256=3DnwWaykhjk-bT0h3n-f8vSHNtGzpi7RVG3rbOkFQhM,1404
9
9
  gwpy/cli/cliproduct.py,sha256=9OPACkQyjQmRtEmIgis4O3NaQLQV7AvEET1T44rSyLM,34269
10
10
  gwpy/cli/coherence.py,sha256=CbGwFl9pLHNncBMRdEr5mv-6EJLuML56Tp_kMD4F-Ds,4048
11
11
  gwpy/cli/coherencegram.py,sha256=mpGG3fHBR2OfjhfnRm3VgewAdr6wUgB6kwtsCeWnc64,3353
12
- gwpy/cli/gwpy_plot.py,sha256=CaxV0CsLUjsj24hGjjn5pwmKGq10I3-4qJoZvOKlSf0,5099
12
+ gwpy/cli/gwpy_plot.py,sha256=54rjAoiywUA4KLL03JyXsg0yd57XTHqXbxl9n-Gb2K8,5101
13
13
  gwpy/cli/qtransform.py,sha256=jC44b5YLmR5N5CC6YN5FrnntOEPD1wb-Sk8N4Dif840,9148
14
14
  gwpy/cli/spectrogram.py,sha256=NlNHVJhjb162j5P5e0G_6ngcbPlCW31Umw-IqKmsqGs,7131
15
15
  gwpy/cli/spectrum.py,sha256=IpBhoi70h1Cx1R6qlA3RMCyB7BXWrNFyQEVRpEIOSWE,4899
16
16
  gwpy/cli/timeseries.py,sha256=GWRQnUzc0oI2cJlDTTGnwRdFaL2X0ky8nlzMZF6dlvs,3891
17
17
  gwpy/cli/transferfunction.py,sha256=O1EUUWL5Wn6ZoJieVXu1YlCpuoZhmdtPLHvNGE_6fbQ,9784
18
18
  gwpy/cli/tests/__init__.py,sha256=5kO_qzfJZbuffI8x4SQDMAv1NRRlm0XYjrgZ0vIpWW4,744
19
- gwpy/cli/tests/base.py,sha256=RsZBnB1sfi1ChiVq2AYf5o05lnuGPLZbwYRjs2v4_0A,10831
19
+ gwpy/cli/tests/base.py,sha256=b1U9JZybQQRMd7569oT552E_mM7i6TZnP3kwkYd994E,11213
20
20
  gwpy/cli/tests/test_coherence.py,sha256=3ue1akkasZwUDfLQ6vk4BL6lYwhYmkWTAcgeB8ncmNM,1353
21
21
  gwpy/cli/tests/test_coherencegram.py,sha256=BvRpIOIkedzcrK0zo2o4bS41F7m4HYBsZekfJ41NEB0,1580
22
22
  gwpy/cli/tests/test_gwpy_plot.py,sha256=idX0p2uFpGAsCxSRhFhkYq-hV0IMrw7GXkIXUja7tCk,1718
@@ -27,7 +27,7 @@ gwpy/cli/tests/test_timeseries.py,sha256=HCYeRdk1Y7owMHTURmV-G9N4iSPZpoKXKvfigOr
27
27
  gwpy/cli/tests/test_transferfunction.py,sha256=VCve5NgBQo7tBgM5zaBlqY29R0ymc7Tfk9pRpJLsBdg,1999
28
28
  gwpy/detector/__init__.py,sha256=gsC_0ca8m8xRQzQ8ns6fpwFQ14_uxUu1LRh1B-sN6EA,2252
29
29
  gwpy/detector/channel.py,sha256=2X37knAbqzDg3GavKheXnOHOAgVaPHrOFQ4f4WpmvPc,26786
30
- gwpy/detector/units.py,sha256=W_a50ebj_OJ82-yHoSCtxNni8jKOXhhqOLHINY5ui5I,7323
30
+ gwpy/detector/units.py,sha256=KdHrKyN6CSuA9zh1LanQKIdd4LAt7PwPJ-5RBpMP_00,7364
31
31
  gwpy/detector/io/__init__.py,sha256=dAsz8ii5RVhwI_BNVjYrsnX1Pt3nfjh8jqVl4xqLTec,1037
32
32
  gwpy/detector/io/cis.py,sha256=gHGnB68xMAv0xQUG4eazA-4Jp0BesYlrttPBXt2g2Qs,3184
33
33
  gwpy/detector/io/clf.py,sha256=AusPzKEEuJM6qRyrAzBKmVeYrpnU8Tniql1DPtVHW28,5689
@@ -45,7 +45,7 @@ gwpy/frequencyseries/io/hdf5.py,sha256=_Fdr5Z8__Q1xh3XYVJdSBTDxRb0cJ_dIt2J-q_V-g
45
45
  gwpy/frequencyseries/io/ligolw.py,sha256=8MdCcYPHdum6UjWWVO21X3gizOSpFKOLpqzQZmvspYA,1149
46
46
  gwpy/frequencyseries/tests/__init__.py,sha256=t0bL_VWIaPVKnxEZhq67LlyHVnjca9b01GBDQmOI4TA,756
47
47
  gwpy/frequencyseries/tests/test_frequencyseries.py,sha256=khe7VzuiMaNzGlP2YkYkMOLfpZvXmckPsf4ifEsA3D0,11033
48
- gwpy/frequencyseries/tests/test_hist.py,sha256=rfd6PEjp30TwoTD8ajlUkdTKOkqZs5hs385rX-xzEbc,4126
48
+ gwpy/frequencyseries/tests/test_hist.py,sha256=hAhFzX2k2irV6QhQUciF2L4sQYmG9qSiL7Mnv5MW4zM,4237
49
49
  gwpy/io/__init__.py,sha256=Y-QjvthCmjEKRHxix-0iZjx9-VKT30ynPT4bWbKdAA4,831
50
50
  gwpy/io/_framecpp.py,sha256=1CTZgxJ7YD8tZv_zP9Hucj9_TE0oMrtdhFWSncZ5jzo,4250
51
51
  gwpy/io/cache.py,sha256=6kX4akC7a9m3B8AvDmwVYgiVkBb2L6B3IiPFyoweAnw,15124
@@ -77,7 +77,7 @@ gwpy/plot/colors.py,sha256=qmrM4u4Ir8OB2jkHUG3ZnriUlp1sdAB_IAb0H9mhC_A,3367
77
77
  gwpy/plot/gps.py,sha256=Xui1PMSh9K0ovSFuLyVJNKsMoNoOqppQtoEU3y5ZVDU,16846
78
78
  gwpy/plot/legend.py,sha256=mD07CTmv0rF171olt6ObsK9k4i-TxKacHQ4kBRzdb_0,1635
79
79
  gwpy/plot/log.py,sha256=Sn1BJRB5ml0oqE8UXBphb7MDhwu7ru-UtlvG4i5qTyE,5030
80
- gwpy/plot/plot.py,sha256=Ci8bxBgld4PjbeFtQQ_19ryYENJ1EHcIQN7f18Xi99c,21866
80
+ gwpy/plot/plot.py,sha256=9aAdInsN5Aoa06VIxhVkCTbi53fSpdSEOrbRvErvsZ8,22080
81
81
  gwpy/plot/rc.py,sha256=cK8pOzcvuRsMv_16k9Hl2mkn_dk8FaRrIVhtNhBzyp8,4816
82
82
  gwpy/plot/segments.py,sha256=HhjQEv8G00Rp7iRun98CGIk91-c_vAvEsv-uch3CbyU,16943
83
83
  gwpy/plot/tex.py,sha256=W1EPjdd9T6H2irDsbbbNNLL_CqBcYRTcAWx9OlsCcFg,4869
@@ -92,13 +92,13 @@ gwpy/plot/tests/test_gps.py,sha256=l2FhNOpR1u6NxczaaDf1Wq_moOPFVFC1wQiyX-6jvJQ,5
92
92
  gwpy/plot/tests/test_log.py,sha256=WLYEOYVxwIkXQWGMqioeC0mEB0JbVQxkowlwmUbPqkc,2652
93
93
  gwpy/plot/tests/test_plot.py,sha256=BJJkkmbJ_RHKQhD4oDeBCi9Ym9Vnrizh_1F5VxLbMlU,4398
94
94
  gwpy/plot/tests/test_rc.py,sha256=8wxIVknBtJOnDWtWlNyPMPlgzYFLFef9BmOsOMIlBfQ,1252
95
- gwpy/plot/tests/test_segments.py,sha256=ySCcn7LFGA66zgZWnZBJrJ9Rdn0WObN4-DEKhfvMlLM,5442
95
+ gwpy/plot/tests/test_segments.py,sha256=Sh1dL5sE0WWlN6OLYuA9_GmkQYcDN-VqROzUF5MGSms,5478
96
96
  gwpy/plot/tests/test_tex.py,sha256=nrmwfpBMuoE9PoCx_lbpCjT-fTHWAlYmcgmJIcKuPro,2423
97
97
  gwpy/plot/tests/test_text.py,sha256=9gITSsIKiERP4_iN2iB6K-mUL4PRXvL06jon2zUoSNw,1291
98
98
  gwpy/plot/tests/test_utils.py,sha256=_PgJNR3Ly6T26ixCwXMm1NmjAqPhPvHL2r2iza3VgfY,1615
99
99
  gwpy/plot/tests/utils.py,sha256=_G0yoG1qJ1iz2Iz541_dqSyWQz3rJLOwKbXeZDPL55c,1925
100
100
  gwpy/segments/__init__.py,sha256=9h0gedE_OjlNqWmwibTNLSsjqTokbXVKYMfMKSaKocQ,1194
101
- gwpy/segments/flag.py,sha256=gr4F8AdFjKHWBo7nsVVPZ6ZzDQyO-HIkFLJ3trs_SQc,53098
101
+ gwpy/segments/flag.py,sha256=VzlTMv1Cyy3iCV3zj1PV4RIEMSXivr6X_SR3Hz4dYT8,53042
102
102
  gwpy/segments/segments.py,sha256=bozaq1fYPO_a4MxwU35Iaaf_t3d59K1jtISvoMwItxg,9042
103
103
  gwpy/segments/io/__init__.py,sha256=ObnJsqSk_Y8qD5-OVmYRcdtDbZcm5pdEu0kRoI9vHtA,1005
104
104
  gwpy/segments/io/hdf5.py,sha256=gH0xKxLBx4OQlUjP2Bvsyt02SKY8dVFG6D6poKWBQ4s,11048
@@ -110,7 +110,7 @@ gwpy/segments/tests/test_flag.py,sha256=LdpG9PUjlirl-54rdMDRv4d4ASJbhWmpA6RVVltR
110
110
  gwpy/segments/tests/test_segments.py,sha256=VSvjy3p4MuVyucK_QB5PfOjZ0FvJU-jd4pNHv7ppiE8,5360
111
111
  gwpy/signal/__init__.py,sha256=1FcrzAPP5fkp9OzrpQyrDswINDqGuLYY_cdtJQttB64,972
112
112
  gwpy/signal/fft.py,sha256=YS2g5Urh5Y4x_L2rGts11O5t-M5Y_yAtAvrFkqTv4KQ,1189
113
- gwpy/signal/filter_design.py,sha256=AzRxYJKGaIz7dAmv0qbTvqzCo1nSpzRepV6KORWzdpI,20325
113
+ gwpy/signal/filter_design.py,sha256=IGKHJOyFGpEyax06hs3TzlYpcP91UPpIKvQW4pbGaZ4,20339
114
114
  gwpy/signal/qtransform.py,sha256=3yhxkioNa3EdwKvsmvYoXnQqA8VPAZW58OnAuE4YHxw,24471
115
115
  gwpy/signal/window.py,sha256=ukwcyoAtmLC6LWGyvcOh-gyh0s8paIVk3Z5gjCUk9F8,5927
116
116
  gwpy/signal/spectral/__init__.py,sha256=dEKuHIaekXqgmoBJ-gvE0xWym9d7STcAAmewY8qo8xI,1818
@@ -122,7 +122,7 @@ gwpy/signal/spectral/_scipy.py,sha256=cLoWA9CynvCdTXW3X22H2GBgYx4-o3cMVZorFlWMjd
122
122
  gwpy/signal/spectral/_ui.py,sha256=MbB3aSUFS4bS5S39fEcSqyhbC6Foq15PGlazVJalWjM,14241
123
123
  gwpy/signal/spectral/_utils.py,sha256=qSaj1GctqOd4HmiVwtfUUrBXvZAh0WJYbKiePUKEa1E,1669
124
124
  gwpy/signal/tests/__init__.py,sha256=k8yHNX5UvKYZCwZQA4oDEK7gNAYMX7JLhztV67_JoOY,747
125
- gwpy/signal/tests/test_coherence.py,sha256=Rk3l7vbvoG4uHIMJodsjchocKWaaKMD0KH3tq_NgDFw,5119
125
+ gwpy/signal/tests/test_coherence.py,sha256=Bb6oUfnZvCeHxbKYky0cJ1r87hONNFAtXFMC5ovD3LQ,5554
126
126
  gwpy/signal/tests/test_filter_design.py,sha256=_TyguEED-zkv594XdcKaYkic0EhVFBYHPAHza8UyzAg,4349
127
127
  gwpy/signal/tests/test_qtransform.py,sha256=LKBow9vIYI7jRNjuzw53WgsJYMSv9EwkQt-T_Xti1Uk,4017
128
128
  gwpy/signal/tests/test_spectral_lal.py,sha256=b7LkyTYtSMVBxikwHQQG042SS1_Zj8WHYqHXWB8lXvo,3543
@@ -152,7 +152,7 @@ gwpy/table/io/gravityspy.py,sha256=rBxxA1a3EN4YI5LW9CQSXdffUnhPV7EtJFSgf4E-aS8,4
152
152
  gwpy/table/io/gstlal.py,sha256=SxCYJ_8yuVGGOl7YtCXaLpIuvFHfCRe3VJUvwBkOhJg,8390
153
153
  gwpy/table/io/gwf.py,sha256=bOhM7A19Gkyj-8llhn30LSwZLvTJ_wvdtnabWRepgd8,5433
154
154
  gwpy/table/io/hacr.py,sha256=raOFk51Lmk9Kc6fMWnt0GdIw2h3hZsH8kbKXn71wXWI,5205
155
- gwpy/table/io/ligolw.py,sha256=IgCJPp0GMYXNmKUgjsH444uj8LQCWYYqy8z_FdbCUPo,13590
155
+ gwpy/table/io/ligolw.py,sha256=h1I_TZKWXmZ4YQ_PrZqfe5s_mpDyCpEE2aAe_PfGCbQ,13591
156
156
  gwpy/table/io/losc.py,sha256=wMhssG-d1lgG2wNhieG5mFXwpyrzROIGaTiX6cwKZ3w,4434
157
157
  gwpy/table/io/omega.py,sha256=5AyWynSb3h30RxE2c_H195HuRtdLdkE8tHuudIWo_lg,2604
158
158
  gwpy/table/io/omicron.py,sha256=1TkP4OhwvyjO1LzKQuKRAXb3gDhPUT3ruaDzGdaMrwk,1333
@@ -164,11 +164,11 @@ gwpy/table/io/utils.py,sha256=V4Ar90f1wYQ9LbE6BYjPBWqLqCKSsejCsDccmx1t_bc,3183
164
164
  gwpy/table/tests/__init__.py,sha256=3ZMqpj4n63jKiKMH64hfqLsE8_7xxU8xjZgc3hrXtIw,746
165
165
  gwpy/table/tests/test_gravityspy.py,sha256=7epyrhKdMcmA7uN5-vFhY1LfifdPOuPUGv-qK4FXjKk,3392
166
166
  gwpy/table/tests/test_io_gstlal.py,sha256=Lm8eEfj0-agFm6g9_SUB0Judr1QZYEEiyfPYSmQGxSg,7979
167
- gwpy/table/tests/test_io_ligolw.py,sha256=CzE5USIwrtv6-KeEYiLxmTZ8m9SwqsO87ZLgF6JJgIU,2848
167
+ gwpy/table/tests/test_io_ligolw.py,sha256=_0SlfsSTQ1LZWcjvydqggLyieU8kTLIJDGTwMg3z2BQ,2844
168
168
  gwpy/table/tests/test_io_pycbc.py,sha256=65f_AXgD2DCeIcz-rDOucjRStWRd__VQRfK1gcYFaj8,8313
169
169
  gwpy/table/tests/test_table.py,sha256=HthR885GqcBQSB8vD5Q6sOSPHojo8m5fa8HPeFx5m6w,30399
170
170
  gwpy/testing/__init__.py,sha256=_dtbhI4nOnnUPu8hLZUTUZxgPCq2KB2ATZiLEns9ybw,745
171
- gwpy/testing/errors.py,sha256=WeRm5QbqfFNxvNvXnrTBj7NOueJPMQJErmiGstZBL50,2783
171
+ gwpy/testing/errors.py,sha256=tITVQ2o3mP7VICKK2T0d9xfZeV0JwNMWaarARVSpCm0,2820
172
172
  gwpy/testing/fixtures.py,sha256=pu0sA3l3rcs0osVj97C0lmENYDa-1SF5B44uXey5cb0,3344
173
173
  gwpy/testing/marks.py,sha256=BIZ2Q4yfJSS9YQWCWSOwt66JKFnrhbx5XPXbvwfuFyo,1480
174
174
  gwpy/testing/mocks.py,sha256=3GoAT1z-1LJXNuoskCmpSi3GTqAa_quO7Tm5pyns0SA,4131
@@ -185,8 +185,8 @@ gwpy/time/tests/__init__.py,sha256=EF4G-IubXcMA_-mucDvcpjqM-ITyp0G_3cvO0VeYdxI,7
185
185
  gwpy/time/tests/test_main.py,sha256=3QV6kTWQ6AkGCYmqxfw-JfAoiR6VXzyrM__7XeyQvTI,1362
186
186
  gwpy/time/tests/test_time.py,sha256=Cj3Yv0N4MYi9C5fzuXPgR6rge6aKgfIbnhUwzeKDRDM,4402
187
187
  gwpy/timeseries/__init__.py,sha256=e-ncacmSPxUUmya8xlQ-Govk4ptr-0TVp26vMIPmxTU,1134
188
- gwpy/timeseries/core.py,sha256=Ntvo0F6WPXfMRAwuulSWEsK-SP6qlB0PNUoLw5bz7s8,57838
189
- gwpy/timeseries/statevector.py,sha256=Ns65za6o1L49mXUN-WukP-Lz3vxQw330Od2FzPjQGbI,35811
188
+ gwpy/timeseries/core.py,sha256=DOGeO3kjk7twinS8aDDwgNKIZLYrGtnfCPOm05KKxi8,57804
189
+ gwpy/timeseries/statevector.py,sha256=9yAlpBbR8eWDMK6PTpuGUAwAGO1tyE07SohfU2DJUJs,35891
190
190
  gwpy/timeseries/timeseries.py,sha256=lg28EEMASBR2IS_4gJfcU0j3uo7tEfFEVjK-Uv64ziw,87809
191
191
  gwpy/timeseries/io/__init__.py,sha256=qviFCaeTVeTZ7ZiIQKQyU1xxh76Ba60yE9vVtm9y1bY,938
192
192
  gwpy/timeseries/io/ascii.py,sha256=M05FDTCa06KLJ1Sb0jDh3NxrmMboV73j38nyMacVPkQ,1185
@@ -201,13 +201,13 @@ gwpy/timeseries/io/gwf/framecpp.py,sha256=sFrsWr5uiE5p7wym-u3oMPsKih4OckZoXLdnTL
201
201
  gwpy/timeseries/io/gwf/framel.py,sha256=UQuydhR9reAgSmYSI0lqHJ7120gDyXHoImaQUjXz0mc,4776
202
202
  gwpy/timeseries/io/gwf/lalframe.py,sha256=zXaDxnSWW9d3xdkwm8hQLnQAN_hEmTuZ4ibsJYndBzw,7729
203
203
  gwpy/timeseries/tests/__init__.py,sha256=QJdnWz_IQOTYq6MvKuBzz2HFiNVf6QMXrZ-kDks-lDI,751
204
- gwpy/timeseries/tests/test_core.py,sha256=9tJ5_ifgdW91Ga_l7AoExLN9QAMNaTcgNep3eu7Rvbc,19685
204
+ gwpy/timeseries/tests/test_core.py,sha256=YEFCcH0zj1z0Qz1uczhvCs7nbqasGyLLPEf5NdaJB6c,19613
205
205
  gwpy/timeseries/tests/test_io_cache.py,sha256=nEEDjEaJ8Nf9KV2p6k9LchbmhvU-O5xcmJT2gbC5QZw,2294
206
- gwpy/timeseries/tests/test_io_gwf_framecpp.py,sha256=2EHmlVLbM3J-6YQmaxiCHNL1Fiw7Lur4fRiMJDCY1kM,2265
206
+ gwpy/timeseries/tests/test_io_gwf_framecpp.py,sha256=S0MgBEZ2_o6MDrBfAZbj4SWk3LDbagh6XOfBAySuoWE,2267
207
207
  gwpy/timeseries/tests/test_io_gwf_lalframe.py,sha256=iD9m01menvAgUXoGJnX7Xv-O5t3mgX2C2N2nRN-gitY,5479
208
208
  gwpy/timeseries/tests/test_io_losc.py,sha256=E_bLM3bc4TO2-cMOEF3vDG8cr6TKgQwPY-EBN6DzyUg,1833
209
- gwpy/timeseries/tests/test_statevector.py,sha256=NOSe4BRwIKoaax_YnxoP2UQ1mpy4Zbw8zJPbcI8OHzE,12935
210
- gwpy/timeseries/tests/test_timeseries.py,sha256=wKjGLCJAx_sgX9DIHk1-Kv-GpgqRQ3j6fwxXB_MCx3I,57513
209
+ gwpy/timeseries/tests/test_statevector.py,sha256=-wmDd1GLEXeR1vWa2jixndLyx0WL4eYJLU-BlcEA9JE,13768
210
+ gwpy/timeseries/tests/test_timeseries.py,sha256=fa_6tnHEJTgqcDbLgLMsSa8dmUwxq27frWQLj0bURrk,57347
211
211
  gwpy/types/__init__.py,sha256=JIpXRdi0av2V0BkynOwUhijxQShSAqE5gLrowJ6Nckg,1159
212
212
  gwpy/types/array.py,sha256=D4EwGC80hKFhrRuFD3xnHaqJR7jdT88v5nik-3o-RU0,15595
213
213
  gwpy/types/array2d.py,sha256=NtwW5T6PWHiAS6kFYUfF8fm3WE4qQdPbXN01iaBET0k,12367
@@ -219,10 +219,10 @@ gwpy/types/io/ascii.py,sha256=bamzUBneh2DZXjQ1jPlUjMvfnvBU-ckjGJ4eYR9zzY8,2872
219
219
  gwpy/types/io/hdf5.py,sha256=OMGrLD3B3oiJpN9q_-OHUhVXxkJKxDWVacEcpwGK5A4,8019
220
220
  gwpy/types/io/ligolw.py,sha256=p0181ziPEuKcJJBA9WVOYmus7KD7UzGai7xCd7U49-A,7267
221
221
  gwpy/types/tests/__init__.py,sha256=1-XqGdROuPGF7ee-MsWjZVh5uY29SKGuA6VlJs4Z-Ac,746
222
- gwpy/types/tests/test_array.py,sha256=1wbFCcvfW1C3ZrBC1aSK-TVmvPcUrCdINcoSAQRQ9rw,8608
223
- gwpy/types/tests/test_array2d.py,sha256=Bpg7VjmkfhDnJOkvKU2ndUJMLEfO4OvpyTK6HyBsCkk,9214
222
+ gwpy/types/tests/test_array.py,sha256=qIGurik5g-GxNl4oV6f2BpZf3swkiCA7WE4zn5jr-6s,8698
223
+ gwpy/types/tests/test_array2d.py,sha256=RM072wwSvCOQb1LQFzOjrXkpMyuc5h7biQ18JmtIhgo,9089
224
224
  gwpy/types/tests/test_index.py,sha256=2DKZnlNCU2tQ1IU4w4yQGtRKTTvcJlSwFvQLjhV2RrU,2044
225
- gwpy/types/tests/test_series.py,sha256=3SZalBwPHErt8OVTr8fJAIer5p7tkkG1hdvAZ6kWMbc,16571
225
+ gwpy/types/tests/test_series.py,sha256=EgzmgTquXFevZ478Nxq84-BfeYMjaiKDDv8tUyB4xjc,16573
226
226
  gwpy/utils/__init__.py,sha256=OiPOQ69N9q8xE6VQI9rpEvhPx0bgAmHjxo-rV8RHoDE,933
227
227
  gwpy/utils/decorators.py,sha256=tvf4j3HarUIgbG_eFolbJcn5032nJBlhfZLK4UvaRKw,3723
228
228
  gwpy/utils/enum.py,sha256=o2LhVx0G_-T_PlDe1aGD7dlOu1ySY4rPx-UTasr_8Qw,1490
@@ -234,7 +234,7 @@ gwpy/utils/progress.py,sha256=coDB4ju-qJ710TGwposHAKZ95GWj36hJEBRHjl1-Frk,1367
234
234
  gwpy/utils/shell.py,sha256=PErkh4RGlS_2_FPX5_kKSUeQj-_CgCWSkA-kf2ON3iQ,3371
235
235
  gwpy/utils/sphinx/__init__.py,sha256=awmoBU_ou-WAYmR4SrqRniWrU0G1icxXJZN_9wuChs8,770
236
236
  gwpy/utils/sphinx/ex2rst.py,sha256=9q4Bk7eIx1rfCSDRSyqerXYfjBdIuwhQQWv-Y-XsAoY,4763
237
- gwpy/utils/sphinx/zenodo.py,sha256=msrzwDB436q-49sc_DtEBU8p6fW_38bM6i80a8hP0w0,4098
237
+ gwpy/utils/sphinx/zenodo.py,sha256=s_jw-lHizuLC6AQ6U--xN6PJFQ-BlLt207gDBmx_SrU,4148
238
238
  gwpy/utils/tests/__init__.py,sha256=ECvgWEjRqaYVJKOCfxbVSJmMrQS0k5iVanDJoJ7CHyU,746
239
239
  gwpy/utils/tests/test_decorators.py,sha256=CS7zoXcVS71VyVr7d9_ll7tWZjuFxBGuKsGKxpS331c,2209
240
240
  gwpy/utils/tests/test_enum.py,sha256=xOEKR-Id8krxTTBcTNlVjM-S_aGA__4_zMh1DupavM0,2185
@@ -244,10 +244,10 @@ gwpy/utils/tests/test_misc.py,sha256=rkTxdu7gv9Dxs0OI6IvGivGiAs3PuK8ckMtNF5_kE6I
244
244
  gwpy/utils/tests/test_mp.py,sha256=kZXUTFqCPi4wvCkGgSSk8XrG9pHPGakPNuNUykgSp-k,2062
245
245
  gwpy/utils/tests/test_shell.py,sha256=arHzI96Rmje5JPhbQ33vEN0ByRh8qwRVqfl4-jzLUv4,2334
246
246
  gwpy/utils/tests/test_sphinx_ex2rst.py,sha256=KcIBPWTsPp00iTdYT6bZ8g2F7bN66PaX5uLJlcWu0J0,2263
247
- gwpy/utils/tests/test_sphinx_zenodo.py,sha256=9mtDwuB9J75I8azfUaU4ebAH24-SROS2A6XAv8yp0ng,5059
248
- gwpy-3.0.9.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
249
- gwpy-3.0.9.dist-info/METADATA,sha256=tQyNrVzUMXeRAgG2DWNf-E-DpOxdchssHzNsuDVntZQ,5191
250
- gwpy-3.0.9.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
251
- gwpy-3.0.9.dist-info/entry_points.txt,sha256=pcO_XRknobU7b1uuxFb3nTdGMk8FrHQsWBOflnj6Ev8,54
252
- gwpy-3.0.9.dist-info/top_level.txt,sha256=0XRdsSjFdBe_QF_Qst002-CCxuuO13ag2n-11nBpZ4E,5
253
- gwpy-3.0.9.dist-info/RECORD,,
247
+ gwpy/utils/tests/test_sphinx_zenodo.py,sha256=GL-3R7yFxF6ZQLuVhJI74djdgvE9sX4Q0atdHi3SyiU,5237
248
+ gwpy-3.0.10.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
249
+ gwpy-3.0.10.dist-info/METADATA,sha256=5HAN-1AH7-zngu1o2VZrBVOjK0sHGA5gKNPE71IoB5U,4866
250
+ gwpy-3.0.10.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
251
+ gwpy-3.0.10.dist-info/entry_points.txt,sha256=pcO_XRknobU7b1uuxFb3nTdGMk8FrHQsWBOflnj6Ev8,54
252
+ gwpy-3.0.10.dist-info/top_level.txt,sha256=0XRdsSjFdBe_QF_Qst002-CCxuuO13ag2n-11nBpZ4E,5
253
+ gwpy-3.0.10.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.3.0)
2
+ Generator: setuptools (74.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,124 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: gwpy
3
- Version: 3.0.9
4
- Summary: A python package for gravitational-wave astrophysics
5
- Author-email: Duncan Macleod <duncan.macleod@ligo.org>
6
- License: GPL-3.0-or-later
7
- Project-URL: Bug Tracker, https://github.com/gwpy/gwpy/issues
8
- Project-URL: Discussion Forum, https://gwpy.slack.com
9
- Project-URL: Documentation, https://gwpy.github.io/docs/
10
- Project-URL: Source Code, https://github.com/gwpy/gwpy
11
- Classifier: Development Status :: 5 - Production/Stable
12
- Classifier: Intended Audience :: Science/Research
13
- Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
14
- Classifier: Natural Language :: English
15
- Classifier: Operating System :: OS Independent
16
- Classifier: Programming Language :: Python
17
- Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.8
19
- Classifier: Programming Language :: Python :: 3.9
20
- Classifier: Programming Language :: Python :: 3.10
21
- Classifier: Programming Language :: Python :: 3.11
22
- Classifier: Programming Language :: Python :: 3.12
23
- Classifier: Topic :: Scientific/Engineering :: Astronomy
24
- Classifier: Topic :: Scientific/Engineering :: Physics
25
- Requires-Python: >=3.8
26
- Description-Content-Type: text/markdown
27
- License-File: LICENSE
28
- Requires-Dist: astropy >=4.3.0
29
- Requires-Dist: dateparser >=1.1.4
30
- Requires-Dist: dqsegdb2
31
- Requires-Dist: gwdatafind >=1.1.0
32
- Requires-Dist: gwosc >=0.5.3
33
- Requires-Dist: h5py >=3.0.0
34
- Requires-Dist: ligo-segments >=1.0.0
35
- Requires-Dist: ligotimegps >=1.2.1
36
- Requires-Dist: matplotlib >=3.3.0
37
- Requires-Dist: numpy >=1.19
38
- Requires-Dist: python-dateutil
39
- Requires-Dist: requests
40
- Requires-Dist: scipy >=1.6.0
41
- Requires-Dist: tqdm >=4.10.0
42
- Provides-Extra: astro
43
- Requires-Dist: inspiral-range >=0.5.0 ; extra == 'astro'
44
- Provides-Extra: conda
45
- Requires-Dist: python-framel !=8.46.0,>=8.40.1 ; extra == 'conda'
46
- Requires-Dist: python-nds2-client ; extra == 'conda'
47
- Requires-Dist: python-ldas-tools-framecpp ; (sys_platform != "win32") and extra == 'conda'
48
- Requires-Dist: lxml !=4.9.1 ; (sys_platform == "win32") and extra == 'conda'
49
- Provides-Extra: dev
50
- Requires-Dist: ciecplib ; extra == 'dev'
51
- Requires-Dist: psycopg2 ; extra == 'dev'
52
- Requires-Dist: pymysql ; extra == 'dev'
53
- Requires-Dist: pyRXP ; extra == 'dev'
54
- Requires-Dist: sqlalchemy ; extra == 'dev'
55
- Requires-Dist: uproot >=4.1.5 ; extra == 'dev'
56
- Requires-Dist: lalsuite ; (sys_platform != "win32") and extra == 'dev'
57
- Requires-Dist: lscsoft-glue ; (sys_platform != "win32") and extra == 'dev'
58
- Requires-Dist: pycbc >=1.13.4 ; (sys_platform != "win32") and extra == 'dev'
59
- Requires-Dist: python-ligo-lw >=1.7.0 ; (sys_platform != "win32") and extra == 'dev'
60
- Provides-Extra: docs
61
- Requires-Dist: numpydoc >=0.8.0 ; extra == 'docs'
62
- Requires-Dist: Sphinx >=4.4.0 ; extra == 'docs'
63
- Requires-Dist: sphinx-automodapi ; extra == 'docs'
64
- Requires-Dist: sphinx-immaterial >=0.7.3 ; extra == 'docs'
65
- Requires-Dist: sphinx-panels >=0.6.0 ; extra == 'docs'
66
- Requires-Dist: sphinxcontrib-programoutput ; extra == 'docs'
67
- Provides-Extra: test
68
- Requires-Dist: coverage[toml] >=5.0 ; extra == 'test'
69
- Requires-Dist: pytest >=3.9.1 ; extra == 'test'
70
- Requires-Dist: pytest-freezer ; extra == 'test'
71
- Requires-Dist: pytest-cov >=2.4.0 ; extra == 'test'
72
- Requires-Dist: pytest-requires ; extra == 'test'
73
- Requires-Dist: pytest-socket ; extra == 'test'
74
- Requires-Dist: pytest-xdist ; extra == 'test'
75
- Requires-Dist: requests-mock ; extra == 'test'
76
-
77
- GWpy is a collaboration-driven Python package providing tools for
78
- studying data from ground-based gravitational-wave detectors.
79
-
80
- GWpy provides a user-friendly, intuitive interface to the common
81
- time-domain and frequency-domain data produced by the LIGO and Virgo
82
- observatories and their analyses, with easy-to-follow tutorials at each
83
- step.
84
-
85
- <https://gwpy.github.io>
86
-
87
- # Release status
88
-
89
- [![PyPI version](https://badge.fury.io/py/gwpy.svg)](http://badge.fury.io/py/gwpy)
90
- [![Conda version](https://img.shields.io/conda/vn/conda-forge/gwpy.svg)](https://anaconda.org/conda-forge/gwpy/)
91
-
92
- [![DOI](https://zenodo.org/badge/9979119.svg)](https://zenodo.org/badge/latestdoi/9979119)
93
- [![License](https://img.shields.io/pypi/l/gwpy.svg)](https://choosealicense.com/licenses/gpl-3.0/)
94
- ![Supported Python versions](https://img.shields.io/pypi/pyversions/gwpy.svg)
95
-
96
- # Development status
97
-
98
- [![Build status](https://github.com/gwpy/gwpy/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/gwpy/gwpy/actions?query=branch%3Amain)
99
- [![Coverage status](https://codecov.io/gh/gwpy/gwpy/branch/main/graph/badge.svg)](https://codecov.io/gh/gwpy/gwpy)
100
- [![Maintainability](https://api.codeclimate.com/v1/badges/2cf14445b3e070133745/maintainability)](https://codeclimate.com/github/gwpy/gwpy/maintainability)
101
-
102
- # Installation
103
-
104
- To install, you can do:
105
-
106
- ```
107
- conda install -c conda-forge gwpy
108
- ```
109
-
110
- or
111
-
112
- ```
113
- python -m pip install gwpy
114
- ```
115
-
116
- You can test your installation, and its version by
117
-
118
- ```
119
- python -c "import gwpy; print(gwpy.__version__)"
120
- ```
121
-
122
- # License
123
-
124
- GWpy is released under the GNU General Public License v3.0 or later, see [here](https://choosealicense.com/licenses/gpl-3.0/) for a description of this license, or see the [LICENSE](https://github.com/gwpy/gwpy/blob/main/LICENSE) file for the full text.
File without changes