From a9fb237d7bdd8ee5c9948f150db97637640ae028 Mon Sep 17 00:00:00 2001 From: Ritchie Vink Date: Sat, 6 Jul 2024 17:48:34 +0200 Subject: [PATCH] fix: Fix decimal dyn float supertype (#17464) --- crates/polars-core/src/utils/supertype.rs | 8 ++++---- py-polars/tests/unit/datatypes/test_decimal.py | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/crates/polars-core/src/utils/supertype.rs b/crates/polars-core/src/utils/supertype.rs index 54a07b46b415..2068f228411b 100644 --- a/crates/polars-core/src/utils/supertype.rs +++ b/crates/polars-core/src/utils/supertype.rs @@ -276,11 +276,11 @@ pub fn get_supertype_with_options( }, (dt, Unknown(kind)) => { match kind { - // numeric vs float|str -> always float|str - UnknownKind::Float | UnknownKind::Int(_) if dt.is_float() | dt.is_string() => Some(dt.clone()), + // numeric vs float|str -> always float|str|decimal + UnknownKind::Float | UnknownKind::Int(_) if dt.is_float() | dt.is_string() | dt.is_decimal() => Some(dt.clone()), UnknownKind::Float if dt.is_integer() => Some(Unknown(UnknownKind::Float)), - // Materialize float - UnknownKind::Float if dt.is_float() => Some(dt.clone()), + // Materialize float to float or decimal + UnknownKind::Float if dt.is_float() | dt.is_decimal() => Some(dt.clone()), // Materialize str UnknownKind::Str if dt.is_string() | dt.is_enum() => Some(dt.clone()), // Materialize str diff --git a/py-polars/tests/unit/datatypes/test_decimal.py b/py-polars/tests/unit/datatypes/test_decimal.py index 96a4ce413149..e9a45080cfa1 100644 --- a/py-polars/tests/unit/datatypes/test_decimal.py +++ b/py-polars/tests/unit/datatypes/test_decimal.py @@ -479,3 +479,9 @@ def test_decimal_raise_oob_precision() -> None: # max precision is 38. with pytest.raises(pl.exceptions.InvalidOperationError): df.select(b=pl.col("a").cast(pl.Decimal(76, 38))) + + +def test_decimal_dynamic_float_st() -> None: + assert pl.LazyFrame({"a": [D("2.0"), D("0.5")]}).filter( + pl.col("a").is_between(0.45, 0.9) + ).collect().to_dict(as_series=False) == {"a": [D("0.5")]}