Path: blob/main/py-polars/tests/unit/utils/parse/test_expr.py
8422 views
from __future__ import annotations12from datetime import date3from typing import Any45import pytest67import polars as pl8from polars._utils.parse.expr import parse_into_expression9from polars._utils.wrap import wrap_expr10from polars.testing import assert_frame_equal111213def assert_expr_equal(result: pl.Expr, expected: pl.Expr) -> None:14"""15Evaluate the given expressions in a simple context to assert equality.1617WARNING: This is not a fully featured function - it's just to evaluate the tests in18this module. Do not use it elsewhere.19"""20df = pl.DataFrame({"a": [1, 2], "b": [3, 4]})21assert_frame_equal(df.select(result), df.select(expected))222324@pytest.mark.parametrize(25"input", [5, 2.0, pl.Series([1, 2, 3]), date(2022, 1, 1), b"hi"]26)27def test_parse_into_expression_lit(input: Any) -> None:28result = wrap_expr(parse_into_expression(input))29expected = pl.lit(input)30assert_expr_equal(result, expected)313233def test_parse_into_expression_col() -> None:34result = wrap_expr(parse_into_expression("a"))35expected = pl.col("a")36assert_expr_equal(result, expected)373839@pytest.mark.parametrize("input", [pl.lit(4), pl.col("a")])40def test_parse_into_expression_expr(input: pl.Expr) -> None:41result = wrap_expr(parse_into_expression(input))42expected = input43assert_expr_equal(result, expected)444546@pytest.mark.parametrize(47"input", [pl.when(True).then(1), pl.when(True).then(1).when(False).then(0)]48)49def test_parse_into_expression_whenthen(input: Any) -> None:50result = wrap_expr(parse_into_expression(input))51expected = input.otherwise(None)52assert_expr_equal(result, expected)535455@pytest.mark.parametrize("input", [[1, 2, 3], (1, 2)])56def test_parse_into_expression_list(input: Any) -> None:57result = wrap_expr(parse_into_expression(input))58expected = pl.lit(pl.Series("literal", [input]))59assert_expr_equal(result, expected)606162def test_parse_into_expression_str_as_lit() -> None:63result = wrap_expr(parse_into_expression("a", str_as_lit=True))64expected = pl.lit("a")65assert_expr_equal(result, expected)666768def test_parse_into_expression_structify() -> None:69result = wrap_expr(parse_into_expression(pl.col("a", "b"), structify=True))70expected = pl.struct("a", "b")71assert_expr_equal(result, expected)727374def test_parse_into_expression_structify_multiple_outputs() -> None:75# note: this only works because assert_expr_equal evaluates on a dataframe with76# columns "a" and "b"77result = wrap_expr(parse_into_expression(pl.col("*"), structify=True))78expected = pl.struct("a", "b")79assert_expr_equal(result, expected)808182