def test_pad_and_trim_trace_fixfloat(): """TimeseriesUtility_test.test_pad_and_trim_trace_fixfloat() This tests whether pad_and_trim_trace() handles a known floating point precision trouble-maker encountered with UTCDateTimes correctly. """ trace = _create_trace(numpy.linspace(1, 56, 56), "X", UTCDateTime("2020-05-28T15:53:50.7"), delta=0.1) assert_equal(trace.stats.starttime, UTCDateTime("2020-05-28T15:53:50.7")) assert_equal(trace.stats.endtime, UTCDateTime("2020-05-28T15:53:56.2")) # This should create a 70 sample trace of 10 Hz data, inclusive of the # known startime and endtime. Early versions of pad_and_trim_trace() did # not handle this scenario correctly, returning 68 samples, and missing # both the 1st and last of the expected samples. TimeseriesUtility.pad_and_trim_trace( trace, starttime=UTCDateTime("2020-05-28T15:53:50.0"), endtime=UTCDateTime("2020-05-28T15:53:56.9"), ) assert_equal(trace.stats.starttime, UTCDateTime("2020-05-28T15:53:50.0")) assert_equal(trace.stats.endtime, UTCDateTime("2020-05-28T15:53:56.9")) assert_array_equal( trace.data, numpy.concatenate( ([numpy.nan] * 7, numpy.linspace(1, 56, 56), [numpy.nan] * 7)), )
def test_pad_and_trim_trace(): """TimeseriesUtility_test.test_pad_and_trim_trace() """ trace = _create_trace([0, 1, 2, 3, 4], "X", UTCDateTime("2018-01-01")) assert_equal(trace.stats.starttime, UTCDateTime("2018-01-01T00:00:00Z")) assert_equal(trace.stats.endtime, UTCDateTime("2018-01-01T00:04:00Z")) # starttime between first and second sample # expect first sample to be removed, start at next sample, end at same TimeseriesUtility.pad_and_trim_trace( trace, starttime=UTCDateTime("2018-01-01T00:00:30Z"), endtime=trace.stats.endtime, ) assert_equal(trace.stats.starttime, UTCDateTime("2018-01-01T00:01:00Z")) assert_equal(trace.stats.endtime, UTCDateTime("2018-01-01T00:04:00Z")) assert_array_equal(trace.data, [1, 2, 3, 4]) # endtime between last and second to last samples TimeseriesUtility.pad_and_trim_trace( trace, starttime=UTCDateTime("2018-01-01T00:00:30Z"), endtime=UTCDateTime("2018-01-01T00:03:50Z"), ) assert_equal(trace.stats.starttime, UTCDateTime("2018-01-01T00:01:00Z")) assert_equal(trace.stats.endtime, UTCDateTime("2018-01-01T00:03:00Z")) assert_array_equal(trace.data, [1, 2, 3]) # pad outward TimeseriesUtility.pad_and_trim_trace( trace, starttime=UTCDateTime("2018-01-01T00:00:00Z"), endtime=UTCDateTime("2018-01-01T00:05:00Z"), ) assert_equal(trace.stats.starttime, UTCDateTime("2018-01-01T00:00:00Z")) assert_equal(trace.stats.endtime, UTCDateTime("2018-01-01T00:05:00Z")) assert_array_equal(trace.data, [numpy.nan, 1, 2, 3, numpy.nan, numpy.nan]) # remove exactly one sample TimeseriesUtility.pad_and_trim_trace( trace, starttime=UTCDateTime("2018-01-01T00:00:00Z"), endtime=UTCDateTime("2018-01-01T00:04:00Z"), ) assert_equal(trace.stats.starttime, UTCDateTime("2018-01-01T00:00:00Z")) assert_equal(trace.stats.endtime, UTCDateTime("2018-01-01T00:04:00Z")) assert_array_equal(trace.data, [numpy.nan, 1, 2, 3, numpy.nan]) # pad start and trim end TimeseriesUtility.pad_and_trim_trace( trace, starttime=UTCDateTime("2017-12-31T23:58:59Z"), endtime=UTCDateTime("2018-01-01T00:03:00Z"), ) assert_equal(trace.stats.starttime, UTCDateTime("2017-12-31T23:59:00Z")) assert_equal(trace.stats.endtime, UTCDateTime("2018-01-01T00:03:00Z")) assert_array_equal(trace.data, [numpy.nan, numpy.nan, 1, 2, 3]) # pad end and trim start TimeseriesUtility.pad_and_trim_trace( trace, starttime=UTCDateTime("2018-01-01T00:00:00Z"), endtime=UTCDateTime("2018-01-01T00:04:00Z"), ) assert_equal(trace.stats.starttime, UTCDateTime("2018-01-01T00:00:00Z")) assert_equal(trace.stats.endtime, UTCDateTime("2018-01-01T00:04:00Z")) assert_array_equal(trace.data, [numpy.nan, 1, 2, 3, numpy.nan])
def test_pad_and_trim_trace(): """TimeseriesUtility_test.test_pad_and_trim_trace() """ trace = _create_trace([0, 1, 2, 3, 4], 'X', UTCDateTime("2018-01-01")) assert_equals(trace.stats.starttime, UTCDateTime("2018-01-01T00:00:00Z")) assert_equals(trace.stats.endtime, UTCDateTime("2018-01-01T00:04:00Z")) # starttime between first and second sample # expect first sample to be removed, start at next sample, end at same TimeseriesUtility.pad_and_trim_trace(trace, starttime=UTCDateTime("2018-01-01T00:00:30Z"), endtime=trace.stats.endtime) assert_equals(trace.stats.starttime, UTCDateTime("2018-01-01T00:01:00Z")) assert_equals(trace.stats.endtime, UTCDateTime("2018-01-01T00:04:00Z")) assert_array_equal(trace.data, [1, 2, 3, 4]) # endtime between last and second to last samples TimeseriesUtility.pad_and_trim_trace(trace, starttime=UTCDateTime("2018-01-01T00:00:30Z"), endtime=UTCDateTime("2018-01-01T00:03:50Z")) assert_equals(trace.stats.starttime, UTCDateTime("2018-01-01T00:01:00Z")) assert_equals(trace.stats.endtime, UTCDateTime("2018-01-01T00:03:00Z")) assert_array_equal(trace.data, [1, 2, 3]) # pad outward TimeseriesUtility.pad_and_trim_trace(trace, starttime=UTCDateTime("2018-01-01T00:00:00Z"), endtime=UTCDateTime("2018-01-01T00:05:00Z")) assert_equals(trace.stats.starttime, UTCDateTime("2018-01-01T00:00:00Z")) assert_equals(trace.stats.endtime, UTCDateTime("2018-01-01T00:05:00Z")) assert_array_equal(trace.data, [numpy.nan, 1, 2, 3, numpy.nan, numpy.nan]) # remove exactly one sample TimeseriesUtility.pad_and_trim_trace(trace, starttime=UTCDateTime("2018-01-01T00:00:00Z"), endtime=UTCDateTime("2018-01-01T00:04:00Z")) assert_equals(trace.stats.starttime, UTCDateTime("2018-01-01T00:00:00Z")) assert_equals(trace.stats.endtime, UTCDateTime("2018-01-01T00:04:00Z")) assert_array_equal(trace.data, [numpy.nan, 1, 2, 3, numpy.nan]) # pad start and trim end TimeseriesUtility.pad_and_trim_trace(trace, starttime=UTCDateTime("2017-12-31T23:58:59Z"), endtime=UTCDateTime("2018-01-01T00:03:00Z")) assert_equals(trace.stats.starttime, UTCDateTime("2017-12-31T23:59:00Z")) assert_equals(trace.stats.endtime, UTCDateTime("2018-01-01T00:03:00Z")) assert_array_equal(trace.data, [numpy.nan, numpy.nan, 1, 2, 3]) # pad end and trim start TimeseriesUtility.pad_and_trim_trace(trace, starttime=UTCDateTime("2018-01-01T00:00:00Z"), endtime=UTCDateTime("2018-01-01T00:04:00Z")) assert_equals(trace.stats.starttime, UTCDateTime("2018-01-01T00:00:00Z")) assert_equals(trace.stats.endtime, UTCDateTime("2018-01-01T00:04:00Z")) assert_array_equal(trace.data, [numpy.nan, 1, 2, 3, numpy.nan])