@@ -22,6 +22,7 @@ pub use list::*;
2222pub use primitive:: * ;
2323pub use utf8:: * ;
2424
25+ use crate :: chunked_array:: to_primitive;
2526use crate :: prelude:: * ;
2627use crate :: utils:: { get_iter_capacity, NoNull } ;
2728
@@ -46,13 +47,10 @@ where
4647 T : PolarsNumericType ,
4748{
4849 fn from_iter < I : IntoIterator < Item = ( Vec < T :: Native > , Option < Bitmap > ) > > ( iter : I ) -> Self {
49- let mut chunks = vec ! [ ] ;
50-
51- for ( values, opt_buffer) in iter {
52- chunks. push ( to_array :: < T > ( values, opt_buffer) )
53- }
54- // safety: same type
55- unsafe { ChunkedArray :: from_chunks ( "from_iter" , chunks) }
50+ let chunks = iter
51+ . into_iter ( )
52+ . map ( |( values, opt_buffer) | to_primitive :: < T > ( values, opt_buffer) ) ;
53+ ChunkedArray :: from_chunk_iter ( "from_iter" , chunks)
5654 }
5755}
5856
7270 T : PolarsNumericType ,
7371{
7472 fn from_slice ( name : & str , v : & [ T :: Native ] ) -> Self {
75- let arr = PrimitiveArray :: < T :: Native > :: from_slice ( v) . to ( T :: get_dtype ( ) . to_arrow ( ) ) ;
76- // safety: same type
77- unsafe { ChunkedArray :: from_chunks ( name, vec ! [ Box :: new( arr) ] ) }
73+ let arr = PrimitiveArray :: from_slice ( v) . to ( T :: get_dtype ( ) . to_arrow ( ) ) ;
74+ ChunkedArray :: from_chunk_iter ( name, [ arr] )
7875 }
7976
8077 fn from_slice_options ( name : & str , opt_v : & [ Option < T :: Native > ] ) -> Self {
@@ -131,13 +128,10 @@ where
131128{
132129 fn from_slice ( name : & str , v : & [ S ] ) -> Self {
133130 let values_size = v. iter ( ) . fold ( 0 , |acc, s| acc + s. as_ref ( ) . len ( ) ) ;
134-
135131 let mut builder = MutableUtf8Array :: < i64 > :: with_capacities ( v. len ( ) , values_size) ;
136132 builder. extend_trusted_len_values ( v. iter ( ) . map ( |s| s. as_ref ( ) ) ) ;
137-
138- let chunks = vec ! [ builder. as_box( ) ] ;
139- // safety: same type
140- unsafe { ChunkedArray :: from_chunks ( name, chunks) }
133+ let imm: Utf8Array < i64 > = builder. into ( ) ;
134+ ChunkedArray :: from_chunk_iter ( name, [ imm] )
141135 }
142136
143137 fn from_slice_options ( name : & str , opt_v : & [ Option < S > ] ) -> Self {
@@ -147,10 +141,8 @@ where
147141 } ) ;
148142 let mut builder = MutableUtf8Array :: < i64 > :: with_capacities ( opt_v. len ( ) , values_size) ;
149143 builder. extend_trusted_len ( opt_v. iter ( ) . map ( |s| s. as_ref ( ) ) ) ;
150-
151- let chunks = vec ! [ builder. as_box( ) ] ;
152- // safety: same type
153- unsafe { ChunkedArray :: from_chunks ( name, chunks) }
144+ let imm: Utf8Array < i64 > = builder. into ( ) ;
145+ ChunkedArray :: from_chunk_iter ( name, [ imm] )
154146 }
155147
156148 fn from_iter_options ( name : & str , it : impl Iterator < Item = Option < S > > ) -> Self {
@@ -175,13 +167,10 @@ where
175167{
176168 fn from_slice ( name : & str , v : & [ B ] ) -> Self {
177169 let values_size = v. iter ( ) . fold ( 0 , |acc, s| acc + s. as_ref ( ) . len ( ) ) ;
178-
179170 let mut builder = MutableBinaryArray :: < i64 > :: with_capacities ( v. len ( ) , values_size) ;
180171 builder. extend_trusted_len_values ( v. iter ( ) . map ( |s| s. as_ref ( ) ) ) ;
181-
182- let chunks = vec ! [ builder. as_box( ) ] ;
183- // safety: same type
184- unsafe { ChunkedArray :: from_chunks ( name, chunks) }
172+ let imm: BinaryArray < i64 > = builder. into ( ) ;
173+ ChunkedArray :: from_chunk_iter ( name, [ imm] )
185174 }
186175
187176 fn from_slice_options ( name : & str , opt_v : & [ Option < B > ] ) -> Self {
@@ -191,10 +180,8 @@ where
191180 } ) ;
192181 let mut builder = MutableBinaryArray :: < i64 > :: with_capacities ( opt_v. len ( ) , values_size) ;
193182 builder. extend_trusted_len ( opt_v. iter ( ) . map ( |s| s. as_ref ( ) ) ) ;
194-
195- let chunks = vec ! [ builder. as_box( ) ] ;
196- // safety: same type
197- unsafe { ChunkedArray :: from_chunks ( name, chunks) }
183+ let imm: BinaryArray < i64 > = builder. into ( ) ;
184+ ChunkedArray :: from_chunk_iter ( name, [ imm] )
198185 }
199186
200187 fn from_iter_options ( name : & str , it : impl Iterator < Item = Option < B > > ) -> Self {
@@ -233,7 +220,7 @@ mod test {
233220 let mut builder =
234221 ListPrimitiveChunkedBuilder :: < Int32Type > :: new ( "a" , 10 , 5 , DataType :: Int32 ) ;
235222
236- // create a series containing two chunks
223+ // Create a series containing two chunks.
237224 let mut s1 = Int32Chunked :: from_slice ( "a" , & [ 1 , 2 , 3 ] ) . into_series ( ) ;
238225 let s2 = Int32Chunked :: from_slice ( "b" , & [ 4 , 5 , 6 ] ) . into_series ( ) ;
239226 s1. append ( & s2) . unwrap ( ) ;
@@ -252,7 +239,8 @@ mod test {
252239 } else {
253240 panic ! ( )
254241 }
255- // test list collect
242+
243+ // Test list collect.
256244 let out = [ & s1, & s2] . iter ( ) . copied ( ) . collect :: < ListChunked > ( ) ;
257245 assert_eq ! ( out. get( 0 ) . unwrap( ) . len( ) , 6 ) ;
258246 assert_eq ! ( out. get( 1 ) . unwrap( ) . len( ) , 3 ) ;
0 commit comments