polars-df 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 
     | 
    
         
             
                }
         
     |