예제 #1
0
def test_set_interval():
    ts = TimeSeries()
    nose.tools.assert_raises(KeyError, ts.get, 0)

    nose.tools.assert_raises(KeyError, ts.set_interval, 2, 4, 5)

    ts[1.2] = 1
    ts[3] = 0
    ts[6] = 2

    assert ts[0] == 1
    assert ts[5.5] == 0
    assert ts[7] == 2

    ts[2:4] = 5
    assert ts.items() == [(1.2, 1), (2, 5), (4, 0), (6, 2)]

    ts[3:5] = 4
    assert ts.items() == [(1.2, 1), (2, 5), (3, 4), (5, 0), (6, 2)]

    tsc = TimeSeries(ts)

    ts.set_interval(3, 4, 4)
    assert ts.items() == [(1.2, 1), (2, 5), (3, 4), (4, 4), (5, 0), (6, 2)]

    tsc.set_interval(3, 4, 4, compact=True)
    assert tsc.items() == [(1.2, 1), (2, 5), (3, 4), (5, 0), (6, 2)]
예제 #2
0
def test_difference():

    a = TimeSeries(data=[(0, 0), (2, 2)], default=0)
    b = TimeSeries(data=[(1, 1), (3, 2)], default=0)

    c = a - b
    nose.tools.eq_(list(c.items()), [(0, 0), (1, -1), (2, 1), (3, 0)])
예제 #3
0
def test_mean():
    ts = TimeSeries([[1, 2], [2, 3], [6, 1], [8, 4]], domain=Domain(0, 9))
    assert ts.mean() == 22. / 9

    ts = TimeSeries([[1, 2], [2, 3], [6, 1], [8, 4]],
                    domain=Domain([1, 2], [3, 5], [6, 8]))
    nose.tools.assert_raises(NotImplementedError, ts.mean)
예제 #4
0
def test_init_data():
    ts = TimeSeries([(1, 2), (2, 3), (6, 1), (8, 4)])

    assert ts[0] == 2
    assert ts[1] == 2
    assert ts[1.5] == 2
    assert ts[6] == 1
    assert ts[7] == 1
    assert ts[8] == 4
    assert ts[10] == 4

    ts = TimeSeries([[1, 2], [2, 3], [6, 1], [8, 4]])

    assert ts[0] == 2
    assert ts[1] == 2
    assert ts[1.5] == 2
    assert ts[6] == 1
    assert ts[7] == 1
    assert ts[8] == 4
    assert ts[10] == 4

    ts = TimeSeries({1: 2, 2: 3, 6: 1, 8: 4})

    assert ts[0] == 2
    assert ts[1] == 2
    assert ts[1.5] == 2
    assert ts[6] == 1
    assert ts[7] == 1
    assert ts[8] == 4
    assert ts[10] == 4
예제 #5
0
def test_set_domain():

    ts = TimeSeries()
    assert ts.domain == Domain([-inf, inf])

    ts.domain = None
    assert ts.domain == Domain([-inf, inf])

    ts.domain = [-inf, 5]
    assert ts.domain == Domain([-inf, 5])

    ts.domain = [5, inf]
    assert ts.domain == Domain([5, inf])

    ts.domain = [-inf, inf]
    assert ts.domain == Domain([-inf, inf])

    ts.domain = [2, 5]
    assert ts.domain == Domain([2, 5])

    ts.domain = [[2, 5], [9, 10]]
    assert ts.domain == Domain([2, 5], [9, 10])

    ts = TimeSeries(data=[(1, 2), (2, 3), (6, 1), (8, 4)])

    nose.tools.assert_raises(ValueError, setattr, ts, 'domain', [1.5, 7])
    nose.tools.assert_raises(ValueError, setattr, ts, 'domain', [0, 7])
    nose.tools.assert_raises(ValueError, setattr, ts, 'domain', [1.5, 9])
예제 #6
0
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
예제 #7
0
def test_distribution_empty():

    ts = TimeSeries()

    mask = TimeSeries(default=0)
    mask[0] = 1
    mask[2] = 0

    # distribution with default args and no default value on empty
    # TimeSeries doesn't know what to do
    nose.tools.assert_raises(ValueError, ts.distribution)

    # distribution with start and end, but no default value on empty
    # TimeSeries doesn't know what to do
    nose.tools.assert_raises(ValueError, ts.distribution, 0, 10)

    # no matter what is passed in to distribution, if the default
    # value is not set on an empty TimeSeries this should be an error
    nose.tools.assert_raises(ValueError, ts.distribution, mask=mask)

    ts = TimeSeries(default=0)

    # no mask or start/end on empty TimeSeries, don't know what to do
    nose.tools.assert_raises(ValueError, ts.distribution)

    # start and end or mask given, is fine
    distribution = ts.distribution(0, 10)
    assert distribution[0] == 1.0

    distribution = ts.distribution(mask=mask)
    assert distribution[0] == 1.0
