예제 #1
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
예제 #2
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.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
예제 #3
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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)
예제 #8
0
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
예제 #9
0
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
예제 #10
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
예제 #11
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
예제 #12
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
예제 #13
0
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
예제 #14
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.from_many_sum([a, b, c]):
        print dt.isoformat(), i
예제 #15
0
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
예제 #16
0
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
예제 #17
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)