Path: blob/main/py-polars/tests/unit/operations/aggregation/test_folds.py
6940 views
import pytest12import polars as pl3from polars.testing import assert_frame_equal456@pytest.mark.may_fail_cloud # reason: eager execution7def test_fold_reduce() -> None:8df = pl.DataFrame({"a": [1, 2, 3], "b": [1.0, 2.0, 3.0]})910out = df.select(11pl.fold(acc=pl.lit(0), function=lambda acc, x: acc + x, exprs=pl.all()).alias(12"foo"13)14)15assert out["foo"].to_list() == [2, 4, 6]16out = df.select(17pl.reduce(function=lambda acc, x: acc + x, exprs=pl.all()).alias("foo")18)19assert out["foo"].to_list() == [2, 4, 6]202122@pytest.mark.may_fail_cloud # reason: eager execution23def test_cum_fold() -> None:24df = pl.DataFrame(25{26"a": [1, 2, 3, 4],27"b": [5, 6, 7, 8],28"c": [10, 20, 30, 40],29}30)31result = df.select(pl.cum_fold(pl.lit(0, pl.Int64), lambda a, b: a + b, pl.all()))32expected = pl.DataFrame(33{34"cum_fold": [35{"a": 1, "b": 6, "c": 16},36{"a": 2, "b": 8, "c": 28},37{"a": 3, "b": 10, "c": 40},38{"a": 4, "b": 12, "c": 52},39]40}41)42assert_frame_equal(result, expected)434445def test_cum_reduce() -> None:46df = pl.DataFrame(47{48"a": [1, 2, 3, 4],49"b": [5, 6, 7, 8],50"c": [10, 20, 30, 40],51}52)53result = df.select(pl.cum_reduce(lambda a, b: a + b, pl.all()))54expected = pl.DataFrame(55{56"cum_reduce": [57{"a": 1, "b": 6, "c": 16},58{"a": 2, "b": 8, "c": 28},59{"a": 3, "b": 10, "c": 40},60{"a": 4, "b": 12, "c": 52},61]62}63)64assert_frame_equal(result, expected)656667def test_alias_prune_in_fold_15438() -> None:68df = pl.DataFrame({"x": [1, 2], "expected_result": ["first", "second"]}).select(69actual_result=pl.fold(70acc=pl.lit("other", dtype=pl.Utf8),71function=lambda acc, x: pl.select(72pl.when(x).then(pl.lit(x.name)).otherwise(acc)73).to_series(),74exprs=[75(pl.col("x") == 1).alias("first"),76(pl.col("x") == 2).alias("second"),77],78)79)80expected = pl.DataFrame(81{82"actual_result": ["first", "second"],83}84)85assert_frame_equal(df, expected)868788