def test_large_compile(): """ Tests that compiling a large expression tree finishes within a reasonable amount of time """ num_columns = 20 num_joins = 7 class MockBigQueryClient(bq.BigQueryClient): def __init__(self): pass names = [f"col_{i}" for i in range(num_columns)] schema = ibis.Schema(names, ['string'] * num_columns) ibis_client = MockBigQueryClient() table = TableExpr( ops.SQLQueryResult("select * from t", schema, ibis_client) ) for _ in range(num_joins): table = table.mutate(dummy=ibis.literal("")) table = table.left_join(table, ["dummy"])[[table]] start = datetime.datetime.now() table.compile() delta = datetime.datetime.now() - start assert delta.total_seconds() < 10
def __call__(self, expr: ir.TableExpr) -> ir.TableExpr: return expr.mutate( **{ name: column.resolve(expr, {X: expr}) for name, column in self.mutations.items() })
def test_mutate(diamonds: ir.TableExpr) -> None: result = diamonds >> mutate(new_column=X.carat + 1) expected = diamonds.mutate(new_column=lambda x: x.carat + 1) assert result.equals(expected) tm.assert_frame_equal(expected.execute(), result >> do())