polars-df 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -0
  3. data/Cargo.lock +353 -237
  4. data/Cargo.toml +0 -3
  5. data/LICENSE.txt +1 -1
  6. data/README.md +2 -2
  7. data/ext/polars/Cargo.toml +17 -6
  8. data/ext/polars/src/batched_csv.rs +6 -7
  9. data/ext/polars/src/conversion/anyvalue.rs +185 -0
  10. data/ext/polars/src/conversion/chunked_array.rs +140 -0
  11. data/ext/polars/src/{conversion.rs → conversion/mod.rs} +268 -347
  12. data/ext/polars/src/dataframe.rs +96 -116
  13. data/ext/polars/src/expr/array.rs +74 -0
  14. data/ext/polars/src/expr/categorical.rs +8 -1
  15. data/ext/polars/src/expr/datetime.rs +22 -56
  16. data/ext/polars/src/expr/general.rs +124 -37
  17. data/ext/polars/src/expr/list.rs +52 -4
  18. data/ext/polars/src/expr/meta.rs +48 -0
  19. data/ext/polars/src/expr/rolling.rs +16 -10
  20. data/ext/polars/src/expr/string.rs +68 -17
  21. data/ext/polars/src/expr/struct.rs +8 -4
  22. data/ext/polars/src/functions/aggregation.rs +6 -0
  23. data/ext/polars/src/functions/lazy.rs +103 -48
  24. data/ext/polars/src/functions/meta.rs +45 -1
  25. data/ext/polars/src/functions/range.rs +5 -10
  26. data/ext/polars/src/functions/string_cache.rs +14 -0
  27. data/ext/polars/src/{lazyframe.rs → lazyframe/mod.rs} +166 -41
  28. data/ext/polars/src/lib.rs +245 -187
  29. data/ext/polars/src/map/dataframe.rs +1 -1
  30. data/ext/polars/src/map/mod.rs +2 -2
  31. data/ext/polars/src/map/series.rs +6 -6
  32. data/ext/polars/src/object.rs +0 -30
  33. data/ext/polars/src/on_startup.rs +32 -0
  34. data/ext/polars/src/series/aggregation.rs +23 -0
  35. data/ext/polars/src/series/construction.rs +1 -1
  36. data/ext/polars/src/series/export.rs +2 -2
  37. data/ext/polars/src/{series.rs → series/mod.rs} +45 -21
  38. data/ext/polars/src/series/{set_at_idx.rs → scatter.rs} +18 -18
  39. data/ext/polars/src/utils.rs +1 -1
  40. data/lib/polars/array_expr.rb +449 -0
  41. data/lib/polars/array_name_space.rb +346 -0
  42. data/lib/polars/cat_expr.rb +24 -0
  43. data/lib/polars/cat_name_space.rb +75 -0
  44. data/lib/polars/config.rb +2 -2
  45. data/lib/polars/data_frame.rb +248 -108
  46. data/lib/polars/data_types.rb +195 -29
  47. data/lib/polars/date_time_expr.rb +41 -24
  48. data/lib/polars/date_time_name_space.rb +12 -12
  49. data/lib/polars/exceptions.rb +12 -1
  50. data/lib/polars/expr.rb +1080 -195
  51. data/lib/polars/functions/aggregation/horizontal.rb +246 -0
  52. data/lib/polars/functions/aggregation/vertical.rb +282 -0
  53. data/lib/polars/functions/as_datatype.rb +248 -0
  54. data/lib/polars/functions/col.rb +47 -0
  55. data/lib/polars/functions/eager.rb +182 -0
  56. data/lib/polars/functions/lazy.rb +1280 -0
  57. data/lib/polars/functions/len.rb +49 -0
  58. data/lib/polars/functions/lit.rb +35 -0
  59. data/lib/polars/functions/random.rb +16 -0
  60. data/lib/polars/functions/range/date_range.rb +103 -0
  61. data/lib/polars/functions/range/int_range.rb +51 -0
  62. data/lib/polars/functions/repeat.rb +144 -0
  63. data/lib/polars/functions/whenthen.rb +27 -0
  64. data/lib/polars/functions.rb +29 -416
  65. data/lib/polars/group_by.rb +3 -3
  66. data/lib/polars/io.rb +21 -28
  67. data/lib/polars/lazy_frame.rb +390 -76
  68. data/lib/polars/list_expr.rb +152 -6
  69. data/lib/polars/list_name_space.rb +102 -0
  70. data/lib/polars/meta_expr.rb +175 -7
  71. data/lib/polars/series.rb +557 -59
  72. data/lib/polars/sql_context.rb +1 -1
  73. data/lib/polars/string_cache.rb +75 -0
  74. data/lib/polars/string_expr.rb +412 -96
  75. data/lib/polars/string_name_space.rb +4 -4
  76. data/lib/polars/struct_expr.rb +1 -1
  77. data/lib/polars/struct_name_space.rb +1 -1
  78. data/lib/polars/testing.rb +507 -0
  79. data/lib/polars/utils.rb +64 -20
  80. data/lib/polars/version.rb +1 -1
  81. data/lib/polars.rb +15 -2
  82. metadata +40 -9
  83. data/lib/polars/lazy_functions.rb +0 -1197
