def raises_if_data_is_of_variable_size(self): data = (( (TimeSlice(start=Seconds(3), duration=Seconds(1)), np.zeros(11)), (TimeSlice(start=Seconds(0), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(1), duration=Seconds(2)), np.zeros(10)) )) self.assertRaises(ValueError, VariableRateTimeSeries(data))
def test_get_index_error_when_using_out_of_range_int_index(self): ts = VariableRateTimeSeries(( (TimeSlice(start=Seconds(0), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(1), duration=Seconds(2)), np.zeros(10)), (TimeSlice(start=Seconds(3), duration=Seconds(1)), np.zeros(10)) )) self.assertRaises(IndexError, lambda: ts[5])
def test_can_create_instance_with_no_slice_data(self): ts = VariableRateTimeSeries(( (TimeSlice(start=Seconds(1), duration=Seconds(1)), np.zeros(0)), (TimeSlice(start=Seconds(2), duration=Seconds(1)), np.zeros(0)), )) self.assertEqual(2, len(ts)) self.assertEqual((2, 0), ts.slicedata.shape)
def test_end(self): ts = VariableRateTimeSeries(( (TimeSlice(start=Seconds(0), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(1), duration=Seconds(2)), np.zeros(10)), (TimeSlice(start=Seconds(3), duration=Seconds(1)), np.zeros(10)) )) self.assertEqual(Seconds(4), ts.end)
def test_can_produce_time_slice_iterable_from_timestamps(self): slices = TimeSlice.slices([Seconds(1), Milliseconds(1), Seconds(2)]) self.assertEqual(2, len(slices)) self.assertEqual( TimeSlice(start=Milliseconds(1), duration=Milliseconds(999)), slices[0]) self.assertEqual(TimeSlice(start=Seconds(1), duration=Seconds(1)), slices[1])
def test_sorts_input(self): ts = VariableRateTimeSeries(( (TimeSlice(start=Seconds(3), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(0), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(1), duration=Seconds(2)), np.zeros(10)) )) timeslice, data = ts[0] self.assertEqual( TimeSlice(start=Seconds(0), duration=Seconds(1)), timeslice)
def test_can_slice_time_series_with_time_slice(self): ts = VariableRateTimeSeries(( (TimeSlice(start=Seconds(0), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(1), duration=Seconds(2)), np.zeros(10)), (TimeSlice(start=Seconds(3), duration=Seconds(1)), np.zeros(10)) )) sliced = ts[TimeSlice(start=Seconds(1), duration=Seconds(2))] self.assertIsInstance(sliced, VariableRateTimeSeries) self.assertEqual(1, len(sliced))
def test_get_empty_time_series_when_using_out_of_range_time_slice(self): ts = VariableRateTimeSeries(( (TimeSlice(start=Seconds(0), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(1), duration=Seconds(2)), np.zeros(10)), (TimeSlice(start=Seconds(3), duration=Seconds(1)), np.zeros(10)) )) sliced = ts[TimeSlice(start=Seconds(10), duration=Seconds(1))] self.assertIsInstance(sliced, VariableRateTimeSeries) self.assertEqual(0, len(sliced))
def test_time_slice_spanning_multiple_examples_returns_all_examples(self): ts = VariableRateTimeSeries(( (TimeSlice(start=Seconds(0), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(1), duration=Seconds(2)), np.zeros(10)), (TimeSlice(start=Seconds(3), duration=Seconds(1)), np.zeros(10)) )) timeslice = TimeSlice(start=Milliseconds(500), duration=Seconds(1)) sliced = ts[timeslice] self.assertIsInstance(sliced, VariableRateTimeSeries) self.assertEqual(2, len(sliced))
def test_concat_fails_when_data_shape_is_mismatched(self): ts1 = VariableRateTimeSeries(( (TimeSlice(start=Seconds(1), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(2), duration=Seconds(1)), np.zeros(10)), )) ts2 = VariableRateTimeSeries(( (TimeSlice(start=Seconds(1), duration=Seconds(1)), np.zeros(11)), (TimeSlice(start=Seconds(2), duration=Seconds(1)), np.zeros(11)), )) self.assertRaises(ValueError, lambda: ts1.concat(ts2))
def test_can_concatenate_variable_rate_time_series(self): ts1 = VariableRateTimeSeries(( (TimeSlice(start=Seconds(1), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(2), duration=Seconds(1)), np.zeros(10)), )) ts2 = VariableRateTimeSeries(( (TimeSlice(start=Seconds(1), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(2), duration=Seconds(1)), np.zeros(10)), )) ts3 = ts1.concat(ts2) self.assertEqual(4, len(ts3)) self.assertEqual((4, 10), ts3.slicedata.shape)
def test_can_index_time_series_with_integer_index(self): ts = VariableRateTimeSeries(( (TimeSlice(start=Seconds(0), duration=Seconds(1)), np.zeros(10)), (TimeSlice(start=Seconds(1), duration=Seconds(2)), np.zeros(10)), (TimeSlice(start=Seconds(3), duration=Seconds(1)), np.zeros(10)) )) sliced = ts[1] self.assertIsInstance(sliced, np.record) timeslice, data = sliced self.assertEqual( TimeSlice(start=Seconds(1), duration=Seconds(2)), timeslice) self.assertIsInstance(data, np.ndarray) self.assertEqual((10,), data.shape)
def test_can_get_entire_time_series_with_empty_time_slice(self): arr = np.arange(10) freq = Seconds(1) ts = ArrayWithUnits(arr, [TimeDimension(freq)]) sl = TimeSlice() ts2 = ts[sl] self.assertEqual(10, len(ts2))
def test_can_slice_time_series_with_open_ended_time_slice(self): arr = np.arange(10) freq = Seconds(1) ts = ArrayWithUnits(arr, [TimeDimension(freq)]) sl = TimeSlice(None, start=Seconds(2)) ts2 = ts[sl] self.assertEqual(8, len(ts2))
def test_can_mix_time_slice_and_integer_indices(self): arr = np.ones((10, 5)) freq = Seconds(1) ts = ArrayWithUnits(arr, [TimeDimension(freq), IdentityDimension()]) sl = TimeSlice(duration=Seconds(5), start=Seconds(5)) ts2 = ts[sl, 2:] self.assertEqual((5, 3), ts2.shape)
def test_get_empty_time_series_when_using_out_of_range_time_slice(self): arr = np.arange(10) freq = Seconds(1) ts = ArrayWithUnits(arr, [TimeDimension(freq)]) sl = TimeSlice(Seconds(2), start=Seconds(11)) ts2 = ts[sl] self.assertEqual(0, ts2.size) self.assertIsInstance(ts2, ArrayWithUnits)
def test_time_slice_spanning_less_than_one_sample_returns_one_sample(self): arr = np.arange(10) freq = Seconds(1) ts = ArrayWithUnits(arr, [TimeDimension(freq)]) sl = TimeSlice(Milliseconds(100), start=Milliseconds(1500)) ts2 = ts[sl] self.assertIsInstance(ts2, ArrayWithUnits) self.assertEqual(1, ts2.size) self.assertEqual(1, ts2[0])
def test_time_slice_spanning_multiple_samples_returns_all_samples(self): arr = np.arange(10) freq = Seconds(1) ts = ArrayWithUnits(arr, [TimeDimension(freq)]) sl = TimeSlice(Milliseconds(2000), start=Milliseconds(1500)) ts2 = ts[sl] self.assertIsInstance(ts2, ArrayWithUnits) self.assertEqual(3, ts2.size) self.assertTrue(np.all(np.arange(1, 4) == ts2))
def test_frequency_less_than_one(self): arr = np.arange(10) freq = Milliseconds(500) ts = ArrayWithUnits(arr, [TimeDimension(freq)]) sl = TimeSlice(Seconds(2), start=Milliseconds(600)) ts2 = ts[sl] self.assertIsInstance(ts2, ArrayWithUnits) self.assertEqual(5, ts2.size) self.assertTrue(np.all(np.arange(1, 6) == ts2))
def test_frequency_and_duration_differ3(self): arr = np.arange(10) freq = Seconds(1) duration = Seconds(3) ts = ArrayWithUnits(arr, [TimeDimension(freq, duration)]) sl = TimeSlice(Seconds(2), start=Seconds(6)) ts2 = ts[sl] self.assertIsInstance(ts2, ArrayWithUnits) self.assertEqual(4, ts2.size) self.assertTrue(np.all(np.arange(4, 8) == ts2))
def _process(self, data): td = data.dimensions[0] frequency = td.frequency timestamps = [self.pos + (i * frequency) for i, d in enumerate(data) if random() > 0.9] slices = TimeSlice.slices(timestamps) yield VariableRateTimeSeries( (ts, np.zeros(0)) for ts in slices) self.pos += frequency * len(data)
def test_frequency_less_than_one_freq_and_duration_differ(self): arr = np.arange(10) freq = Milliseconds(500) duration = Seconds(1) ts = ArrayWithUnits(arr, [TimeDimension(freq, duration)]) sl = TimeSlice(Seconds(3), start=Milliseconds(250)) ts2 = ts[sl] self.assertIsInstance(ts2, ArrayWithUnits) self.assertEqual(7, ts2.size) self.assertTrue(np.all(np.arange(0, 7) == ts2))
def test_duration_less_than_frequency(self): arr = np.arange(10) freq = Seconds(1) duration = Milliseconds(500) ts = ArrayWithUnits(arr, [TimeDimension(freq, duration)]) sl = TimeSlice(Seconds(3), start=Milliseconds(1250)) ts2 = ts[sl] self.assertIsInstance(ts2, ArrayWithUnits) self.assertEqual(4, ts2.size) self.assertTrue(np.all(np.arange(1, 5) == ts2))
def iter_slices(self): td = self.dimensions[0] for i, data in enumerate(self): yield TimeSlice(duration=td.duration, start=td.frequency * i), data
def test_integer_based_slice(self): td = TimeDimension(*SR44100(), size=44100 * 5) sl = td.integer_based_slice(TimeSlice(duration=Seconds(1))) self.assertEqual(slice(0, 44100), sl)
def span(self): try: start = self._data.timeslice[0].start return TimeSlice(start=start, duration=self.end - start) except IndexError: return TimeSlice(duration=Seconds(0))
def _gen(self, raw): for r in raw: ts = TimeSlice( start=Picoseconds(r.start), duration=Picoseconds(r.duration)) yield (ts, r.slicedata)
def test_span_empty(self): ts = VariableRateTimeSeries(()) self.assertEqual( TimeSlice(start=Seconds(0), duration=Seconds(0)), ts.span)
def test_does_not_contain_point_in_time_before(self): ts = TimeSlice(Seconds(100), start=Seconds(200)) self.assertFalse(Seconds(10) in ts)
def test_contains_point_in_time_during(self): ts = TimeSlice(Seconds(100), start=Seconds(200)) self.assertTrue(Seconds(210) in ts)