import traces
import random
import datetime
from infinity import inf
def average(values):
sum_ = 0
n = 0
for i in values:
if i is not None:
sum_ += i
n += 1
return float(sum_) / n
class Test(traces.TimeSeries):
def stack(self, duration, start_times, operation):
ts_list = []
for start in start_times:
end = start + duration
ts = traces.TimeSeries()
for t0, dur, value in self.iterperiods(start, end):
offset = t0 - start
if isinstance(offset, datetime.timedelta):
offset = offset.total_seconds()
ts.set(offset, value, compact=True)
ts_list.append(ts)
return traces.TimeSeries.merge(ts_list, operation=operation)
def xmprint(ts):
for t, v in ts:
# print t.isoformat(), v
print(t, v)
def generate_ts(n_days):
start_time = datetime.datetime(2016, 1, 1)
state = 1
ts = Test(default_value=0)
ts[start_time] = state
for offset in range(24 * 60 * n_days):
if random.random() < 0.1:
if random.random() < 0.5:
state += 1
else:
state -= 1
t = start_time + datetime.timedelta(minutes=offset)
ts.set(t, state % 5, compact=True)
ts[start_time + datetime.timedelta(days=n_days)] = 0
return ts
def hour_mask(n_days, hours):
start_time = datetime.datetime(2016, 1, 1)
domain = TimeSeries(default=False)
for day in range(n_days):
start = start_time + datetime.timedelta(days=day, hours=hours)
end = start + datetime.timedelta(hours=1)
domain[start] = True
domain[end] = False
return domain
n_days = 5
ts = generate_ts(n_days)
# for t0, t1 in ts.to_TimeSeries(default=False).intervals():
# print t0.isoformat(), -1
# print t1.isoformat(), -1
# print ''
# for t, v in ts:
# print t.isoformat(), v
# raise 'STOP'
start_times = []
start_time = datetime.datetime(2016, 1, 1)
for i in range(n_days):
t = start_time + datetime.timedelta(days=i)
start_times.append(t)
stack = ts.stack(datetime.timedelta(days=1), start_times, average)
xmprint(stack)
print ''
for hour in range(24):
mask = hour_mask(n_days, hour)
print hour * 60 * 60, ts.distribution(mask=mask).mean()
print (hour + 1) * 60 * 60, ts.distribution(mask=mask).mean()
print ''
unit = 60 * 60
start = 0
end = start + unit
while end