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
@@ -15,19 +15,14 @@ use crate::{RbDataFrame, RbExpr, RbLazyGroupBy, RbPolarsErr, RbResult, RbValueEr
|
|
15
15
|
#[magnus::wrap(class = "Polars::RbLazyFrame")]
|
16
16
|
#[derive(Clone)]
|
17
17
|
pub struct RbLazyFrame {
|
18
|
-
pub ldf: LazyFrame
|
19
|
-
}
|
20
|
-
|
21
|
-
impl RbLazyFrame {
|
22
|
-
fn get_schema(&self) -> RbResult<SchemaRef> {
|
23
|
-
let schema = self.ldf.schema().map_err(RbPolarsErr::from)?;
|
24
|
-
Ok(schema)
|
25
|
-
}
|
18
|
+
pub ldf: RefCell<LazyFrame>,
|
26
19
|
}
|
27
20
|
|
28
21
|
impl From<LazyFrame> for RbLazyFrame {
|
29
22
|
fn from(ldf: LazyFrame) -> Self {
|
30
|
-
RbLazyFrame {
|
23
|
+
RbLazyFrame {
|
24
|
+
ldf: RefCell::new(ldf),
|
25
|
+
}
|
31
26
|
}
|
32
27
|
}
|
33
28
|
|
@@ -69,7 +64,7 @@ impl RbLazyFrame {
|
|
69
64
|
});
|
70
65
|
|
71
66
|
let lf = LazyJsonLineReader::new(path)
|
72
|
-
.with_infer_schema_length(infer_schema_length)
|
67
|
+
.with_infer_schema_length(infer_schema_length.and_then(NonZeroUsize::new))
|
73
68
|
.with_batch_size(batch_size)
|
74
69
|
.with_n_rows(n_rows)
|
75
70
|
.low_memory(low_memory)
|
@@ -163,8 +158,9 @@ impl RbLazyFrame {
|
|
163
158
|
row_index: Option<(String, IdxSize)>,
|
164
159
|
low_memory: bool,
|
165
160
|
use_statistics: bool,
|
166
|
-
hive_partitioning: bool
|
161
|
+
hive_partitioning: Option<bool>,
|
167
162
|
hive_schema: Option<Wrap<Schema>>,
|
163
|
+
try_parse_hive_dates: bool,
|
168
164
|
glob: bool,
|
169
165
|
) -> RbResult<Self> {
|
170
166
|
let parallel = parallel.0;
|
@@ -184,7 +180,9 @@ impl RbLazyFrame {
|
|
184
180
|
});
|
185
181
|
let hive_options = HiveOptions {
|
186
182
|
enabled: hive_partitioning,
|
183
|
+
hive_start_idx: 0,
|
187
184
|
schema: hive_schema,
|
185
|
+
try_parse_dates: try_parse_hive_dates,
|
188
186
|
};
|
189
187
|
|
190
188
|
let args = ScanArgsParquet {
|
@@ -236,13 +234,14 @@ impl RbLazyFrame {
|
|
236
234
|
|
237
235
|
pub fn write_json(&self, rb_f: Value) -> RbResult<()> {
|
238
236
|
let file = BufWriter::new(get_file_like(rb_f, true)?);
|
239
|
-
serde_json::to_writer(file, &self.ldf.logical_plan)
|
237
|
+
serde_json::to_writer(file, &self.ldf.borrow().logical_plan)
|
240
238
|
.map_err(|err| RbValueError::new_err(format!("{:?}", err)))?;
|
241
239
|
Ok(())
|
242
240
|
}
|
243
241
|
|
244
242
|
pub fn describe_plan(&self) -> RbResult<String> {
|
245
243
|
self.ldf
|
244
|
+
.borrow()
|
246
245
|
.describe_plan()
|
247
246
|
.map_err(RbPolarsErr::from)
|
248
247
|
.map_err(Into::into)
|
@@ -251,6 +250,7 @@ impl RbLazyFrame {
|
|
251
250
|
pub fn describe_optimized_plan(&self) -> RbResult<String> {
|
252
251
|
let result = self
|
253
252
|
.ldf
|
253
|
+
.borrow()
|
254
254
|
.describe_optimized_plan()
|
255
255
|
.map_err(RbPolarsErr::from)?;
|
256
256
|
Ok(result)
|
@@ -269,7 +269,7 @@ impl RbLazyFrame {
|
|
269
269
|
allow_streaming: bool,
|
270
270
|
_eager: bool,
|
271
271
|
) -> RbLazyFrame {
|
272
|
-
let ldf = self.ldf.clone();
|
272
|
+
let ldf = self.ldf.borrow().clone();
|
273
273
|
let mut ldf = ldf
|
274
274
|
.with_type_coercion(type_coercion)
|
275
275
|
.with_predicate_pushdown(predicate_pushdown)
|
@@ -293,12 +293,12 @@ impl RbLazyFrame {
|
|
293
293
|
maintain_order: bool,
|
294
294
|
multithreaded: bool,
|
295
295
|
) -> Self {
|
296
|
-
let ldf = self.ldf.clone();
|
296
|
+
let ldf = self.ldf.borrow().clone();
|
297
297
|
ldf.sort(
|
298
298
|
[&by_column],
|
299
299
|
SortMultipleOptions {
|
300
300
|
descending: vec![descending],
|
301
|
-
nulls_last,
|
301
|
+
nulls_last: vec![nulls_last],
|
302
302
|
multithreaded,
|
303
303
|
maintain_order,
|
304
304
|
},
|
@@ -310,11 +310,11 @@ impl RbLazyFrame {
|
|
310
310
|
&self,
|
311
311
|
by: RArray,
|
312
312
|
descending: Vec<bool>,
|
313
|
-
nulls_last: bool
|
313
|
+
nulls_last: Vec<bool>,
|
314
314
|
maintain_order: bool,
|
315
315
|
multithreaded: bool,
|
316
316
|
) -> RbResult<Self> {
|
317
|
-
let ldf = self.ldf.clone();
|
317
|
+
let ldf = self.ldf.borrow().clone();
|
318
318
|
let exprs = rb_exprs_to_exprs(by)?;
|
319
319
|
Ok(ldf
|
320
320
|
.sort_by_exprs(
|
@@ -330,12 +330,12 @@ impl RbLazyFrame {
|
|
330
330
|
}
|
331
331
|
|
332
332
|
pub fn cache(&self) -> Self {
|
333
|
-
let ldf = self.ldf.clone();
|
333
|
+
let ldf = self.ldf.borrow().clone();
|
334
334
|
ldf.cache().into()
|
335
335
|
}
|
336
336
|
|
337
337
|
pub fn collect(&self) -> RbResult<RbDataFrame> {
|
338
|
-
let ldf = self.ldf.clone();
|
338
|
+
let ldf = self.ldf.borrow().clone();
|
339
339
|
let df = ldf.collect().map_err(RbPolarsErr::from)?;
|
340
340
|
Ok(df.into())
|
341
341
|
}
|
@@ -346,7 +346,7 @@ impl RbLazyFrame {
|
|
346
346
|
path: PathBuf,
|
347
347
|
compression: String,
|
348
348
|
compression_level: Option<i32>,
|
349
|
-
statistics:
|
349
|
+
statistics: Wrap<StatisticsOptions>,
|
350
350
|
row_group_size: Option<usize>,
|
351
351
|
data_pagesize_limit: Option<usize>,
|
352
352
|
maintain_order: bool,
|
@@ -355,13 +355,13 @@ impl RbLazyFrame {
|
|
355
355
|
|
356
356
|
let options = ParquetWriteOptions {
|
357
357
|
compression,
|
358
|
-
statistics,
|
358
|
+
statistics: statistics.0,
|
359
359
|
row_group_size,
|
360
360
|
data_pagesize_limit,
|
361
361
|
maintain_order,
|
362
362
|
};
|
363
363
|
|
364
|
-
let ldf = self.ldf.clone();
|
364
|
+
let ldf = self.ldf.borrow().clone();
|
365
365
|
ldf.sink_parquet(path, options).map_err(RbPolarsErr::from)?;
|
366
366
|
Ok(())
|
367
367
|
}
|
@@ -377,7 +377,7 @@ impl RbLazyFrame {
|
|
377
377
|
maintain_order,
|
378
378
|
};
|
379
379
|
|
380
|
-
let ldf = self.ldf.clone();
|
380
|
+
let ldf = self.ldf.borrow().clone();
|
381
381
|
ldf.sink_ipc(path, options).map_err(RbPolarsErr::from)?;
|
382
382
|
Ok(())
|
383
383
|
}
|
@@ -395,6 +395,7 @@ impl RbLazyFrame {
|
|
395
395
|
datetime_format: Option<String>,
|
396
396
|
date_format: Option<String>,
|
397
397
|
time_format: Option<String>,
|
398
|
+
float_scientific: Option<bool>,
|
398
399
|
float_precision: Option<usize>,
|
399
400
|
null_value: Option<String>,
|
400
401
|
quote_style: Option<Wrap<QuoteStyle>>,
|
@@ -407,6 +408,7 @@ impl RbLazyFrame {
|
|
407
408
|
date_format,
|
408
409
|
time_format,
|
409
410
|
datetime_format,
|
411
|
+
float_scientific,
|
410
412
|
float_precision,
|
411
413
|
separator,
|
412
414
|
quote_char,
|
@@ -423,7 +425,7 @@ impl RbLazyFrame {
|
|
423
425
|
serialize_options,
|
424
426
|
};
|
425
427
|
|
426
|
-
let ldf = self.ldf.clone();
|
428
|
+
let ldf = self.ldf.borrow().clone();
|
427
429
|
ldf.sink_csv(path, options).map_err(RbPolarsErr::from)?;
|
428
430
|
Ok(())
|
429
431
|
}
|
@@ -431,36 +433,36 @@ impl RbLazyFrame {
|
|
431
433
|
pub fn sink_json(&self, path: PathBuf, maintain_order: bool) -> RbResult<()> {
|
432
434
|
let options = JsonWriterOptions { maintain_order };
|
433
435
|
|
434
|
-
let ldf = self.ldf.clone();
|
436
|
+
let ldf = self.ldf.borrow().clone();
|
435
437
|
ldf.sink_json(path, options).map_err(RbPolarsErr::from)?;
|
436
438
|
Ok(())
|
437
439
|
}
|
438
440
|
|
439
441
|
pub fn fetch(&self, n_rows: usize) -> RbResult<RbDataFrame> {
|
440
|
-
let ldf = self.ldf.clone();
|
442
|
+
let ldf = self.ldf.borrow().clone();
|
441
443
|
let df = ldf.fetch(n_rows).map_err(RbPolarsErr::from)?;
|
442
444
|
Ok(df.into())
|
443
445
|
}
|
444
446
|
|
445
447
|
pub fn filter(&self, predicate: &RbExpr) -> Self {
|
446
|
-
let ldf = self.ldf.clone();
|
448
|
+
let ldf = self.ldf.borrow().clone();
|
447
449
|
ldf.filter(predicate.inner.clone()).into()
|
448
450
|
}
|
449
451
|
|
450
452
|
pub fn select(&self, exprs: RArray) -> RbResult<Self> {
|
451
|
-
let ldf = self.ldf.clone();
|
453
|
+
let ldf = self.ldf.borrow().clone();
|
452
454
|
let exprs = rb_exprs_to_exprs(exprs)?;
|
453
455
|
Ok(ldf.select(exprs).into())
|
454
456
|
}
|
455
457
|
|
456
458
|
pub fn select_seq(&self, exprs: RArray) -> RbResult<Self> {
|
457
|
-
let ldf = self.ldf.clone();
|
459
|
+
let ldf = self.ldf.borrow().clone();
|
458
460
|
let exprs = rb_exprs_to_exprs(exprs)?;
|
459
461
|
Ok(ldf.select_seq(exprs).into())
|
460
462
|
}
|
461
463
|
|
462
464
|
pub fn group_by(&self, by: RArray, maintain_order: bool) -> RbResult<RbLazyGroupBy> {
|
463
|
-
let ldf = self.ldf.clone();
|
465
|
+
let ldf = self.ldf.borrow().clone();
|
464
466
|
let by = rb_exprs_to_exprs(by)?;
|
465
467
|
let lazy_gb = if maintain_order {
|
466
468
|
ldf.group_by_stable(by)
|
@@ -479,10 +481,9 @@ impl RbLazyFrame {
|
|
479
481
|
offset: String,
|
480
482
|
closed: Wrap<ClosedWindow>,
|
481
483
|
by: RArray,
|
482
|
-
check_sorted: bool,
|
483
484
|
) -> RbResult<RbLazyGroupBy> {
|
484
485
|
let closed_window = closed.0;
|
485
|
-
let ldf = self.ldf.clone();
|
486
|
+
let ldf = self.ldf.borrow().clone();
|
486
487
|
let by = rb_exprs_to_exprs(by)?;
|
487
488
|
let lazy_gb = ldf.rolling(
|
488
489
|
index_column.inner.clone(),
|
@@ -492,7 +493,6 @@ impl RbLazyFrame {
|
|
492
493
|
period: Duration::parse(&period),
|
493
494
|
offset: Duration::parse(&offset),
|
494
495
|
closed_window,
|
495
|
-
check_sorted,
|
496
496
|
},
|
497
497
|
);
|
498
498
|
|
@@ -513,11 +513,10 @@ impl RbLazyFrame {
|
|
513
513
|
closed: Wrap<ClosedWindow>,
|
514
514
|
by: RArray,
|
515
515
|
start_by: Wrap<StartBy>,
|
516
|
-
check_sorted: bool,
|
517
516
|
) -> RbResult<RbLazyGroupBy> {
|
518
517
|
let closed_window = closed.0;
|
519
518
|
let by = rb_exprs_to_exprs(by)?;
|
520
|
-
let ldf = self.ldf.clone();
|
519
|
+
let ldf = self.ldf.borrow().clone();
|
521
520
|
let lazy_gb = ldf.group_by_dynamic(
|
522
521
|
index_column.inner.clone(),
|
523
522
|
by,
|
@@ -529,7 +528,6 @@ impl RbLazyFrame {
|
|
529
528
|
include_boundaries,
|
530
529
|
closed_window,
|
531
530
|
start_by: start_by.0,
|
532
|
-
check_sorted,
|
533
531
|
..Default::default()
|
534
532
|
},
|
535
533
|
);
|
@@ -541,14 +539,14 @@ impl RbLazyFrame {
|
|
541
539
|
|
542
540
|
pub fn with_context(&self, contexts: RArray) -> RbResult<Self> {
|
543
541
|
let contexts = contexts
|
544
|
-
.
|
545
|
-
.map(
|
542
|
+
.into_iter()
|
543
|
+
.map(TryConvert::try_convert)
|
546
544
|
.collect::<RbResult<Vec<&RbLazyFrame>>>()?;
|
547
545
|
let contexts = contexts
|
548
546
|
.into_iter()
|
549
|
-
.map(|ldf| ldf.ldf.clone())
|
547
|
+
.map(|ldf| ldf.ldf.borrow().clone())
|
550
548
|
.collect::<Vec<_>>();
|
551
|
-
Ok(self.ldf.clone().with_context(contexts).into())
|
549
|
+
Ok(self.ldf.borrow().clone().with_context(contexts).into())
|
552
550
|
}
|
553
551
|
|
554
552
|
#[allow(clippy::too_many_arguments)]
|
@@ -566,8 +564,8 @@ impl RbLazyFrame {
|
|
566
564
|
tolerance: Option<Wrap<AnyValue<'_>>>,
|
567
565
|
tolerance_str: Option<String>,
|
568
566
|
) -> RbResult<Self> {
|
569
|
-
let ldf = self.ldf.clone();
|
570
|
-
let other = other.ldf.clone();
|
567
|
+
let ldf = self.ldf.borrow().clone();
|
568
|
+
let other = other.ldf.borrow().clone();
|
571
569
|
let left_on = left_on.inner.clone();
|
572
570
|
let right_on = right_on.inner.clone();
|
573
571
|
Ok(ldf
|
@@ -601,8 +599,8 @@ impl RbLazyFrame {
|
|
601
599
|
how: Wrap<JoinType>,
|
602
600
|
suffix: String,
|
603
601
|
) -> RbResult<Self> {
|
604
|
-
let ldf = self.ldf.clone();
|
605
|
-
let other = other.ldf.clone();
|
602
|
+
let ldf = self.ldf.borrow().clone();
|
603
|
+
let other = other.ldf.borrow().clone();
|
606
604
|
let left_on = rb_exprs_to_exprs(left_on)?;
|
607
605
|
let right_on = rb_exprs_to_exprs(right_on)?;
|
608
606
|
|
@@ -621,32 +619,32 @@ impl RbLazyFrame {
|
|
621
619
|
}
|
622
620
|
|
623
621
|
pub fn with_column(&self, expr: &RbExpr) -> Self {
|
624
|
-
let ldf = self.ldf.clone();
|
622
|
+
let ldf = self.ldf.borrow().clone();
|
625
623
|
ldf.with_column(expr.inner.clone()).into()
|
626
624
|
}
|
627
625
|
|
628
626
|
pub fn with_columns(&self, exprs: RArray) -> RbResult<Self> {
|
629
|
-
let ldf = self.ldf.clone();
|
627
|
+
let ldf = self.ldf.borrow().clone();
|
630
628
|
Ok(ldf.with_columns(rb_exprs_to_exprs(exprs)?).into())
|
631
629
|
}
|
632
630
|
|
633
631
|
pub fn with_columns_seq(&self, exprs: RArray) -> RbResult<Self> {
|
634
|
-
let ldf = self.ldf.clone();
|
632
|
+
let ldf = self.ldf.borrow().clone();
|
635
633
|
Ok(ldf.with_columns_seq(rb_exprs_to_exprs(exprs)?).into())
|
636
634
|
}
|
637
635
|
|
638
636
|
pub fn rename(&self, existing: Vec<String>, new: Vec<String>) -> Self {
|
639
|
-
let ldf = self.ldf.clone();
|
637
|
+
let ldf = self.ldf.borrow().clone();
|
640
638
|
ldf.rename(existing, new).into()
|
641
639
|
}
|
642
640
|
|
643
641
|
pub fn reverse(&self) -> Self {
|
644
|
-
let ldf = self.ldf.clone();
|
642
|
+
let ldf = self.ldf.borrow().clone();
|
645
643
|
ldf.reverse().into()
|
646
644
|
}
|
647
645
|
|
648
646
|
pub fn shift(&self, n: &RbExpr, fill_value: Option<&RbExpr>) -> Self {
|
649
|
-
let lf = self.ldf.clone();
|
647
|
+
let lf = self.ldf.borrow().clone();
|
650
648
|
let out = match fill_value {
|
651
649
|
Some(v) => lf.shift_and_fill(n.inner.clone(), v.inner.clone()),
|
652
650
|
None => lf.shift(n.inner.clone()),
|
@@ -655,48 +653,48 @@ impl RbLazyFrame {
|
|
655
653
|
}
|
656
654
|
|
657
655
|
pub fn fill_nan(&self, fill_value: &RbExpr) -> Self {
|
658
|
-
let ldf = self.ldf.clone();
|
656
|
+
let ldf = self.ldf.borrow().clone();
|
659
657
|
ldf.fill_nan(fill_value.inner.clone()).into()
|
660
658
|
}
|
661
659
|
|
662
660
|
pub fn min(&self) -> Self {
|
663
|
-
let ldf = self.ldf.clone();
|
661
|
+
let ldf = self.ldf.borrow().clone();
|
664
662
|
let out = ldf.min();
|
665
663
|
out.into()
|
666
664
|
}
|
667
665
|
|
668
666
|
pub fn max(&self) -> Self {
|
669
|
-
let ldf = self.ldf.clone();
|
667
|
+
let ldf = self.ldf.borrow().clone();
|
670
668
|
let out = ldf.max();
|
671
669
|
out.into()
|
672
670
|
}
|
673
671
|
|
674
672
|
pub fn sum(&self) -> Self {
|
675
|
-
let ldf = self.ldf.clone();
|
673
|
+
let ldf = self.ldf.borrow().clone();
|
676
674
|
let out = ldf.sum();
|
677
675
|
out.into()
|
678
676
|
}
|
679
677
|
|
680
678
|
pub fn mean(&self) -> Self {
|
681
|
-
let ldf = self.ldf.clone();
|
679
|
+
let ldf = self.ldf.borrow().clone();
|
682
680
|
let out = ldf.mean();
|
683
681
|
out.into()
|
684
682
|
}
|
685
683
|
|
686
684
|
pub fn std(&self, ddof: u8) -> Self {
|
687
|
-
let ldf = self.ldf.clone();
|
685
|
+
let ldf = self.ldf.borrow().clone();
|
688
686
|
let out = ldf.std(ddof);
|
689
687
|
out.into()
|
690
688
|
}
|
691
689
|
|
692
690
|
pub fn var(&self, ddof: u8) -> Self {
|
693
|
-
let ldf = self.ldf.clone();
|
691
|
+
let ldf = self.ldf.borrow().clone();
|
694
692
|
let out = ldf.var(ddof);
|
695
693
|
out.into()
|
696
694
|
}
|
697
695
|
|
698
696
|
pub fn median(&self) -> Self {
|
699
|
-
let ldf = self.ldf.clone();
|
697
|
+
let ldf = self.ldf.borrow().clone();
|
700
698
|
let out = ldf.median();
|
701
699
|
out.into()
|
702
700
|
}
|
@@ -706,19 +704,19 @@ impl RbLazyFrame {
|
|
706
704
|
quantile: &RbExpr,
|
707
705
|
interpolation: Wrap<QuantileInterpolOptions>,
|
708
706
|
) -> Self {
|
709
|
-
let ldf = self.ldf.clone();
|
707
|
+
let ldf = self.ldf.borrow().clone();
|
710
708
|
let out = ldf.quantile(quantile.inner.clone(), interpolation.0);
|
711
709
|
out.into()
|
712
710
|
}
|
713
711
|
|
714
712
|
pub fn explode(&self, column: RArray) -> RbResult<Self> {
|
715
|
-
let ldf = self.ldf.clone();
|
713
|
+
let ldf = self.ldf.borrow().clone();
|
716
714
|
let column = rb_exprs_to_exprs(column)?;
|
717
715
|
Ok(ldf.explode(column).into())
|
718
716
|
}
|
719
717
|
|
720
718
|
pub fn null_count(&self) -> Self {
|
721
|
-
let ldf = self.ldf.clone();
|
719
|
+
let ldf = self.ldf.borrow().clone();
|
722
720
|
ldf.null_count().into()
|
723
721
|
}
|
724
722
|
|
@@ -728,7 +726,7 @@ impl RbLazyFrame {
|
|
728
726
|
subset: Option<Vec<String>>,
|
729
727
|
keep: Wrap<UniqueKeepStrategy>,
|
730
728
|
) -> RbResult<Self> {
|
731
|
-
let ldf = self.ldf.clone();
|
729
|
+
let ldf = self.ldf.borrow().clone();
|
732
730
|
Ok(match maintain_order {
|
733
731
|
true => ldf.unique_stable(subset, keep.0),
|
734
732
|
false => ldf.unique(subset, keep.0),
|
@@ -737,75 +735,63 @@ impl RbLazyFrame {
|
|
737
735
|
}
|
738
736
|
|
739
737
|
pub fn drop_nulls(&self, subset: Option<Vec<String>>) -> Self {
|
740
|
-
let ldf = self.ldf.clone();
|
738
|
+
let ldf = self.ldf.borrow().clone();
|
741
739
|
ldf.drop_nulls(subset.map(|v| v.into_iter().map(|s| col(&s)).collect()))
|
742
740
|
.into()
|
743
741
|
}
|
744
742
|
|
745
743
|
pub fn slice(&self, offset: i64, len: Option<IdxSize>) -> Self {
|
746
|
-
let ldf = self.ldf.clone();
|
744
|
+
let ldf = self.ldf.borrow().clone();
|
747
745
|
ldf.slice(offset, len.unwrap_or(IdxSize::MAX)).into()
|
748
746
|
}
|
749
747
|
|
750
748
|
pub fn tail(&self, n: IdxSize) -> Self {
|
751
|
-
let ldf = self.ldf.clone();
|
749
|
+
let ldf = self.ldf.borrow().clone();
|
752
750
|
ldf.tail(n).into()
|
753
751
|
}
|
754
752
|
|
755
|
-
pub fn
|
753
|
+
pub fn unpivot(
|
756
754
|
&self,
|
757
|
-
|
758
|
-
|
755
|
+
on: Vec<String>,
|
756
|
+
index: Vec<String>,
|
759
757
|
value_name: Option<String>,
|
760
758
|
variable_name: Option<String>,
|
761
759
|
streamable: bool,
|
762
760
|
) -> Self {
|
763
|
-
let args =
|
764
|
-
|
765
|
-
|
761
|
+
let args = UnpivotArgs {
|
762
|
+
on: strings_to_smartstrings(on),
|
763
|
+
index: strings_to_smartstrings(index),
|
766
764
|
value_name: value_name.map(|s| s.into()),
|
767
765
|
variable_name: variable_name.map(|s| s.into()),
|
768
766
|
streamable,
|
769
767
|
};
|
770
768
|
|
771
|
-
let ldf = self.ldf.clone();
|
772
|
-
ldf.
|
769
|
+
let ldf = self.ldf.borrow().clone();
|
770
|
+
ldf.unpivot(args).into()
|
773
771
|
}
|
774
772
|
|
775
773
|
pub fn with_row_index(&self, name: String, offset: Option<IdxSize>) -> Self {
|
776
|
-
let ldf = self.ldf.clone();
|
774
|
+
let ldf = self.ldf.borrow().clone();
|
777
775
|
ldf.with_row_index(&name, offset).into()
|
778
776
|
}
|
779
777
|
|
780
778
|
pub fn drop(&self, cols: Vec<String>) -> Self {
|
781
|
-
let ldf = self.ldf.clone();
|
779
|
+
let ldf = self.ldf.borrow().clone();
|
782
780
|
ldf.drop(cols).into()
|
783
781
|
}
|
784
782
|
|
785
783
|
pub fn cast_all(&self, dtype: Wrap<DataType>, strict: bool) -> Self {
|
786
|
-
self.ldf.clone().cast_all(dtype.0, strict).into()
|
784
|
+
self.ldf.borrow().clone().cast_all(dtype.0, strict).into()
|
787
785
|
}
|
788
786
|
|
789
787
|
pub fn clone(&self) -> Self {
|
790
|
-
self.ldf.clone().into()
|
791
|
-
}
|
792
|
-
|
793
|
-
pub fn columns(&self) -> RbResult<RArray> {
|
794
|
-
let schema = self.get_schema()?;
|
795
|
-
let iter = schema.iter_names().map(|s| s.as_str());
|
796
|
-
Ok(RArray::from_iter(iter))
|
788
|
+
self.ldf.borrow().clone().into()
|
797
789
|
}
|
798
790
|
|
799
|
-
pub fn
|
800
|
-
let schema = self.
|
801
|
-
let iter = schema.iter_dtypes().map(|dt| Wrap(dt.clone()).into_value());
|
802
|
-
Ok(RArray::from_iter(iter))
|
803
|
-
}
|
791
|
+
pub fn collect_schema(&self) -> RbResult<RHash> {
|
792
|
+
let schema = self.ldf.borrow_mut().schema().map_err(RbPolarsErr::from)?;
|
804
793
|
|
805
|
-
pub fn schema(&self) -> RbResult<RHash> {
|
806
|
-
let schema = self.get_schema()?;
|
807
794
|
let schema_dict = RHash::new();
|
808
|
-
|
809
795
|
schema.iter_fields().for_each(|fld| {
|
810
796
|
// TODO remove unwrap
|
811
797
|
schema_dict
|
@@ -819,23 +805,20 @@ impl RbLazyFrame {
|
|
819
805
|
}
|
820
806
|
|
821
807
|
pub fn unnest(&self, cols: Vec<String>) -> Self {
|
822
|
-
self.ldf.clone().unnest(cols).into()
|
823
|
-
}
|
824
|
-
|
825
|
-
pub fn width(&self) -> RbResult<usize> {
|
826
|
-
Ok(self.get_schema()?.len())
|
808
|
+
self.ldf.borrow().clone().unnest(cols).into()
|
827
809
|
}
|
828
810
|
|
829
811
|
pub fn count(&self) -> Self {
|
830
|
-
let ldf = self.ldf.clone();
|
812
|
+
let ldf = self.ldf.borrow().clone();
|
831
813
|
ldf.count().into()
|
832
814
|
}
|
833
815
|
|
834
816
|
pub fn merge_sorted(&self, other: &Self, key: String) -> RbResult<Self> {
|
835
817
|
let out = self
|
836
818
|
.ldf
|
819
|
+
.borrow()
|
837
820
|
.clone()
|
838
|
-
.merge_sorted(other.ldf.clone(), &key)
|
821
|
+
.merge_sorted(other.ldf.borrow().clone(), &key)
|
839
822
|
.map_err(RbPolarsErr::from)?;
|
840
823
|
Ok(out.into())
|
841
824
|
}
|