def test_scalar_ops(): a = TimeSeries() a.set(datetime.datetime(2015, 3, 1), 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 3) a.set(datetime.datetime(2015, 3, 4), 2) ts_half = a.multiply(0.5) ts_bool = a.to_bool(invert=False) ts_threshold = a.threshold(value=1.1) # test before domain, should give default value assert ts_half[datetime.datetime(2015, 2, 24)] is None assert ts_bool[datetime.datetime(2015, 2, 24)] == None assert ts_threshold[datetime.datetime(2015, 2, 24)] == None # test values throughout series assert ts_half[datetime.datetime(2015, 3, 1, 6)] == 0.5 assert ts_bool[datetime.datetime(2015, 3, 1, 6)] == True assert ts_threshold[datetime.datetime(2015, 3, 1, 6)] == False assert ts_half[datetime.datetime(2015, 3, 2, 6)] == 0 assert ts_bool[datetime.datetime(2015, 3, 2, 6)] == False assert ts_threshold[datetime.datetime(2015, 3, 2, 6)] == False assert ts_half[datetime.datetime(2015, 3, 3, 6)] == 1.5 assert ts_bool[datetime.datetime(2015, 3, 3, 6)] == True assert ts_threshold[datetime.datetime(2015, 3, 3, 6)] == True # test after domain, should give last value assert ts_half[datetime.datetime(2015, 3, 4, 18)] == 1 assert ts_bool[datetime.datetime(2015, 3, 4, 18)] == True assert ts_threshold[datetime.datetime(2015, 3, 4, 18)] == True
def test_scalar_ops(): a = TimeSeries() a.set(datetime.datetime(2015, 3, 1), 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 3) a.set(datetime.datetime(2015, 3, 4), 2) ts_half = a.scale_by(0.5) ts_bool = a.to_bool(invert=False) ts_threshold = a.threshold(value=1.1) # test before domain, should give default value assert ts_half[datetime.datetime(2015, 2, 24)] == 0 assert ts_bool[datetime.datetime(2015, 2, 24)] == False assert ts_threshold[datetime.datetime(2015, 2, 24)] == False # test values throughout series assert ts_half[datetime.datetime(2015, 3, 1, 6)] == 0.5 assert ts_bool[datetime.datetime(2015, 3, 1, 6)] == True assert ts_threshold[datetime.datetime(2015, 3, 1, 6)] == False assert ts_half[datetime.datetime(2015, 3, 2, 6)] == 0 assert ts_bool[datetime.datetime(2015, 3, 2, 6)] == False assert ts_threshold[datetime.datetime(2015, 3, 2, 6)] == False assert ts_half[datetime.datetime(2015, 3, 3, 6)] == 1.5 assert ts_bool[datetime.datetime(2015, 3, 3, 6)] == True assert ts_threshold[datetime.datetime(2015, 3, 3, 6)] == True # test after domain, should give last value assert ts_half[datetime.datetime(2015, 3, 4, 18)] == True assert ts_bool[datetime.datetime(2015, 3, 4, 18)] == True assert ts_threshold[datetime.datetime(2015, 3, 4, 18)] == True
def test_iterperiods(): # timeseries with a default value and no points returns one period # with the default value from -infinity to infinity, or ts = TimeSeries(default=0) assert list(ts.iterperiods()) == [(-inf, inf, 0)] # timeseries with no default value and no points raises error ts = TimeSeries() with nose.tools.assert_raises(KeyError): list(ts.iterperiods()) ts = TimeSeries() ts.set(datetime.datetime(2015, 3, 1), 1) ts.set(datetime.datetime(2015, 3, 2), 0) ts.set(datetime.datetime(2015, 3, 3), 1) ts.set(datetime.datetime(2015, 3, 4), 2) answer = [ (datetime.datetime(2015, 3, 1), datetime.datetime(2015, 3, 2), 1), (datetime.datetime(2015, 3, 2), datetime.datetime(2015, 3, 3), 0), (datetime.datetime(2015, 3, 3), datetime.datetime(2015, 3, 4), 1)] result = [] for (t0, t1, v0) in ts.iterperiods( start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4) ): result.append((t0, t1, v0)) assert answer == result answer = [ (datetime.datetime(2015, 3, 1), datetime.datetime(2015, 3, 2), 1), (datetime.datetime(2015, 3, 3), datetime.datetime(2015, 3, 4), 1), ] result = [] for (t0, t1, v0) in ts.iterperiods( start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4), value=1, ): result.append((t0, t1, v0)) assert answer == result def filter(t0, t1, value): return True if not value else False answer = [ (datetime.datetime(2015, 3, 2), datetime.datetime(2015, 3, 3), 0), ] result = [] for (t0, t1, v0) in ts.iterperiods( start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4), value=filter, ): result.append((t0, t1, v0)) assert answer == result
def test_iterintervals(): ts = TimeSeries() ts.set(datetime.datetime(2015, 3, 1), 1) ts.set(datetime.datetime(2015, 3, 2), 0) ts.set(datetime.datetime(2015, 3, 3), 1) ts.set(datetime.datetime(2015, 3, 4), 2) answer = [(1, 0), (0, 1), (1, 2)] result = [] for (t0, v0), (t1, v1) in ts.iterintervals(): result.append((v0, v1)) assert answer == result
def test_iterperiods(): # timeseries with no points raises a KeyError ts = TimeSeries() with nose.tools.assert_raises(KeyError): next(ts.iterperiods()) ts.set(datetime.datetime(2015, 3, 1), 1) ts.set(datetime.datetime(2015, 3, 2), 0) ts.set(datetime.datetime(2015, 3, 3), 1) ts.set(datetime.datetime(2015, 3, 4), 2) answer = [(datetime.datetime(2015, 3, 1), datetime.datetime(2015, 3, 2), 1), (datetime.datetime(2015, 3, 2), datetime.datetime(2015, 3, 3), 0), (datetime.datetime(2015, 3, 3), datetime.datetime(2015, 3, 4), 1)] result = [] for (t0, t1, v0) in ts.iterperiods(start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4)): result.append((t0, t1, v0)) assert answer == result answer = [ (datetime.datetime(2015, 3, 1), datetime.datetime(2015, 3, 2), 1), (datetime.datetime(2015, 3, 3), datetime.datetime(2015, 3, 4), 1), ] result = [] for (t0, t1, v0) in ts.iterperiods( start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4), value=1, ): result.append((t0, t1, v0)) assert answer == result def filter(t0, t1, value): return True if not value else False answer = [ (datetime.datetime(2015, 3, 2), datetime.datetime(2015, 3, 3), 0), ] result = [] for (t0, t1, v0) in ts.iterperiods( start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4), value=filter, ): result.append((t0, t1, v0)) assert answer == result
def test_mask(): start_time = datetime.datetime(2015, 3, 1) # v. simple a = TimeSeries() a.set(start_time, 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 4), 0) end_time = datetime.datetime(2015, 3, 5) mask = TimeSeries() mask.set(datetime.datetime(2015, 3, 1), 1) mask.set(datetime.datetime(2015, 3, 3), 0) # not normalized distribution = a.distribution( start_time=start_time, end_time=end_time, normalized=False, mask=mask, ) assert distribution[0] == 24 * 60 * 60 # one day assert distribution[1] == 24 * 60 * 60 # normalized distribution = a.distribution( start_time=start_time, end_time=end_time, mask=mask, ) assert distribution[0] == 0.5 assert distribution[1] == 0.5
def test_default_values(): # v. simple a = TimeSeries() a.set(datetime.datetime(2015, 3, 1), 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 4), 0) # not normalized distribution = a.distribution() total = 24 * 60 * 60 * 3 assert distribution[0] == 24 * 60 * 60 * 1 / float(total) assert distribution[1] == 24 * 60 * 60 * 2 / float(total)
def test_default_values(): # v. simple a = TimeSeries() a.set(datetime.datetime(2015, 3, 1), 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 4), 0) start = datetime.datetime(2015, 3, 1) end = datetime.datetime(2015, 3, 4) default = a.distribution() distribution = a.distribution(start=start, end=end) assert default == distribution assert distribution[0] == 1.0 / 3 assert distribution[1] == 2.0 / 3
def test_iterperiods(): ts = TimeSeries() ts.set(datetime.datetime(2015, 3, 1), 1) ts.set(datetime.datetime(2015, 3, 2), 0) ts.set(datetime.datetime(2015, 3, 3), 1) ts.set(datetime.datetime(2015, 3, 4), 2) answer = [ (datetime.datetime(2015, 3, 1), datetime.datetime(2015, 3, 2), 1), (datetime.datetime(2015, 3, 2), datetime.datetime(2015, 3, 3), 0), (datetime.datetime(2015, 3, 3), datetime.datetime(2015, 3, 4), 1)] result = [] for (t0, t1, v0) in ts.iterperiods( start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4) ): result.append((t0, t1, v0)) assert answer == result answer = [ (datetime.datetime(2015, 3, 1), datetime.datetime(2015, 3, 2), 1), (datetime.datetime(2015, 3, 3), datetime.datetime(2015, 3, 4), 1), ] result = [] for (t0, t1, v0) in ts.iterperiods( start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4), value=1, ): result.append((t0, t1, v0)) assert answer == result def filter(t0, t1, value): return True if not value else False answer = [ (datetime.datetime(2015, 3, 2), datetime.datetime(2015, 3, 3), 0), ] result = [] for (t0, t1, v0) in ts.iterperiods( start=datetime.datetime(2015, 3, 1), end=datetime.datetime(2015, 3, 4), value=filter, ): result.append((t0, t1, v0)) assert answer == result
def test_mask(): start = datetime.datetime(2015, 3, 1) # v. simple a = TimeSeries() a.set(start, 1) a.set(datetime.datetime(2015, 4, 2), 0) a.set(datetime.datetime(2015, 4, 3), 1) a.set(datetime.datetime(2015, 4, 4), 0) end = datetime.datetime(2015, 4, 5) mask = TimeSeries(default=False) mask[datetime.datetime(2015, 4, 1)] = True mask[datetime.datetime(2015, 4, 3)] = False # not normalized distribution = a.distribution( start=start, end=end, normalized=False, mask=mask, ) assert distribution[0] == 24 * 60 * 60 # one day assert distribution[1] == 24 * 60 * 60 # normalized distribution = a.distribution( start=start, end=end, mask=mask, ) assert distribution[0] == 0.5 assert distribution[1] == 0.5
def test_distribution(): start = datetime.datetime(2015, 3, 1) # v. simple a = TimeSeries() a.set(start, 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 4), 0) end = datetime.datetime(2015, 3, 5) # not normalized distribution = a.distribution( start=start, end=end, normalized=False, ) assert distribution[0] == 24 * 60 * 60 * 2 # two days assert distribution[1] == 24 * 60 * 60 * 2 # normalized distribution = a.distribution(start=start, end=end) assert distribution[0] == 0.5 assert distribution[1] == 0.5
def test_mask(): start = datetime.datetime(2015, 3, 1) # v. simple a = TimeSeries() a.set(start, 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 4), 0) end = datetime.datetime(2015, 3, 5) mask = Domain(datetime.datetime(2015, 3, 1), datetime.datetime(2015, 3, 3)) # not normalized distribution = a.distribution( start=start, end=end, normalized=False, mask=mask, ) assert distribution[0] == 24 * 60 * 60 # one day assert distribution[1] == 24 * 60 * 60 # normalized distribution = a.distribution( start=start, end=end, mask=mask, ) assert distribution[0] == 0.5 assert distribution[1] == 0.5
def test_distribution(): start_time = datetime.datetime(2015, 3, 1) # v. simple a = TimeSeries() a.set(start_time, 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 4), 0) end_time = datetime.datetime(2015, 3, 5) # not normalized distribution = a.distribution( start_time=start_time, end_time=end_time, normalized=False, ) assert distribution[0] == 24 * 60 * 60 * 2 # two days assert distribution[1] == 24 * 60 * 60 * 2 # normalized distribution = a.distribution(start_time=start_time, end_time=end_time) assert distribution[0] == 0.5 assert distribution[1] == 0.5
def example_sum(): a = TimeSeries() a.set(datetime.datetime(2015, 3, 1), 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 5), 0) a.set(datetime.datetime(2015, 3, 6), 0) b = TimeSeries() b.set(datetime.datetime(2015, 3, 1), 0) b.set(datetime.datetime(2015, 3, 2, 12), 1) b.set(datetime.datetime(2015, 3, 3, 13, 13), 0) b.set(datetime.datetime(2015, 3, 4), 1) b.set(datetime.datetime(2015, 3, 5), 0) b.set(datetime.datetime(2015, 3, 5, 12), 1) b.set(datetime.datetime(2015, 3, 5, 19), 0) c = TimeSeries() c.set(datetime.datetime(2015, 3, 1, 17), 0) c.set(datetime.datetime(2015, 3, 1, 21), 1) c.set(datetime.datetime(2015, 3, 2, 13, 13), 0) c.set(datetime.datetime(2015, 3, 4, 18), 1) c.set(datetime.datetime(2015, 3, 5, 4), 0) # output the three time series for i, ts in enumerate([a, b, c]): for (t0, v0), (t1, v1) in ts.iterintervals(1): print t0.isoformat(), i print t1.isoformat(), i print '' for (t0, v0), (t1, v1) in ts.iterintervals(0): print t0.isoformat(), i print t1.isoformat(), i print '' # output the sum # for dt, i in sum([a, b, c]): # print dt.isoformat(), i # print '' for dt, i in TimeSeries.from_many_sum([a, b, c]): print dt.isoformat(), i
def test_sum(): a = TimeSeries() a.set(datetime.datetime(2015, 3, 1), 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 4), 0) b = TimeSeries() b.set(datetime.datetime(2015, 3, 1), 0) b.set(datetime.datetime(2015, 3, 1, 12), 1) b.set(datetime.datetime(2015, 3, 2), 0) b.set(datetime.datetime(2015, 3, 2, 12), 1) b.set(datetime.datetime(2015, 3, 3), 0) c = TimeSeries() c.set(datetime.datetime(2015, 3, 1), 0) c.set(datetime.datetime(2015, 3, 1, 18), 1) c.set(datetime.datetime(2015, 3, 5), 0) ts_sum = TimeSeries.merge([a, b, c], operation=ignorant(sum)) # test before domain, should give default value assert ts_sum[datetime.datetime(2015, 2, 24)] == 0 # test values throughout sum assert ts_sum[datetime.datetime(2015, 3, 1)] == 1 assert ts_sum[datetime.datetime(2015, 3, 1, 6)] == 1 assert ts_sum[datetime.datetime(2015, 3, 1, 12)] == 2 assert ts_sum[datetime.datetime(2015, 3, 1, 13)] == 2 assert ts_sum[datetime.datetime(2015, 3, 1, 17)] == 2 assert ts_sum[datetime.datetime(2015, 3, 1, 18)] == 3 assert ts_sum[datetime.datetime(2015, 3, 1, 19)] == 3 assert ts_sum[datetime.datetime(2015, 3, 3)] == 2 assert ts_sum[datetime.datetime(2015, 3, 4)] == 1 assert ts_sum[datetime.datetime(2015, 3, 4, 18)] == 1 assert ts_sum[datetime.datetime(2015, 3, 5)] == 0 # test after domain, should give last value assert ts_sum[datetime.datetime(2015, 3, 6)] == 0 assert 0 + a + b == a + b
def test_sum(): a = TimeSeries() a.set(datetime.datetime(2015, 3, 1), 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 4), 0) b = TimeSeries() b.set(datetime.datetime(2015, 3, 1), 0) b.set(datetime.datetime(2015, 3, 1, 12), 1) b.set(datetime.datetime(2015, 3, 2), 0) b.set(datetime.datetime(2015, 3, 2, 12), 1) b.set(datetime.datetime(2015, 3, 3), 0) c = TimeSeries() c.set(datetime.datetime(2015, 3, 1), 0) c.set(datetime.datetime(2015, 3, 1, 18), 1) c.set(datetime.datetime(2015, 3, 5), 0) ts_sum = TimeSeries.from_many_sum([a, b, c]) # test before domain, should give default value assert ts_sum[datetime.datetime(2015, 2, 24)] == 0 # test values throughout sum assert ts_sum[datetime.datetime(2015, 3, 1)] == 1 assert ts_sum[datetime.datetime(2015, 3, 1, 6)] == 1 assert ts_sum[datetime.datetime(2015, 3, 1, 12)] == 2 assert ts_sum[datetime.datetime(2015, 3, 1, 13)] == 2 assert ts_sum[datetime.datetime(2015, 3, 1, 17)] == 2 assert ts_sum[datetime.datetime(2015, 3, 1, 18)] == 3 assert ts_sum[datetime.datetime(2015, 3, 1, 19)] == 3 assert ts_sum[datetime.datetime(2015, 3, 3)] == 2 assert ts_sum[datetime.datetime(2015, 3, 4)] == 1 assert ts_sum[datetime.datetime(2015, 3, 4, 18)] == 1 assert ts_sum[datetime.datetime(2015, 3, 5)] == 0 # test after domain, should give last value assert ts_sum[datetime.datetime(2015, 3, 6)] == 0 baseline = 0 for ts in [a, b, c]: for i, j in ts: print i.isoformat(), j + baseline print '' baseline += 1.2 ts_sum = TimeSeries.from_many_sum([a, b, c]) for i, j in ts_sum: print i.isoformat(), j + baseline
def example_sum(): a = TimeSeries() a.set(datetime.datetime(2015, 3, 1), 1) a.set(datetime.datetime(2015, 3, 2), 0) a.set(datetime.datetime(2015, 3, 3), 1) a.set(datetime.datetime(2015, 3, 5), 0) a.set(datetime.datetime(2015, 3, 6), 0) b = TimeSeries() b.set(datetime.datetime(2015, 3, 1), 0) b.set(datetime.datetime(2015, 3, 2, 12), 1) b.set(datetime.datetime(2015, 3, 3, 13, 13), 0) b.set(datetime.datetime(2015, 3, 4), 1) b.set(datetime.datetime(2015, 3, 5), 0) b.set(datetime.datetime(2015, 3, 5, 12), 1) b.set(datetime.datetime(2015, 3, 5, 19), 0) c = TimeSeries() c.set(datetime.datetime(2015, 3, 1, 17), 0) c.set(datetime.datetime(2015, 3, 1, 21), 1) c.set(datetime.datetime(2015, 3, 2, 13, 13), 0) c.set(datetime.datetime(2015, 3, 4, 18), 1) c.set(datetime.datetime(2015, 3, 5, 4), 0) # output the three time series for i, ts in enumerate([a, b, c]): for (t0, v0), (t1, v1) in ts.iterintervals(1): print(t0.isoformat(), i) print(t1.isoformat(), i) print('') for (t0, v0), (t1, v1) in ts.iterintervals(0): print(t0.isoformat(), i) print(t1.isoformat(), i) print('') # output the sum # for dt, i in sum([a, b, c]): # print dt.isoformat(), i # print '' for dt, i in TimeSeries.merge([a, b, c], operation=sum): print(dt.isoformat(), i)