def test_frequency_range(self): new = self.TEST_CLASS('test', frequency_range=(1, 40)) assert isinstance(new.frequency_range, units.Quantity) utils.assert_quantity_equal(new.frequency_range, (1, 40) * units.Hz) with pytest.raises(TypeError): Channel('', frequency_range=1)
def test_crop(self, array): a2 = array.crop(10, 20) utils.assert_quantity_equal(array[10:20], a2) # check that warnings are printed for out-of-bounds with pytest.warns(UserWarning): array.crop(array.xspan[0] - 1, array.xspan[1]) array.crop(array.xspan[0], array.xspan[1] + 1)
def test_getitem(self, array, create_kwargs): array = self.create(name='test_getitem', **create_kwargs) # test element returns as quantity element = array[0, 0] assert element == array[0][0] assert isinstance(element, units.Quantity) utils.assert_quantity_equal(element, array.value[0, 0] * array.unit) # test column slice returns as _columnclass utils.assert_quantity_sub_equal(array[2], array[2, :]) column = array[0, 0::2] utils.assert_quantity_sub_equal(column, self.TEST_CLASS._columnclass( array.value[0, 0::2], x0=array.y0, dx=array.dy*2, name=array.name, channel=array.channel, unit=array.unit, epoch=array.epoch)) # test row slice returns as _rowclass row = array[1:10:3, 0] utils.assert_array_equal(row.value, array.value[1:10:3, 0]) utils.assert_quantity_sub_equal(row, self.TEST_CLASS._rowclass( array.value[1:10:3, 0], x0=array.x0+array.dx, dx=array.dx*3, name=array.name, channel=array.channel, unit=array.unit), exclude=['epoch']) # test dual slice returns type(self) with metadata subarray = array[1:5:2, 1:5:2] utils.assert_quantity_sub_equal(subarray, self.TEST_CLASS( array.value[1:5:2, 1:5:2], x0=array.x0+array.dx, dx=array.dx*2, y0=array.y0+array.dy, dy=array.dy*2, name=array.name, channel=array.channel, unit=array.unit), exclude=['epoch'])
def test_crop(self, array): a2 = array.crop(10, 20) utils.assert_quantity_equal(array[10:20], a2) # check that warnings are printed for out-of-bounds with pytest.warns(UserWarning): array.crop(array.xspan[0]-1, array.xspan[1]) with pytest.warns(UserWarning): array.crop(array.xspan[0], array.xspan[1]+1)
def test_filter(self, array): a2 = array.filter([100], [1], 1e-2) assert isinstance(a2, type(array)) utils.assert_quantity_equal(a2.frequencies, array.frequencies) # manually rebuild the filter to test it works b, a, = signal.zpk2tf([100], [1], 1e-2) fresp = abs(signal.freqs(b, a, array.frequencies.value)[1]) utils.assert_array_equal(a2.value, fresp * array.value)
def test_copy(self): new = self.TEST_CLASS('X1:TEST', sample_rate=128, unit='m', frequency_range=(1, 40), safe=False, dtype='float64') copy = new.copy() for attr in ('name', 'ifo', 'system', 'subsystem', 'signal', 'trend', 'type', 'sample_rate', 'unit', 'dtype', 'frametype', 'model', 'url', 'frequency_range', 'safe'): a = getattr(new, attr) b = getattr(copy, attr) if isinstance(a, units.Quantity): utils.assert_quantity_equal(a, b) else: assert a == b
def test_new(self): super(TestSpectrogram, self).test_new() # check handling of epoch vs t0 a = self.create(epoch=10) b = self.create(t0=10) utils.assert_quantity_sub_equal(a, b) with pytest.raises(ValueError) as exc: self.TEST_CLASS(self.data, epoch=1, t0=1) assert str(exc.value) == 'give only one of epoch or t0' # check times times = numpy.arange(self.data.shape[0]) a = self.create(times=times) utils.assert_quantity_equal(a.times, times * units.second)
def test_sample_rate(self): """Test `gwpy.timeseries.TimeSeriesBase.sample_rate` """ # check basic conversion from dt -> sample_rate a = self.create(dt=0.5) assert a.sample_rate == 2 * units.Hz # test that we can't delete sample_rate with pytest.raises(AttributeError): del a.sample_rate # check None gets preserved a.sample_rate = None with pytest.raises(AttributeError): a._t0 # check other types a.sample_rate = units.Quantity(128, units.Hz) utils.assert_quantity_equal(a.dt, units.s / 128.) a.sample_rate = units.Quantity(16.384, units.kiloHertz) utils.assert_quantity_equal(a.dt, units.s / 16384)
def test_yindex(self): y = numpy.linspace(0, 100, num=self.data.shape[0]) # test simple series = self.create(yindex=y) utils.assert_quantity_equal( series.yindex, units.Quantity(y, self.TEST_CLASS._default_yunit)) # test deleter del series.yindex del series.yindex y1 = series.y0.value + series.shape[0] * series.dy.value y_default = numpy.linspace(series.y0.value, y1, num=series.shape[0], endpoint=False) utils.assert_quantity_equal( series.yindex, units.Quantity(y_default, self.TEST_CLASS._default_yunit)) # test setting of y0 and dy series = self.create(yindex=units.Quantity(y, 'Farad')) assert series.y0 == units.Quantity(y[0], 'Farad') assert series.dy == units.Quantity(y[1] - y[0], 'Farad') assert series.yunit == units.Farad assert series.yspan == (y[0], y[-1] + y[1] - y[0]) # test that setting yindex warns about ignoring dy or y0 with pytest.warns(UserWarning): series = self.create(yindex=units.Quantity(y, 'Farad'), dy=1) with pytest.warns(UserWarning): series = self.create(yindex=units.Quantity(y, 'Farad'), y0=0) # test non-regular yindex y = numpy.logspace(0, 2, num=self.data.shape[0]) series = self.create(yindex=units.Quantity(y, 'Mpc')) with pytest.raises(AttributeError): series.dy assert series.y0 == units.Quantity(1, 'Mpc') assert series.yspan == (y[0], y[-1] + y[-1] - y[-2])
def test_xindex(self): x = numpy.linspace(0, 100, num=self.data.shape[0]) # test simple series = self.create(xindex=x) utils.assert_quantity_equal( series.xindex, units.Quantity(x, self.TEST_CLASS._default_xunit)) # test deleter del series.xindex del series.xindex x1 = series.x0.value + series.shape[0] * series.dx.value x_default = numpy.linspace(series.x0.value, x1, num=series.shape[0], endpoint=False) utils.assert_quantity_equal( series.xindex, units.Quantity(x_default, self.TEST_CLASS._default_xunit)) # test setting of x0 and dx series = self.create(xindex=units.Quantity(x, 'Farad')) assert series.x0 == units.Quantity(x[0], 'Farad') assert series.dx == units.Quantity(x[1] - x[0], 'Farad') assert series.xunit == units.Farad assert series.xspan == (x[0], x[-1] + x[1] - x[0]) # test that setting xindex warns about ignoring dx or x0 with pytest.warns(UserWarning): series = self.create(xindex=units.Quantity(x, 'Farad'), dx=1) with pytest.warns(UserWarning): series = self.create(xindex=units.Quantity(x, 'Farad'), x0=0) # test non-regular xindex x = numpy.logspace(0, 2, num=self.data.shape[0]) series = self.create(xindex=units.Quantity(x, 'Mpc')) with pytest.raises(AttributeError): series.dx assert series.x0 == units.Quantity(1, 'Mpc') assert series.xspan == (x[0], x[-1] + x[-1] - x[-2])
def test_yindex(self): y = numpy.linspace(0, 100, num=self.data.shape[1]) # test simple series = self.create(yindex=y) utils.assert_quantity_equal( series.yindex, units.Quantity(y, self.TEST_CLASS._default_yunit)) # test deleter del series.yindex del series.yindex y1 = series.y0.value + series.shape[1] * series.dy.value y_default = numpy.linspace(series.y0.value, y1, num=series.shape[1], endpoint=False) utils.assert_quantity_equal( series.yindex, units.Quantity(y_default, self.TEST_CLASS._default_yunit)) # test setting of y0 and dy series = self.create(yindex=units.Quantity(y, 'Farad')) assert series.y0 == units.Quantity(y[0], 'Farad') assert series.dy == units.Quantity(y[1] - y[0], 'Farad') assert series.yunit == units.Farad assert series.yspan == (y[0], y[-1] + y[1] - y[0]) # test that setting yindex warns about ignoring dy or y0 with pytest.warns(UserWarning): series = self.create(yindex=units.Quantity(y, 'Farad'), dy=1) with pytest.warns(UserWarning): series = self.create(yindex=units.Quantity(y, 'Farad'), y0=0) # test non-regular yindex y = numpy.logspace(0, 2, num=self.data.shape[0]) series = self.create(yindex=units.Quantity(y, 'Mpc')) with pytest.raises(AttributeError): series.dy assert series.y0 == units.Quantity(1, 'Mpc') assert series.yspan == (y[0], y[-1] + y[-1] - y[-2])
def test_getitem(self, array): # item access utils.assert_quantity_equal( array[0], units.Quantity(array.value[0], array.unit)) # slice utils.assert_quantity_equal(array[1::2], self.TEST_CLASS( array.value[1::2], x0=array.x0+array.dx, dx=array.dx*2, name=array.name, epoch=array.epoch, unit=array.unit), ) # index array a = numpy.array([3, 4, 1, 2]) utils.assert_quantity_equal(array[a], self.TEST_CLASS( array.value[a], xindex=array.xindex[a], name=array.name, epoch=array.epoch, unit=array.unit), )
def test_frequencies(self, array): assert array.frequencies is array.xindex utils.assert_quantity_equal( array.frequencies, numpy.arange(array.size) * array.df + array.f0)
def test_zpk(self, array): a2 = array.zpk([100], [1], 1e-2) assert isinstance(a2, type(array)) utils.assert_quantity_equal(a2.frequencies, array.frequencies)
def test_median(self, array): utils.assert_quantity_equal(array.median(), numpy.median(array.value) * array.unit)
def test_abs(self, array): utils.assert_quantity_equal(array.abs(), numpy.abs(array))
def test_median(self, array): utils.assert_quantity_equal( array.median(), numpy.median(array.value) * array.unit)