예제 #8
0
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
예제 #9
0
def test_merge():
    ts_a = TimeSeries(default=None)
    ts_b = TimeSeries(default=None)
    ts_a[0] = None
    ts_b[0] = True
    ts_merge = TimeSeries.merge([ts_a, ts_b])

    assert True in ts_merge[0]
    assert None in ts_merge[0]
예제 #10
0
def test_merge():
    ts_a = TimeSeries()
    ts_b = TimeSeries()
    # ts_a[0] = None
    ts_b[0] = True
    ts_merge = TimeSeries.merge([ts_a, ts_b])

    assert True in ts_merge[0]
    assert None in ts_merge[0]

    ts_c = TimeSeries.merge([])
    assert list(ts_c.items()) == []
예제 #11
0
def test_sample():
    # Check using int
    ts = TimeSeries([[1, 2], [2, 3], [6, 1], [8, 4]], domain=Domain(1, 9))
    assert dict(ts.sample(1)) == {i: ts[i] for i in range(1, 10)}
    assert dict(
        ts.sample(0.5)) == {1 + i / 2.: ts[1 + i / 2.]
                            for i in range(0, 17)}

    ts = TimeSeries(
        [[1, 2], [2, 3], [6, 1], [8, 4]],
        domain=Domain([1, 2], [3, 5], [6, 8]),
    )
    nose.tools.assert_raises(NotImplementedError, ts.sample, 0.5)
예제 #12
0
def test_single_merges():

    # a single empty time series
    ts = TimeSeries()
    assert TimeSeries.merge([ts]) == TimeSeries(default=[None])

    # multiple empty time series
    ts_a = TimeSeries()
    ts_b = TimeSeries()
    assert TimeSeries.merge([ts_a, ts_b]) == \
        TimeSeries(default=[None, None])

    # test a single time series with only one measurement
    ts = TimeSeries()
    ts[21] = 42

    merged = TimeSeries.merge([ts])

    assert list(merged.items()) == [(21, [42])]

    # test an empty time series and a time series with one measurement
    ts_a = TimeSeries()
    ts_a[21] = 42
    ts_b = TimeSeries()

    ts = TimeSeries.merge([ts_a, ts_b])
    assert ts[20] == [None, None]
    assert ts[23] == [42, None]

    # test an empty time series and a time series with one entry
    ts_a = TimeSeries()
    ts_a[21] = 42
    ts_a[22] = 41
    ts_a[23] = 40

    ts_b = TimeSeries()
    ts_b[20] = 1
    ts_b[22] = 2
    ts_b[24] = 3

    merged = TimeSeries.merge([ts_a, ts_b])

    assert list(merged.items()) == [
        (20, [None, 1]),
        (21, [42, 1]),
        (22, [41, 2]),
        (23, [40, 2]),
        (24, [40, 3]),
    ]
예제 #13
0
def test_remove_points_from_interval():
    ts = TimeSeries(default=0)
    ts[0] = 0
    ts[1] = 2
    ts[3] = 1
    ts[4] = 0

    assert ts[5] == 0

    del ts[3.5:4.5]

    assert ts[5] == 1

    ts[4] = 0

    del ts[3:4.5]

    assert ts[5] == 2

    ts[3] = 1
    ts[4] = 0

    del ts[3.5:4]

    assert ts[5] == 0
예제 #14
0
def example_dictlike():

    # test overwriting keys
    l = TimeSeries()
    l[datetime.datetime(2010, 1, 1)] = 5
    l[datetime.datetime(2010, 1, 2)] = 4
    l[datetime.datetime(2010, 1, 3)] = 3
    l[datetime.datetime(2010, 1, 7)] = 2
    l[datetime.datetime(2010, 1, 4)] = 1
    l[datetime.datetime(2010, 1, 4)] = 10
    l[datetime.datetime(2010, 1, 4)] = 5
    l[datetime.datetime(2010, 1, 1)] = 1
    l[datetime.datetime(2010, 1, 7)] = 1.2
    l[datetime.datetime(2010, 1, 8)] = 1.3
    l[datetime.datetime(2010, 1, 12)] = 1.3

    # do some wackiness with a bunch of points
    dt = datetime.datetime(2010, 1, 12)
    for i in range(1000):
        dt += datetime.timedelta(hours=random.random())
        l[dt] = math.sin(i / float(math.pi))

    dt -= datetime.timedelta(hours=500)
    dt -= datetime.timedelta(minutes=30)
    for i in range(1000):
        dt += datetime.timedelta(hours=random.random())
        l[dt] = math.cos(i / float(math.pi))

    # what does this get?
    print >> sys.stderr, l[datetime.datetime(2010, 1, 3, 23, 59, 59)]

    # output the time series
    for i, j in l:
        print(i.isoformat(), j)
