예제 #1
0
def test_invalid_date_arithmetics():
    d1 = api.date('2015-01-02')
    i1 = api.interval(seconds=300)
    i2 = api.interval(minutes=15)
    i3 = api.interval(hours=1)

    for i in [i1, i2, i3]:
        with pytest.raises(TypeError):
            d1 - i
        with pytest.raises(TypeError):
            d1 + i
예제 #2
0
def test_time_arithmetics():
    t1 = api.time('18:00')
    t2 = api.time('19:12')
    i1 = api.interval(minutes=3)

    for expr in [t1 - t2, t2 - t1]:
        assert isinstance(expr, ir.IntervalScalar)
        assert isinstance(expr.op(), ops.TimeDiff)
        assert expr.type() == dt.Interval('s', dt.int32)

    for expr in [t1 - i1, t2 - i1]:
        assert isinstance(expr, ir.TimeScalar)
        assert isinstance(expr.op(), ops.TimeSub)

    for expr in [t1 + i1, t2 + i1]:
        assert isinstance(expr, ir.TimeScalar)
        assert isinstance(expr.op(), ops.TimeAdd)
예제 #3
0
def test_date_arithmetics():
    d1 = api.date('2015-01-02')
    d2 = api.date('2017-01-01')
    i1 = api.interval(weeks=3)

    for expr in [d1 - d2, d2 - d1]:
        assert isinstance(expr, ir.IntervalScalar)
        assert isinstance(expr.op(), ops.DateDiff)
        assert expr.type() == dt.Interval('D', dt.int32)

    for expr in [d1 - i1, d2 - i1]:
        assert isinstance(expr, ir.DateScalar)
        assert isinstance(expr.op(), ops.DateSub)

    for expr in [d1 + i1, d2 + i1]:
        assert isinstance(expr, ir.DateScalar)
        assert isinstance(expr.op(), ops.DateAdd)
예제 #4
0
def test_timestamp_arithmetics():
    ts1 = api.timestamp(datetime.datetime.now())
    ts2 = api.timestamp(datetime.datetime.today())

    i1 = api.interval(minutes=30)

    # TODO: raise for unsupported operations too
    for expr in [ts2 - ts1, ts1 - ts2]:
        assert isinstance(expr, ir.IntervalScalar)
        assert isinstance(expr.op(), ops.TimestampDiff)
        assert expr.type() == dt.Interval('s', dt.int32)

    for expr in [ts1 - i1, ts2 - i1]:
        assert isinstance(expr, ir.TimestampScalar)
        assert isinstance(expr.op(), ops.TimestampSub)

    for expr in [ts1 + i1, ts2 + i1]:
        assert isinstance(expr, ir.TimestampScalar)
        assert isinstance(expr.op(), ops.TimestampAdd)
예제 #5
0
def test_interval_timestamp_expr(table):
    c = table.i
    x = api.interval(seconds=1)

    expr = x + c
    assert isinstance(expr, ir.TimestampColumn)
    assert isinstance(expr.op(), ops.TimestampAdd)

    # test radd
    expr = c + x
    assert isinstance(expr, ir.TimestampColumn)
    assert isinstance(expr.op(), ops.TimestampAdd)

    expr = x - c
    assert isinstance(expr, ir.TimestampColumn)
    assert isinstance(expr.op(), ops.TimestampSub)

    # test radd
    expr = c - x
    assert isinstance(expr, ir.TimestampColumn)
    assert isinstance(expr.op(), ops.TimestampSub)
예제 #6
0
def test_interval_date_expr(table):
    c = table.j
    x = api.interval(days=1)

    expr = x + c
    assert isinstance(expr, ir.DateColumn)
    assert isinstance(expr.op(), ops.DateAdd)

    # test radd
    expr = c + x
    assert isinstance(expr, ir.DateColumn)
    assert isinstance(expr.op(), ops.DateAdd)

    expr = x - c
    assert isinstance(expr, ir.DateColumn)
    assert isinstance(expr.op(), ops.DateSub)

    # test radd
    expr = c - x
    assert isinstance(expr, ir.DateColumn)
    assert isinstance(expr.op(), ops.DateSub)
예제 #7
0
def test_interval_time_expr(table):
    c = table.k
    x = api.interval(hours=1)

    expr = x + c
    assert isinstance(expr, ir.TimeColumn)
    assert isinstance(expr.op(), ops.TimeAdd)

    # test radd
    expr = c + x
    assert isinstance(expr, ir.TimeColumn)
    assert isinstance(expr.op(), ops.TimeAdd)

    expr = x - c
    assert isinstance(expr, ir.TimeColumn)
    assert isinstance(expr.op(), ops.TimeSub)

    # test radd
    expr = c - x
    assert isinstance(expr, ir.TimeColumn)
    assert isinstance(expr.op(), ops.TimeSub)
예제 #8
0
def test_interval_properties(prop, expected_unit):
    i = api.interval(seconds=3600)
    assert getattr(i, prop).type().unit == expected_unit
예제 #9
0
import ibis.expr.operations as ops
import ibis.expr.types as ir


def test_temporal_literals():
    date = ibis.literal('2015-01-01', 'date')
    assert isinstance(date, ir.DateScalar)

    timestamp = ibis.literal('2017-01-01 12:00:33', 'timestamp')
    assert isinstance(timestamp, ir.TimestampScalar)


@pytest.mark.parametrize(
    ('interval', 'unit', 'expected'),
    [
        (api.interval(months=3), 'Q', api.interval(quarters=1)),
        (api.interval(months=12), 'Y', api.interval(years=1)),
        (api.interval(quarters=8), 'Y', api.interval(years=2)),
        (api.interval(days=14), 'W', api.interval(weeks=2)),
        (api.interval(minutes=240), 'h', api.interval(hours=4)),
        (api.interval(seconds=360), 'm', api.interval(minutes=6)),
        (api.interval(seconds=3 * 86400), 'D', api.interval(days=3)),
        (api.interval(milliseconds=5000), 's', api.interval(seconds=5)),
        (api.interval(microseconds=5000000), 's', api.interval(seconds=5)),
        (api.interval(nanoseconds=5000000000), 's', api.interval(seconds=5)),
    ],
)
def test_upconvert(interval, unit, expected):
    result = interval.to_unit(unit)

    assert isinstance(result, ir.IntervalScalar)
예제 #10
0
파일: test_temporal.py 프로젝트: shshe/ibis
def test_downconvert_day(case, expected):
    assert isinstance(case, ir.IntervalScalar)
    assert isinstance(expected, ir.IntervalScalar)
    assert case.unit == expected.unit


@pytest.mark.parametrize(('a', 'b', 'unit'),
                         [(api.day(), api.day(3), 'D'),
                          (api.second(), api.hour(10), 's'),
                          (api.hour(3), api.day(2), 'h')])
def test_combine_with_different_kinds(a, b, unit):
    assert (a + b).type().unit == unit


@pytest.mark.parametrize(('case', 'expected'), [
    (api.interval(quarters=2), api.quarter(2)),
    (api.interval(weeks=2), api.week(2)),
    (api.interval(days=3), api.day(3)),
    (api.interval(hours=4), api.hour(4)),
    (api.interval(minutes=5), api.minute(5)),
    (api.interval(seconds=6), api.second(6)),
    (api.interval(milliseconds=7), api.millisecond(7)),
    (api.interval(microseconds=8), api.microsecond(8)),
    (api.interval(nanoseconds=9), api.nanosecond(9)),
])
def test_timedelta_generic_api(case, expected):
    assert case.equals(expected)


def test_interval_time_expr(table):
    c = table.k