polars-df 0.6.0 → 0.7.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 +12 -0
- data/Cargo.lock +468 -538
- data/Cargo.toml +1 -0
- data/README.md +8 -7
- data/ext/polars/Cargo.toml +17 -10
- data/ext/polars/src/batched_csv.rs +26 -26
- data/ext/polars/src/conversion.rs +121 -93
- data/ext/polars/src/dataframe.rs +116 -71
- data/ext/polars/src/error.rs +0 -5
- data/ext/polars/src/expr/binary.rs +18 -6
- data/ext/polars/src/expr/datetime.rs +10 -12
- data/ext/polars/src/expr/general.rs +68 -284
- data/ext/polars/src/expr/list.rs +17 -9
- data/ext/polars/src/{expr.rs → expr/mod.rs} +4 -2
- data/ext/polars/src/expr/name.rs +44 -0
- data/ext/polars/src/expr/rolling.rs +196 -0
- data/ext/polars/src/expr/string.rs +85 -58
- data/ext/polars/src/file.rs +3 -3
- data/ext/polars/src/functions/aggregation.rs +35 -0
- data/ext/polars/src/functions/eager.rs +7 -31
- data/ext/polars/src/functions/io.rs +10 -10
- data/ext/polars/src/functions/lazy.rs +66 -41
- data/ext/polars/src/functions/meta.rs +30 -0
- data/ext/polars/src/functions/misc.rs +8 -0
- data/ext/polars/src/functions/mod.rs +5 -0
- data/ext/polars/src/functions/random.rs +6 -0
- data/ext/polars/src/functions/range.rs +46 -0
- data/ext/polars/src/functions/string_cache.rs +11 -0
- data/ext/polars/src/functions/whenthen.rs +7 -7
- data/ext/polars/src/lazyframe.rs +47 -42
- data/ext/polars/src/lib.rs +156 -72
- data/ext/polars/src/{apply → map}/dataframe.rs +28 -33
- data/ext/polars/src/{apply → map}/mod.rs +3 -3
- data/ext/polars/src/{apply → map}/series.rs +12 -16
- data/ext/polars/src/object.rs +1 -1
- data/ext/polars/src/rb_modules.rs +22 -7
- data/ext/polars/src/series/construction.rs +4 -4
- data/ext/polars/src/series/export.rs +2 -2
- data/ext/polars/src/series/set_at_idx.rs +33 -17
- data/ext/polars/src/series.rs +7 -27
- data/ext/polars/src/sql.rs +46 -0
- data/lib/polars/config.rb +530 -0
- data/lib/polars/data_frame.rb +115 -82
- data/lib/polars/date_time_expr.rb +13 -18
- data/lib/polars/date_time_name_space.rb +5 -25
- data/lib/polars/dynamic_group_by.rb +2 -2
- data/lib/polars/expr.rb +177 -94
- data/lib/polars/functions.rb +29 -37
- data/lib/polars/group_by.rb +38 -55
- data/lib/polars/io.rb +37 -2
- data/lib/polars/lazy_frame.rb +93 -66
- data/lib/polars/lazy_functions.rb +36 -48
- data/lib/polars/lazy_group_by.rb +7 -8
- data/lib/polars/list_expr.rb +12 -8
- data/lib/polars/list_name_space.rb +2 -2
- data/lib/polars/name_expr.rb +198 -0
- data/lib/polars/rolling_group_by.rb +2 -2
- data/lib/polars/series.rb +26 -13
- data/lib/polars/sql_context.rb +194 -0
- data/lib/polars/string_expr.rb +114 -60
- data/lib/polars/string_name_space.rb +19 -4
- data/lib/polars/utils.rb +12 -0
- data/lib/polars/version.rb +1 -1
- data/lib/polars.rb +3 -0
- metadata +18 -7
- /data/ext/polars/src/{apply → map}/lazy.rs +0 -0
data/ext/polars/src/lib.rs
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
mod apply;
|
2
1
|
mod batched_csv;
|
3
2
|
mod conversion;
|
4
3
|
mod dataframe;
|
@@ -8,10 +7,12 @@ mod file;
|
|
8
7
|
mod functions;
|
9
8
|
mod lazyframe;
|
10
9
|
mod lazygroupby;
|
10
|
+
mod map;
|
11
11
|
mod object;
|
12
12
|
mod prelude;
|
13
13
|
pub(crate) mod rb_modules;
|
14
14
|
mod series;
|
15
|
+
mod sql;
|
15
16
|
mod utils;
|
16
17
|
|
17
18
|
use batched_csv::RbBatchedCsv;
|
@@ -20,11 +21,12 @@ use dataframe::RbDataFrame;
|
|
20
21
|
use error::{RbPolarsErr, RbTypeError, RbValueError};
|
21
22
|
use expr::rb_exprs_to_exprs;
|
22
23
|
use expr::RbExpr;
|
23
|
-
use functions::whenthen::{
|
24
|
+
use functions::whenthen::{RbThen, RbWhen};
|
24
25
|
use lazyframe::RbLazyFrame;
|
25
26
|
use lazygroupby::RbLazyGroupBy;
|
26
|
-
use magnus::{define_module, function, method, prelude::*, Error};
|
27
|
+
use magnus::{define_module, function, method, prelude::*, Error, Ruby};
|
27
28
|
use series::RbSeries;
|
29
|
+
use sql::RbSQLContext;
|
28
30
|
|
29
31
|
#[cfg(target_os = "linux")]
|
30
32
|
use jemallocator::Jemalloc;
|
@@ -43,15 +45,19 @@ static GLOBAL: MiMalloc = MiMalloc;
|
|
43
45
|
type RbResult<T> = Result<T, Error>;
|
44
46
|
|
45
47
|
#[magnus::init]
|
46
|
-
fn init() -> RbResult<()> {
|
48
|
+
fn init(ruby: &Ruby) -> RbResult<()> {
|
47
49
|
let module = define_module("Polars")?;
|
48
50
|
module.define_singleton_method(
|
49
51
|
"_dtype_cols",
|
50
52
|
function!(crate::functions::lazy::dtype_cols2, 1),
|
51
53
|
)?;
|
54
|
+
module.define_singleton_method(
|
55
|
+
"_concat_lf_diagonal",
|
56
|
+
function!(crate::functions::lazy::concat_lf_diagonal, 4),
|
57
|
+
)?;
|
52
58
|
module.define_singleton_method(
|
53
59
|
"_rb_duration",
|
54
|
-
function!(crate::functions::lazy::duration,
|
60
|
+
function!(crate::functions::lazy::duration, 9),
|
55
61
|
)?;
|
56
62
|
module.define_singleton_method(
|
57
63
|
"_concat_df",
|
@@ -62,12 +68,12 @@ fn init() -> RbResult<()> {
|
|
62
68
|
function!(crate::functions::lazy::concat_lf, 4),
|
63
69
|
)?;
|
64
70
|
module.define_singleton_method(
|
65
|
-
"
|
66
|
-
function!(crate::functions::eager::
|
71
|
+
"_concat_df_diagonal",
|
72
|
+
function!(crate::functions::eager::concat_df_diagonal, 1),
|
67
73
|
)?;
|
68
74
|
module.define_singleton_method(
|
69
|
-
"
|
70
|
-
function!(crate::functions::eager::
|
75
|
+
"_concat_df_horizontal",
|
76
|
+
function!(crate::functions::eager::concat_df_horizontal, 1),
|
71
77
|
)?;
|
72
78
|
module.define_singleton_method(
|
73
79
|
"_concat_series",
|
@@ -87,15 +93,35 @@ fn init() -> RbResult<()> {
|
|
87
93
|
)?;
|
88
94
|
module.define_singleton_method(
|
89
95
|
"_rb_date_range",
|
90
|
-
function!(crate::functions::
|
96
|
+
function!(crate::functions::range::date_range, 6),
|
91
97
|
)?;
|
92
98
|
module.define_singleton_method(
|
93
99
|
"_coalesce_exprs",
|
94
100
|
function!(crate::functions::lazy::coalesce, 1),
|
95
101
|
)?;
|
96
102
|
module.define_singleton_method(
|
97
|
-
"
|
98
|
-
function!(crate::functions::
|
103
|
+
"_all_horizontal",
|
104
|
+
function!(crate::functions::aggregation::all_horizontal, 1),
|
105
|
+
)?;
|
106
|
+
module.define_singleton_method(
|
107
|
+
"_any_horizontal",
|
108
|
+
function!(crate::functions::aggregation::any_horizontal, 1),
|
109
|
+
)?;
|
110
|
+
module.define_singleton_method(
|
111
|
+
"_max_horizontal",
|
112
|
+
function!(crate::functions::aggregation::max_horizontal, 1),
|
113
|
+
)?;
|
114
|
+
module.define_singleton_method(
|
115
|
+
"_min_horizontal",
|
116
|
+
function!(crate::functions::aggregation::min_horizontal, 1),
|
117
|
+
)?;
|
118
|
+
module.define_singleton_method(
|
119
|
+
"_sum_horizontal",
|
120
|
+
function!(crate::functions::aggregation::sum_horizontal, 1),
|
121
|
+
)?;
|
122
|
+
module.define_singleton_method(
|
123
|
+
"_dtype_str_repr",
|
124
|
+
function!(crate::functions::misc::dtype_str_repr, 1),
|
99
125
|
)?;
|
100
126
|
module.define_singleton_method(
|
101
127
|
"_as_struct",
|
@@ -109,17 +135,46 @@ fn init() -> RbResult<()> {
|
|
109
135
|
"_get_idx_type",
|
110
136
|
function!(crate::functions::meta::get_idx_type, 0),
|
111
137
|
)?;
|
138
|
+
module.define_singleton_method(
|
139
|
+
"_threadpool_size",
|
140
|
+
function!(crate::functions::meta::threadpool_size, 0),
|
141
|
+
)?;
|
142
|
+
module.define_singleton_method(
|
143
|
+
"_enable_string_cache",
|
144
|
+
function!(crate::functions::string_cache::enable_string_cache, 0),
|
145
|
+
)?;
|
146
|
+
module.define_singleton_method(
|
147
|
+
"_disable_string_cache",
|
148
|
+
function!(crate::functions::string_cache::disable_string_cache, 0),
|
149
|
+
)?;
|
150
|
+
module.define_singleton_method(
|
151
|
+
"_using_string_cache",
|
152
|
+
function!(crate::functions::string_cache::using_string_cache, 0),
|
153
|
+
)?;
|
154
|
+
module.define_singleton_method(
|
155
|
+
"_set_float_fmt",
|
156
|
+
function!(crate::functions::meta::set_float_fmt, 1),
|
157
|
+
)?;
|
158
|
+
module.define_singleton_method(
|
159
|
+
"_get_float_fmt",
|
160
|
+
function!(crate::functions::meta::get_float_fmt, 0),
|
161
|
+
)?;
|
162
|
+
module.define_singleton_method(
|
163
|
+
"_set_random_seed",
|
164
|
+
function!(crate::functions::random::set_random_seed, 1),
|
165
|
+
)?;
|
112
166
|
|
113
|
-
let class = module.define_class("RbBatchedCsv",
|
167
|
+
let class = module.define_class("RbBatchedCsv", ruby.class_object())?;
|
114
168
|
class.define_singleton_method("new", function!(RbBatchedCsv::new, -1))?;
|
115
169
|
class.define_method("next_batches", method!(RbBatchedCsv::next_batches, 1))?;
|
116
170
|
|
117
|
-
let class = module.define_class("RbDataFrame",
|
171
|
+
let class = module.define_class("RbDataFrame", ruby.class_object())?;
|
118
172
|
class.define_singleton_method("new", function!(RbDataFrame::init, 1))?;
|
119
173
|
class.define_singleton_method("read_csv", function!(RbDataFrame::read_csv, -1))?;
|
120
174
|
class.define_singleton_method("read_parquet", function!(RbDataFrame::read_parquet, 9))?;
|
121
175
|
class.define_singleton_method("read_ipc", function!(RbDataFrame::read_ipc, 6))?;
|
122
176
|
class.define_singleton_method("read_avro", function!(RbDataFrame::read_avro, 4))?;
|
177
|
+
class.define_singleton_method("read_rows", function!(RbDataFrame::read_rows, 3))?;
|
123
178
|
class.define_singleton_method("read_hashes", function!(RbDataFrame::read_hashes, 3))?;
|
124
179
|
class.define_singleton_method("read_hash", function!(RbDataFrame::read_hash, 1))?;
|
125
180
|
class.define_singleton_method("read_json", function!(RbDataFrame::read_json, 1))?;
|
@@ -202,10 +257,10 @@ fn init() -> RbResult<()> {
|
|
202
257
|
class.define_method("std", method!(RbDataFrame::std, 1))?;
|
203
258
|
class.define_method("var", method!(RbDataFrame::var, 1))?;
|
204
259
|
class.define_method("median", method!(RbDataFrame::median, 0))?;
|
205
|
-
class.define_method("
|
206
|
-
class.define_method("
|
207
|
-
class.define_method("
|
208
|
-
class.define_method("
|
260
|
+
class.define_method("mean_horizontal", method!(RbDataFrame::mean_horizontal, 1))?;
|
261
|
+
class.define_method("max_horizontal", method!(RbDataFrame::max_horizontal, 0))?;
|
262
|
+
class.define_method("min_horizontal", method!(RbDataFrame::min_horizontal, 0))?;
|
263
|
+
class.define_method("sum_horizontal", method!(RbDataFrame::sum_horizontal, 1))?;
|
209
264
|
class.define_method("quantile", method!(RbDataFrame::quantile, 2))?;
|
210
265
|
class.define_method("to_dummies", method!(RbDataFrame::to_dummies, 3))?;
|
211
266
|
class.define_method("null_count", method!(RbDataFrame::null_count, 0))?;
|
@@ -217,7 +272,7 @@ fn init() -> RbResult<()> {
|
|
217
272
|
class.define_method("to_struct", method!(RbDataFrame::to_struct, 1))?;
|
218
273
|
class.define_method("unnest", method!(RbDataFrame::unnest, 1))?;
|
219
274
|
|
220
|
-
let class = module.define_class("RbExpr",
|
275
|
+
let class = module.define_class("RbExpr", ruby.class_object())?;
|
221
276
|
class.define_method("+", method!(RbExpr::add, 1))?;
|
222
277
|
class.define_method("-", method!(RbExpr::sub, 1))?;
|
223
278
|
class.define_method("*", method!(RbExpr::mul, 1))?;
|
@@ -264,15 +319,16 @@ fn init() -> RbResult<()> {
|
|
264
319
|
class.define_method("arg_sort", method!(RbExpr::arg_sort, 2))?;
|
265
320
|
class.define_method("top_k", method!(RbExpr::top_k, 1))?;
|
266
321
|
class.define_method("bottom_k", method!(RbExpr::bottom_k, 1))?;
|
322
|
+
class.define_method("peak_min", method!(RbExpr::peak_min, 0))?;
|
323
|
+
class.define_method("peak_max", method!(RbExpr::peak_max, 0))?;
|
267
324
|
class.define_method("arg_max", method!(RbExpr::arg_max, 0))?;
|
268
325
|
class.define_method("arg_min", method!(RbExpr::arg_min, 0))?;
|
269
326
|
class.define_method("search_sorted", method!(RbExpr::search_sorted, 2))?;
|
270
|
-
class.define_method("
|
327
|
+
class.define_method("gather", method!(RbExpr::gather, 1))?;
|
271
328
|
class.define_method("sort_by", method!(RbExpr::sort_by, 2))?;
|
272
329
|
class.define_method("backward_fill", method!(RbExpr::backward_fill, 1))?;
|
273
330
|
class.define_method("forward_fill", method!(RbExpr::forward_fill, 1))?;
|
274
|
-
class.define_method("shift", method!(RbExpr::shift,
|
275
|
-
class.define_method("shift_and_fill", method!(RbExpr::shift_and_fill, 2))?;
|
331
|
+
class.define_method("shift", method!(RbExpr::shift, 2))?;
|
276
332
|
class.define_method("fill_null", method!(RbExpr::fill_null, 1))?;
|
277
333
|
class.define_method(
|
278
334
|
"fill_null_with_strategy",
|
@@ -286,10 +342,11 @@ fn init() -> RbResult<()> {
|
|
286
342
|
class.define_method("std", method!(RbExpr::std, 1))?;
|
287
343
|
class.define_method("var", method!(RbExpr::var, 1))?;
|
288
344
|
class.define_method("is_unique", method!(RbExpr::is_unique, 0))?;
|
289
|
-
class.define_method("
|
290
|
-
class.define_method("
|
345
|
+
class.define_method("approx_n_unique", method!(RbExpr::approx_n_unique, 0))?;
|
346
|
+
class.define_method("is_first_distinct", method!(RbExpr::is_first_distinct, 0))?;
|
347
|
+
class.define_method("is_last_distinct", method!(RbExpr::is_last_distinct, 0))?;
|
291
348
|
class.define_method("explode", method!(RbExpr::explode, 0))?;
|
292
|
-
class.define_method("
|
349
|
+
class.define_method("gather_every", method!(RbExpr::gather_every, 1))?;
|
293
350
|
class.define_method("tail", method!(RbExpr::tail, 1))?;
|
294
351
|
class.define_method("head", method!(RbExpr::head, 1))?;
|
295
352
|
class.define_method("slice", method!(RbExpr::slice, 2))?;
|
@@ -299,8 +356,6 @@ fn init() -> RbResult<()> {
|
|
299
356
|
class.define_method("floor", method!(RbExpr::floor, 0))?;
|
300
357
|
class.define_method("ceil", method!(RbExpr::ceil, 0))?;
|
301
358
|
class.define_method("clip", method!(RbExpr::clip, 2))?;
|
302
|
-
class.define_method("clip_min", method!(RbExpr::clip_min, 1))?;
|
303
|
-
class.define_method("clip_max", method!(RbExpr::clip_max, 1))?;
|
304
359
|
class.define_method("abs", method!(RbExpr::abs, 0))?;
|
305
360
|
class.define_method("sin", method!(RbExpr::sin, 0))?;
|
306
361
|
class.define_method("cos", method!(RbExpr::cos, 0))?;
|
@@ -323,29 +378,37 @@ fn init() -> RbResult<()> {
|
|
323
378
|
class.define_method("is_in", method!(RbExpr::is_in, 1))?;
|
324
379
|
class.define_method("repeat_by", method!(RbExpr::repeat_by, 1))?;
|
325
380
|
class.define_method("pow", method!(RbExpr::pow, 1))?;
|
326
|
-
class.define_method("
|
327
|
-
class.define_method("
|
328
|
-
class.define_method("
|
329
|
-
class.define_method("
|
381
|
+
class.define_method("cum_sum", method!(RbExpr::cum_sum, 1))?;
|
382
|
+
class.define_method("cum_max", method!(RbExpr::cum_max, 1))?;
|
383
|
+
class.define_method("cum_min", method!(RbExpr::cum_min, 1))?;
|
384
|
+
class.define_method("cum_prod", method!(RbExpr::cum_prod, 1))?;
|
330
385
|
class.define_method("product", method!(RbExpr::product, 0))?;
|
331
386
|
class.define_method("shrink_dtype", method!(RbExpr::shrink_dtype, 0))?;
|
332
387
|
class.define_method("str_to_date", method!(RbExpr::str_to_date, 4))?;
|
333
|
-
class.define_method("str_to_datetime", method!(RbExpr::str_to_datetime,
|
388
|
+
class.define_method("str_to_datetime", method!(RbExpr::str_to_datetime, 7))?;
|
334
389
|
class.define_method("str_to_time", method!(RbExpr::str_to_time, 3))?;
|
335
|
-
class.define_method("
|
336
|
-
class.define_method(
|
337
|
-
|
390
|
+
class.define_method("str_strip_chars", method!(RbExpr::str_strip_chars, 1))?;
|
391
|
+
class.define_method(
|
392
|
+
"str_strip_chars_start",
|
393
|
+
method!(RbExpr::str_strip_chars_start, 1),
|
394
|
+
)?;
|
395
|
+
class.define_method(
|
396
|
+
"str_strip_chars_end",
|
397
|
+
method!(RbExpr::str_strip_chars_end, 1),
|
398
|
+
)?;
|
399
|
+
class.define_method("str_strip_prefix", method!(RbExpr::str_strip_prefix, 1))?;
|
400
|
+
class.define_method("str_strip_suffix", method!(RbExpr::str_strip_suffix, 1))?;
|
338
401
|
class.define_method("str_slice", method!(RbExpr::str_slice, 2))?;
|
339
402
|
class.define_method("str_explode", method!(RbExpr::str_explode, 0))?;
|
340
403
|
class.define_method("str_to_uppercase", method!(RbExpr::str_to_uppercase, 0))?;
|
341
404
|
class.define_method("str_to_lowercase", method!(RbExpr::str_to_lowercase, 0))?;
|
342
|
-
class.define_method("
|
343
|
-
class.define_method("
|
405
|
+
class.define_method("str_len_bytes", method!(RbExpr::str_len_bytes, 0))?;
|
406
|
+
class.define_method("str_len_chars", method!(RbExpr::str_len_chars, 0))?;
|
344
407
|
class.define_method("str_replace_n", method!(RbExpr::str_replace_n, 4))?;
|
345
408
|
class.define_method("str_replace_all", method!(RbExpr::str_replace_all, 3))?;
|
346
409
|
class.define_method("str_zfill", method!(RbExpr::str_zfill, 1))?;
|
347
|
-
class.define_method("
|
348
|
-
class.define_method("
|
410
|
+
class.define_method("str_pad_start", method!(RbExpr::str_pad_start, 2))?;
|
411
|
+
class.define_method("str_pad_end", method!(RbExpr::str_pad_end, 2))?;
|
349
412
|
class.define_method("str_contains", method!(RbExpr::str_contains, 3))?;
|
350
413
|
class.define_method("str_ends_with", method!(RbExpr::str_ends_with, 1))?;
|
351
414
|
class.define_method("str_starts_with", method!(RbExpr::str_starts_with, 1))?;
|
@@ -359,7 +422,7 @@ fn init() -> RbResult<()> {
|
|
359
422
|
class.define_method("str_hex_decode", method!(RbExpr::str_hex_decode, 1))?;
|
360
423
|
class.define_method("str_base64_encode", method!(RbExpr::str_base64_encode, 0))?;
|
361
424
|
class.define_method("str_base64_decode", method!(RbExpr::str_base64_decode, 1))?;
|
362
|
-
class.define_method("
|
425
|
+
class.define_method("str_to_integer", method!(RbExpr::str_to_integer, 2))?;
|
363
426
|
class.define_method("str_json_extract", method!(RbExpr::str_json_extract, 2))?;
|
364
427
|
class.define_method("binary_hex_encode", method!(RbExpr::bin_hex_encode, 0))?;
|
365
428
|
class.define_method("binary_hex_decode", method!(RbExpr::bin_hex_decode, 1))?;
|
@@ -377,7 +440,7 @@ fn init() -> RbResult<()> {
|
|
377
440
|
)?;
|
378
441
|
class.define_method("str_extract", method!(RbExpr::str_extract, 2))?;
|
379
442
|
class.define_method("str_extract_all", method!(RbExpr::str_extract_all, 1))?;
|
380
|
-
class.define_method("
|
443
|
+
class.define_method("str_count_matches", method!(RbExpr::str_count_matches, 2))?;
|
381
444
|
class.define_method("strftime", method!(RbExpr::dt_to_string, 1))?;
|
382
445
|
class.define_method("str_split", method!(RbExpr::str_split, 1))?;
|
383
446
|
class.define_method(
|
@@ -390,9 +453,9 @@ fn init() -> RbResult<()> {
|
|
390
453
|
method!(RbExpr::str_split_exact_inclusive, 2),
|
391
454
|
)?;
|
392
455
|
class.define_method("str_splitn", method!(RbExpr::str_splitn, 2))?;
|
393
|
-
class.define_method("
|
456
|
+
class.define_method("list_len", method!(RbExpr::list_len, 0))?;
|
394
457
|
class.define_method("list_contains", method!(RbExpr::list_contains, 1))?;
|
395
|
-
class.define_method("
|
458
|
+
class.define_method("list_count_matches", method!(RbExpr::list_count_matches, 1))?;
|
396
459
|
class.define_method("year", method!(RbExpr::dt_year, 0))?;
|
397
460
|
class.define_method("dt_is_leap_year", method!(RbExpr::dt_is_leap_year, 0))?;
|
398
461
|
class.define_method("iso_year", method!(RbExpr::dt_iso_year, 0))?;
|
@@ -440,7 +503,6 @@ fn init() -> RbResult<()> {
|
|
440
503
|
"dt_replace_time_zone",
|
441
504
|
method!(RbExpr::dt_replace_time_zone, 2),
|
442
505
|
)?;
|
443
|
-
class.define_method("dt_tz_localize", method!(RbExpr::dt_tz_localize, 1))?;
|
444
506
|
class.define_method("dt_truncate", method!(RbExpr::dt_truncate, 2))?;
|
445
507
|
class.define_method("dt_month_start", method!(RbExpr::dt_month_start, 0))?;
|
446
508
|
class.define_method("dt_month_end", method!(RbExpr::dt_month_end, 0))?;
|
@@ -450,10 +512,6 @@ fn init() -> RbResult<()> {
|
|
450
512
|
class.define_method("dot", method!(RbExpr::dot, 1))?;
|
451
513
|
class.define_method("reinterpret", method!(RbExpr::reinterpret, 1))?;
|
452
514
|
class.define_method("mode", method!(RbExpr::mode, 0))?;
|
453
|
-
class.define_method("keep_name", method!(RbExpr::keep_name, 0))?;
|
454
|
-
class.define_method("prefix", method!(RbExpr::prefix, 1))?;
|
455
|
-
class.define_method("suffix", method!(RbExpr::suffix, 1))?;
|
456
|
-
class.define_method("map_alias", method!(RbExpr::map_alias, 1))?;
|
457
515
|
class.define_method("exclude", method!(RbExpr::exclude, 1))?;
|
458
516
|
class.define_method("interpolate", method!(RbExpr::interpolate, 1))?;
|
459
517
|
class.define_method("rolling_sum", method!(RbExpr::rolling_sum, 6))?;
|
@@ -490,20 +548,20 @@ fn init() -> RbResult<()> {
|
|
490
548
|
class.define_method("pct_change", method!(RbExpr::pct_change, 1))?;
|
491
549
|
class.define_method("skew", method!(RbExpr::skew, 1))?;
|
492
550
|
class.define_method("kurtosis", method!(RbExpr::kurtosis, 2))?;
|
493
|
-
class.define_method("str_concat", method!(RbExpr::str_concat,
|
551
|
+
class.define_method("str_concat", method!(RbExpr::str_concat, 2))?;
|
494
552
|
class.define_method("cat_set_ordering", method!(RbExpr::cat_set_ordering, 1))?;
|
495
553
|
class.define_method("reshape", method!(RbExpr::reshape, 1))?;
|
496
|
-
class.define_method("
|
554
|
+
class.define_method("cum_count", method!(RbExpr::cum_count, 1))?;
|
497
555
|
class.define_method("to_physical", method!(RbExpr::to_physical, 0))?;
|
498
|
-
class.define_method("shuffle", method!(RbExpr::shuffle,
|
499
|
-
class.define_method("sample_n", method!(RbExpr::sample_n,
|
500
|
-
class.define_method("sample_frac", method!(RbExpr::sample_frac,
|
556
|
+
class.define_method("shuffle", method!(RbExpr::shuffle, 1))?;
|
557
|
+
class.define_method("sample_n", method!(RbExpr::sample_n, 4))?;
|
558
|
+
class.define_method("sample_frac", method!(RbExpr::sample_frac, 4))?;
|
501
559
|
class.define_method("ewm_mean", method!(RbExpr::ewm_mean, 4))?;
|
502
560
|
class.define_method("ewm_std", method!(RbExpr::ewm_std, 5))?;
|
503
561
|
class.define_method("ewm_var", method!(RbExpr::ewm_var, 5))?;
|
504
562
|
class.define_method("extend_constant", method!(RbExpr::extend_constant, 2))?;
|
505
|
-
class.define_method("any", method!(RbExpr::any,
|
506
|
-
class.define_method("all", method!(RbExpr::all,
|
563
|
+
class.define_method("any", method!(RbExpr::any, 1))?;
|
564
|
+
class.define_method("all", method!(RbExpr::all, 1))?;
|
507
565
|
class.define_method(
|
508
566
|
"struct_field_by_name",
|
509
567
|
method!(RbExpr::struct_field_by_name, 1),
|
@@ -537,6 +595,14 @@ fn init() -> RbResult<()> {
|
|
537
595
|
method!(RbExpr::meta_is_regex_projection, 0),
|
538
596
|
)?;
|
539
597
|
|
598
|
+
// name
|
599
|
+
class.define_method("name_keep", method!(RbExpr::name_keep, 0))?;
|
600
|
+
class.define_method("name_map", method!(RbExpr::name_map, 1))?;
|
601
|
+
class.define_method("name_prefix", method!(RbExpr::name_prefix, 1))?;
|
602
|
+
class.define_method("name_suffix", method!(RbExpr::name_suffix, 1))?;
|
603
|
+
class.define_method("name_to_lowercase", method!(RbExpr::name_to_lowercase, 0))?;
|
604
|
+
class.define_method("name_to_uppercase", method!(RbExpr::name_to_uppercase, 0))?;
|
605
|
+
|
540
606
|
// maybe add to different class
|
541
607
|
class.define_singleton_method("col", function!(crate::functions::lazy::col, 1))?;
|
542
608
|
class.define_singleton_method("count", function!(crate::functions::lazy::count, 0))?;
|
@@ -546,7 +612,14 @@ fn init() -> RbResult<()> {
|
|
546
612
|
class.define_singleton_method("fold", function!(crate::functions::lazy::fold, 3))?;
|
547
613
|
class.define_singleton_method("cumfold", function!(crate::functions::lazy::cumfold, 4))?;
|
548
614
|
class.define_singleton_method("lit", function!(crate::functions::lazy::lit, 2))?;
|
549
|
-
class.define_singleton_method(
|
615
|
+
class.define_singleton_method(
|
616
|
+
"int_range",
|
617
|
+
function!(crate::functions::range::int_range, 4),
|
618
|
+
)?;
|
619
|
+
class.define_singleton_method(
|
620
|
+
"int_ranges",
|
621
|
+
function!(crate::functions::range::int_ranges, 4),
|
622
|
+
)?;
|
550
623
|
class.define_singleton_method("repeat", function!(crate::functions::lazy::repeat, 3))?;
|
551
624
|
class.define_singleton_method(
|
552
625
|
"pearson_corr",
|
@@ -556,7 +629,7 @@ fn init() -> RbResult<()> {
|
|
556
629
|
"spearman_rank_corr",
|
557
630
|
function!(crate::functions::lazy::spearman_rank_corr, 4),
|
558
631
|
)?;
|
559
|
-
class.define_singleton_method("cov", function!(crate::functions::lazy::cov,
|
632
|
+
class.define_singleton_method("cov", function!(crate::functions::lazy::cov, 3))?;
|
560
633
|
class.define_singleton_method(
|
561
634
|
"arg_sort_by",
|
562
635
|
function!(crate::functions::lazy::arg_sort_by, 2),
|
@@ -571,7 +644,7 @@ fn init() -> RbResult<()> {
|
|
571
644
|
function!(crate::functions::lazy::concat_lst, 1),
|
572
645
|
)?;
|
573
646
|
|
574
|
-
let class = module.define_class("RbLazyFrame",
|
647
|
+
let class = module.define_class("RbLazyFrame", ruby.class_object())?;
|
575
648
|
class.define_singleton_method("read_json", function!(RbLazyFrame::read_json, 1))?;
|
576
649
|
class.define_singleton_method(
|
577
650
|
"new_from_ndjson",
|
@@ -580,7 +653,7 @@ fn init() -> RbResult<()> {
|
|
580
653
|
class.define_singleton_method("new_from_csv", function!(RbLazyFrame::new_from_csv, -1))?;
|
581
654
|
class.define_singleton_method(
|
582
655
|
"new_from_parquet",
|
583
|
-
function!(RbLazyFrame::new_from_parquet,
|
656
|
+
function!(RbLazyFrame::new_from_parquet, 9),
|
584
657
|
)?;
|
585
658
|
class.define_singleton_method("new_from_ipc", function!(RbLazyFrame::new_from_ipc, 6))?;
|
586
659
|
class.define_method("write_json", method!(RbLazyFrame::write_json, 1))?;
|
@@ -591,7 +664,7 @@ fn init() -> RbResult<()> {
|
|
591
664
|
)?;
|
592
665
|
class.define_method(
|
593
666
|
"optimization_toggle",
|
594
|
-
method!(RbLazyFrame::optimization_toggle,
|
667
|
+
method!(RbLazyFrame::optimization_toggle, 8),
|
595
668
|
)?;
|
596
669
|
class.define_method("sort", method!(RbLazyFrame::sort, 4))?;
|
597
670
|
class.define_method("sort_by_exprs", method!(RbLazyFrame::sort_by_exprs, 4))?;
|
@@ -601,17 +674,22 @@ fn init() -> RbResult<()> {
|
|
601
674
|
class.define_method("fetch", method!(RbLazyFrame::fetch, 1))?;
|
602
675
|
class.define_method("filter", method!(RbLazyFrame::filter, 1))?;
|
603
676
|
class.define_method("select", method!(RbLazyFrame::select, 1))?;
|
604
|
-
class.define_method("
|
605
|
-
class.define_method(
|
606
|
-
|
677
|
+
class.define_method("group_by", method!(RbLazyFrame::group_by, 2))?;
|
678
|
+
class.define_method(
|
679
|
+
"group_by_rolling",
|
680
|
+
method!(RbLazyFrame::group_by_rolling, 6),
|
681
|
+
)?;
|
682
|
+
class.define_method(
|
683
|
+
"group_by_dynamic",
|
684
|
+
method!(RbLazyFrame::group_by_dynamic, 10),
|
685
|
+
)?;
|
607
686
|
class.define_method("with_context", method!(RbLazyFrame::with_context, 1))?;
|
608
687
|
class.define_method("join_asof", method!(RbLazyFrame::join_asof, 11))?;
|
609
688
|
class.define_method("join", method!(RbLazyFrame::join, 7))?;
|
610
689
|
class.define_method("with_columns", method!(RbLazyFrame::with_columns, 1))?;
|
611
690
|
class.define_method("rename", method!(RbLazyFrame::rename, 2))?;
|
612
691
|
class.define_method("reverse", method!(RbLazyFrame::reverse, 0))?;
|
613
|
-
class.define_method("shift", method!(RbLazyFrame::shift,
|
614
|
-
class.define_method("shift_and_fill", method!(RbLazyFrame::shift_and_fill, 2))?;
|
692
|
+
class.define_method("shift", method!(RbLazyFrame::shift, 2))?;
|
615
693
|
class.define_method("fill_nan", method!(RbLazyFrame::fill_nan, 1))?;
|
616
694
|
class.define_method("min", method!(RbLazyFrame::min, 0))?;
|
617
695
|
class.define_method("max", method!(RbLazyFrame::max, 0))?;
|
@@ -636,12 +714,12 @@ fn init() -> RbResult<()> {
|
|
636
714
|
class.define_method("unnest", method!(RbLazyFrame::unnest, 1))?;
|
637
715
|
class.define_method("width", method!(RbLazyFrame::width, 0))?;
|
638
716
|
|
639
|
-
let class = module.define_class("RbLazyGroupBy",
|
717
|
+
let class = module.define_class("RbLazyGroupBy", ruby.class_object())?;
|
640
718
|
class.define_method("agg", method!(RbLazyGroupBy::agg, 1))?;
|
641
719
|
class.define_method("head", method!(RbLazyGroupBy::head, 1))?;
|
642
720
|
class.define_method("tail", method!(RbLazyGroupBy::tail, 1))?;
|
643
721
|
|
644
|
-
let class = module.define_class("RbSeries",
|
722
|
+
let class = module.define_class("RbSeries", ruby.class_object())?;
|
645
723
|
class.define_singleton_method("new_opt_bool", function!(RbSeries::new_opt_bool, 3))?;
|
646
724
|
class.define_singleton_method("new_opt_u8", function!(RbSeries::new_opt_u8, 3))?;
|
647
725
|
class.define_singleton_method("new_opt_u16", function!(RbSeries::new_opt_u16, 3))?;
|
@@ -731,8 +809,6 @@ fn init() -> RbResult<()> {
|
|
731
809
|
class.define_method("apply_lambda", method!(RbSeries::apply_lambda, 3))?;
|
732
810
|
class.define_method("zip_with", method!(RbSeries::zip_with, 2))?;
|
733
811
|
class.define_method("to_dummies", method!(RbSeries::to_dummies, 2))?;
|
734
|
-
class.define_method("peak_max", method!(RbSeries::peak_max, 0))?;
|
735
|
-
class.define_method("peak_min", method!(RbSeries::peak_min, 0))?;
|
736
812
|
class.define_method("n_unique", method!(RbSeries::n_unique, 0))?;
|
737
813
|
class.define_method("floor", method!(RbSeries::floor, 0))?;
|
738
814
|
class.define_method("shrink_to_fit", method!(RbSeries::shrink_to_fit, 0))?;
|
@@ -902,11 +978,19 @@ fn init() -> RbResult<()> {
|
|
902
978
|
// extra
|
903
979
|
class.define_method("extend_constant", method!(RbSeries::extend_constant, 2))?;
|
904
980
|
|
905
|
-
let class = module.define_class("RbWhen",
|
981
|
+
let class = module.define_class("RbWhen", ruby.class_object())?;
|
906
982
|
class.define_method("_then", method!(RbWhen::then, 1))?;
|
907
983
|
|
908
|
-
let class = module.define_class("RbWhenThen",
|
909
|
-
class.define_method("otherwise", method!(
|
984
|
+
let class = module.define_class("RbWhenThen", ruby.class_object())?;
|
985
|
+
class.define_method("otherwise", method!(RbThen::overwise, 1))?;
|
986
|
+
|
987
|
+
// sql
|
988
|
+
let class = module.define_class("RbSQLContext", ruby.class_object())?;
|
989
|
+
class.define_singleton_method("new", function!(RbSQLContext::new, 0))?;
|
990
|
+
class.define_method("execute", method!(RbSQLContext::execute, 1))?;
|
991
|
+
class.define_method("get_tables", method!(RbSQLContext::get_tables, 0))?;
|
992
|
+
class.define_method("register", method!(RbSQLContext::register, 2))?;
|
993
|
+
class.define_method("unregister", method!(RbSQLContext::unregister, 1))?;
|
910
994
|
|
911
995
|
Ok(())
|
912
996
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
use magnus::{class, IntoValue, RArray, TryConvert, Value};
|
1
|
+
use magnus::{class, prelude::*, typed_data::Obj, IntoValue, RArray, TryConvert, Value};
|
2
2
|
use polars::prelude::*;
|
3
3
|
use polars_core::frame::row::{rows_to_schema_first_non_null, Row};
|
4
4
|
use polars_core::series::SeriesIter;
|
@@ -34,20 +34,20 @@ pub fn apply_lambda_unknown<'a>(
|
|
34
34
|
null_count += 1;
|
35
35
|
continue;
|
36
36
|
} else if out.is_kind_of(class::true_class()) || out.is_kind_of(class::false_class()) {
|
37
|
-
let first_value =
|
37
|
+
let first_value = bool::try_convert(out).ok();
|
38
38
|
return Ok((
|
39
|
-
RbSeries::new(
|
39
|
+
Obj::wrap(RbSeries::new(
|
40
40
|
apply_lambda_with_bool_out_type(df, lambda, null_count, first_value)
|
41
41
|
.into_series(),
|
42
|
-
)
|
43
|
-
.
|
42
|
+
))
|
43
|
+
.as_value(),
|
44
44
|
false,
|
45
45
|
));
|
46
46
|
} else if out.is_kind_of(class::float()) {
|
47
|
-
let first_value =
|
47
|
+
let first_value = f64::try_convert(out).ok();
|
48
48
|
|
49
49
|
return Ok((
|
50
|
-
RbSeries::new(
|
50
|
+
Obj::wrap(RbSeries::new(
|
51
51
|
apply_lambda_with_primitive_out_type::<Float64Type>(
|
52
52
|
df,
|
53
53
|
lambda,
|
@@ -55,14 +55,14 @@ pub fn apply_lambda_unknown<'a>(
|
|
55
55
|
first_value,
|
56
56
|
)
|
57
57
|
.into_series(),
|
58
|
-
)
|
59
|
-
.
|
58
|
+
))
|
59
|
+
.as_value(),
|
60
60
|
false,
|
61
61
|
));
|
62
62
|
} else if out.is_kind_of(class::integer()) {
|
63
|
-
let first_value =
|
63
|
+
let first_value = i64::try_convert(out).ok();
|
64
64
|
return Ok((
|
65
|
-
RbSeries::new(
|
65
|
+
Obj::wrap(RbSeries::new(
|
66
66
|
apply_lambda_with_primitive_out_type::<Int64Type>(
|
67
67
|
df,
|
68
68
|
lambda,
|
@@ -70,12 +70,12 @@ pub fn apply_lambda_unknown<'a>(
|
|
70
70
|
first_value,
|
71
71
|
)
|
72
72
|
.into_series(),
|
73
|
-
)
|
74
|
-
.
|
73
|
+
))
|
74
|
+
.as_value(),
|
75
75
|
false,
|
76
76
|
));
|
77
77
|
// } else if out.is_kind_of(class::string()) {
|
78
|
-
// let first_value =
|
78
|
+
// let first_value = String::try_convert(out).ok();
|
79
79
|
// return Ok((
|
80
80
|
// RbSeries::new(
|
81
81
|
// apply_lambda_with_utf8_out_type(df, lambda, null_count, first_value)
|
@@ -85,25 +85,21 @@ pub fn apply_lambda_unknown<'a>(
|
|
85
85
|
// false,
|
86
86
|
// ));
|
87
87
|
} else if out.respond_to("_s", true)? {
|
88
|
-
let rb_rbseries:
|
89
|
-
let series = rb_rbseries
|
90
|
-
.try_convert::<&RbSeries>()
|
91
|
-
.unwrap()
|
92
|
-
.series
|
93
|
-
.borrow();
|
88
|
+
let rb_rbseries: Obj<RbSeries> = out.funcall("_s", ()).unwrap();
|
89
|
+
let series = rb_rbseries.series.borrow();
|
94
90
|
let dt = series.dtype();
|
95
91
|
return Ok((
|
96
|
-
RbSeries::new(
|
92
|
+
Obj::wrap(RbSeries::new(
|
97
93
|
apply_lambda_with_list_out_type(df, lambda, null_count, Some(&series), dt)?
|
98
94
|
.into_series(),
|
99
|
-
)
|
100
|
-
.
|
95
|
+
))
|
96
|
+
.as_value(),
|
101
97
|
false,
|
102
98
|
));
|
103
|
-
} else if
|
104
|
-
let first_value =
|
99
|
+
} else if Wrap::<Row<'a>>::try_convert(out).is_ok() {
|
100
|
+
let first_value = Wrap::<Row<'a>>::try_convert(out).unwrap().0;
|
105
101
|
return Ok((
|
106
|
-
RbDataFrame::from(
|
102
|
+
Obj::wrap(RbDataFrame::from(
|
107
103
|
apply_lambda_with_rows_output(
|
108
104
|
df,
|
109
105
|
lambda,
|
@@ -112,8 +108,8 @@ pub fn apply_lambda_unknown<'a>(
|
|
112
108
|
inference_size,
|
113
109
|
)
|
114
110
|
.map_err(RbPolarsErr::from)?,
|
115
|
-
)
|
116
|
-
.
|
111
|
+
))
|
112
|
+
.as_value(),
|
117
113
|
true,
|
118
114
|
));
|
119
115
|
} else if out.is_kind_of(class::array()) {
|
@@ -143,7 +139,7 @@ where
|
|
143
139
|
let iter = iters.iter_mut().map(|it| Wrap(it.next().unwrap()));
|
144
140
|
let tpl = (RArray::from_iter(iter),);
|
145
141
|
match lambda.funcall::<_, _, Value>("call", tpl) {
|
146
|
-
Ok(val) =>
|
142
|
+
Ok(val) => T::try_convert(val).ok(),
|
147
143
|
Err(e) => panic!("ruby function failed {}", e),
|
148
144
|
}
|
149
145
|
})
|
@@ -219,8 +215,7 @@ pub fn apply_lambda_with_list_out_type(
|
|
219
215
|
let tpl = (RArray::from_iter(iter),);
|
220
216
|
match lambda.funcall::<_, _, Value>("call", tpl) {
|
221
217
|
Ok(val) => match val.funcall::<_, _, Value>("_s", ()) {
|
222
|
-
Ok(val) => val
|
223
|
-
.try_convert::<&RbSeries>()
|
218
|
+
Ok(val) => Obj::<RbSeries>::try_convert(val)
|
224
219
|
.ok()
|
225
220
|
.map(|ps| ps.series.borrow().clone()),
|
226
221
|
Err(_) => {
|
@@ -257,11 +252,11 @@ pub fn apply_lambda_with_rows_output<'a>(
|
|
257
252
|
let tpl = (RArray::from_iter(iter),);
|
258
253
|
match lambda.funcall::<_, _, Value>("call", tpl) {
|
259
254
|
Ok(val) => {
|
260
|
-
match
|
255
|
+
match RArray::try_convert(val).ok() {
|
261
256
|
Some(tuple) => {
|
262
257
|
row_buf.0.clear();
|
263
258
|
for v in tuple.each() {
|
264
|
-
let v = v.unwrap()
|
259
|
+
let v = Wrap::<AnyValue>::try_convert(v.unwrap()).unwrap().0;
|
265
260
|
row_buf.0.push(v);
|
266
261
|
}
|
267
262
|
let ptr = &row_buf as *const Row;
|
@@ -2,7 +2,7 @@ pub mod dataframe;
|
|
2
2
|
pub mod lazy;
|
3
3
|
pub mod series;
|
4
4
|
|
5
|
-
use magnus::{RHash, Value};
|
5
|
+
use magnus::{prelude::*, RHash, Value};
|
6
6
|
use polars::chunked_array::builder::get_list_builder;
|
7
7
|
use polars::prelude::*;
|
8
8
|
use polars_core::export::rayon::prelude::*;
|
@@ -68,7 +68,7 @@ fn iterator_to_struct(
|
|
68
68
|
}
|
69
69
|
}
|
70
70
|
Some(dict) => {
|
71
|
-
let dict =
|
71
|
+
let dict = RHash::try_convert(dict)?;
|
72
72
|
if dict.len() != struct_width {
|
73
73
|
return Err(crate::error::ComputeError::new_err(
|
74
74
|
format!("Cannot create struct type.\n> The struct dtype expects {} fields, but it got a dict with {} fields.", struct_width, dict.len())
|
@@ -78,7 +78,7 @@ fn iterator_to_struct(
|
|
78
78
|
// the first item determines the output name
|
79
79
|
todo!()
|
80
80
|
// for ((_, val), field_items) in dict.iter().zip(&mut items) {
|
81
|
-
// let item =
|
81
|
+
// let item = Wrap::<AnyValue>::try_convert(val)?;
|
82
82
|
// field_items.push(item.0)
|
83
83
|
// }
|
84
84
|
}
|