Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/py-polars/tests/unit/expr/test_serde.py
6939 views
1
import io
2
3
import pytest
4
5
import polars as pl
6
from polars.exceptions import ComputeError
7
8
9
@pytest.mark.parametrize(
10
"expr",
11
[
12
pl.col("foo").sum().over("bar"),
13
pl.col("foo").rolling_quantile(0.25, window_size=5),
14
pl.col("foo").rolling_var(window_size=4, ddof=2),
15
pl.col("foo").rolling_min(window_size=2),
16
pl.col("foo").rolling_quantile_by("bar", window_size="1mo", quantile=0.75),
17
],
18
)
19
def test_expr_serde_roundtrip_binary(expr: pl.Expr) -> None:
20
json = expr.meta.serialize(format="binary")
21
round_tripped = pl.Expr.deserialize(io.BytesIO(json), format="binary")
22
assert round_tripped.meta == expr
23
24
25
@pytest.mark.parametrize(
26
"expr",
27
[
28
pl.col("foo").sum().over("bar"),
29
pl.col("foo").rolling_quantile(0.25, window_size=5),
30
pl.col("foo").rolling_var(window_size=4, ddof=2),
31
pl.col("foo").rolling_min(window_size=2),
32
pl.col("foo").rolling_quantile_by("bar", window_size="1mo", quantile=0.75),
33
],
34
)
35
def test_expr_serde_roundtrip_json(expr: pl.Expr) -> None:
36
expr = pl.col("foo").sum().over("bar")
37
json = expr.meta.serialize(format="json")
38
round_tripped = pl.Expr.deserialize(io.StringIO(json), format="json")
39
assert round_tripped.meta == expr
40
41
42
def test_expr_deserialize_file_not_found() -> None:
43
with pytest.raises(FileNotFoundError):
44
pl.Expr.deserialize("abcdef")
45
46
47
def test_expr_deserialize_invalid_json() -> None:
48
with pytest.raises(
49
ComputeError, match="could not deserialize input into an expression"
50
):
51
pl.Expr.deserialize(io.StringIO("abcdef"), format="json")
52
53
54
def test_expression_json_13991() -> None:
55
expr = pl.col("foo").cast(pl.Decimal)
56
json = expr.meta.serialize(format="json")
57
58
round_tripped = pl.Expr.deserialize(io.StringIO(json), format="json")
59
assert round_tripped.meta == expr
60
61
62
def test_expr_write_json_from_json_deprecated() -> None:
63
expr = pl.col("foo").sum().over("bar")
64
65
with pytest.deprecated_call():
66
json = expr.meta.write_json()
67
68
with pytest.deprecated_call():
69
round_tripped = pl.Expr.from_json(json)
70
71
assert round_tripped.meta == expr
72
73