From e8e17a617bd186569fe33e759dbaef805e611849 Mon Sep 17 00:00:00 2001 From: ritchie Date: Sun, 13 Oct 2024 16:50:35 +0200 Subject: [PATCH] chore: Make `get_list_builder` infallible --- .../src/chunked_array/builder/list/mod.rs | 32 +++++++++---------- .../src/chunked_array/from_iterator.rs | 6 ++-- .../src/chunked_array/from_iterator_par.rs | 2 +- .../src/chunked_array/list/iterator.rs | 2 +- .../src/chunked_array/ops/explode.rs | 10 +++--- .../polars-core/src/chunked_array/ops/full.rs | 3 +- crates/polars-core/src/named_from.rs | 23 ++++--------- crates/polars-core/src/series/any_value.rs | 2 +- crates/polars-core/src/series/ops/reshape.rs | 4 +-- crates/polars-expr/src/expressions/apply.rs | 2 +- crates/polars-expr/src/expressions/gather.rs | 2 +- crates/polars-lazy/src/tests/queries.rs | 2 +- .../src/chunked_array/list/namespace.rs | 4 +-- crates/polars-python/src/map/mod.rs | 3 +- 14 files changed, 42 insertions(+), 55 deletions(-) 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 a5110c8f2149..c568f55b5675 100644 --- a/crates/polars-core/src/chunked_array/builder/list/mod.rs +++ b/crates/polars-core/src/chunked_array/builder/list/mod.rs @@ -87,17 +87,17 @@ pub fn get_list_builder( value_capacity: usize, list_capacity: usize, name: PlSmallStr, -) -> PolarsResult> { +) -> Box { match inner_type_logical { #[cfg(feature = "dtype-categorical")] DataType::Categorical(Some(rev_map), ordering) => { - return Ok(create_categorical_chunked_listbuilder( + return create_categorical_chunked_listbuilder( name, *ordering, list_capacity, value_capacity, rev_map.clone(), - )) + ) }, #[cfg(feature = "dtype-categorical")] DataType::Enum(Some(rev_map), ordering) => { @@ -108,7 +108,7 @@ pub fn get_list_builder( value_capacity, (**rev_map).clone(), ); - return Ok(Box::new(list_builder)); + return Box::new(list_builder); }, _ => {}, } @@ -123,28 +123,28 @@ pub fn get_list_builder( value_capacity, list_capacity, ); - Ok(Box::new(builder)) + Box::new(builder) }, #[cfg(feature = "dtype-struct")] - DataType::Struct(_) => Ok(Box::new(AnonymousOwnedListBuilder::new( + DataType::Struct(_) => Box::new(AnonymousOwnedListBuilder::new( name, list_capacity, Some(inner_type_logical.clone()), - ))), - DataType::Null => Ok(Box::new(ListNullChunkedBuilder::new(name, list_capacity))), - DataType::List(_) => Ok(Box::new(AnonymousOwnedListBuilder::new( + )), + DataType::Null => Box::new(ListNullChunkedBuilder::new(name, list_capacity)), + DataType::List(_) => Box::new(AnonymousOwnedListBuilder::new( name, list_capacity, Some(inner_type_logical.clone()), - ))), + )), #[cfg(feature = "dtype-array")] - DataType::Array(..) => Ok(Box::new(AnonymousOwnedListBuilder::new( + DataType::Array(..) => Box::new(AnonymousOwnedListBuilder::new( name, list_capacity, Some(inner_type_logical.clone()), - ))), + )), #[cfg(feature = "dtype-decimal")] - DataType::Decimal(_, _) => Ok(Box::new( + DataType::Decimal(_, _) => Box::new( ListPrimitiveChunkedBuilder::::new_with_values_type( name, list_capacity, @@ -152,7 +152,7 @@ pub fn get_list_builder( physical_type, inner_type_logical.clone(), ), - )), + ), _ => { macro_rules! get_primitive_builder { ($type:ty) => {{ @@ -186,13 +186,13 @@ pub fn get_list_builder( Box::new(builder) }}; } - Ok(match_dtype_to_logical_apply_macro!( + match_dtype_to_logical_apply_macro!( physical_type, get_primitive_builder, get_string_builder, get_binary_builder, get_bool_builder - )) + ) }, } } diff --git a/crates/polars-core/src/chunked_array/from_iterator.rs b/crates/polars-core/src/chunked_array/from_iterator.rs index 36f776d001cf..5d784fb51fd9 100644 --- a/crates/polars-core/src/chunked_array/from_iterator.rs +++ b/crates/polars-core/src/chunked_array/from_iterator.rs @@ -142,8 +142,7 @@ where capacity * 5, capacity, PlSmallStr::EMPTY, - ) - .unwrap(); + ); builder.append_series(v.borrow()).unwrap(); for s in it { @@ -205,8 +204,7 @@ impl FromIterator> for ListChunked { capacity * 5, capacity, PlSmallStr::EMPTY, - ) - .unwrap(); + ); for _ in 0..init_null_count { builder.append_null(); diff --git a/crates/polars-core/src/chunked_array/from_iterator_par.rs b/crates/polars-core/src/chunked_array/from_iterator_par.rs index f2ba901dd6ef..a90b27da5722 100644 --- a/crates/polars-core/src/chunked_array/from_iterator_par.rs +++ b/crates/polars-core/src/chunked_array/from_iterator_par.rs @@ -177,7 +177,7 @@ fn materialize_list( value_capacity: usize, list_capacity: usize, ) -> ListChunked { - let mut builder = get_list_builder(&dtype, value_capacity, list_capacity, name).unwrap(); + let mut builder = get_list_builder(&dtype, value_capacity, list_capacity, name); for v in vectors { for val in v { builder.append_opt_series(val.as_ref()).unwrap(); diff --git a/crates/polars-core/src/chunked_array/list/iterator.rs b/crates/polars-core/src/chunked_array/list/iterator.rs index f84c7d751874..b575dcdf5a65 100644 --- a/crates/polars-core/src/chunked_array/list/iterator.rs +++ b/crates/polars-core/src/chunked_array/list/iterator.rs @@ -393,7 +393,7 @@ mod test { #[test] fn test_iter_list() { - let mut builder = get_list_builder(&DataType::Int32, 10, 10, PlSmallStr::EMPTY).unwrap(); + let mut builder = get_list_builder(&DataType::Int32, 10, 10, PlSmallStr::EMPTY); builder .append_series(&Series::new(PlSmallStr::EMPTY, &[1, 2, 3])) .unwrap(); diff --git a/crates/polars-core/src/chunked_array/ops/explode.rs b/crates/polars-core/src/chunked_array/ops/explode.rs index 2d1bddb2f4e3..e050fc6022ca 100644 --- a/crates/polars-core/src/chunked_array/ops/explode.rs +++ b/crates/polars-core/src/chunked_array/ops/explode.rs @@ -269,7 +269,7 @@ mod test { #[test] fn test_explode_list() -> PolarsResult<()> { - let mut builder = get_list_builder(&DataType::Int32, 5, 5, PlSmallStr::from_static("a"))?; + let mut builder = get_list_builder(&DataType::Int32, 5, 5, PlSmallStr::from_static("a")); builder .append_series(&Series::new(PlSmallStr::EMPTY, &[1, 2, 3, 3])) @@ -300,7 +300,7 @@ mod test { #[test] fn test_explode_empty_list_slot() -> PolarsResult<()> { // primitive - let mut builder = get_list_builder(&DataType::Int32, 5, 5, PlSmallStr::from_static("a"))?; + let mut builder = get_list_builder(&DataType::Int32, 5, 5, PlSmallStr::from_static("a")); builder .append_series(&Series::new(PlSmallStr::EMPTY, &[1i32, 2])) .unwrap(); @@ -319,7 +319,7 @@ mod test { ); // more primitive - let mut builder = get_list_builder(&DataType::Int32, 5, 5, PlSmallStr::from_static("a"))?; + let mut builder = get_list_builder(&DataType::Int32, 5, 5, PlSmallStr::from_static("a")); builder .append_series(&Series::new(PlSmallStr::EMPTY, &[1i32])) .unwrap(); @@ -344,7 +344,7 @@ mod test { ); // string - let mut builder = get_list_builder(&DataType::String, 5, 5, PlSmallStr::from_static("a"))?; + let mut builder = get_list_builder(&DataType::String, 5, 5, PlSmallStr::from_static("a")); builder .append_series(&Series::new(PlSmallStr::EMPTY, &["abc"])) .unwrap(); @@ -390,7 +390,7 @@ mod test { ); // boolean - let mut builder = get_list_builder(&DataType::Boolean, 5, 5, PlSmallStr::from_static("a"))?; + let mut builder = get_list_builder(&DataType::Boolean, 5, 5, PlSmallStr::from_static("a")); builder .append_series(&Series::new(PlSmallStr::EMPTY, &[true])) .unwrap(); diff --git a/crates/polars-core/src/chunked_array/ops/full.rs b/crates/polars-core/src/chunked_array/ops/full.rs index 6285f44e4498..8d34b80519dd 100644 --- a/crates/polars-core/src/chunked_array/ops/full.rs +++ b/crates/polars-core/src/chunked_array/ops/full.rs @@ -101,8 +101,7 @@ impl ChunkFullNull for BinaryOffsetChunked { impl ChunkFull<&Series> for ListChunked { fn full(name: PlSmallStr, value: &Series, length: usize) -> ListChunked { - let mut builder = - get_list_builder(value.dtype(), value.len() * length, length, name).unwrap(); + let mut builder = get_list_builder(value.dtype(), value.len() * length, length, name); for _ in 0..length { builder.append_series(value).unwrap(); } diff --git a/crates/polars-core/src/named_from.rs b/crates/polars-core/src/named_from.rs index 4d5714e4e517..8eee78d5ec6e 100644 --- a/crates/polars-core/src/named_from.rs +++ b/crates/polars-core/src/named_from.rs @@ -9,7 +9,7 @@ use chrono::NaiveDateTime; #[cfg(feature = "dtype-time")] use chrono::NaiveTime; -use crate::chunked_array::builder::{get_list_builder, AnonymousListBuilder}; +use crate::chunked_array::builder::get_list_builder; use crate::prelude::*; pub trait NamedFrom { @@ -135,22 +135,13 @@ impl> NamedFrom for Series { let dt = series_slice[0].dtype(); - // inner type is also list so we need the anonymous builder - if let DataType::List(_) = dt { - let mut builder = AnonymousListBuilder::new(name, list_cap, Some(dt.clone())); - for s in series_slice { - builder.append_series(s).unwrap(); - } - builder.finish().into_series() - } else { - let values_cap = series_slice.iter().fold(0, |acc, s| acc + s.len()); + let values_cap = series_slice.iter().fold(0, |acc, s| acc + s.len()); - let mut builder = get_list_builder(dt, values_cap, list_cap, name).unwrap(); - for series in series_slice { - builder.append_series(series).unwrap(); - } - builder.finish().into_series() + let mut builder = get_list_builder(dt, values_cap, list_cap, name); + for series in series_slice { + builder.append_series(series).unwrap(); } + builder.finish().into_series() } } @@ -165,7 +156,7 @@ impl]>> NamedFrom]> for Series { None => &DataType::Null, }; - let mut builder = get_list_builder(dt, values_cap, series_slice.len(), name).unwrap(); + let mut builder = get_list_builder(dt, values_cap, series_slice.len(), name); for series in series_slice { builder.append_opt_series(series.as_ref()).unwrap(); } diff --git a/crates/polars-core/src/series/any_value.rs b/crates/polars-core/src/series/any_value.rs index b7ac6d091ec3..6149690c85c5 100644 --- a/crates/polars-core/src/series/any_value.rs +++ b/crates/polars-core/src/series/any_value.rs @@ -661,7 +661,7 @@ fn any_values_to_list( }; let mut builder = - get_list_builder(&list_inner_type, capacity * 5, capacity, PlSmallStr::EMPTY)?; + get_list_builder(&list_inner_type, capacity * 5, capacity, PlSmallStr::EMPTY); for av in avs { match av { diff --git a/crates/polars-core/src/series/ops/reshape.rs b/crates/polars-core/src/series/ops/reshape.rs index 544754755e6e..c0a57dbf3db7 100644 --- a/crates/polars-core/src/series/ops/reshape.rs +++ b/crates/polars-core/src/series/ops/reshape.rs @@ -259,7 +259,7 @@ impl Series { ); let mut builder = - get_list_builder(s_ref.dtype(), s_ref.len(), rows as usize, s.name().clone())?; + get_list_builder(s_ref.dtype(), s_ref.len(), rows as usize, s.name().clone()); let mut offset = 0u64; for _ in 0..rows { @@ -285,7 +285,7 @@ mod test { fn test_to_list() -> PolarsResult<()> { let s = Series::new("a".into(), &[1, 2, 3]); - let mut builder = get_list_builder(s.dtype(), s.len(), 1, s.name().clone())?; + let mut builder = get_list_builder(s.dtype(), s.len(), 1, s.name().clone()); builder.append_series(&s).unwrap(); let expected = builder.finish(); diff --git a/crates/polars-expr/src/expressions/apply.rs b/crates/polars-expr/src/expressions/apply.rs index fca35b589e65..8c71c90cd152 100644 --- a/crates/polars-expr/src/expressions/apply.rs +++ b/crates/polars-expr/src/expressions/apply.rs @@ -243,7 +243,7 @@ impl ApplyExpr { let len = iters[0].size_hint().0; let ca = if len == 0 { - let mut builder = get_list_builder(&field.dtype, len * 5, len, field.name)?; + let mut builder = get_list_builder(&field.dtype, len * 5, len, field.name); for _ in 0..len { container.clear(); for iter in &mut iters { diff --git a/crates/polars-expr/src/expressions/gather.rs b/crates/polars-expr/src/expressions/gather.rs index 5c9fc86a9c27..e7d6e523a62d 100644 --- a/crates/polars-expr/src/expressions/gather.rs +++ b/crates/polars-expr/src/expressions/gather.rs @@ -255,7 +255,7 @@ impl GatherExpr { idx.series().len(), groups.len(), ac.series().name().clone(), - )?; + ); let iter = ac.iter_groups(false).zip(idx.iter_groups(false)); for (s, idx) in iter { diff --git a/crates/polars-lazy/src/tests/queries.rs b/crates/polars-lazy/src/tests/queries.rs index 4d482202cd67..95cbf586be67 100644 --- a/crates/polars-lazy/src/tests/queries.rs +++ b/crates/polars-lazy/src/tests/queries.rs @@ -1486,7 +1486,7 @@ fn test_singleton_broadcast() -> PolarsResult<()> { #[test] fn test_list_in_select_context() -> PolarsResult<()> { let s = Column::new("a".into(), &[1, 2, 3]); - let mut builder = get_list_builder(s.dtype(), s.len(), 1, s.name().clone()).unwrap(); + let mut builder = get_list_builder(s.dtype(), s.len(), 1, s.name().clone()); builder.append_series(s.as_materialized_series()).unwrap(); let expected = builder.finish().into_column(); diff --git a/crates/polars-ops/src/chunked_array/list/namespace.rs b/crates/polars-ops/src/chunked_array/list/namespace.rs index 3584fa792d07..fc498c25ce44 100644 --- a/crates/polars-ops/src/chunked_array/list/namespace.rs +++ b/crates/polars-ops/src/chunked_array/list/namespace.rs @@ -653,7 +653,7 @@ pub trait ListNameSpaceImpl: AsList { ca.get_values_size() + vals_size_other + 1, length, ca.name().clone(), - )?; + ); ca.into_iter().for_each(|opt_s| { let opt_s = opt_s.map(|mut s| { for append in &to_append { @@ -690,7 +690,7 @@ pub trait ListNameSpaceImpl: AsList { ca.get_values_size() + vals_size_other + 1, length, ca.name().clone(), - )?; + ); for _ in 0..ca.len() { let mut acc = match first_iter.next().unwrap() { diff --git a/crates/polars-python/src/map/mod.rs b/crates/polars-python/src/map/mod.rs index e899004e57ee..3bf96f91e631 100644 --- a/crates/polars-python/src/map/mod.rs +++ b/crates/polars-python/src/map/mod.rs @@ -257,8 +257,7 @@ fn iterator_to_list( name: PlSmallStr, capacity: usize, ) -> PyResult { - let mut builder = - get_list_builder(dt, capacity * 5, capacity, name).map_err(PyPolarsErr::from)?; + let mut builder = get_list_builder(dt, capacity * 5, capacity, name); for _ in 0..init_null_count { builder.append_null() }