예제 #15
0
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
예제 #16
0
def test_domain():

    ts = TimeSeries()
    assert ts.domain == Domain([-inf, inf])

    ts.domain = None
    assert ts.domain == Domain([-inf, inf])

    ts.domain = [-inf, 5]
    assert ts.domain == Domain([-inf, 5])

    ts.domain = [5, inf]
    assert ts.domain == Domain([5, inf])

    ts.domain = [-inf, inf]
    assert ts.domain == Domain(-inf, inf)

    ts.domain = [2, 5]
    assert ts.domain == Domain([2, 5])

    ts.domain = [[2, 5], [9, 10]]
    assert ts.domain == Domain([[2, 5], [9, 10]])

    ts.domain = [[-inf, 1], [2, 5], [9, 10]]
    assert ts.domain == Domain([[-inf, 1], [2, 5], [9, 10]])

    ts.domain = [[2, 5], [9, 10], [11, inf]]
    assert ts.domain == Domain([[2, 5], [9, 10], [11, inf]])

    ts.domain = [[-inf, 1], [2, 5], [9, 10], [11, inf]]
    assert ts.domain == Domain([[-inf, 1], [2, 5], [9, 10], [11, inf]])
예제 #17
0
def example_arrow():

    l = TimeSeries()
    l[arrow.Arrow(2010, 1, 1)] = 0
    l[arrow.Arrow(2010, 1, 3, 10)] = 1
    l[arrow.Arrow(2010, 1, 5)] = 0
    l[arrow.Arrow(2010, 1, 8)] = 1
    l[arrow.Arrow(2010, 1, 17)] = 0
    l[arrow.Arrow(2010, 1, 19)] = 1
    l[arrow.Arrow(2010, 1, 23)] = 0
    l[arrow.Arrow(2010, 1, 26)] = 1
    l[arrow.Arrow(2010, 1, 28)] = 0
    l[arrow.Arrow(2010, 1, 31)] = 1
    l[arrow.Arrow(2010, 2, 5)] = 0

    for time, value in l:
        print(time.naive.isoformat(), 0.1 * value + 1.1)

    print('')

    start = arrow.Arrow(2010, 1, 1)
    end = arrow.Arrow(2010, 2, 5)
    unit = {'hours': 25}
    for start, end in span_range(start, end, unit):
        print(start.naive.isoformat(), l.mean(start, end))

    print('')

    for start, end in span_range(start, end, unit):
        print(start.naive.isoformat(), -0.2)
        print(start.naive.isoformat(), 1.2)
예제 #18
0
def example_mean():

    l = TimeSeries()
    l[datetime.datetime(2010, 1, 1)] = 0
    l[datetime.datetime(2010, 1, 3, 10)] = 1
    l[datetime.datetime(2010, 1, 5)] = 0
    l[datetime.datetime(2010, 1, 8)] = 1
    l[datetime.datetime(2010, 1, 17)] = 0
    l[datetime.datetime(2010, 1, 19)] = 1
    l[datetime.datetime(2010, 1, 23)] = 0
    l[datetime.datetime(2010, 1, 26)] = 1
    l[datetime.datetime(2010, 1, 28)] = 0
    l[datetime.datetime(2010, 1, 31)] = 1
    l[datetime.datetime(2010, 2, 5)] = 0

    for time, value in l:
        print(time.isoformat(), 0.1 * value + 1.1)

    print('')

    timestep = {'hours': 25}
    start = datetime.datetime(2010, 1, 1)
    while start <= datetime.datetime(2010, 2, 5):
        end = start + datetime.timedelta(**timestep)
        print(start.isoformat(), l.mean(start, end))
        start = end

    print('')

    start = datetime.datetime(2010, 1, 1)
    while start <= datetime.datetime(2010, 2, 5):
        end = start + datetime.timedelta(**timestep)
        print(start.isoformat(), -0.2)
        print(start.isoformat(), 1.2)
        start = end
예제 #19
0
    def add_annotation(self, file: os.PathLike, **kwargs):
        self.file_list.append(file)

        # setup default kwargs #
        if self.ordinal:
            kwargs.update({'value_transform': lambda cls: self.order.get(cls)})
        if not kwargs.get('time_transform', None):
            kwargs.update({'time_transform': lambda t: float(t)})
        if not kwargs.get('skip_header', None):
            kwargs.update({'skip_header': False})
        if not os.path.isfile(file):
            raise FileNotFoundError(f'File {file} not found.')
        if os.path.getsize(file):
            ts = TimeSeries.from_csv(file,
                                     **kwargs).slice(self.start_time,
                                                     self.end_time)
            meta = pd.read_csv(file, names=COLUMNS.keys())
            meta.drop(meta[meta['time'] < self.start_time].index)
            meta.drop(meta[meta['time'] > self.end_time].index)
        else:
            ts = TimeSeries()
            meta = pd.DataFrame()
        self.metadata.append(meta)
        self.series.append(ts)
        self._data = self._report()