@@ -187,7 +187,7 @@ pub fn apply_lambda_with_utf8_out_type(
187
187
  lambda: Value,
188
188
  init_null_count: usize,
189
189
  first_value: Option<&str>,
190
- ) -> Utf8Chunked {
190
+ ) -> StringChunked {
191
191
  let skip = usize::from(first_value.is_some());
192
192
  if init_null_count == df.height() {
193
193
  ChunkedArray::full_null("apply", df.height())
@@ -198,11 +198,11 @@ fn iterator_to_utf8(
198
198
  first_value: Option<&str>,
199
199
  name: &str,
200
200
  capacity: usize,
201
- ) -> Utf8Chunked {
201
+ ) -> StringChunked {
202
202
  let first_value = first_value.map(|v| v.to_string());
203
203
 
204
204
  // safety: we know the iterators len
205
- let mut ca: Utf8Chunked = unsafe {
205
+ let mut ca: StringChunked = unsafe {
206
206
  if init_null_count > 0 {
207
207
  (0..init_null_count)
208
208
  .map(|_| None)
@@ -101,7 +101,7 @@ pub trait ApplyLambda<'a> {
101
101
  lambda: Value,
102
102
  init_null_count: usize,
103
103
  first_value: Option<&str>,
104
- ) -> RbResult<Utf8Chunked>;
104
+ ) -> RbResult<StringChunked>;
105
105
 
106
106
  /// Apply a lambda with list output type
107
107
  fn apply_lambda_with_list_out_type(
@@ -285,7 +285,7 @@ impl<'a> ApplyLambda<'a> for BooleanChunked {
285
285
  lambda: Value,
286
286
  init_null_count: usize,
287
287
  first_value: Option<&str>,
288
- ) -> RbResult<Utf8Chunked> {
288
+ ) -> RbResult<StringChunked> {
289
289
  let skip = usize::from(first_value.is_some());
290
290
  if init_null_count == self.len() {
291
291
  Ok(ChunkedArray::full_null(self.name(), self.len()))
@@ -562,7 +562,7 @@ where
562
562
  lambda: Value,
563
563
  init_null_count: usize,
564
564
  first_value: Option<&str>,
565
- ) -> RbResult<Utf8Chunked> {
565
+ ) -> RbResult<StringChunked> {
566
566
  let skip = usize::from(first_value.is_some());
567
567
  if init_null_count == self.len() {
568
568
  Ok(ChunkedArray::full_null(self.name(), self.len()))
@@ -705,7 +705,7 @@ where
705
705
  }
706
706
  }
707
707
 
708
- impl<'a> ApplyLambda<'a> for Utf8Chunked {
708
+ impl<'a> ApplyLambda<'a> for StringChunked {
709
709
  fn apply_lambda_unknown(&'a self, lambda: Value) -> RbResult<RbSeries> {
710
710
  let mut null_count = 0;
711
711
  for opt_v in self.into_iter() {
@@ -834,7 +834,7 @@ impl<'a> ApplyLambda<'a> for Utf8Chunked {
834
834
  lambda: Value,
835
835
  init_null_count: usize,
836
836
  first_value: Option<&str>,
837
- ) -> RbResult<Utf8Chunked> {
837
+ ) -> RbResult<StringChunked> {
838
838
  let skip = usize::from(first_value.is_some());
839
839
  if init_null_count == self.len() {
840
840
  Ok(ChunkedArray::full_null(self.name(), self.len()))
@@ -1079,7 +1079,7 @@ impl<'a> ApplyLambda<'a> for StructChunked {
1079
1079
  lambda: Value,
1080
1080
  init_null_count: usize,
1081
1081
  first_value: Option<&str>,
1082
- ) -> RbResult<Utf8Chunked> {
1082
+ ) -> RbResult<StringChunked> {
1083
1083
  let names = self.fields().iter().map(|s| s.name()).collect::<Vec<_>>();
1084
1084
 
1085
1085
  let skip = usize::from(first_value.is_some());
@@ -1,31 +1 @@
1
- use std::any::Any;
2
- use std::sync::Arc;
3
-
4
- use magnus::IntoValue;
5
- use polars_core::chunked_array::object::builder::ObjectChunkedBuilder;
6
- use polars_core::chunked_array::object::registry;
7
- use polars_core::chunked_array::object::registry::AnonymousObjectBuilder;
8
- use polars_core::prelude::AnyValue;
9
-
10
- use crate::prelude::ObjectValue;
11
- use crate::Wrap;
12
-
13
1
  pub(crate) const OBJECT_NAME: &str = "object";
14
-
15
- pub(crate) fn register_object_builder() {
16
- if !registry::is_object_builder_registered() {
17
- let object_builder = Box::new(|name: &str, capacity: usize| {
18
- Box::new(ObjectChunkedBuilder::<ObjectValue>::new(name, capacity))
19
- as Box<dyn AnonymousObjectBuilder>
20
- });
21
-
22
- let object_converter = Arc::new(|av: AnyValue| {
23
- let object = ObjectValue {
24
- inner: Wrap(av).into_value().into(),
25
- };
26
- Box::new(object) as Box<dyn Any>
27
- });
28
-
29
- registry::register_object_builder(object_builder, object_converter)
30
- }
31
- }
@@ -0,0 +1,32 @@
1
+ use std::any::Any;
2
+ use std::sync::Arc;
3
+
4
+ use magnus::IntoValue;
5
+ use polars::prelude::*;
6
+ use polars_core::chunked_array::object::builder::ObjectChunkedBuilder;
7
+ use polars_core::chunked_array::object::registry;
8
+ use polars_core::chunked_array::object::registry::AnonymousObjectBuilder;
9
+ use polars_core::prelude::AnyValue;
10
+
11
+ use crate::prelude::ObjectValue;
12
+ use crate::Wrap;
13
+
14
+ pub(crate) fn register_object_builder() {
15
+ if !registry::is_object_builder_registered() {
16
+ let object_builder = Box::new(|name: &str, capacity: usize| {
17
+ Box::new(ObjectChunkedBuilder::<ObjectValue>::new(name, capacity))
18
+ as Box<dyn AnonymousObjectBuilder>
19
+ });
20
+
21
+ let object_converter = Arc::new(|av: AnyValue| {
22
+ let object = ObjectValue {
23
+ inner: Wrap(av).into_value().into(),
24
+ };
25
+ Box::new(object) as Box<dyn Any>
26
+ });
27
+
28
+ let object_size = std::mem::size_of::<ObjectValue>();
29
+ let physical_dtype = ArrowDataType::FixedSizeBinary(object_size);
30
+ registry::register_object_builder(object_builder, object_converter, physical_dtype)
31
+ }
32
+ }
@@ -4,6 +4,26 @@ use crate::{RbResult, RbSeries, RbValueError};
4
4
  use magnus::{IntoValue, Value};
5
5
 
6
6
  impl RbSeries {
7
+ pub fn any(&self, ignore_nulls: bool) -> RbResult<Option<bool>> {
8
+ let binding = self.series.borrow();
9
+ let s = binding.bool().map_err(RbPolarsErr::from)?;
10
+ Ok(if ignore_nulls {
11
+ Some(s.any())
12
+ } else {
13
+ s.any_kleene()
14
+ })
15
+ }
16
+
17
+ pub fn all(&self, ignore_nulls: bool) -> RbResult<Option<bool>> {
18
+ let binding = self.series.borrow();
19
+ let s = binding.bool().map_err(RbPolarsErr::from)?;
20
+ Ok(if ignore_nulls {
21
+ Some(s.all())
22
+ } else {
23
+ s.all_kleene()
24
+ })
25
+ }
26
+
7
27
  pub fn arg_max(&self) -> Option<usize> {
8
28
  self.series.borrow().arg_max()
9
29
  }
@@ -17,6 +37,7 @@ impl RbSeries {
17
37
  self.series
18
38
  .borrow()
19
39
  .max_as_series()
40
+ .map_err(RbPolarsErr::from)?
20
41
  .get(0)
21
42
  .map_err(RbPolarsErr::from)?,
22
43
  )
@@ -48,6 +69,7 @@ impl RbSeries {
48
69
  self.series
49
70
  .borrow()
50
71
  .min_as_series()
72
+ .map_err(RbPolarsErr::from)?
51
73
  .get(0)
52
74
  .map_err(RbPolarsErr::from)?,
53
75
  )
@@ -75,6 +97,7 @@ impl RbSeries {
75
97
  self.series
76
98
  .borrow()
77
99
  .sum_as_series()
100
+ .map_err(RbPolarsErr::from)?
78
101
  .get(0)
79
102
  .map_err(RbPolarsErr::from)?,
80
103
  )
@@ -106,7 +106,7 @@ impl RbSeries {
106
106
  Ok(s.into())
107
107
  }
108
108
 
109
- pub fn new_str(name: String, val: Wrap<Utf8Chunked>, _strict: bool) -> Self {
109
+ pub fn new_str(name: String, val: Wrap<StringChunked>, _strict: bool) -> Self {
110
110
  let mut s = val.0.into_series();
111
111
  s.rename(&name);
112
112
  RbSeries::new(s)
@@ -9,8 +9,8 @@ impl RbSeries {
9
9
  pub fn to_numo(&self) -> RbResult<Value> {
10
10
  let s = &self.series.borrow();
11
11
  match s.dtype() {
12
- DataType::Utf8 => {
13
- let ca = s.utf8().unwrap();
12
+ DataType::String => {
13
+ let ca = s.str().unwrap();
14
14
 
15
15
  // TODO make more efficient
16
16
  let np_arr = RArray::from_iter(ca);
@@ -3,7 +3,7 @@ mod arithmetic;
3
3
  mod comparison;
4
4
  mod construction;
5
5
  mod export;
6
- mod set_at_idx;
6
+ mod scatter;
7
7
 
8
8
  use magnus::{exception, prelude::*, value::qnil, Error, IntoValue, RArray, Value};
9
9
  use polars::prelude::*;
@@ -74,13 +74,31 @@ impl RbSeries {
74
74
  }
75
75
  }
76
76
 
77
+ pub fn cat_uses_lexical_ordering(&self) -> RbResult<bool> {
78
+ let binding = self.series.borrow();
79
+ let ca = binding.categorical().map_err(RbPolarsErr::from)?;
80
+ Ok(ca.uses_lexical_ordering())
81
+ }
82
+
83
+ pub fn cat_is_local(&self) -> RbResult<bool> {
84
+ let binding = self.series.borrow();
85
+ let ca = binding.categorical().map_err(RbPolarsErr::from)?;
86
+ Ok(ca.get_rev_map().is_local())
87
+ }
88
+
89
+ pub fn cat_to_local(&self) -> RbResult<Self> {
90
+ let binding = self.series.borrow();
91
+ let ca = binding.categorical().map_err(RbPolarsErr::from)?;
92
+ Ok(ca.to_local().into_series().into())
93
+ }
94
+
77
95
  pub fn estimated_size(&self) -> usize {
78
96
  self.series.borrow().estimated_size()
79
97
  }
80
98
 
81
99
  pub fn get_fmt(&self, index: usize, str_lengths: usize) -> String {
82
100
  let val = format!("{}", self.series.borrow().get(index).unwrap());
83
- if let DataType::Utf8 | DataType::Categorical(_) = self.series.borrow().dtype() {
101
+ if let DataType::String | DataType::Categorical(_, _) = self.series.borrow().dtype() {
84
102
  let v_trunc = &val[..val
85
103
  .char_indices()
86
104
  .take(str_lengths)
@@ -90,7 +108,7 @@ impl RbSeries {
90
108
  if val == v_trunc {
91
109
  val
92
110
  } else {
93
- format!("{}...", v_trunc)
111
+ format!("{}", v_trunc)
94
112
  }
95
113
  } else {
96
114
  val
@@ -215,8 +233,8 @@ impl RbSeries {
215
233
  }
216
234
  }
217
235
 
218
- pub fn sort(&self, reverse: bool) -> Self {
219
- (self.series.borrow_mut().sort(reverse)).into()
236
+ pub fn sort(&self, descending: bool, nulls_last: bool) -> Self {
237
+ (self.series.borrow_mut().sort(descending, nulls_last)).into()
220
238
  }
221
239
 
222
240
  pub fn value_counts(&self, sorted: bool) -> RbResult<RbDataFrame> {
@@ -273,15 +291,13 @@ impl RbSeries {
273
291
  Ok(s.into())
274
292
  }
275
293
 
276
- pub fn series_equal(&self, other: &RbSeries, null_equal: bool, strict: bool) -> bool {
294
+ pub fn equals(&self, other: &RbSeries, null_equal: bool, strict: bool) -> bool {
277
295
  if strict {
278
296
  self.series.borrow().eq(&other.series.borrow())
279
297
  } else if null_equal {
280
- self.series
281
- .borrow()
282
- .series_equal_missing(&other.series.borrow())
298
+ self.series.borrow().equals_missing(&other.series.borrow())
283
299
  } else {
284
- self.series.borrow().series_equal(&other.series.borrow())
300
+ self.series.borrow().equals(&other.series.borrow())
285
301
  }
286
302
  }
287
303
 
@@ -315,10 +331,10 @@ impl RbSeries {
315
331
  DataType::Int64 => RArray::from_iter(series.i64().unwrap()).into_value(),
316
332
  DataType::Float32 => RArray::from_iter(series.f32().unwrap()).into_value(),
317
333
  DataType::Float64 => RArray::from_iter(series.f64().unwrap()).into_value(),
318
- DataType::Categorical(_) => {
334
+ DataType::Categorical(_, _) | DataType::Enum(_, _) => {
319
335
  RArray::from_iter(series.categorical().unwrap().iter_str()).into_value()
320
336
  }
321
- DataType::Object(_) => {
337
+ DataType::Object(_, _) => {
322
338
  let v = RArray::with_capacity(series.len());
323
339
  for i in 0..series.len() {
324
340
  let obj: Option<&ObjectValue> = series.get_object(i).map(|any| any.into());
@@ -377,8 +393,8 @@ impl RbSeries {
377
393
  let ca = series.decimal().unwrap();
378
394
  return Wrap(ca).into_value();
379
395
  }
380
- DataType::Utf8 => {
381
- let ca = series.utf8().unwrap();
396
+ DataType::String => {
397
+ let ca = series.str().unwrap();
382
398
  return Wrap(ca).into_value();
383
399
  }
384
400
  DataType::Struct(_) => {
@@ -417,7 +433,10 @@ impl RbSeries {
417
433
  RArray::from_iter(NullIter { iter, n }).into_value()
418
434
  }
419
435
  DataType::Unknown => {
420
- panic!("to_a not implemented for null/unknown")
436
+ panic!("to_a not implemented for unknown")
437
+ }
438
+ DataType::BinaryOffset => {
439
+ unreachable!()
421
440
  }
422
441
  };
423
442
  rblist
@@ -442,7 +461,7 @@ impl RbSeries {
442
461
 
443
462
  macro_rules! dispatch_apply {
444
463
  ($self:expr, $method:ident, $($args:expr),*) => {
445
- if matches!($self.dtype(), DataType::Object(_)) {
464
+ if matches!($self.dtype(), DataType::Object(_, _)) {
446
465
  // let ca = $self.0.unpack::<ObjectType<ObjectValue>>().unwrap();
447
466
  // ca.$method($($args),*)
448
467
  todo!()
@@ -463,7 +482,7 @@ impl RbSeries {
463
482
  DataType::Datetime(_, _)
464
483
  | DataType::Date
465
484
  | DataType::Duration(_)
466
- | DataType::Categorical(_)
485
+ | DataType::Categorical(_, _)
467
486
  | DataType::Time
468
487
  ) || !skip_nulls
469
488
  {
@@ -604,12 +623,12 @@ impl RbSeries {
604
623
  )?;
605
624
  ca.into_datetime(tu, tz).into_series()
606
625
  }
607
- Some(DataType::Utf8) => {
626
+ Some(DataType::String) => {
608
627
  let ca = dispatch_apply!(series, apply_lambda_with_utf8_out_type, lambda, 0, None)?;
609
628
 
610
629
  ca.into_series()
611
630
  }
612
- Some(DataType::Object(_)) => {
631
+ Some(DataType::Object(_, _)) => {
613
632
  let ca =
614
633
  dispatch_apply!(series, apply_lambda_with_object_out_type, lambda, 0, None)?;
615
634
  ca.into_series()
@@ -656,8 +675,13 @@ impl RbSeries {
656
675
  self.series.borrow_mut().shrink_to_fit();
657
676
  }
658
677
 
659
- pub fn dot(&self, other: &RbSeries) -> Option<f64> {
660
- self.series.borrow().dot(&other.series.borrow())
678
+ pub fn dot(&self, other: &RbSeries) -> RbResult<f64> {
679
+ let out = self
680
+ .series
681
+ .borrow()
682
+ .dot(&other.series.borrow())
683
+ .map_err(RbPolarsErr::from)?;
684
+ Ok(out)
661
685
  }
662
686
 
663
687
  pub fn skew(&self, bias: bool) -> RbResult<Option<f64>> {
@@ -5,9 +5,9 @@ use crate::error::RbPolarsErr;
5
5
  use crate::{RbResult, RbSeries};
6
6
 
7
7
  impl RbSeries {
8
- pub fn set_at_idx(&self, idx: &RbSeries, values: &RbSeries) -> RbResult<()> {
8
+ pub fn scatter(&self, idx: &RbSeries, values: &RbSeries) -> RbResult<()> {
9
9
  let mut s = self.series.borrow_mut();
10
- match set_at_idx(s.clone(), &idx.series.borrow(), &values.series.borrow()) {
10
+ match scatter(s.clone(), &idx.series.borrow(), &values.series.borrow()) {
11
11
  Ok(out) => {
12
12
  *s = out;
13
13
  Ok(())
@@ -17,7 +17,7 @@ impl RbSeries {
17
17
  }
18
18
  }
19
19
 
20
- fn set_at_idx(mut s: Series, idx: &Series, values: &Series) -> PolarsResult<Series> {
20
+ fn scatter(mut s: Series, idx: &Series, values: &Series) -> PolarsResult<Series> {
21
21
  let logical_dtype = s.dtype().clone();
22
22
  let idx = idx.cast(&IDX_DTYPE)?;
23
23
  let idx = idx.rechunk();
@@ -43,62 +43,62 @@ fn set_at_idx(mut s: Series, idx: &Series, values: &Series) -> PolarsResult<Seri
43
43
  DataType::Int8 => {
44
44
  let ca: &mut ChunkedArray<Int8Type> = mutable_s.as_mut();
45
45
  let values = values.i8()?;
46
- std::mem::take(ca).set_at_idx2(idx, values)
46
+ std::mem::take(ca).scatter(idx, values)
47
47
  }
48
48
  DataType::Int16 => {
49
49
  let ca: &mut ChunkedArray<Int16Type> = mutable_s.as_mut();
50
50
  let values = values.i16()?;
51
- std::mem::take(ca).set_at_idx2(idx, values)
51
+ std::mem::take(ca).scatter(idx, values)
52
52
  }
53
53
  DataType::Int32 => {
54
54
  let ca: &mut ChunkedArray<Int32Type> = mutable_s.as_mut();
55
55
  let values = values.i32()?;
56
- std::mem::take(ca).set_at_idx2(idx, values)
56
+ std::mem::take(ca).scatter(idx, values)
57
57
  }
58
58
  DataType::Int64 => {
59
59
  let ca: &mut ChunkedArray<Int64Type> = mutable_s.as_mut();
60
60
  let values = values.i64()?;
61
- std::mem::take(ca).set_at_idx2(idx, values)
61
+ std::mem::take(ca).scatter(idx, values)
62
62
  }
63
63
  DataType::UInt8 => {
64
64
  let ca: &mut ChunkedArray<UInt8Type> = mutable_s.as_mut();
65
65
  let values = values.u8()?;
66
- std::mem::take(ca).set_at_idx2(idx, values)
66
+ std::mem::take(ca).scatter(idx, values)
67
67
  }
68
68
  DataType::UInt16 => {
69
69
  let ca: &mut ChunkedArray<UInt16Type> = mutable_s.as_mut();
70
70
  let values = values.u16()?;
71
- std::mem::take(ca).set_at_idx2(idx, values)
71
+ std::mem::take(ca).scatter(idx, values)
72
72
  }
73
73
  DataType::UInt32 => {
74
74
  let ca: &mut ChunkedArray<UInt32Type> = mutable_s.as_mut();
75
75
  let values = values.u32()?;
76
- std::mem::take(ca).set_at_idx2(idx, values)
76
+ std::mem::take(ca).scatter(idx, values)
77
77
  }
78
78
  DataType::UInt64 => {
79
79
  let ca: &mut ChunkedArray<UInt64Type> = mutable_s.as_mut();
80
80
  let values = values.u64()?;
81
- std::mem::take(ca).set_at_idx2(idx, values)
81
+ std::mem::take(ca).scatter(idx, values)
82
82
  }
83
83
  DataType::Float32 => {
84
84
  let ca: &mut ChunkedArray<Float32Type> = mutable_s.as_mut();
85
85
  let values = values.f32()?;
86
- std::mem::take(ca).set_at_idx2(idx, values)
86
+ std::mem::take(ca).scatter(idx, values)
87
87
  }
88
88
  DataType::Float64 => {
89
89
  let ca: &mut ChunkedArray<Float64Type> = mutable_s.as_mut();
90
90
  let values = values.f64()?;
91
- std::mem::take(ca).set_at_idx2(idx, values)
91
+ std::mem::take(ca).scatter(idx, values)
92
92
  }
93
93
  DataType::Boolean => {
94
94
  let ca = s.bool()?;
95
95
  let values = values.bool()?;
96
- ca.set_at_idx2(idx, values)
96
+ ca.scatter(idx, values)
97
97
  }
98
- DataType::Utf8 => {
99
- let ca = s.utf8()?;
100
- let values = values.utf8()?;
101
- ca.set_at_idx2(idx, values)
98
+ DataType::String => {
99
+ let ca = s.str()?;
100
+ let values = values.str()?;
101
+ ca.scatter(idx, values)
102
102
  }
103
103
  _ => panic!("not yet implemented for dtype: {}", logical_dtype),
104
104
  };
@@ -23,7 +23,7 @@ macro_rules! apply_method_all_arrow_series2 {
23
23
  ($self:expr, $method:ident, $($args:expr),*) => {
24
24
  match $self.dtype() {
25
25
  DataType::Boolean => $self.bool().unwrap().$method($($args),*),
26
- DataType::Utf8 => $self.utf8().unwrap().$method($($args),*),
26
+ DataType::String => $self.str().unwrap().$method($($args),*),
27
27
  DataType::UInt8 => $self.u8().unwrap().$method($($args),*),
28
28
  DataType::UInt16 => $self.u16().unwrap().$method($($args),*),
29
29
  DataType::UInt32 => $self.u32().unwrap().$method($($args),*),