From 8c4406927846ce9949c8e77e527a20750ee448a4 Mon Sep 17 00:00:00 2001 From: Marshall Crumiller Date: Fri, 19 Jan 2024 11:18:46 -0500 Subject: [PATCH 1/2] Allow list creation of decimals --- .../polars-core/src/chunked_array/builder/list/mod.rs | 7 +++++++ py-polars/tests/unit/datatypes/test_list.py | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/crates/polars-core/src/chunked_array/builder/list/mod.rs b/crates/polars-core/src/chunked_array/builder/list/mod.rs index 9abcbcaa158a..f8b1eabed644 100644 --- a/crates/polars-core/src/chunked_array/builder/list/mod.rs +++ b/crates/polars-core/src/chunked_array/builder/list/mod.rs @@ -130,6 +130,13 @@ pub fn get_list_builder( list_capacity, Some(inner_type_logical.clone()), ))), + #[cfg(feature = "dtype-decimal")] + DataType::Decimal(_, _) => Ok(Box::new(ListPrimitiveChunkedBuilder::::new( + name, + list_capacity, + value_capacity, + inner_type_logical.clone(), + ))), _ => { macro_rules! get_primitive_builder { ($type:ty) => {{ diff --git a/py-polars/tests/unit/datatypes/test_list.py b/py-polars/tests/unit/datatypes/test_list.py index 021a8696a406..8d7053f3fae6 100644 --- a/py-polars/tests/unit/datatypes/test_list.py +++ b/py-polars/tests/unit/datatypes/test_list.py @@ -2,6 +2,7 @@ import pickle from datetime import date, datetime, time +from decimal import Decimal from typing import TYPE_CHECKING, Any import pandas as pd @@ -79,6 +80,15 @@ def test_categorical() -> None: assert out.dtype.inner.is_nested() is False # type: ignore[attr-defined] +def test_decimal() -> None: + input = [[Decimal("1.23"), Decimal("4.56")], [Decimal("7.89"), Decimal("10.11")]] + s = pl.Series(input) + assert s.dtype == pl.List(pl.Decimal) + assert s.dtype.inner == pl.Decimal + assert s.dtype.inner.is_nested() is False + assert s.to_list() == input + + def test_cast_inner() -> None: a = pl.Series([[1, 2]]) for t in [bool, pl.Boolean]: From fb29346a721b98b96a71e6b38874194dadaf232a Mon Sep 17 00:00:00 2001 From: Marshall Crumiller Date: Fri, 19 Jan 2024 11:28:02 -0500 Subject: [PATCH 2/2] Fix lint --- py-polars/tests/unit/datatypes/test_list.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/py-polars/tests/unit/datatypes/test_list.py b/py-polars/tests/unit/datatypes/test_list.py index 8d7053f3fae6..20c6a4f4e9d9 100644 --- a/py-polars/tests/unit/datatypes/test_list.py +++ b/py-polars/tests/unit/datatypes/test_list.py @@ -84,8 +84,8 @@ def test_decimal() -> None: input = [[Decimal("1.23"), Decimal("4.56")], [Decimal("7.89"), Decimal("10.11")]] s = pl.Series(input) assert s.dtype == pl.List(pl.Decimal) - assert s.dtype.inner == pl.Decimal - assert s.dtype.inner.is_nested() is False + assert s.dtype.inner == pl.Decimal # type: ignore[attr-defined] + assert s.dtype.inner.is_nested() is False # type: ignore[attr-defined] assert s.to_list() == input