From 37d3d45edf72d91a226179f0b9ae85755ec68949 Mon Sep 17 00:00:00 2001 From: Weijie Guo Date: Thu, 4 Apr 2024 14:12:03 +0800 Subject: [PATCH] fix: Don't prune alias in AnonymousFunction subtree (#15453) --- .../src/logical_plan/conversion.rs | 13 ++++++++----- py-polars/tests/unit/test_schema.py | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/crates/polars-plan/src/logical_plan/conversion.rs b/crates/polars-plan/src/logical_plan/conversion.rs index d3fd74f6830a..211f69f89fda 100644 --- a/crates/polars-plan/src/logical_plan/conversion.rs +++ b/crates/polars-plan/src/logical_plan/conversion.rs @@ -210,11 +210,14 @@ fn to_aexpr_impl(expr: Expr, arena: &mut Arena, state: &mut ConversionSta function, output_type, options, - } => AExpr::AnonymousFunction { - input: to_aexprs(input, arena, state), - function, - output_type, - options, + } => { + state.prune_alias = false; + AExpr::AnonymousFunction { + input: to_aexprs(input, arena, state), + function, + output_type, + options, + } }, Expr::Function { input, diff --git a/py-polars/tests/unit/test_schema.py b/py-polars/tests/unit/test_schema.py index 41d8c6777aef..e8d615d65857 100644 --- a/py-polars/tests/unit/test_schema.py +++ b/py-polars/tests/unit/test_schema.py @@ -643,3 +643,22 @@ def test_schema_boolean_sum_horizontal() -> None: def test_struct_alias_prune_15401() -> None: df = pl.DataFrame({"a": []}, schema={"a": pl.Struct({"b": pl.Int8})}) assert df.select(pl.col("a").alias("c").struct.field("b")).columns == ["b"] + + +def test_alias_prune_in_fold_15438() -> None: + df = pl.DataFrame({"x": [1, 2], "expected_result": ["first", "second"]}).select( + actual_result=pl.fold( + acc=pl.lit("other", dtype=pl.Utf8), + function=lambda acc, x: pl.when(x).then(pl.lit(x.name)).otherwise(acc), # type: ignore[arg-type, return-value] + exprs=[ + (pl.col("x") == 1).alias("first"), + (pl.col("x") == 2).alias("second"), + ], + ) + ) + expected = pl.DataFrame( + { + "actual_result": ["first", "second"], + } + ) + assert_frame_equal(df, expected)