polars-df 0.7.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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),*),