Path: blob/main/py-polars/tests/unit/interop/test_to_init_repr.py
6939 views
from __future__ import annotations12import zoneinfo # noqa: F4013from datetime import date, datetime, time, timedelta, timezone45import pytest67import polars as pl8from polars.testing import assert_frame_equal91011@pytest.mark.may_fail_cloud # reason: Object type serialization12def test_to_init_repr() -> None:13# round-trip various types14df = (15pl.LazyFrame(16{17"a": [1, 2, None],18"b": [4.5, 5.5, 6.5],19"c": ["x", "y", "z"],20"d": [True, False, True],21"e": [None, "", None],22"f": [date(2022, 7, 5), date(2023, 2, 5), date(2023, 8, 5)],23"g": [time(0, 0, 0, 1), time(12, 30, 45), time(23, 59, 59, 999000)],24"h": [25datetime(2022, 7, 5, 10, 30, 45, 4560),26datetime(2023, 10, 12, 20, 3, 8, 11),27None,28],29"i": [30datetime(2022, 7, 5, 10, 30, 45, 4560),31datetime(2023, 10, 12, 20, 3, 8, 11),32None,33],34"null": [None, None, None],35"enum": ["a", "b", "c"],36"duration": [timedelta(days=1), timedelta(days=2), None],37"binary": [bytes([0]), bytes([0, 1]), bytes([0, 1, 2])],38"object": [timezone.utc, timezone.utc, timezone.utc],39},40)41.with_columns(42pl.col("c").cast(pl.Categorical),43pl.col("h").cast(pl.Datetime("ns")),44pl.col("i").dt.replace_time_zone("Australia/Melbourne"),45pl.col("enum").cast(pl.Enum(["a", "b", "c"])),46)47.collect()48)4950result = eval(df.to_init_repr().replace("datetime.", ""))51expected = df52# drop "object" because it can not be compared by assert_frame_equal53assert_frame_equal(result.drop("object"), expected.drop("object"))545556def test_to_init_repr_nested_dtype() -> None:57# round-trip nested types58df = pl.LazyFrame(59{60"list": pl.Series(values=[[1], [2], [3]], dtype=pl.List(pl.Int32)),61"list_list": pl.Series(62values=[[[1]], [[2]], [[3]]], dtype=pl.List(pl.List(pl.Int8))63),64"array": pl.Series(65values=[[1.0], [2.0], [3.0]],66dtype=pl.Array(pl.Float32, 1),67),68"struct": pl.Series(69values=[70{"x": "foo", "y": [1, 2]},71{"x": "bar", "y": [3, 4, 5]},72{"x": "foobar", "y": []},73],74dtype=pl.Struct({"x": pl.String, "y": pl.List(pl.Int8)}),75),76},77).collect()7879assert_frame_equal(eval(df.to_init_repr()), df)808182def test_to_init_repr_nested_dtype_roundtrip() -> None:83# round-trip nested types84df = pl.LazyFrame(85{86"list": pl.Series(values=[[1], [2], [3]], dtype=pl.List(pl.Int32)),87"list_list": pl.Series(88values=[[[1]], [[2]], [[3]]], dtype=pl.List(pl.List(pl.Int8))89),90"array": pl.Series(91values=[[1.0], [2.0], [3.0]],92dtype=pl.Array(pl.Float32, 1),93),94"struct": pl.Series(95values=[96{"x": "foo", "y": [1, 2]},97{"x": "bar", "y": [3, 4, 5]},98{"x": "foobar", "y": []},99],100dtype=pl.Struct({"x": pl.String, "y": pl.List(pl.Int8)}),101),102},103).collect()104105assert_frame_equal(eval(df.to_init_repr()), df)106107108