예제 #20
0
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
예제 #21
0
def example_dictlike():

    # test overwriting keys
    ts = TimeSeries()
    ts[datetime.datetime(2010, 1, 1)] = 5
    ts[datetime.datetime(2010, 1, 2)] = 4
    ts[datetime.datetime(2010, 1, 3)] = 3
    ts[datetime.datetime(2010, 1, 7)] = 2
    ts[datetime.datetime(2010, 1, 4)] = 1
    ts[datetime.datetime(2010, 1, 4)] = 10
    ts[datetime.datetime(2010, 1, 4)] = 5
    ts[datetime.datetime(2010, 1, 1)] = 1
    ts[datetime.datetime(2010, 1, 7)] = 1.2
    ts[datetime.datetime(2010, 1, 8)] = 1.3
    ts[datetime.datetime(2010, 1, 12)] = 1.3

    # do some wackiness with a bunch of points
    dt = datetime.datetime(2010, 1, 12)
    for i in range(1000):
        dt += datetime.timedelta(hours=random.random())
        ts[dt] = math.sin(i / float(math.pi))

    dt -= datetime.timedelta(hours=500)
    dt -= datetime.timedelta(minutes=30)
    for i in range(1000):
        dt += datetime.timedelta(hours=random.random())
        ts[dt] = math.cos(i / float(math.pi))

    # output the time series
    for i, j in ts:
        print(i.isoformat(), j)
예제 #22
0
def test_distribution_set():
    time_series = TimeSeries()
    time_series[1.2] = {'broccoli'}
    time_series[1.4] = {'broccoli', 'orange'}
    time_series[1.7] = {'broccoli', 'orange', 'banana'}
    time_series[2.2] = {'orange', 'banana'}
    time_series[3.5] = {'orange', 'banana', 'beets'}
예제 #23
0
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
예제 #24
0
def from_pandas(df, compact=True):
    '''TODO'''
    domain = Domain(df.index[0], df.index[-1])
    data = {col: TimeSeries(df[col].T, domain=domain) for col in df.columns}
    if compact:
        for val in data.values():
            val.compact()
    return data
예제 #25
0
def test_exists():
    ts = TimeSeries([(-5, 0), (0, 23), (5, None)])

    ts_exists = ts.exists()
    assert ts_exists[-10] is False
    assert ts_exists[-2] is True
    assert ts_exists[3] is True
    assert ts_exists[10] is False
예제 #26
0
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)
예제 #27
0
def make_random_timeseries():
    length = random.randint(1, 10)
    result = TimeSeries()
    t = 0
    for i in range(length):
        t += random.randint(0, 5)
        x = random.randint(0, 5)
        result[t] = x
    return result
예제 #28
0
def test_none_handling():
    ts = TimeSeries()
    ts[1] = (0, 1)
    ts[2] = (None, 0)
    ts[3] = (2, 0)

    # print(ts.distribution(normalized=False))
    assert (ts.distribution()[(0, 1)] == 0.5)
    assert (ts.distribution()[(None, 0)] == 0.5)
예제 #29
0
def test_set_interval_datetime():
    ts = TimeSeries(default=400)
    ts[datetime(2012, 1, 4, 12)] = 5
    ts[datetime(2012, 1, 9, 18)] = 10
    ts[datetime(2012, 1, 8):datetime(2012, 1, 10)] = 100

    assert ts.items() == [(datetime(2012, 1, 4, 12, 0), 5),
                          (datetime(2012, 1, 8, 0, 0), 100),
                          (datetime(2012, 1, 10, 0, 0), 10)]
예제 #30
0
def test_moving_average():

    ts = TimeSeries([[1, 2], [2, 3], [6, 1], [8, 4]], domain=Domain(1, 9))
    ts2 = TimeSeries(
        [[1, 2], [2, 3], [6, 1], [8, 4]],
        domain=Domain(1 - 1, 9 + 1),
    )
    assert dict(ts.moving_average(
        1, 2)) == {i: ts2.mean(i - 1, i + 1)
                   for i in range(1, 10)}
    assert dict(ts.moving_average(0.5, 2)) == {
        1 + i / 2.: ts2.mean(1 + i / 2. - 1, 1 + i / 2. + 1)
        for i in range(0, 17)
    }

    ts = TimeSeries([[1, 2], [2, 3], [6, 1], [8, 4]],
                    domain=Domain([1, 2], [3, 5], [6, 8]))
    nose.tools.assert_raises(NotImplementedError, ts.moving_average, 1, 0.5)