def test_date_column_from_ymd(con, alltypes, df): c = alltypes.timestamp_col expr = ibis.date(c.year(), c.month(), c.day()) tbl = alltypes[expr.name('timestamp_col'), ] result = con.execute(tbl) golden = df.timestamp_col.dt.date.astype('datetime64[ns]') tm.assert_series_equal(golden, result.timestamp_col)
def test_date_column_from_iso(con, alltypes, df): expr = (alltypes.year.cast('string') + '-' + alltypes.month.cast('string').lpad(2, '0') + '-13') expr = ibis.date(expr) result = con.execute(expr) golden = (df.year.astype(str) + '-' + df.month.astype(str).str.rjust(2, '0') + '-13') actual = result.dt.strftime('%Y-%m-%d') tm.assert_series_equal(golden.rename('tmp'), actual.rename('tmp'))
def test_projection_fusion_only_peeks_at_immediate_parent(): if IBIS_VERSION < IBIS_1_4_VERSION: pytest.skip("requires ibis 1.4+") schema = [ ("file_date", "timestamp"), ("PARTITIONTIME", "date"), ("val", "int64"), ] table = ibis.table(schema, name="unbound_table") table = table[table.PARTITIONTIME < ibis.date("2017-01-01")] table = table.mutate(file_date=table.file_date.cast("date")) table = table[table.file_date < ibis.date("2017-01-01")] table = table.mutate(XYZ=table.val * 2) expr = table.join(table.view())[table] result = ibis_bigquery.compile(expr) expected = """\ WITH t0 AS ( SELECT * FROM unbound_table WHERE `PARTITIONTIME` < DATE '2017-01-01' ), t1 AS ( SELECT CAST(`file_date` AS DATE) AS `file_date`, `PARTITIONTIME`, `val` FROM t0 ), t2 AS ( SELECT t1.* FROM t1 WHERE t1.`file_date` < DATE '2017-01-01' ), t3 AS ( SELECT *, `val` * 2 AS `XYZ` FROM t2 ) SELECT t3.* FROM t3 INNER JOIN t3 t4""" assert result == expected
def test_projection_fusion_only_peeks_at_immediate_parent(): schema = [ ('file_date', 'timestamp'), ('PARTITIONTIME', 'date'), ('val', 'int64'), ] table = ibis.table(schema, name='unbound_table') table = table[table.PARTITIONTIME < ibis.date('2017-01-01')] table = table.mutate(file_date=table.file_date.cast('date')) table = table[table.file_date < ibis.date('2017-01-01')] table = table.mutate(XYZ=table.val * 2) expr = table.join(table.view())[table] result = ibis.bigquery.compile(expr) expected = """\ WITH t0 AS ( SELECT * FROM unbound_table WHERE `PARTITIONTIME` < DATE '2017-01-01' ), t1 AS ( SELECT CAST(`file_date` AS DATE) AS `file_date`, `PARTITIONTIME`, `val` FROM t0 ), t2 AS ( SELECT t1.* FROM t1 WHERE t1.`file_date` < DATE '2017-01-01' ), t3 AS ( SELECT *, `val` * 2 AS `XYZ` FROM t2 ) SELECT t3.* FROM t3 CROSS JOIN t3 t4""" assert result == expected
lambda t, be: t.timestamp_col.dt.floor('d') - pd.Timedelta(days=14), id='date-subtract-interval', ), param( lambda t, be: t.timestamp_col - ibis.timestamp(timestamp_value), lambda t, be: pd.Series( t.timestamp_col.sub(timestamp_value).values.astype( 'timedelta64[{}]'.format(be.returned_timestamp_unit) ) ), id='timestamp-subtract-timestamp', marks=pytest.mark.xfail_backends([Spark]), ), param( lambda t, be: t.timestamp_col.date() - ibis.date(date_value), lambda t, be: t.timestamp_col.dt.floor('d') - date_value, id='date-subtract-date', ), ], ) @pytest.mark.xfail_unsupported @pytest.mark.skip_backends([Spark]) def test_temporal_binop(backend, con, alltypes, df, expr_fn, expected_fn): expr = expr_fn(alltypes, backend) expected = expected_fn(df, backend) result = con.execute(expr) expected = backend.default_series_rename(expected) backend.assert_series_equal(result, expected)
lambda t, be: t.timestamp_col.date() - ibis.interval(days=14), lambda t, be: t.timestamp_col.dt.floor('d') - pd.Timedelta(days=14), id='date-subtract-interval', ), param( lambda t, be: t.timestamp_col - ibis.timestamp(timestamp_value), lambda t, be: pd.Series( t.timestamp_col.sub(timestamp_value).values.astype( 'timedelta64[{}]'.format(be.returned_timestamp_unit) ) ), id='timestamp-subtract-timestamp', ), param( lambda t, be: t.timestamp_col.date() - ibis.date(date_value), lambda t, be: t.timestamp_col.dt.floor('d') - date_value, id='date-subtract-date', ), ], ) @tu.skipif_unsupported def test_temporal_binop(backend, con, alltypes, df, expr_fn, expected_fn): expr = expr_fn(alltypes, backend) expected = expected_fn(df, backend) result = con.execute(expr) expected = backend.default_series_rename(expected) backend.assert_series_equal(result, expected)
def test_date_time_literals(): assert ibis.date(2022, 2, 4).type() == dt.date assert ibis.time(16, 20, 00).type() == dt.time assert ibis.timestamp(2022, 2, 4, 16, 20, 00).type() == dt.timestamp
lambda t: t.timestamp_col + pd.Timedelta(days=4), id='timestamp-add-interval'), param(lambda t: t.timestamp_col - ibis.interval(days=17), lambda t: t.timestamp_col - pd.Timedelta(days=17), id='timestamp-subtract-interval'), param(lambda t: t.timestamp_col.date() + ibis.interval(days=4), lambda t: t.timestamp_col.dt.floor('d') + pd.Timedelta(days=4), id='date-add-interval'), param(lambda t: t.timestamp_col.date() - ibis.interval(days=14), lambda t: t.timestamp_col.dt.floor('d') - pd.Timedelta(days=14), id='date-subtract-interval'), param(lambda t: t.timestamp_col - ibis.timestamp(timestamp_value), lambda t: pd.Series((t.timestamp_col - timestamp_value).values. astype('timedelta64[s]')), id='timestamp-subtract-timestamp'), param(lambda t: t.timestamp_col.date() - ibis.date(date_value), lambda t: t.timestamp_col.dt.floor('d') - date_value, id='date-subtract-date'), ]) @tu.skipif_unsupported def test_temporal_binop(backend, con, alltypes, df, expr_fn, expected_fn): expr = expr_fn(alltypes) expected = expected_fn(df) result = con.execute(expr) expected = backend.default_series_rename(expected) backend.assert_series_equal(result, expected) @pytest.mark.parametrize(('ibis_pattern', 'pandas_pattern'),
def test_date_scalar_from_iso(con): expr = ibis.literal('2022-02-24') expr2 = ibis.date(expr) result = con.execute(expr2) assert result.strftime('%Y-%m-%d') == '2022-02-24'
def test_date_literal(con): expr = ibis.date(2022, 2, 4) result = con.execute(expr) assert result.strftime('%Y-%m-%d') == '2022-02-04'