polars-df 0.11.0 → 0.12.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 +16 -0
- data/Cargo.lock +360 -361
- data/ext/polars/Cargo.toml +10 -7
- data/ext/polars/src/batched_csv.rs +1 -1
- data/ext/polars/src/conversion/any_value.rs +261 -0
- data/ext/polars/src/conversion/chunked_array.rs +4 -4
- data/ext/polars/src/conversion/mod.rs +51 -10
- data/ext/polars/src/dataframe/construction.rs +6 -8
- data/ext/polars/src/dataframe/general.rs +19 -29
- data/ext/polars/src/dataframe/io.rs +43 -33
- data/ext/polars/src/error.rs +26 -4
- data/ext/polars/src/expr/categorical.rs +0 -10
- data/ext/polars/src/expr/datetime.rs +4 -12
- data/ext/polars/src/expr/general.rs +123 -110
- data/ext/polars/src/expr/mod.rs +2 -2
- data/ext/polars/src/expr/rolling.rs +17 -9
- data/ext/polars/src/expr/string.rs +2 -6
- data/ext/polars/src/functions/eager.rs +10 -10
- data/ext/polars/src/functions/lazy.rs +21 -21
- data/ext/polars/src/functions/range.rs +6 -12
- data/ext/polars/src/interop/numo/to_numo_series.rs +2 -1
- data/ext/polars/src/lazyframe/mod.rs +81 -98
- data/ext/polars/src/lib.rs +55 -45
- data/ext/polars/src/map/dataframe.rs +2 -2
- data/ext/polars/src/rb_modules.rs +25 -1
- data/ext/polars/src/series/aggregation.rs +4 -2
- data/ext/polars/src/series/arithmetic.rs +21 -11
- data/ext/polars/src/series/construction.rs +56 -38
- data/ext/polars/src/series/export.rs +1 -1
- data/ext/polars/src/series/mod.rs +31 -10
- data/ext/polars/src/sql.rs +3 -1
- data/lib/polars/array_expr.rb +4 -4
- data/lib/polars/batched_csv_reader.rb +2 -2
- data/lib/polars/cat_expr.rb +0 -36
- data/lib/polars/cat_name_space.rb +0 -37
- data/lib/polars/data_frame.rb +93 -101
- data/lib/polars/data_types.rb +1 -1
- data/lib/polars/date_time_expr.rb +525 -573
- data/lib/polars/date_time_name_space.rb +263 -464
- data/lib/polars/dynamic_group_by.rb +3 -3
- data/lib/polars/exceptions.rb +3 -0
- data/lib/polars/expr.rb +367 -330
- data/lib/polars/expr_dispatch.rb +1 -1
- data/lib/polars/functions/aggregation/horizontal.rb +8 -8
- data/lib/polars/functions/as_datatype.rb +63 -40
- data/lib/polars/functions/lazy.rb +63 -14
- data/lib/polars/functions/lit.rb +1 -1
- data/lib/polars/functions/range/date_range.rb +18 -77
- data/lib/polars/functions/range/datetime_range.rb +4 -4
- data/lib/polars/functions/range/int_range.rb +2 -2
- data/lib/polars/functions/range/time_range.rb +4 -4
- data/lib/polars/functions/repeat.rb +1 -1
- data/lib/polars/functions/whenthen.rb +1 -1
- data/lib/polars/io/csv.rb +8 -8
- data/lib/polars/io/ipc.rb +3 -3
- data/lib/polars/io/json.rb +13 -2
- data/lib/polars/io/ndjson.rb +15 -4
- data/lib/polars/io/parquet.rb +5 -4
- data/lib/polars/lazy_frame.rb +120 -106
- data/lib/polars/lazy_group_by.rb +1 -1
- data/lib/polars/list_expr.rb +11 -11
- data/lib/polars/list_name_space.rb +5 -1
- data/lib/polars/rolling_group_by.rb +5 -7
- data/lib/polars/series.rb +105 -189
- data/lib/polars/string_expr.rb +42 -67
- data/lib/polars/string_name_space.rb +5 -4
- data/lib/polars/testing.rb +2 -2
- data/lib/polars/utils/constants.rb +9 -0
- data/lib/polars/utils/convert.rb +97 -0
- data/lib/polars/utils/parse.rb +89 -0
- data/lib/polars/utils/various.rb +76 -0
- data/lib/polars/utils/wrap.rb +19 -0
- data/lib/polars/utils.rb +4 -330
- data/lib/polars/version.rb +1 -1
- data/lib/polars/whenthen.rb +6 -6
- data/lib/polars.rb +11 -0
- metadata +9 -4
- data/ext/polars/src/conversion/anyvalue.rs +0 -186
@@ -46,7 +46,7 @@ impl RbExpr {
|
|
46
46
|
}
|
47
47
|
|
48
48
|
pub fn eq(&self, other: &Self) -> Self {
|
49
|
-
self.clone().
|
49
|
+
self.inner.clone().eq(other.inner.clone()).into()
|
50
50
|
}
|
51
51
|
|
52
52
|
pub fn eq_missing(&self, other: &Self) -> Self {
|
@@ -54,7 +54,7 @@ impl RbExpr {
|
|
54
54
|
}
|
55
55
|
|
56
56
|
pub fn neq(&self, other: &Self) -> Self {
|
57
|
-
self.clone().
|
57
|
+
self.inner.clone().neq(other.inner.clone()).into()
|
58
58
|
}
|
59
59
|
|
60
60
|
pub fn neq_missing(&self, other: &Self) -> Self {
|
@@ -62,112 +62,112 @@ impl RbExpr {
|
|
62
62
|
}
|
63
63
|
|
64
64
|
pub fn gt(&self, other: &Self) -> Self {
|
65
|
-
self.clone().
|
65
|
+
self.inner.clone().gt(other.inner.clone()).into()
|
66
66
|
}
|
67
67
|
|
68
68
|
pub fn gt_eq(&self, other: &Self) -> Self {
|
69
|
-
self.clone().
|
69
|
+
self.inner.clone().gt_eq(other.inner.clone()).into()
|
70
70
|
}
|
71
71
|
|
72
72
|
pub fn lt_eq(&self, other: &Self) -> Self {
|
73
|
-
self.clone().
|
73
|
+
self.inner.clone().lt_eq(other.inner.clone()).into()
|
74
74
|
}
|
75
75
|
|
76
76
|
pub fn lt(&self, other: &Self) -> Self {
|
77
|
-
self.clone().
|
77
|
+
self.inner.clone().lt(other.inner.clone()).into()
|
78
78
|
}
|
79
79
|
|
80
80
|
pub fn alias(&self, name: String) -> Self {
|
81
|
-
self.clone().
|
81
|
+
self.inner.clone().alias(&name).into()
|
82
82
|
}
|
83
83
|
|
84
84
|
pub fn not_(&self) -> Self {
|
85
|
-
self.clone().
|
85
|
+
self.inner.clone().not().into()
|
86
86
|
}
|
87
87
|
|
88
88
|
pub fn is_null(&self) -> Self {
|
89
|
-
self.clone().
|
89
|
+
self.inner.clone().is_null().into()
|
90
90
|
}
|
91
91
|
|
92
92
|
pub fn is_not_null(&self) -> Self {
|
93
|
-
self.clone().
|
93
|
+
self.inner.clone().is_not_null().into()
|
94
94
|
}
|
95
95
|
|
96
96
|
pub fn is_infinite(&self) -> Self {
|
97
|
-
self.clone().
|
97
|
+
self.inner.clone().is_infinite().into()
|
98
98
|
}
|
99
99
|
|
100
100
|
pub fn is_finite(&self) -> Self {
|
101
|
-
self.clone().
|
101
|
+
self.inner.clone().is_finite().into()
|
102
102
|
}
|
103
103
|
|
104
104
|
pub fn is_nan(&self) -> Self {
|
105
|
-
self.clone().
|
105
|
+
self.inner.clone().is_nan().into()
|
106
106
|
}
|
107
107
|
|
108
108
|
pub fn is_not_nan(&self) -> Self {
|
109
|
-
self.clone().
|
109
|
+
self.inner.clone().is_not_nan().into()
|
110
110
|
}
|
111
111
|
|
112
112
|
pub fn min(&self) -> Self {
|
113
|
-
self.clone().
|
113
|
+
self.inner.clone().min().into()
|
114
114
|
}
|
115
115
|
|
116
116
|
pub fn max(&self) -> Self {
|
117
|
-
self.clone().
|
117
|
+
self.inner.clone().max().into()
|
118
118
|
}
|
119
119
|
|
120
120
|
pub fn nan_max(&self) -> Self {
|
121
|
-
self.clone().
|
121
|
+
self.inner.clone().nan_max().into()
|
122
122
|
}
|
123
123
|
|
124
124
|
pub fn nan_min(&self) -> Self {
|
125
|
-
self.clone().
|
125
|
+
self.inner.clone().nan_min().into()
|
126
126
|
}
|
127
127
|
|
128
128
|
pub fn mean(&self) -> Self {
|
129
|
-
self.clone().
|
129
|
+
self.inner.clone().mean().into()
|
130
130
|
}
|
131
131
|
|
132
132
|
pub fn median(&self) -> Self {
|
133
|
-
self.clone().
|
133
|
+
self.inner.clone().median().into()
|
134
134
|
}
|
135
135
|
|
136
136
|
pub fn sum(&self) -> Self {
|
137
|
-
self.clone().
|
137
|
+
self.inner.clone().sum().into()
|
138
138
|
}
|
139
139
|
|
140
140
|
pub fn n_unique(&self) -> Self {
|
141
|
-
self.clone().
|
141
|
+
self.inner.clone().n_unique().into()
|
142
142
|
}
|
143
143
|
|
144
144
|
pub fn arg_unique(&self) -> Self {
|
145
|
-
self.clone().
|
145
|
+
self.inner.clone().arg_unique().into()
|
146
146
|
}
|
147
147
|
|
148
148
|
pub fn unique(&self) -> Self {
|
149
|
-
self.clone().
|
149
|
+
self.inner.clone().unique().into()
|
150
150
|
}
|
151
151
|
|
152
152
|
pub fn unique_stable(&self) -> Self {
|
153
|
-
self.clone().
|
153
|
+
self.inner.clone().unique_stable().into()
|
154
154
|
}
|
155
155
|
|
156
156
|
pub fn first(&self) -> Self {
|
157
|
-
self.clone().
|
157
|
+
self.inner.clone().first().into()
|
158
158
|
}
|
159
159
|
|
160
160
|
pub fn last(&self) -> Self {
|
161
|
-
self.clone().
|
161
|
+
self.inner.clone().last().into()
|
162
162
|
}
|
163
163
|
|
164
164
|
pub fn implode(&self) -> Self {
|
165
|
-
self.clone().
|
165
|
+
self.inner.clone().implode().into()
|
166
166
|
}
|
167
167
|
|
168
168
|
pub fn quantile(&self, quantile: &Self, interpolation: Wrap<QuantileInterpolOptions>) -> Self {
|
169
|
-
self.
|
170
|
-
.
|
169
|
+
self.inner
|
170
|
+
.clone()
|
171
171
|
.quantile(quantile.inner.clone(), interpolation.0)
|
172
172
|
.into()
|
173
173
|
}
|
@@ -239,10 +239,10 @@ impl RbExpr {
|
|
239
239
|
self.inner.clone().len().into()
|
240
240
|
}
|
241
241
|
|
242
|
-
pub fn value_counts(&self,
|
242
|
+
pub fn value_counts(&self, sort: bool, parallel: bool, name: String, normalize: bool) -> Self {
|
243
243
|
self.inner
|
244
244
|
.clone()
|
245
|
-
.value_counts(
|
245
|
+
.value_counts(sort, parallel, name, normalize)
|
246
246
|
.into()
|
247
247
|
}
|
248
248
|
|
@@ -288,28 +288,30 @@ impl RbExpr {
|
|
288
288
|
.into()
|
289
289
|
}
|
290
290
|
|
291
|
-
pub fn top_k(&self, k: &Self
|
292
|
-
self.inner
|
291
|
+
pub fn top_k(&self, k: &Self) -> Self {
|
292
|
+
self.inner.clone().top_k(k.inner.clone()).into()
|
293
|
+
}
|
294
|
+
|
295
|
+
pub fn top_k_by(&self, by: RArray, k: &Self, reverse: Vec<bool>) -> RbResult<Self> {
|
296
|
+
let by = rb_exprs_to_exprs(by)?;
|
297
|
+
Ok(self
|
298
|
+
.inner
|
293
299
|
.clone()
|
294
|
-
.
|
295
|
-
|
296
|
-
SortOptions::default()
|
297
|
-
.with_nulls_last(nulls_last)
|
298
|
-
.with_maintain_order(multithreaded),
|
299
|
-
)
|
300
|
-
.into()
|
300
|
+
.top_k_by(k.inner.clone(), by, reverse)
|
301
|
+
.into())
|
301
302
|
}
|
302
303
|
|
303
|
-
pub fn bottom_k(&self, k: &Self
|
304
|
-
self.inner
|
304
|
+
pub fn bottom_k(&self, k: &Self) -> Self {
|
305
|
+
self.inner.clone().bottom_k(k.inner.clone()).into()
|
306
|
+
}
|
307
|
+
|
308
|
+
pub fn bottom_k_by(&self, by: RArray, k: &Self, reverse: Vec<bool>) -> RbResult<Self> {
|
309
|
+
let by = rb_exprs_to_exprs(by)?;
|
310
|
+
Ok(self
|
311
|
+
.inner
|
305
312
|
.clone()
|
306
|
-
.
|
307
|
-
|
308
|
-
SortOptions::default()
|
309
|
-
.with_nulls_last(nulls_last)
|
310
|
-
.with_maintain_order(multithreaded),
|
311
|
-
)
|
312
|
-
.into()
|
313
|
+
.bottom_k_by(k.inner.clone(), by, reverse)
|
314
|
+
.into())
|
313
315
|
}
|
314
316
|
|
315
317
|
pub fn peak_min(&self) -> Self {
|
@@ -321,11 +323,11 @@ impl RbExpr {
|
|
321
323
|
}
|
322
324
|
|
323
325
|
pub fn arg_max(&self) -> Self {
|
324
|
-
self.clone().
|
326
|
+
self.inner.clone().arg_max().into()
|
325
327
|
}
|
326
328
|
|
327
329
|
pub fn arg_min(&self) -> Self {
|
328
|
-
self.clone().
|
330
|
+
self.inner.clone().arg_min().into()
|
329
331
|
}
|
330
332
|
|
331
333
|
pub fn search_sorted(&self, element: &Self, side: Wrap<SearchSortedSide>) -> Self {
|
@@ -336,21 +338,25 @@ impl RbExpr {
|
|
336
338
|
}
|
337
339
|
|
338
340
|
pub fn gather(&self, idx: &Self) -> Self {
|
339
|
-
self.clone().
|
341
|
+
self.inner.clone().gather(idx.inner.clone()).into()
|
342
|
+
}
|
343
|
+
|
344
|
+
pub fn get(&self, idx: &Self) -> Self {
|
345
|
+
self.inner.clone().get(idx.inner.clone()).into()
|
340
346
|
}
|
341
347
|
|
342
348
|
pub fn sort_by(
|
343
349
|
&self,
|
344
350
|
by: RArray,
|
345
351
|
descending: Vec<bool>,
|
346
|
-
nulls_last: bool
|
352
|
+
nulls_last: Vec<bool>,
|
347
353
|
multithreaded: bool,
|
348
354
|
maintain_order: bool,
|
349
355
|
) -> RbResult<Self> {
|
350
356
|
let by = rb_exprs_to_exprs(by)?;
|
351
357
|
Ok(self
|
352
|
-
.clone()
|
353
358
|
.inner
|
359
|
+
.clone()
|
354
360
|
.sort_by(
|
355
361
|
by,
|
356
362
|
SortMultipleOptions {
|
@@ -364,11 +370,11 @@ impl RbExpr {
|
|
364
370
|
}
|
365
371
|
|
366
372
|
pub fn backward_fill(&self, limit: FillNullLimit) -> Self {
|
367
|
-
self.clone().
|
373
|
+
self.inner.clone().backward_fill(limit).into()
|
368
374
|
}
|
369
375
|
|
370
376
|
pub fn forward_fill(&self, limit: FillNullLimit) -> Self {
|
371
|
-
self.clone().
|
377
|
+
self.inner.clone().forward_fill(limit).into()
|
372
378
|
}
|
373
379
|
|
374
380
|
pub fn shift(&self, n: &Self, fill_value: Option<&Self>) -> Self {
|
@@ -381,7 +387,7 @@ impl RbExpr {
|
|
381
387
|
}
|
382
388
|
|
383
389
|
pub fn fill_null(&self, expr: &Self) -> Self {
|
384
|
-
self.clone().
|
390
|
+
self.inner.clone().fill_null(expr.inner.clone()).into()
|
385
391
|
}
|
386
392
|
|
387
393
|
pub fn fill_null_with_strategy(
|
@@ -414,39 +420,46 @@ impl RbExpr {
|
|
414
420
|
}
|
415
421
|
|
416
422
|
pub fn filter(&self, predicate: &Self) -> Self {
|
417
|
-
self.clone().
|
423
|
+
self.inner.clone().filter(predicate.inner.clone()).into()
|
418
424
|
}
|
419
425
|
|
420
426
|
pub fn reverse(&self) -> Self {
|
421
|
-
self.clone().
|
427
|
+
self.inner.clone().reverse().into()
|
422
428
|
}
|
423
429
|
|
424
430
|
pub fn std(&self, ddof: u8) -> Self {
|
425
|
-
self.clone().
|
431
|
+
self.inner.clone().std(ddof).into()
|
426
432
|
}
|
427
433
|
|
428
434
|
pub fn var(&self, ddof: u8) -> Self {
|
429
|
-
self.clone().
|
435
|
+
self.inner.clone().var(ddof).into()
|
430
436
|
}
|
431
437
|
|
432
438
|
pub fn is_unique(&self) -> Self {
|
433
|
-
self.clone().
|
439
|
+
self.inner.clone().is_unique().into()
|
440
|
+
}
|
441
|
+
|
442
|
+
pub fn is_between(&self, lower: &Self, upper: &Self, closed: Wrap<ClosedInterval>) -> Self {
|
443
|
+
self.inner
|
444
|
+
.clone()
|
445
|
+
.is_between(lower.inner.clone(), upper.inner.clone(), closed.0)
|
446
|
+
.into()
|
434
447
|
}
|
435
448
|
|
436
449
|
pub fn approx_n_unique(&self) -> Self {
|
437
|
-
self.clone().
|
450
|
+
self.inner.clone().approx_n_unique().into()
|
438
451
|
}
|
439
452
|
|
440
453
|
pub fn is_first_distinct(&self) -> Self {
|
441
|
-
self.clone().
|
454
|
+
self.inner.clone().is_first_distinct().into()
|
442
455
|
}
|
443
456
|
|
444
457
|
pub fn is_last_distinct(&self) -> Self {
|
445
|
-
self.clone().
|
458
|
+
self.inner.clone().is_last_distinct().into()
|
446
459
|
}
|
447
460
|
|
448
461
|
pub fn explode(&self) -> Self {
|
449
|
-
self.clone().
|
462
|
+
self.inner.clone().explode().into()
|
450
463
|
}
|
451
464
|
|
452
465
|
pub fn gather_every(&self, n: usize, offset: usize) -> Self {
|
@@ -461,11 +474,11 @@ impl RbExpr {
|
|
461
474
|
}
|
462
475
|
|
463
476
|
pub fn tail(&self, n: Option<usize>) -> Self {
|
464
|
-
self.clone().
|
477
|
+
self.inner.clone().tail(n).into()
|
465
478
|
}
|
466
479
|
|
467
480
|
pub fn head(&self, n: Option<usize>) -> Self {
|
468
|
-
self.clone().
|
481
|
+
self.inner.clone().head(n).into()
|
469
482
|
}
|
470
483
|
|
471
484
|
pub fn slice(&self, offset: &Self, length: &Self) -> Self {
|
@@ -490,15 +503,15 @@ impl RbExpr {
|
|
490
503
|
}
|
491
504
|
|
492
505
|
pub fn round(&self, decimals: u32) -> Self {
|
493
|
-
self.clone().
|
506
|
+
self.inner.clone().round(decimals).into()
|
494
507
|
}
|
495
508
|
|
496
509
|
pub fn floor(&self) -> Self {
|
497
|
-
self.clone().
|
510
|
+
self.inner.clone().floor().into()
|
498
511
|
}
|
499
512
|
|
500
513
|
pub fn ceil(&self) -> Self {
|
501
|
-
self.clone().
|
514
|
+
self.inner.clone().ceil().into()
|
502
515
|
}
|
503
516
|
|
504
517
|
pub fn clip(&self, min: Option<&Self>, max: Option<&Self>) -> Self {
|
@@ -513,112 +526,112 @@ impl RbExpr {
|
|
513
526
|
}
|
514
527
|
|
515
528
|
pub fn abs(&self) -> Self {
|
516
|
-
self.clone().
|
529
|
+
self.inner.clone().abs().into()
|
517
530
|
}
|
518
531
|
|
519
532
|
pub fn sin(&self) -> Self {
|
520
|
-
self.clone().
|
533
|
+
self.inner.clone().sin().into()
|
521
534
|
}
|
522
535
|
|
523
536
|
pub fn cos(&self) -> Self {
|
524
|
-
self.clone().
|
537
|
+
self.inner.clone().cos().into()
|
525
538
|
}
|
526
539
|
|
527
540
|
pub fn tan(&self) -> Self {
|
528
|
-
self.clone().
|
541
|
+
self.inner.clone().tan().into()
|
529
542
|
}
|
530
543
|
|
531
544
|
pub fn arcsin(&self) -> Self {
|
532
|
-
self.clone().
|
545
|
+
self.inner.clone().arcsin().into()
|
533
546
|
}
|
534
547
|
|
535
548
|
pub fn arccos(&self) -> Self {
|
536
|
-
self.clone().
|
549
|
+
self.inner.clone().arccos().into()
|
537
550
|
}
|
538
551
|
|
539
552
|
pub fn arctan(&self) -> Self {
|
540
|
-
self.clone().
|
553
|
+
self.inner.clone().arctan().into()
|
541
554
|
}
|
542
555
|
|
543
556
|
pub fn sinh(&self) -> Self {
|
544
|
-
self.clone().
|
557
|
+
self.inner.clone().sinh().into()
|
545
558
|
}
|
546
559
|
|
547
560
|
pub fn cosh(&self) -> Self {
|
548
|
-
self.clone().
|
561
|
+
self.inner.clone().cosh().into()
|
549
562
|
}
|
550
563
|
|
551
564
|
pub fn tanh(&self) -> Self {
|
552
|
-
self.clone().
|
565
|
+
self.inner.clone().tanh().into()
|
553
566
|
}
|
554
567
|
|
555
568
|
pub fn arcsinh(&self) -> Self {
|
556
|
-
self.clone().
|
569
|
+
self.inner.clone().arcsinh().into()
|
557
570
|
}
|
558
571
|
|
559
572
|
pub fn arccosh(&self) -> Self {
|
560
|
-
self.clone().
|
573
|
+
self.inner.clone().arccosh().into()
|
561
574
|
}
|
562
575
|
|
563
576
|
pub fn arctanh(&self) -> Self {
|
564
|
-
self.clone().
|
577
|
+
self.inner.clone().arctanh().into()
|
565
578
|
}
|
566
579
|
|
567
580
|
pub fn sign(&self) -> Self {
|
568
|
-
self.clone().
|
581
|
+
self.inner.clone().sign().into()
|
569
582
|
}
|
570
583
|
|
571
584
|
pub fn is_duplicated(&self) -> Self {
|
572
|
-
self.clone().
|
585
|
+
self.inner.clone().is_duplicated().into()
|
573
586
|
}
|
574
587
|
|
575
588
|
pub fn over(&self, partition_by: RArray) -> RbResult<Self> {
|
576
589
|
let partition_by = rb_exprs_to_exprs(partition_by)?;
|
577
|
-
Ok(self.clone().
|
590
|
+
Ok(self.inner.clone().over(partition_by).into())
|
578
591
|
}
|
579
592
|
|
580
593
|
pub fn _and(&self, expr: &Self) -> Self {
|
581
|
-
self.clone().
|
594
|
+
self.inner.clone().and(expr.inner.clone()).into()
|
582
595
|
}
|
583
596
|
|
584
597
|
pub fn _xor(&self, expr: &Self) -> Self {
|
585
|
-
self.clone().
|
598
|
+
self.inner.clone().xor(expr.inner.clone()).into()
|
586
599
|
}
|
587
600
|
|
588
601
|
pub fn _or(&self, expr: &Self) -> Self {
|
589
|
-
self.clone().
|
602
|
+
self.inner.clone().or(expr.inner.clone()).into()
|
590
603
|
}
|
591
604
|
|
592
605
|
pub fn is_in(&self, expr: &Self) -> Self {
|
593
|
-
self.clone().
|
606
|
+
self.inner.clone().is_in(expr.inner.clone()).into()
|
594
607
|
}
|
595
608
|
|
596
609
|
pub fn repeat_by(&self, by: &Self) -> Self {
|
597
|
-
self.clone().
|
610
|
+
self.inner.clone().repeat_by(by.inner.clone()).into()
|
598
611
|
}
|
599
612
|
|
600
613
|
pub fn pow(&self, exponent: &Self) -> Self {
|
601
|
-
self.clone().
|
614
|
+
self.inner.clone().pow(exponent.inner.clone()).into()
|
602
615
|
}
|
603
616
|
|
604
617
|
pub fn cum_sum(&self, reverse: bool) -> Self {
|
605
|
-
self.clone().
|
618
|
+
self.inner.clone().cum_sum(reverse).into()
|
606
619
|
}
|
607
620
|
|
608
621
|
pub fn cum_max(&self, reverse: bool) -> Self {
|
609
|
-
self.clone().
|
622
|
+
self.inner.clone().cum_max(reverse).into()
|
610
623
|
}
|
611
624
|
|
612
625
|
pub fn cum_min(&self, reverse: bool) -> Self {
|
613
|
-
self.clone().
|
626
|
+
self.inner.clone().cum_min(reverse).into()
|
614
627
|
}
|
615
628
|
|
616
629
|
pub fn cum_prod(&self, reverse: bool) -> Self {
|
617
|
-
self.clone().
|
630
|
+
self.inner.clone().cum_prod(reverse).into()
|
618
631
|
}
|
619
632
|
|
620
633
|
pub fn product(&self) -> Self {
|
621
|
-
self.clone().
|
634
|
+
self.inner.clone().product().into()
|
622
635
|
}
|
623
636
|
|
624
637
|
pub fn shrink_dtype(&self) -> Self {
|
@@ -704,7 +717,7 @@ impl RbExpr {
|
|
704
717
|
}
|
705
718
|
|
706
719
|
pub fn reshape(&self, dims: Vec<i64>) -> Self {
|
707
|
-
self.inner.clone().reshape(&dims).into()
|
720
|
+
self.inner.clone().reshape(&dims, NestedType::Array).into()
|
708
721
|
}
|
709
722
|
|
710
723
|
pub fn cum_count(&self, reverse: bool) -> Self {
|
@@ -712,14 +725,7 @@ impl RbExpr {
|
|
712
725
|
}
|
713
726
|
|
714
727
|
pub fn to_physical(&self) -> Self {
|
715
|
-
self.inner
|
716
|
-
.clone()
|
717
|
-
.map(
|
718
|
-
|s| Ok(Some(s.to_physical_repr().into_owned())),
|
719
|
-
GetOutput::map_dtype(|dt| dt.to_physical()),
|
720
|
-
)
|
721
|
-
.with_fmt("to_physical")
|
722
|
-
.into()
|
728
|
+
self.inner.clone().to_physical().into()
|
723
729
|
}
|
724
730
|
|
725
731
|
pub fn shuffle(&self, seed: Option<u64>) -> Self {
|
@@ -855,7 +861,14 @@ impl RbExpr {
|
|
855
861
|
self.inner.clone().set_sorted_flag(is_sorted).into()
|
856
862
|
}
|
857
863
|
|
858
|
-
pub fn replace(
|
864
|
+
pub fn replace(&self, old: &Self, new: &Self) -> Self {
|
865
|
+
self.inner
|
866
|
+
.clone()
|
867
|
+
.replace(old.inner.clone(), new.inner.clone())
|
868
|
+
.into()
|
869
|
+
}
|
870
|
+
|
871
|
+
pub fn replace_strict(
|
859
872
|
&self,
|
860
873
|
old: &Self,
|
861
874
|
new: &Self,
|
@@ -864,7 +877,7 @@ impl RbExpr {
|
|
864
877
|
) -> Self {
|
865
878
|
self.inner
|
866
879
|
.clone()
|
867
|
-
.
|
880
|
+
.replace_strict(
|
868
881
|
old.inner.clone(),
|
869
882
|
new.inner.clone(),
|
870
883
|
default.map(|e| e.inner.clone()),
|
data/ext/polars/src/expr/mod.rs
CHANGED
@@ -29,8 +29,8 @@ impl From<Expr> for RbExpr {
|
|
29
29
|
|
30
30
|
pub fn rb_exprs_to_exprs(rb_exprs: RArray) -> RbResult<Vec<Expr>> {
|
31
31
|
let mut exprs = Vec::new();
|
32
|
-
for item in rb_exprs.
|
33
|
-
exprs.push(<&RbExpr>::try_convert(item
|
32
|
+
for item in rb_exprs.into_iter() {
|
33
|
+
exprs.push(<&RbExpr>::try_convert(item)?.inner.clone());
|
34
34
|
}
|
35
35
|
Ok(exprs)
|
36
36
|
}
|
@@ -9,9 +9,10 @@ impl RbExpr {
|
|
9
9
|
&self,
|
10
10
|
window_size: usize,
|
11
11
|
weights: Option<Vec<f64>>,
|
12
|
-
min_periods: usize
|
12
|
+
min_periods: Option<usize>,
|
13
13
|
center: bool,
|
14
14
|
) -> Self {
|
15
|
+
let min_periods = min_periods.unwrap_or(window_size);
|
15
16
|
let options = RollingOptionsFixedWindow {
|
16
17
|
window_size,
|
17
18
|
weights,
|
@@ -45,9 +46,10 @@ impl RbExpr {
|
|
45
46
|
&self,
|
46
47
|
window_size: usize,
|
47
48
|
weights: Option<Vec<f64>>,
|
48
|
-
min_periods: usize
|
49
|
+
min_periods: Option<usize>,
|
49
50
|
center: bool,
|
50
51
|
) -> Self {
|
52
|
+
let min_periods = min_periods.unwrap_or(window_size);
|
51
53
|
let options = RollingOptionsFixedWindow {
|
52
54
|
window_size,
|
53
55
|
weights,
|
@@ -81,11 +83,12 @@ impl RbExpr {
|
|
81
83
|
&self,
|
82
84
|
window_size: usize,
|
83
85
|
weights: Option<Vec<f64>>,
|
84
|
-
min_periods: usize
|
86
|
+
min_periods: Option<usize>,
|
85
87
|
center: bool,
|
86
88
|
) -> Self {
|
89
|
+
let min_periods = min_periods.unwrap_or(window_size);
|
87
90
|
let options = RollingOptionsFixedWindow {
|
88
|
-
window_size
|
91
|
+
window_size,
|
89
92
|
weights,
|
90
93
|
min_periods,
|
91
94
|
center,
|
@@ -117,9 +120,10 @@ impl RbExpr {
|
|
117
120
|
&self,
|
118
121
|
window_size: usize,
|
119
122
|
weights: Option<Vec<f64>>,
|
120
|
-
min_periods: usize
|
123
|
+
min_periods: Option<usize>,
|
121
124
|
center: bool,
|
122
125
|
) -> Self {
|
126
|
+
let min_periods = min_periods.unwrap_or(window_size);
|
123
127
|
let options = RollingOptionsFixedWindow {
|
124
128
|
window_size,
|
125
129
|
weights,
|
@@ -155,10 +159,11 @@ impl RbExpr {
|
|
155
159
|
&self,
|
156
160
|
window_size: usize,
|
157
161
|
weights: Option<Vec<f64>>,
|
158
|
-
min_periods: usize
|
162
|
+
min_periods: Option<usize>,
|
159
163
|
center: bool,
|
160
164
|
ddof: u8,
|
161
165
|
) -> Self {
|
166
|
+
let min_periods = min_periods.unwrap_or(window_size);
|
162
167
|
let options = RollingOptionsFixedWindow {
|
163
168
|
window_size,
|
164
169
|
weights,
|
@@ -195,10 +200,11 @@ impl RbExpr {
|
|
195
200
|
&self,
|
196
201
|
window_size: usize,
|
197
202
|
weights: Option<Vec<f64>>,
|
198
|
-
min_periods: usize
|
203
|
+
min_periods: Option<usize>,
|
199
204
|
center: bool,
|
200
205
|
ddof: u8,
|
201
206
|
) -> Self {
|
207
|
+
let min_periods = min_periods.unwrap_or(window_size);
|
202
208
|
let options = RollingOptionsFixedWindow {
|
203
209
|
window_size,
|
204
210
|
weights,
|
@@ -235,9 +241,10 @@ impl RbExpr {
|
|
235
241
|
&self,
|
236
242
|
window_size: usize,
|
237
243
|
weights: Option<Vec<f64>>,
|
238
|
-
min_periods: usize
|
244
|
+
min_periods: Option<usize>,
|
239
245
|
center: bool,
|
240
246
|
) -> Self {
|
247
|
+
let min_periods = min_periods.unwrap_or(window_size);
|
241
248
|
let options = RollingOptionsFixedWindow {
|
242
249
|
window_size,
|
243
250
|
min_periods,
|
@@ -273,9 +280,10 @@ impl RbExpr {
|
|
273
280
|
interpolation: Wrap<QuantileInterpolOptions>,
|
274
281
|
window_size: usize,
|
275
282
|
weights: Option<Vec<f64>>,
|
276
|
-
min_periods: usize
|
283
|
+
min_periods: Option<usize>,
|
277
284
|
center: bool,
|
278
285
|
) -> Self {
|
286
|
+
let min_periods = min_periods.unwrap_or(window_size);
|
279
287
|
let options = RollingOptionsFixedWindow {
|
280
288
|
window_size,
|
281
289
|
weights,
|
@@ -4,11 +4,11 @@ use crate::conversion::Wrap;
|
|
4
4
|
use crate::{RbExpr, RbPolarsErr, RbResult};
|
5
5
|
|
6
6
|
impl RbExpr {
|
7
|
-
pub fn
|
7
|
+
pub fn str_join(&self, delimiter: String, ignore_nulls: bool) -> Self {
|
8
8
|
self.inner
|
9
9
|
.clone()
|
10
10
|
.str()
|
11
|
-
.
|
11
|
+
.join(&delimiter, ignore_nulls)
|
12
12
|
.into()
|
13
13
|
}
|
14
14
|
|
@@ -115,10 +115,6 @@ impl RbExpr {
|
|
115
115
|
.into()
|
116
116
|
}
|
117
117
|
|
118
|
-
pub fn str_explode(&self) -> Self {
|
119
|
-
self.inner.clone().str().explode().into()
|
120
|
-
}
|
121
|
-
|
122
118
|
pub fn str_to_uppercase(&self) -> Self {
|
123
119
|
self.inner.clone().str().to_uppercase().into()
|
124
120
|
}
|