polars-df 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Cargo.lock +290 -137
- data/Cargo.toml +1 -1
- data/ext/polars/Cargo.toml +5 -4
- data/ext/polars/src/apply/dataframe.rs +6 -6
- data/ext/polars/src/apply/series.rs +10 -10
- data/ext/polars/src/batched_csv.rs +6 -4
- data/ext/polars/src/conversion.rs +40 -13
- data/ext/polars/src/dataframe.rs +45 -43
- data/ext/polars/src/error.rs +8 -8
- data/ext/polars/src/file.rs +5 -4
- data/ext/polars/src/lazy/apply.rs +1 -1
- data/ext/polars/src/lazy/dataframe.rs +12 -6
- data/ext/polars/src/lazy/dsl.rs +99 -45
- data/ext/polars/src/lazy/meta.rs +10 -9
- data/ext/polars/src/lib.rs +28 -29
- data/ext/polars/src/object.rs +2 -1
- data/ext/polars/src/series.rs +23 -21
- data/lib/polars/cat_expr.rb +0 -4
- data/lib/polars/cat_name_space.rb +0 -4
- data/lib/polars/convert.rb +0 -7
- data/lib/polars/data_frame.rb +139 -204
- data/lib/polars/date_time_expr.rb +19 -151
- data/lib/polars/date_time_name_space.rb +17 -17
- data/lib/polars/expr.rb +68 -315
- data/lib/polars/group_by.rb +68 -51
- data/lib/polars/io.rb +1 -1
- data/lib/polars/lazy_frame.rb +1 -103
- data/lib/polars/lazy_functions.rb +0 -26
- data/lib/polars/lazy_group_by.rb +0 -8
- data/lib/polars/list_expr.rb +5 -27
- data/lib/polars/list_name_space.rb +5 -8
- data/lib/polars/series.rb +20 -16
- data/lib/polars/string_expr.rb +20 -76
- data/lib/polars/string_name_space.rb +5 -15
- data/lib/polars/struct_expr.rb +0 -2
- data/lib/polars/version.rb +1 -1
- metadata +3 -3
data/ext/polars/src/lazy/dsl.rs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
use magnus::block::Proc;
|
2
|
-
use magnus::{class, RArray, RString, Value};
|
2
|
+
use magnus::{class, IntoValue, RArray, RString, Value};
|
3
3
|
use polars::chunked_array::ops::SortOptions;
|
4
4
|
use polars::lazy::dsl;
|
5
5
|
use polars::lazy::dsl::Operator;
|
@@ -214,6 +214,7 @@ impl RbExpr {
|
|
214
214
|
.sort_with(SortOptions {
|
215
215
|
descending,
|
216
216
|
nulls_last,
|
217
|
+
multithreaded: true,
|
217
218
|
})
|
218
219
|
.into()
|
219
220
|
}
|
@@ -224,6 +225,7 @@ impl RbExpr {
|
|
224
225
|
.arg_sort(SortOptions {
|
225
226
|
descending: reverse,
|
226
227
|
nulls_last,
|
228
|
+
multithreaded: true,
|
227
229
|
})
|
228
230
|
.into()
|
229
231
|
}
|
@@ -240,10 +242,10 @@ impl RbExpr {
|
|
240
242
|
self.clone().inner.arg_min().into()
|
241
243
|
}
|
242
244
|
|
243
|
-
pub fn search_sorted(&self, element: &RbExpr) -> Self {
|
245
|
+
pub fn search_sorted(&self, element: &RbExpr, side: Wrap<SearchSortedSide>) -> Self {
|
244
246
|
self.inner
|
245
247
|
.clone()
|
246
|
-
.search_sorted(element.inner.clone())
|
248
|
+
.search_sorted(element.inner.clone(), side.0)
|
247
249
|
.into()
|
248
250
|
}
|
249
251
|
|
@@ -287,7 +289,10 @@ impl RbExpr {
|
|
287
289
|
Ok(self
|
288
290
|
.inner
|
289
291
|
.clone()
|
290
|
-
.apply(
|
292
|
+
.apply(
|
293
|
+
move |s| s.fill_null(strat).map(Some),
|
294
|
+
GetOutput::same_type(),
|
295
|
+
)
|
291
296
|
.with_fmt("fill_null_with_strategy")
|
292
297
|
.into())
|
293
298
|
}
|
@@ -335,7 +340,10 @@ impl RbExpr {
|
|
335
340
|
pub fn take_every(&self, n: usize) -> Self {
|
336
341
|
self.clone()
|
337
342
|
.inner
|
338
|
-
.map(
|
343
|
+
.map(
|
344
|
+
move |s: Series| Ok(Some(s.take_every(n))),
|
345
|
+
GetOutput::same_type(),
|
346
|
+
)
|
339
347
|
.with_fmt("take_every")
|
340
348
|
.into()
|
341
349
|
}
|
@@ -365,7 +373,7 @@ impl RbExpr {
|
|
365
373
|
pub fn rechunk(&self) -> Self {
|
366
374
|
self.inner
|
367
375
|
.clone()
|
368
|
-
.map(|s| Ok(s.rechunk()), GetOutput::same_type())
|
376
|
+
.map(|s| Ok(Some(s.rechunk())), GetOutput::same_type())
|
369
377
|
.into()
|
370
378
|
}
|
371
379
|
|
@@ -527,6 +535,7 @@ impl RbExpr {
|
|
527
535
|
exact,
|
528
536
|
cache,
|
529
537
|
tz_aware: false,
|
538
|
+
utc: false,
|
530
539
|
})
|
531
540
|
.into()
|
532
541
|
}
|
@@ -538,6 +547,7 @@ impl RbExpr {
|
|
538
547
|
exact: bool,
|
539
548
|
cache: bool,
|
540
549
|
tz_aware: bool,
|
550
|
+
utc: bool,
|
541
551
|
) -> Self {
|
542
552
|
let tu = match fmt {
|
543
553
|
Some(ref fmt) => {
|
@@ -565,6 +575,7 @@ impl RbExpr {
|
|
565
575
|
exact,
|
566
576
|
cache,
|
567
577
|
tz_aware,
|
578
|
+
utc,
|
568
579
|
})
|
569
580
|
.into()
|
570
581
|
}
|
@@ -586,26 +597,27 @@ impl RbExpr {
|
|
586
597
|
exact,
|
587
598
|
cache,
|
588
599
|
tz_aware: false,
|
600
|
+
utc: false,
|
589
601
|
})
|
590
602
|
.into()
|
591
603
|
}
|
592
604
|
|
593
|
-
pub fn str_strip(&self, matches: Option<
|
605
|
+
pub fn str_strip(&self, matches: Option<String>) -> Self {
|
594
606
|
self.inner.clone().str().strip(matches).into()
|
595
607
|
}
|
596
608
|
|
597
|
-
pub fn str_rstrip(&self, matches: Option<
|
609
|
+
pub fn str_rstrip(&self, matches: Option<String>) -> Self {
|
598
610
|
self.inner.clone().str().rstrip(matches).into()
|
599
611
|
}
|
600
612
|
|
601
|
-
pub fn str_lstrip(&self, matches: Option<
|
613
|
+
pub fn str_lstrip(&self, matches: Option<String>) -> Self {
|
602
614
|
self.inner.clone().str().lstrip(matches).into()
|
603
615
|
}
|
604
616
|
|
605
617
|
pub fn str_slice(&self, start: i64, length: Option<u64>) -> Self {
|
606
618
|
let function = move |s: Series| {
|
607
619
|
let ca = s.utf8()?;
|
608
|
-
Ok(ca.str_slice(start, length)?.into_series())
|
620
|
+
Ok(Some(ca.str_slice(start, length)?.into_series()))
|
609
621
|
};
|
610
622
|
self.clone()
|
611
623
|
.inner
|
@@ -625,7 +637,7 @@ impl RbExpr {
|
|
625
637
|
pub fn str_lengths(&self) -> Self {
|
626
638
|
let function = |s: Series| {
|
627
639
|
let ca = s.utf8()?;
|
628
|
-
Ok(ca.str_lengths().into_series())
|
640
|
+
Ok(Some(ca.str_lengths().into_series()))
|
629
641
|
};
|
630
642
|
self.clone()
|
631
643
|
.inner
|
@@ -637,7 +649,7 @@ impl RbExpr {
|
|
637
649
|
pub fn str_n_chars(&self) -> Self {
|
638
650
|
let function = |s: Series| {
|
639
651
|
let ca = s.utf8()?;
|
640
|
-
Ok(ca.str_n_chars().into_series())
|
652
|
+
Ok(Some(ca.str_n_chars().into_series()))
|
641
653
|
};
|
642
654
|
self.clone()
|
643
655
|
.inner
|
@@ -674,37 +686,51 @@ impl RbExpr {
|
|
674
686
|
self.clone().inner.str().rjust(width, fillchar).into()
|
675
687
|
}
|
676
688
|
|
677
|
-
pub fn str_contains(&self, pat:
|
689
|
+
pub fn str_contains(&self, pat: &RbExpr, literal: Option<bool>, strict: bool) -> Self {
|
678
690
|
match literal {
|
679
|
-
Some(true) => self
|
680
|
-
|
691
|
+
Some(true) => self
|
692
|
+
.inner
|
693
|
+
.clone()
|
694
|
+
.str()
|
695
|
+
.contains_literal(pat.inner.clone())
|
696
|
+
.into(),
|
697
|
+
_ => self
|
698
|
+
.inner
|
699
|
+
.clone()
|
700
|
+
.str()
|
701
|
+
.contains(pat.inner.clone(), strict)
|
702
|
+
.into(),
|
681
703
|
}
|
682
704
|
}
|
683
705
|
|
684
|
-
pub fn str_ends_with(&self, sub:
|
685
|
-
self.inner.clone().str().ends_with(sub).into()
|
706
|
+
pub fn str_ends_with(&self, sub: &RbExpr) -> Self {
|
707
|
+
self.inner.clone().str().ends_with(sub.inner.clone()).into()
|
686
708
|
}
|
687
709
|
|
688
|
-
pub fn str_starts_with(&self, sub:
|
689
|
-
self.inner
|
710
|
+
pub fn str_starts_with(&self, sub: &RbExpr) -> Self {
|
711
|
+
self.inner
|
712
|
+
.clone()
|
713
|
+
.str()
|
714
|
+
.starts_with(sub.inner.clone())
|
715
|
+
.into()
|
690
716
|
}
|
691
717
|
|
692
718
|
pub fn str_hex_encode(&self) -> Self {
|
693
719
|
self.clone()
|
694
720
|
.inner
|
695
721
|
.map(
|
696
|
-
move |s| s.utf8().map(|s| s.hex_encode().into_series()),
|
722
|
+
move |s| s.utf8().map(|s| Some(s.hex_encode().into_series())),
|
697
723
|
GetOutput::same_type(),
|
698
724
|
)
|
699
725
|
.with_fmt("str.hex_encode")
|
700
726
|
.into()
|
701
727
|
}
|
702
728
|
|
703
|
-
pub fn str_hex_decode(&self, strict:
|
729
|
+
pub fn str_hex_decode(&self, strict: bool) -> Self {
|
704
730
|
self.clone()
|
705
731
|
.inner
|
706
732
|
.map(
|
707
|
-
move |s| s.utf8()?.hex_decode(strict).map(|s| s.into_series()),
|
733
|
+
move |s| s.utf8()?.hex_decode(strict).map(|s| Some(s.into_series())),
|
708
734
|
GetOutput::same_type(),
|
709
735
|
)
|
710
736
|
.with_fmt("str.hex_decode")
|
@@ -715,18 +741,22 @@ impl RbExpr {
|
|
715
741
|
self.clone()
|
716
742
|
.inner
|
717
743
|
.map(
|
718
|
-
move |s| s.utf8().map(|s| s.base64_encode().into_series()),
|
744
|
+
move |s| s.utf8().map(|s| Some(s.base64_encode().into_series())),
|
719
745
|
GetOutput::same_type(),
|
720
746
|
)
|
721
747
|
.with_fmt("str.base64_encode")
|
722
748
|
.into()
|
723
749
|
}
|
724
750
|
|
725
|
-
pub fn str_base64_decode(&self, strict:
|
751
|
+
pub fn str_base64_decode(&self, strict: bool) -> Self {
|
726
752
|
self.clone()
|
727
753
|
.inner
|
728
754
|
.map(
|
729
|
-
move |s|
|
755
|
+
move |s| {
|
756
|
+
s.utf8()?
|
757
|
+
.base64_decode(strict)
|
758
|
+
.map(|s| Some(s.into_series()))
|
759
|
+
},
|
730
760
|
GetOutput::same_type(),
|
731
761
|
)
|
732
762
|
.with_fmt("str.base64_decode")
|
@@ -737,7 +767,7 @@ impl RbExpr {
|
|
737
767
|
let function = move |s: Series| {
|
738
768
|
let ca = s.utf8()?;
|
739
769
|
match ca.json_path_match(&pat) {
|
740
|
-
Ok(ca) => Ok(ca.into_series()),
|
770
|
+
Ok(ca) => Ok(Some(ca.into_series())),
|
741
771
|
Err(e) => Err(PolarsError::ComputeError(format!("{:?}", e).into())),
|
742
772
|
}
|
743
773
|
};
|
@@ -864,7 +894,7 @@ impl RbExpr {
|
|
864
894
|
self.inner
|
865
895
|
.clone()
|
866
896
|
.map(
|
867
|
-
|s| Ok(s.duration()?.days().into_series()),
|
897
|
+
|s| Ok(Some(s.duration()?.days().into_series())),
|
868
898
|
GetOutput::from_type(DataType::Int64),
|
869
899
|
)
|
870
900
|
.into()
|
@@ -874,7 +904,7 @@ impl RbExpr {
|
|
874
904
|
self.inner
|
875
905
|
.clone()
|
876
906
|
.map(
|
877
|
-
|s| Ok(s.duration()?.hours().into_series()),
|
907
|
+
|s| Ok(Some(s.duration()?.hours().into_series())),
|
878
908
|
GetOutput::from_type(DataType::Int64),
|
879
909
|
)
|
880
910
|
.into()
|
@@ -884,7 +914,7 @@ impl RbExpr {
|
|
884
914
|
self.inner
|
885
915
|
.clone()
|
886
916
|
.map(
|
887
|
-
|s| Ok(s.duration()?.minutes().into_series()),
|
917
|
+
|s| Ok(Some(s.duration()?.minutes().into_series())),
|
888
918
|
GetOutput::from_type(DataType::Int64),
|
889
919
|
)
|
890
920
|
.into()
|
@@ -894,7 +924,7 @@ impl RbExpr {
|
|
894
924
|
self.inner
|
895
925
|
.clone()
|
896
926
|
.map(
|
897
|
-
|s| Ok(s.duration()?.seconds().into_series()),
|
927
|
+
|s| Ok(Some(s.duration()?.seconds().into_series())),
|
898
928
|
GetOutput::from_type(DataType::Int64),
|
899
929
|
)
|
900
930
|
.into()
|
@@ -904,7 +934,7 @@ impl RbExpr {
|
|
904
934
|
self.inner
|
905
935
|
.clone()
|
906
936
|
.map(
|
907
|
-
|s| Ok(s.duration()?.nanoseconds().into_series()),
|
937
|
+
|s| Ok(Some(s.duration()?.nanoseconds().into_series())),
|
908
938
|
GetOutput::from_type(DataType::Int64),
|
909
939
|
)
|
910
940
|
.into()
|
@@ -914,7 +944,7 @@ impl RbExpr {
|
|
914
944
|
self.inner
|
915
945
|
.clone()
|
916
946
|
.map(
|
917
|
-
|s| Ok(s.duration()?.microseconds().into_series()),
|
947
|
+
|s| Ok(Some(s.duration()?.microseconds().into_series())),
|
918
948
|
GetOutput::from_type(DataType::Int64),
|
919
949
|
)
|
920
950
|
.into()
|
@@ -924,7 +954,7 @@ impl RbExpr {
|
|
924
954
|
self.inner
|
925
955
|
.clone()
|
926
956
|
.map(
|
927
|
-
|s| Ok(s.duration()?.milliseconds().into_series()),
|
957
|
+
|s| Ok(Some(s.duration()?.milliseconds().into_series())),
|
928
958
|
GetOutput::from_type(DataType::Int64),
|
929
959
|
)
|
930
960
|
.into()
|
@@ -945,7 +975,7 @@ impl RbExpr {
|
|
945
975
|
.map(
|
946
976
|
|s| {
|
947
977
|
s.timestamp(TimeUnit::Milliseconds)
|
948
|
-
.map(|ca| (ca / 1000).into_series())
|
978
|
+
.map(|ca| Some((ca / 1000).into_series()))
|
949
979
|
},
|
950
980
|
GetOutput::from_type(DataType::Int64),
|
951
981
|
)
|
@@ -956,18 +986,19 @@ impl RbExpr {
|
|
956
986
|
self.inner.clone().dt().with_time_unit(tu.0).into()
|
957
987
|
}
|
958
988
|
|
959
|
-
pub fn
|
960
|
-
self.inner.clone().dt().
|
989
|
+
pub fn dt_convert_time_zone(&self, tz: TimeZone) -> Self {
|
990
|
+
self.inner.clone().dt().convert_time_zone(tz).into()
|
961
991
|
}
|
962
992
|
|
963
993
|
pub fn dt_cast_time_unit(&self, tu: Wrap<TimeUnit>) -> Self {
|
964
994
|
self.inner.clone().dt().cast_time_unit(tu.0).into()
|
965
995
|
}
|
966
996
|
|
967
|
-
pub fn
|
968
|
-
self.inner.clone().dt().
|
997
|
+
pub fn dt_replace_time_zone(&self, tz: Option<String>) -> Self {
|
998
|
+
self.inner.clone().dt().replace_time_zone(tz).into()
|
969
999
|
}
|
970
1000
|
|
1001
|
+
#[allow(deprecated)]
|
971
1002
|
pub fn dt_tz_localize(&self, tz: String) -> Self {
|
972
1003
|
self.inner.clone().dt().tz_localize(tz).into()
|
973
1004
|
}
|
@@ -989,7 +1020,7 @@ impl RbExpr {
|
|
989
1020
|
}
|
990
1021
|
|
991
1022
|
pub fn reinterpret(&self, signed: bool) -> Self {
|
992
|
-
let function = move |s: Series| reinterpret(&s, signed);
|
1023
|
+
let function = move |s: Series| reinterpret(&s, signed).map(Some);
|
993
1024
|
let dt = if signed {
|
994
1025
|
DataType::Int64
|
995
1026
|
} else {
|
@@ -1391,7 +1422,7 @@ impl RbExpr {
|
|
1391
1422
|
self.inner
|
1392
1423
|
.clone()
|
1393
1424
|
.map(
|
1394
|
-
|s| Ok(s.to_physical_repr().into_owned()),
|
1425
|
+
|s| Ok(Some(s.to_physical_repr().into_owned())),
|
1395
1426
|
GetOutput::map_dtype(|dt| dt.to_physical()),
|
1396
1427
|
)
|
1397
1428
|
.with_fmt("to_physical")
|
@@ -1428,44 +1459,67 @@ impl RbExpr {
|
|
1428
1459
|
.into()
|
1429
1460
|
}
|
1430
1461
|
|
1431
|
-
pub fn ewm_mean(
|
1462
|
+
pub fn ewm_mean(
|
1463
|
+
&self,
|
1464
|
+
alpha: f64,
|
1465
|
+
adjust: bool,
|
1466
|
+
min_periods: usize,
|
1467
|
+
ignore_nulls: bool,
|
1468
|
+
) -> Self {
|
1432
1469
|
let options = EWMOptions {
|
1433
1470
|
alpha,
|
1434
1471
|
adjust,
|
1435
1472
|
bias: false,
|
1436
1473
|
min_periods,
|
1474
|
+
ignore_nulls,
|
1437
1475
|
};
|
1438
1476
|
self.inner.clone().ewm_mean(options).into()
|
1439
1477
|
}
|
1440
1478
|
|
1441
|
-
pub fn ewm_std(
|
1479
|
+
pub fn ewm_std(
|
1480
|
+
&self,
|
1481
|
+
alpha: f64,
|
1482
|
+
adjust: bool,
|
1483
|
+
bias: bool,
|
1484
|
+
min_periods: usize,
|
1485
|
+
ignore_nulls: bool,
|
1486
|
+
) -> Self {
|
1442
1487
|
let options = EWMOptions {
|
1443
1488
|
alpha,
|
1444
1489
|
adjust,
|
1445
1490
|
bias,
|
1446
1491
|
min_periods,
|
1492
|
+
ignore_nulls,
|
1447
1493
|
};
|
1448
1494
|
self.inner.clone().ewm_std(options).into()
|
1449
1495
|
}
|
1450
1496
|
|
1451
|
-
pub fn ewm_var(
|
1497
|
+
pub fn ewm_var(
|
1498
|
+
&self,
|
1499
|
+
alpha: f64,
|
1500
|
+
adjust: bool,
|
1501
|
+
bias: bool,
|
1502
|
+
min_periods: usize,
|
1503
|
+
ignore_nulls: bool,
|
1504
|
+
) -> Self {
|
1452
1505
|
let options = EWMOptions {
|
1453
1506
|
alpha,
|
1454
1507
|
adjust,
|
1455
1508
|
bias,
|
1456
1509
|
min_periods,
|
1510
|
+
ignore_nulls,
|
1457
1511
|
};
|
1458
1512
|
self.inner.clone().ewm_var(options).into()
|
1459
1513
|
}
|
1460
1514
|
|
1461
1515
|
pub fn extend_constant(&self, value: Wrap<AnyValue>, n: usize) -> Self {
|
1462
|
-
let value =
|
1516
|
+
let value = value.into_value();
|
1463
1517
|
self.inner
|
1464
1518
|
.clone()
|
1465
1519
|
.apply(
|
1466
1520
|
move |s| {
|
1467
1521
|
let value = value.try_convert::<Wrap<AnyValue>>().unwrap().0;
|
1468
|
-
s.extend_constant(value, n)
|
1522
|
+
s.extend_constant(value, n).map(Some)
|
1469
1523
|
},
|
1470
1524
|
GetOutput::same_type(),
|
1471
1525
|
)
|
data/ext/polars/src/lazy/meta.rs
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
-
use crate::{RbExpr, RbPolarsErr, RbResult};
|
1
|
+
use crate::{RArray, RbExpr, RbPolarsErr, RbResult};
|
2
2
|
|
3
3
|
impl RbExpr {
|
4
|
-
pub fn meta_pop(&self) ->
|
5
|
-
|
6
|
-
.
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
pub fn meta_pop(&self) -> RArray {
|
5
|
+
RArray::from_iter(
|
6
|
+
self.inner
|
7
|
+
.clone()
|
8
|
+
.meta()
|
9
|
+
.pop()
|
10
|
+
.into_iter()
|
11
|
+
.map(RbExpr::from),
|
12
|
+
)
|
12
13
|
}
|
13
14
|
|
14
15
|
pub fn meta_eq(&self, other: &RbExpr) -> bool {
|
data/ext/polars/src/lib.rs
CHANGED
@@ -21,7 +21,7 @@ use file::get_file_like;
|
|
21
21
|
use lazy::dataframe::{RbLazyFrame, RbLazyGroupBy};
|
22
22
|
use lazy::dsl::{RbExpr, RbWhen, RbWhenThen};
|
23
23
|
use lazy::utils::rb_exprs_to_exprs;
|
24
|
-
use magnus::{define_module, function, method, prelude::*, Error, RArray, RHash, Value};
|
24
|
+
use magnus::{define_module, function, method, prelude::*, Error, IntoValue, RArray, RHash, Value};
|
25
25
|
use polars::datatypes::{DataType, TimeUnit, IDX_DTYPE};
|
26
26
|
use polars::error::PolarsResult;
|
27
27
|
use polars::frame::DataFrame;
|
@@ -146,7 +146,7 @@ fn init() -> RbResult<()> {
|
|
146
146
|
class.define_method("with_row_count", method!(RbDataFrame::with_row_count, 2))?;
|
147
147
|
class.define_method("_clone", method!(RbDataFrame::clone, 0))?;
|
148
148
|
class.define_method("melt", method!(RbDataFrame::melt, 4))?;
|
149
|
-
class.define_method("pivot_expr", method!(RbDataFrame::pivot_expr,
|
149
|
+
class.define_method("pivot_expr", method!(RbDataFrame::pivot_expr, 7))?;
|
150
150
|
class.define_method("partition_by", method!(RbDataFrame::partition_by, 2))?;
|
151
151
|
class.define_method("shift", method!(RbDataFrame::shift, 1))?;
|
152
152
|
class.define_method("unique", method!(RbDataFrame::unique, 3))?;
|
@@ -163,7 +163,7 @@ fn init() -> RbResult<()> {
|
|
163
163
|
class.define_method("hmin", method!(RbDataFrame::hmin, 0))?;
|
164
164
|
class.define_method("hsum", method!(RbDataFrame::hsum, 1))?;
|
165
165
|
class.define_method("quantile", method!(RbDataFrame::quantile, 2))?;
|
166
|
-
class.define_method("to_dummies", method!(RbDataFrame::to_dummies,
|
166
|
+
class.define_method("to_dummies", method!(RbDataFrame::to_dummies, 2))?;
|
167
167
|
class.define_method("null_count", method!(RbDataFrame::null_count, 0))?;
|
168
168
|
class.define_method("apply", method!(RbDataFrame::apply, 3))?;
|
169
169
|
class.define_method("shrink_to_fit", method!(RbDataFrame::shrink_to_fit, 0))?;
|
@@ -221,7 +221,7 @@ fn init() -> RbResult<()> {
|
|
221
221
|
class.define_method("top_k", method!(RbExpr::top_k, 2))?;
|
222
222
|
class.define_method("arg_max", method!(RbExpr::arg_max, 0))?;
|
223
223
|
class.define_method("arg_min", method!(RbExpr::arg_min, 0))?;
|
224
|
-
class.define_method("search_sorted", method!(RbExpr::search_sorted,
|
224
|
+
class.define_method("search_sorted", method!(RbExpr::search_sorted, 2))?;
|
225
225
|
class.define_method("take", method!(RbExpr::take, 1))?;
|
226
226
|
class.define_method("sort_by", method!(RbExpr::sort_by, 2))?;
|
227
227
|
class.define_method("backward_fill", method!(RbExpr::backward_fill, 1))?;
|
@@ -284,7 +284,7 @@ fn init() -> RbResult<()> {
|
|
284
284
|
class.define_method("product", method!(RbExpr::product, 0))?;
|
285
285
|
class.define_method("shrink_dtype", method!(RbExpr::shrink_dtype, 0))?;
|
286
286
|
class.define_method("str_parse_date", method!(RbExpr::str_parse_date, 4))?;
|
287
|
-
class.define_method("str_parse_datetime", method!(RbExpr::str_parse_datetime,
|
287
|
+
class.define_method("str_parse_datetime", method!(RbExpr::str_parse_datetime, 6))?;
|
288
288
|
class.define_method("str_parse_time", method!(RbExpr::str_parse_time, 4))?;
|
289
289
|
class.define_method("str_strip", method!(RbExpr::str_strip, 1))?;
|
290
290
|
class.define_method("str_rstrip", method!(RbExpr::str_rstrip, 1))?;
|
@@ -299,7 +299,7 @@ fn init() -> RbResult<()> {
|
|
299
299
|
class.define_method("str_zfill", method!(RbExpr::str_zfill, 1))?;
|
300
300
|
class.define_method("str_ljust", method!(RbExpr::str_ljust, 2))?;
|
301
301
|
class.define_method("str_rjust", method!(RbExpr::str_rjust, 2))?;
|
302
|
-
class.define_method("str_contains", method!(RbExpr::str_contains,
|
302
|
+
class.define_method("str_contains", method!(RbExpr::str_contains, 3))?;
|
303
303
|
class.define_method("str_ends_with", method!(RbExpr::str_ends_with, 1))?;
|
304
304
|
class.define_method("str_starts_with", method!(RbExpr::str_starts_with, 1))?;
|
305
305
|
class.define_method("str_hex_encode", method!(RbExpr::str_hex_encode, 0))?;
|
@@ -361,9 +361,15 @@ fn init() -> RbResult<()> {
|
|
361
361
|
class.define_method("dt_offset_by", method!(RbExpr::dt_offset_by, 1))?;
|
362
362
|
class.define_method("dt_epoch_seconds", method!(RbExpr::dt_epoch_seconds, 0))?;
|
363
363
|
class.define_method("dt_with_time_unit", method!(RbExpr::dt_with_time_unit, 1))?;
|
364
|
-
class.define_method(
|
364
|
+
class.define_method(
|
365
|
+
"dt_convert_time_zone",
|
366
|
+
method!(RbExpr::dt_convert_time_zone, 1),
|
367
|
+
)?;
|
365
368
|
class.define_method("dt_cast_time_unit", method!(RbExpr::dt_cast_time_unit, 1))?;
|
366
|
-
class.define_method(
|
369
|
+
class.define_method(
|
370
|
+
"dt_replace_time_zone",
|
371
|
+
method!(RbExpr::dt_replace_time_zone, 1),
|
372
|
+
)?;
|
367
373
|
class.define_method("dt_tz_localize", method!(RbExpr::dt_tz_localize, 1))?;
|
368
374
|
class.define_method("dt_truncate", method!(RbExpr::dt_truncate, 2))?;
|
369
375
|
class.define_method("dt_round", method!(RbExpr::dt_round, 2))?;
|
@@ -418,9 +424,9 @@ fn init() -> RbResult<()> {
|
|
418
424
|
class.define_method("shuffle", method!(RbExpr::shuffle, 1))?;
|
419
425
|
class.define_method("sample_n", method!(RbExpr::sample_n, 4))?;
|
420
426
|
class.define_method("sample_frac", method!(RbExpr::sample_frac, 4))?;
|
421
|
-
class.define_method("ewm_mean", method!(RbExpr::ewm_mean,
|
422
|
-
class.define_method("ewm_std", method!(RbExpr::ewm_std,
|
423
|
-
class.define_method("ewm_var", method!(RbExpr::ewm_var,
|
427
|
+
class.define_method("ewm_mean", method!(RbExpr::ewm_mean, 4))?;
|
428
|
+
class.define_method("ewm_std", method!(RbExpr::ewm_std, 5))?;
|
429
|
+
class.define_method("ewm_var", method!(RbExpr::ewm_var, 5))?;
|
424
430
|
class.define_method("extend_constant", method!(RbExpr::extend_constant, 2))?;
|
425
431
|
class.define_method("any", method!(RbExpr::any, 0))?;
|
426
432
|
class.define_method("all", method!(RbExpr::all, 0))?;
|
@@ -613,7 +619,7 @@ fn init() -> RbResult<()> {
|
|
613
619
|
class.define_method("_clone", method!(RbSeries::clone, 0))?;
|
614
620
|
class.define_method("apply_lambda", method!(RbSeries::apply_lambda, 3))?;
|
615
621
|
class.define_method("zip_with", method!(RbSeries::zip_with, 2))?;
|
616
|
-
class.define_method("to_dummies", method!(RbSeries::to_dummies,
|
622
|
+
class.define_method("to_dummies", method!(RbSeries::to_dummies, 1))?;
|
617
623
|
class.define_method("peak_max", method!(RbSeries::peak_max, 0))?;
|
618
624
|
class.define_method("peak_min", method!(RbSeries::peak_min, 0))?;
|
619
625
|
class.define_method("n_unique", method!(RbSeries::n_unique, 0))?;
|
@@ -922,23 +928,16 @@ fn parquet_schema(rb_f: Value) -> RbResult<Value> {
|
|
922
928
|
Ok(dict.into())
|
923
929
|
}
|
924
930
|
|
925
|
-
fn collect_all(lfs: RArray) -> RbResult<
|
926
|
-
use polars_core::utils::rayon::prelude::*;
|
927
|
-
|
931
|
+
fn collect_all(lfs: RArray) -> RbResult<RArray> {
|
928
932
|
let lfs = lfs
|
929
933
|
.each()
|
930
934
|
.map(|v| v?.try_convert::<&RbLazyFrame>())
|
931
935
|
.collect::<RbResult<Vec<&RbLazyFrame>>>()?;
|
932
936
|
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
Ok(RbDataFrame::new(df))
|
938
|
-
})
|
939
|
-
.collect::<polars_core::error::PolarsResult<Vec<_>>>()
|
940
|
-
.map_err(RbPolarsErr::from)
|
941
|
-
})
|
937
|
+
Ok(RArray::from_iter(lfs.iter().map(|lf| {
|
938
|
+
let df = lf.ldf.clone().collect().unwrap();
|
939
|
+
RbDataFrame::new(df)
|
940
|
+
})))
|
942
941
|
}
|
943
942
|
|
944
943
|
fn rb_date_range(
|
@@ -949,8 +948,8 @@ fn rb_date_range(
|
|
949
948
|
name: String,
|
950
949
|
tu: Wrap<TimeUnit>,
|
951
950
|
tz: Option<TimeZone>,
|
952
|
-
) -> RbSeries {
|
953
|
-
polars::time::date_range_impl(
|
951
|
+
) -> RbResult<RbSeries> {
|
952
|
+
let date_range = polars::time::date_range_impl(
|
954
953
|
&name,
|
955
954
|
start,
|
956
955
|
stop,
|
@@ -959,8 +958,8 @@ fn rb_date_range(
|
|
959
958
|
tu.0,
|
960
959
|
tz.as_ref(),
|
961
960
|
)
|
962
|
-
.
|
963
|
-
.into()
|
961
|
+
.map_err(RbPolarsErr::from)?;
|
962
|
+
Ok(date_range.into_series().into())
|
964
963
|
}
|
965
964
|
|
966
965
|
fn coalesce_exprs(exprs: RArray) -> RbResult<RbExpr> {
|
@@ -983,5 +982,5 @@ fn arg_where(condition: &RbExpr) -> RbExpr {
|
|
983
982
|
}
|
984
983
|
|
985
984
|
fn get_idx_type() -> Value {
|
986
|
-
Wrap(IDX_DTYPE).
|
985
|
+
Wrap(IDX_DTYPE).into_value()
|
987
986
|
}
|
data/ext/polars/src/object.rs
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
use std::any::Any;
|
2
2
|
use std::sync::Arc;
|
3
3
|
|
4
|
+
use magnus::IntoValue;
|
4
5
|
use polars_core::chunked_array::object::builder::ObjectChunkedBuilder;
|
5
6
|
use polars_core::chunked_array::object::registry;
|
6
7
|
use polars_core::chunked_array::object::registry::AnonymousObjectBuilder;
|
@@ -20,7 +21,7 @@ pub(crate) fn register_object_builder() {
|
|
20
21
|
|
21
22
|
let object_converter = Arc::new(|av: AnyValue| {
|
22
23
|
let object = ObjectValue {
|
23
|
-
inner: Wrap(av).
|
24
|
+
inner: Wrap(av).into_value(),
|
24
25
|
};
|
25
26
|
Box::new(object) as Box<dyn Any>
|
26
27
|
});
|