def test_init(self): # Successful init ns = sigpropy.TimeSeries([1, 1, 1], dt=1) ew = sigpropy.TimeSeries([1, 1, 1], dt=1) vt = sigpropy.TimeSeries([1, 1, 1], dt=1) sensor = hvsrpy.Sensor3c(ns, ew, vt) # Check timeseries for attr, expected in zip(["ns", "ew", "vt"], [ns, ew, vt]): returned = getattr(sensor, attr) self.assertEqual(expected, returned) # Bad ns, should be TimeSeries _ns = [1, 1, 1] self.assertRaises(TypeError, hvsrpy.Sensor3c, _ns, ew, vt) # Bad ew, should be TimeSeries _ew = [1, 1, 1] self.assertRaises(TypeError, hvsrpy.Sensor3c, ns, _ew, vt) # Bad dt, should be 1 ns = sigpropy.TimeSeries([1, 1, 1], dt=2) self.assertRaises(ValueError, hvsrpy.Sensor3c, ns, ew, vt) # Bad length, will trim amp = np.array([1, 1]) ns = sigpropy.TimeSeries(amp, dt=1) hvsrpy.Sensor3c(ns, ew, vt) self.assertArrayEqual(amp, ew.amp) self.assertArrayEqual(amp, vt.amp)
def test_transform(self): # Setup. amplitude = [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0] dt = 1 expected_frq = np.array([ 0.00000000000000000, 0.09090909090909091, 0.18181818181818182, 0.2727272727272727, 0.36363636363636365, 0.4545454545454546 ]) expected_amp = np.array([ 25.0 + 0.0 * 1j, -11.843537519677056 + -3.477576385886737 * 1j, 0.22844587066117938 + 0.14681324646918337 * 1j, -0.9486905697966428 + -1.0948472814948405 * 1j, 0.1467467171062613 + 0.3213304885841657 * 1j, -0.08296449829374097 + -0.5770307602665046 * 1j ]) expected_amp *= 2 / len(amplitude) # nseries = 1 tseries = sigpropy.TimeSeries(amplitude, dt) sensor = hvsrpy.Sensor3c(tseries, tseries, tseries) fft = sensor.transform() for val in fft.values(): for expected, returned in [(expected_frq, val.frequency), (expected_amp, val.amplitude)]: self.assertArrayAlmostEqual(expected, returned) # nseries = 2 amplitude = np.array([amplitude, amplitude]) tseries = sigpropy.TimeSeries(amplitude, dt) sensor = hvsrpy.Sensor3c(tseries, tseries, tseries) fft = sensor.transform() for val in fft.values(): for expected, returned in [(expected_frq, val.frequency), (expected_amp, val.amplitude[0])]: self.assertArrayAlmostEqual(expected, returned) # Bad TimeSeries sensor.ew = "bad TimeSeries" self.assertRaises(TypeError, sensor.transform)
def test_detrend(self): # Simple case signal = np.array([0, -0.2, -0.5, -0.2, 0, 0.2, 0.5, 0.2]*5) noise = np.linspace(0, 5, 40) component = sigpropy.TimeSeries(signal + noise, dt=1) sensor = hvsrpy.Sensor3c(component, component, component) sensor.detrend() expected = signal for returned in sensor: self.assertArrayAlmostEqual(expected, returned.amp, delta=0.1)
def test_split(self): # Simple Case component = sigpropy.TimeSeries([0, 1, 2, 3, 4, 5, 6], dt=1) sensor = hvsrpy.Sensor3c(component, component, component) wlen = 2 sensor.split(windowlength=wlen) expected = sigpropy.WindowedTimeSeries.from_timeseries(component, windowlength=wlen) for returned in sensor: self.assertEqual(expected, returned)
def test_normalization_factor(self): ns = sigpropy.TimeSeries([-1, 1, 1], dt=1) ew = sigpropy.TimeSeries([1, 2, 1], dt=1) vt = sigpropy.TimeSeries([1, 1, -5], dt=1) sensor = hvsrpy.Sensor3c(ns, ew, vt) expected = 5 self.assertEqual(expected, sensor.normalization_factor) # Find second maximum sensor.vt.amp[2] = 0 expected = 2 self.assertEqual(expected, sensor.normalization_factor)
def test_to_and_from_json(self): # Simple Case ns = sigpropy.TimeSeries([1, 2, 3], dt=1) ew = sigpropy.TimeSeries([1, 4, 5], dt=1) vt = sigpropy.TimeSeries([1, -1, 1], dt=1) expected = hvsrpy.Sensor3c(ns, ew, vt) json_repr = expected.to_json() returned = hvsrpy.Sensor3c.from_json(json_repr) for comp in ["ns", "ew", "vt"]: exp = getattr(expected, comp).amp ret = getattr(returned, comp).amp self.assertArrayEqual(exp, ret)
def test_bandpassfilter(self): # Simple case tseries = np.random.random(50) component = sigpropy.TimeSeries(tseries, dt=1 / 10) sensor = hvsrpy.Sensor3c(component, component, component) settings = dict(flow=0.3, fhigh=3, order=5) sensor.bandpassfilter(**settings) expected = sigpropy.TimeSeries(tseries, dt=1 / 10) expected.bandpassfilter(**settings) for returned in sensor: self.assertArrayEqual(expected.amplitude, returned.amplitude)
def test_to_and_from_json(self): # Simple Case ns = sigpropy.TimeSeries([1, 2, 3], dt=1) ew = sigpropy.TimeSeries([1, 4, 5], dt=1) vt = sigpropy.TimeSeries([1, -1, 1], dt=1) original = hvsrpy.Sensor3c(ns, ew, vt) original_as_json_string = original.to_json() recovered = hvsrpy.Sensor3c.from_json(original_as_json_string) for key in ["ns", "ew", "vt", "meta"]: expected = getattr(original, key) returned = getattr(recovered, key) self.assertEqual(expected, returned)
def test_to_and_from_dict(self): # Simple Case ns = sigpropy.TimeSeries([1., 2, 3], dt=1) ew = sigpropy.TimeSeries([1., 4, 5], dt=1) vt = sigpropy.TimeSeries([1., 1, 1], dt=1) original = hvsrpy.Sensor3c(ns, ew, vt, meta={"windowlength": 1}) original_as_dict = original.to_dict() recovered = hvsrpy.Sensor3c.from_dict(original_as_dict) for key in ["ns", "ew", "vt", "meta"]: expected = getattr(original, key) returned = getattr(recovered, key) self.assertEqual(expected, returned)
def test_to_and_from_dict(self): # Simple Case ns = sigpropy.TimeSeries([1., 2, 3], dt=1) ew = sigpropy.TimeSeries([1., 4, 5], dt=1) vt = sigpropy.TimeSeries([1., 1, 1], dt=1) expected = hvsrpy.Sensor3c(ns, ew, vt, meta={"windowlength": 1}) dict_repr = expected.to_dict() returned = hvsrpy.Sensor3c.from_dict(dict_repr) for comp in ["ns", "ew", "vt", "meta"]: exp = getattr(expected, comp) ret = getattr(returned, comp) self.assertEqual(exp, ret)
def test_combine_horizontals(self): dt = 0.01 amplitude = np.sin(2 * np.pi * 1 * np.arange(0, 4, dt)) tseries = sigpropy.TimeSeries(amplitude, dt) fseries = sigpropy.FourierTransform.from_timeseries(tseries) sensor = hvsrpy.Sensor3c(tseries, tseries, tseries) for invalid_method in ["average"]: self.assertRaises(NotImplementedError, sensor._combine_horizontal_td, method=invalid_method, azimuth=2.) self.assertRaises(NotImplementedError, sensor._combine_horizontal_fd, method=invalid_method, ns=fseries, ew=fseries)
def new_sensor(): ns = sigpropy.TimeSeries(np.ones(10), dt=1) ew = sigpropy.TimeSeries(np.ones(10), dt=1) vt = sigpropy.TimeSeries(np.ones(10), dt=1) return hvsrpy.Sensor3c(ns, ew, vt)
def new_sensor(): component = sigpropy.TimeSeries(np.ones(10), dt=1) return hvsrpy.Sensor3c(component, component, component)