diff --git a/crates/polars-core/src/utils/supertype.rs b/crates/polars-core/src/utils/supertype.rs index 6688428e329c..d50a24cb6649 100644 --- a/crates/polars-core/src/utils/supertype.rs +++ b/crates/polars-core/src/utils/supertype.rs @@ -288,7 +288,7 @@ pub fn get_supertype(l: &DataType, r: &DataType) -> Option { } // dyn int vs number else { - let smallest_fitting_dtype = if dt.is_unsigned_integer() && v.is_positive() { + let smallest_fitting_dtype = if dt.is_unsigned_integer() && !v.is_negative() { materialize_dyn_int_pos(*v).dtype() } else { materialize_smallest_dyn_int(*v).dtype() diff --git a/py-polars/tests/unit/datatypes/test_integer.py b/py-polars/tests/unit/datatypes/test_integer.py index 306154e6d936..ec649dd0a87e 100644 --- a/py-polars/tests/unit/datatypes/test_integer.py +++ b/py-polars/tests/unit/datatypes/test_integer.py @@ -23,3 +23,9 @@ def test_int_negate_operation() -> None: -5, -50912341410, ] + + +def test_compare_zero_with_uint64_16798() -> None: + df = pl.Series("a", [(1 << 63), 0], dtype=pl.UInt64).to_frame() + assert df.select(pl.col("a") >= 0).item(0, 0) + assert df.select(pl.col("a") == 0).item(0, 0) is False