polars-df 0.10.0-x86_64-linux-musl

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.
Files changed (67) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +3 -0
  3. data/CHANGELOG.md +175 -0
  4. data/Cargo.lock +2536 -0
  5. data/Cargo.toml +6 -0
  6. data/LICENSE-THIRD-PARTY.txt +38726 -0
  7. data/LICENSE.txt +20 -0
  8. data/README.md +437 -0
  9. data/lib/polars/3.1/polars.so +0 -0
  10. data/lib/polars/3.2/polars.so +0 -0
  11. data/lib/polars/3.3/polars.so +0 -0
  12. data/lib/polars/array_expr.rb +537 -0
  13. data/lib/polars/array_name_space.rb +423 -0
  14. data/lib/polars/batched_csv_reader.rb +98 -0
  15. data/lib/polars/binary_expr.rb +77 -0
  16. data/lib/polars/binary_name_space.rb +66 -0
  17. data/lib/polars/cat_expr.rb +72 -0
  18. data/lib/polars/cat_name_space.rb +125 -0
  19. data/lib/polars/config.rb +530 -0
  20. data/lib/polars/convert.rb +93 -0
  21. data/lib/polars/data_frame.rb +5418 -0
  22. data/lib/polars/data_types.rb +466 -0
  23. data/lib/polars/date_time_expr.rb +1444 -0
  24. data/lib/polars/date_time_name_space.rb +1484 -0
  25. data/lib/polars/dynamic_group_by.rb +52 -0
  26. data/lib/polars/exceptions.rb +31 -0
  27. data/lib/polars/expr.rb +6105 -0
  28. data/lib/polars/expr_dispatch.rb +22 -0
  29. data/lib/polars/functions/aggregation/horizontal.rb +246 -0
  30. data/lib/polars/functions/aggregation/vertical.rb +282 -0
  31. data/lib/polars/functions/as_datatype.rb +248 -0
  32. data/lib/polars/functions/col.rb +47 -0
  33. data/lib/polars/functions/eager.rb +182 -0
  34. data/lib/polars/functions/lazy.rb +1280 -0
  35. data/lib/polars/functions/len.rb +49 -0
  36. data/lib/polars/functions/lit.rb +35 -0
  37. data/lib/polars/functions/random.rb +16 -0
  38. data/lib/polars/functions/range/date_range.rb +103 -0
  39. data/lib/polars/functions/range/int_range.rb +51 -0
  40. data/lib/polars/functions/repeat.rb +144 -0
  41. data/lib/polars/functions/whenthen.rb +96 -0
  42. data/lib/polars/functions.rb +57 -0
  43. data/lib/polars/group_by.rb +548 -0
  44. data/lib/polars/io.rb +890 -0
  45. data/lib/polars/lazy_frame.rb +2833 -0
  46. data/lib/polars/lazy_group_by.rb +84 -0
  47. data/lib/polars/list_expr.rb +791 -0
  48. data/lib/polars/list_name_space.rb +445 -0
  49. data/lib/polars/meta_expr.rb +222 -0
  50. data/lib/polars/name_expr.rb +198 -0
  51. data/lib/polars/plot.rb +109 -0
  52. data/lib/polars/rolling_group_by.rb +37 -0
  53. data/lib/polars/series.rb +4527 -0
  54. data/lib/polars/slice.rb +104 -0
  55. data/lib/polars/sql_context.rb +194 -0
  56. data/lib/polars/string_cache.rb +75 -0
  57. data/lib/polars/string_expr.rb +1519 -0
  58. data/lib/polars/string_name_space.rb +810 -0
  59. data/lib/polars/struct_expr.rb +98 -0
  60. data/lib/polars/struct_name_space.rb +96 -0
  61. data/lib/polars/testing.rb +507 -0
  62. data/lib/polars/utils.rb +422 -0
  63. data/lib/polars/version.rb +4 -0
  64. data/lib/polars/whenthen.rb +83 -0
  65. data/lib/polars-df.rb +1 -0
  66. data/lib/polars.rb +72 -0
  67. metadata +125 -0
@@ -0,0 +1,422 @@
1
+ module Polars
2
+ # @private
3
+ module Utils
4
+ DTYPE_TEMPORAL_UNITS = ["ns", "us", "ms"]
5
+
6
+ def self.wrap_s(s)
7
+ Series._from_rbseries(s)
8
+ end
9
+
10
+ def self.wrap_df(df)
11
+ DataFrame._from_rbdf(df)
12
+ end
13
+
14
+ def self.wrap_ldf(ldf)
15
+ LazyFrame._from_rbldf(ldf)
16
+ end
17
+
18
+ def self.wrap_expr(rbexpr)
19
+ Expr._from_rbexpr(rbexpr)
20
+ end
21
+
22
+ def self.col(name)
23
+ Polars.col(name)
24
+ end
25
+
26
+ def self.arrlen(obj)
27
+ if obj.is_a?(Range)
28
+ # size only works for numeric ranges
29
+ obj.to_a.length
30
+ elsif obj.is_a?(::String)
31
+ nil
32
+ else
33
+ obj.length
34
+ end
35
+ rescue
36
+ nil
37
+ end
38
+
39
+ def self._timedelta_to_pl_duration(td)
40
+ td
41
+ end
42
+
43
+ def self._datetime_to_pl_timestamp(dt, time_unit)
44
+ dt = dt.to_datetime.to_time
45
+ if time_unit == "ns"
46
+ nanos = dt.nsec
47
+ dt.to_i * 1_000_000_000 + nanos
48
+ elsif time_unit == "us"
49
+ micros = dt.usec
50
+ dt.to_i * 1_000_000 + micros
51
+ elsif time_unit == "ms"
52
+ millis = dt.usec / 1000
53
+ dt.to_i * 1_000 + millis
54
+ elsif time_unit.nil?
55
+ # Ruby has ns precision
56
+ nanos = dt.nsec
57
+ dt.to_i * 1_000_000_000 + nanos
58
+ else
59
+ raise ArgumentError, "time_unit must be one of {{'ns', 'us', 'ms'}}, got #{tu}"
60
+ end
61
+ end
62
+
63
+ def self._date_to_pl_date(d)
64
+ dt = d.to_datetime.to_time
65
+ dt.to_i / (3600 * 24)
66
+ end
67
+
68
+ def self._to_ruby_time(value)
69
+ if value == 0
70
+ ::Time.utc(2000, 1, 1)
71
+ else
72
+ seconds, nanoseconds = value.divmod(1_000_000_000)
73
+ minutes, seconds = seconds.divmod(60)
74
+ hours, minutes = minutes.divmod(60)
75
+ ::Time.utc(2000, 1, 1, hours, minutes, seconds, nanoseconds / 1000.0)
76
+ end
77
+ end
78
+
79
+ def self._to_ruby_duration(value, time_unit = "ns")
80
+ if time_unit == "ns"
81
+ value / 1e9
82
+ elsif time_unit == "us"
83
+ value / 1e6
84
+ elsif time_unit == "ms"
85
+ value / 1e3
86
+ else
87
+ raise ArgumentError, "time_unit must be one of {{'ns', 'us', 'ms'}}, got #{time_unit}"
88
+ end
89
+ end
90
+
91
+ def self._to_ruby_date(value)
92
+ # days to seconds
93
+ # important to create from utc. Not doing this leads
94
+ # to inconsistencies dependent on the timezone you are in.
95
+ ::Time.at(value * 86400).utc.to_date
96
+ end
97
+
98
+ def self._to_ruby_datetime(value, time_unit = "ns", time_zone = nil)
99
+ if time_zone.nil? || time_zone == ""
100
+ if time_unit == "ns"
101
+ return ::Time.at(value / 1000000000, value % 1000000000, :nsec).utc
102
+ elsif time_unit == "us"
103
+ return ::Time.at(value / 1000000, value % 1000000, :usec).utc
104
+ elsif time_unit == "ms"
105
+ return ::Time.at(value / 1000, value % 1000, :millisecond).utc
106
+ else
107
+ raise ArgumentError, "time_unit must be one of {{'ns', 'us', 'ms'}}, got #{time_unit}"
108
+ end
109
+ else
110
+ raise Todo
111
+ end
112
+ end
113
+
114
+ def self._to_ruby_decimal(digits, scale)
115
+ BigDecimal("#{digits}e#{scale}")
116
+ end
117
+
118
+ def self.selection_to_rbexpr_list(exprs)
119
+ if exprs.is_a?(::String) || exprs.is_a?(Symbol) || exprs.is_a?(Expr) || exprs.is_a?(Series)
120
+ exprs = [exprs]
121
+ end
122
+
123
+ exprs.map { |e| expr_to_lit_or_expr(e, str_to_lit: false)._rbexpr }
124
+ end
125
+
126
+ def self.expr_to_lit_or_expr(expr, str_to_lit: true)
127
+ if (expr.is_a?(::String) || expr.is_a?(Symbol)) && !str_to_lit
128
+ col(expr)
129
+ elsif expr.is_a?(Integer) || expr.is_a?(Float) || expr.is_a?(::String) || expr.is_a?(Symbol) || expr.is_a?(Series) || expr.nil?
130
+ lit(expr)
131
+ elsif expr.is_a?(Expr)
132
+ expr
133
+ else
134
+ raise ArgumentError, "did not expect value #{expr} of type #{expr.class.name}, maybe disambiguate with Polars.lit or Polars.col"
135
+ end
136
+ end
137
+
138
+ def self.lit(value)
139
+ Polars.lit(value)
140
+ end
141
+
142
+ def self.normalise_filepath(path, check_not_directory: true)
143
+ path = File.expand_path(path)
144
+ if check_not_directory && File.exist?(path) && Dir.exist?(path)
145
+ raise ArgumentError, "Expected a file path; #{path} is a directory"
146
+ end
147
+ path
148
+ end
149
+
150
+ # TODO fix
151
+ def self.is_polars_dtype(data_type, include_unknown: false)
152
+ if data_type == Unknown
153
+ return include_unknown
154
+ end
155
+ data_type.is_a?(Symbol) || data_type.is_a?(::String) || data_type.is_a?(DataType) || (data_type.is_a?(Class) && data_type < DataType)
156
+ end
157
+
158
+ def self.map_rb_type_to_dtype(ruby_dtype)
159
+ if ruby_dtype == Float
160
+ Float64
161
+ elsif ruby_dtype == Integer
162
+ Int64
163
+ elsif ruby_dtype == ::String
164
+ Utf8
165
+ elsif ruby_dtype == TrueClass || ruby_dtype == FalseClass
166
+ Boolean
167
+ elsif ruby_dtype == DateTime || ruby_dtype == ::Time || (defined?(ActiveSupport::TimeWithZone) && ruby_dtype == ActiveSupport::TimeWithZone)
168
+ Datetime.new("ns")
169
+ elsif ruby_dtype == ::Date
170
+ Date
171
+ elsif ruby_dtype == ::Array
172
+ List
173
+ elsif ruby_dtype == NilClass
174
+ Null
175
+ else
176
+ raise TypeError, "Invalid type"
177
+ end
178
+ end
179
+
180
+ # TODO fix
181
+ def self.rb_type_to_dtype(data_type)
182
+ if is_polars_dtype(data_type)
183
+ data_type = data_type.to_s if data_type.is_a?(Symbol)
184
+ return data_type
185
+ end
186
+
187
+ begin
188
+ map_rb_type_to_dtype(data_type)
189
+ rescue TypeError
190
+ raise ArgumentError, "Conversion of Ruby data type #{data_type.inspect} to Polars data type not implemented."
191
+ end
192
+ end
193
+
194
+ def self._process_null_values(null_values)
195
+ if null_values.is_a?(Hash)
196
+ null_values.to_a
197
+ else
198
+ null_values
199
+ end
200
+ end
201
+
202
+ def self._prepare_row_count_args(row_count_name = nil, row_count_offset = 0)
203
+ if !row_count_name.nil?
204
+ [row_count_name, row_count_offset]
205
+ else
206
+ nil
207
+ end
208
+ end
209
+
210
+ def self.handle_projection_columns(columns)
211
+ projection = nil
212
+ if columns
213
+ raise Todo
214
+ # if columns.is_a?(::String) || columns.is_a?(Symbol)
215
+ # columns = [columns]
216
+ # elsif is_int_sequence(columns)
217
+ # projection = columns.to_a
218
+ # columns = nil
219
+ # elsif !is_str_sequence(columns)
220
+ # raise ArgumentError, "columns arg should contain a list of all integers or all strings values."
221
+ # end
222
+ end
223
+ [projection, columns]
224
+ end
225
+
226
+ def self.scale_bytes(sz, to:)
227
+ scaling_factor = {
228
+ "b" => 1,
229
+ "k" => 1024,
230
+ "m" => 1024 ** 2,
231
+ "g" => 1024 ** 3,
232
+ "t" => 1024 ** 4
233
+ }[to[0]]
234
+ if scaling_factor > 1
235
+ sz / scaling_factor.to_f
236
+ else
237
+ sz
238
+ end
239
+ end
240
+
241
+ def self.bool?(value)
242
+ value.is_a?(TrueClass) || value.is_a?(FalseClass)
243
+ end
244
+
245
+ def self.strlike?(value)
246
+ value.is_a?(::String) || value.is_a?(Symbol)
247
+ end
248
+
249
+ def self.pathlike?(value)
250
+ value.is_a?(::String) || (defined?(Pathname) && value.is_a?(Pathname))
251
+ end
252
+
253
+ def self._is_iterable_of(val, eltype)
254
+ val.all? { |x| x.is_a?(eltype) }
255
+ end
256
+
257
+ def self.is_bool_sequence(val)
258
+ val.is_a?(::Array) && val.all? { |x| x == true || x == false }
259
+ end
260
+
261
+ def self.is_dtype_sequence(val)
262
+ val.is_a?(::Array) && val.all? { |x| is_polars_dtype(x) }
263
+ end
264
+
265
+ def self.is_int_sequence(val)
266
+ val.is_a?(::Array) && _is_iterable_of(val, Integer)
267
+ end
268
+
269
+ def self.is_expr_sequence(val)
270
+ val.is_a?(::Array) && _is_iterable_of(val, Expr)
271
+ end
272
+
273
+ def self.is_rbexpr_sequence(val)
274
+ val.is_a?(::Array) && _is_iterable_of(val, RbExpr)
275
+ end
276
+
277
+ def self.is_str_sequence(val, allow_str: false)
278
+ if allow_str == false && val.is_a?(::String)
279
+ false
280
+ else
281
+ val.is_a?(::Array) && _is_iterable_of(val, ::String)
282
+ end
283
+ end
284
+
285
+ def self.local_file?(file)
286
+ Dir.glob(file).any?
287
+ end
288
+
289
+ def self.parse_as_list_of_expressions(*inputs, __structify: false, **named_inputs)
290
+ exprs = _parse_positional_inputs(inputs, structify: __structify)
291
+ if named_inputs.any?
292
+ named_exprs = _parse_named_inputs(named_inputs, structify: __structify)
293
+ exprs.concat(named_exprs)
294
+ end
295
+
296
+ exprs
297
+ end
298
+
299
+ def self._parse_positional_inputs(inputs, structify: false)
300
+ inputs_iter = _parse_inputs_as_iterable(inputs)
301
+ inputs_iter.map { |e| parse_as_expression(e, structify: structify) }
302
+ end
303
+
304
+ def self._parse_inputs_as_iterable(inputs)
305
+ if inputs.empty?
306
+ return []
307
+ end
308
+
309
+ if inputs.length == 1 && inputs[0].is_a?(::Array)
310
+ return inputs[0]
311
+ end
312
+
313
+ inputs
314
+ end
315
+
316
+ def self._parse_named_inputs(named_inputs, structify: false)
317
+ named_inputs.map do |name, input|
318
+ parse_as_expression(input, structify: structify)._alias(name.to_s)
319
+ end
320
+ end
321
+
322
+ def self.parse_as_expression(input, str_as_lit: false, list_as_lit: true, structify: false, dtype: nil)
323
+ if input.is_a?(Expr)
324
+ expr = input
325
+ elsif input.is_a?(::String) && !str_as_lit
326
+ expr = Polars.col(input)
327
+ structify = false
328
+ elsif input.is_a?(::Array) && !list_as_lit
329
+ expr = Polars.lit(Series.new(input), dtype: dtype)
330
+ structify = false
331
+ else
332
+ expr = Polars.lit(input, dtype: dtype)
333
+ structify = false
334
+ end
335
+
336
+ if structify
337
+ raise Todo
338
+ end
339
+
340
+ expr._rbexpr
341
+ end
342
+
343
+ USE_EARLIEST_TO_AMBIGUOUS = {
344
+ true => "earliest",
345
+ false => "latest"
346
+ }
347
+
348
+ def self.rename_use_earliest_to_ambiguous(use_earliest, ambiguous)
349
+ unless use_earliest.nil?
350
+ ambiguous = USE_EARLIEST_TO_AMBIGUOUS.fetch(use_earliest)
351
+ end
352
+ ambiguous
353
+ end
354
+
355
+ def self._check_arg_is_1byte(arg_name, arg, can_be_empty = false)
356
+ if arg.is_a?(::String)
357
+ arg_byte_length = arg.bytesize
358
+ if can_be_empty
359
+ if arg_byte_length > 1
360
+ raise ArgumentError, "#{arg_name} should be a single byte character or empty, but is #{arg_byte_length} bytes long."
361
+ end
362
+ elsif arg_byte_length != 1
363
+ raise ArgumentError, "#{arg_name} should be a single byte character, but is #{arg_byte_length} bytes long."
364
+ end
365
+ end
366
+ end
367
+
368
+ def self._expand_selectors(frame, *items)
369
+ items_iter = _parse_inputs_as_iterable(items)
370
+
371
+ expanded = []
372
+ items_iter.each do |item|
373
+ if is_selector(item)
374
+ selector_cols = expand_selector(frame, item)
375
+ expanded.concat(selector_cols)
376
+ else
377
+ expanded << item
378
+ end
379
+ end
380
+ expanded
381
+ end
382
+
383
+ # TODO
384
+ def self.is_selector(obj)
385
+ false
386
+ end
387
+
388
+ def self.parse_predicates_constraints_as_expression(*predicates, **constraints)
389
+ all_predicates = _parse_positional_inputs(predicates)
390
+
391
+ if constraints.any?
392
+ constraint_predicates = _parse_constraints(constraints)
393
+ all_predicates.concat(constraint_predicates)
394
+ end
395
+
396
+ _combine_predicates(all_predicates)
397
+ end
398
+
399
+ def self._parse_constraints(constraints)
400
+ constraints.map do |name, value|
401
+ Polars.col(name).eq(value)._rbexpr
402
+ end
403
+ end
404
+
405
+ def self._combine_predicates(predicates)
406
+ if !predicates.any?
407
+ msg = "at least one predicate or constraint must be provided"
408
+ raise TypeError, msg
409
+ end
410
+
411
+ if predicates.length == 1
412
+ return predicates[0]
413
+ end
414
+
415
+ Plr.all_horizontal(predicates)
416
+ end
417
+
418
+ def self.parse_when_inputs(*predicates, **constraints)
419
+ parse_predicates_constraints_as_expression(*predicates, **constraints)
420
+ end
421
+ end
422
+ end
@@ -0,0 +1,4 @@
1
+ module Polars
2
+ # @private
3
+ VERSION = "0.10.0"
4
+ end
@@ -0,0 +1,83 @@
1
+ module Polars
2
+ # @private
3
+ class When
4
+ attr_accessor :_when
5
+
6
+ def initialize(rbwhen)
7
+ self._when = rbwhen
8
+ end
9
+
10
+ def then(statement)
11
+ statement_rbexpr = Utils.parse_as_expression(statement)
12
+ Then.new(_when.then(statement_rbexpr))
13
+ end
14
+ end
15
+
16
+ # @private
17
+ class Then < Expr
18
+ attr_accessor :_then
19
+
20
+ def initialize(rbthen)
21
+ self._then = rbthen
22
+ end
23
+
24
+ def self._from_rbexpr(rbexpr)
25
+ Utils.wrap_expr(rbexpr)
26
+ end
27
+
28
+ def _rbexpr
29
+ _then.otherwise(Polars.lit(nil)._rbexpr)
30
+ end
31
+
32
+ def when(*predicates, **constraints)
33
+ condition_rbexpr = Utils.parse_when_inputs(*predicates, **constraints)
34
+ ChainedWhen.new(_then.when(condition_rbexpr))
35
+ end
36
+
37
+ def otherwise(statement)
38
+ statement_rbexpr = Utils.parse_as_expression(statement)
39
+ Utils.wrap_expr(_then.otherwise(statement_rbexpr))
40
+ end
41
+ end
42
+
43
+ # @private
44
+ class ChainedWhen
45
+ attr_accessor :_chained_when
46
+
47
+ def initialize(chained_when)
48
+ self._chained_when = chained_when
49
+ end
50
+
51
+ def then(statement)
52
+ statement_rbexpr = Utils.parse_as_expression(statement)
53
+ ChainedThen.new(_chained_when.then(statement_rbexpr))
54
+ end
55
+ end
56
+
57
+ # @private
58
+ class ChainedThen < Expr
59
+ attr_accessor :_chained_then
60
+
61
+ def initialize(chained_then)
62
+ self._chained_then = chained_then
63
+ end
64
+
65
+ def self._from_rbexpr(rbexpr)
66
+ Utils.wrap_expr(rbexpr)
67
+ end
68
+
69
+ def _rbexpr
70
+ _chained_then.otherwise(Polars.lit(nil)._rbexpr)
71
+ end
72
+
73
+ def when(*predicates, **constraints)
74
+ condition_rbexpr = Utils.parse_when_inputs(*predicates, **constraints)
75
+ ChainedWhen.new(_chained_then.when(condition_rbexpr))
76
+ end
77
+
78
+ def otherwise(statement)
79
+ statement_rbexpr = Utils.parse_as_expression(statement)
80
+ Utils.wrap_expr(_chained_then.otherwise(statement_rbexpr))
81
+ end
82
+ end
83
+ end
data/lib/polars-df.rb ADDED
@@ -0,0 +1 @@
1
+ require_relative "polars"
data/lib/polars.rb ADDED
@@ -0,0 +1,72 @@
1
+ # ext
2
+ begin
3
+ require "polars/#{RUBY_VERSION.to_f}/polars"
4
+ rescue LoadError
5
+ require "polars/polars"
6
+ end
7
+
8
+ # stdlib
9
+ require "bigdecimal"
10
+ require "date"
11
+ require "stringio"
12
+
13
+ # modules
14
+ require_relative "polars/expr_dispatch"
15
+ require_relative "polars/array_expr"
16
+ require_relative "polars/array_name_space"
17
+ require_relative "polars/batched_csv_reader"
18
+ require_relative "polars/binary_expr"
19
+ require_relative "polars/binary_name_space"
20
+ require_relative "polars/cat_expr"
21
+ require_relative "polars/cat_name_space"
22
+ require_relative "polars/config"
23
+ require_relative "polars/convert"
24
+ require_relative "polars/plot"
25
+ require_relative "polars/data_frame"
26
+ require_relative "polars/data_types"
27
+ require_relative "polars/date_time_expr"
28
+ require_relative "polars/date_time_name_space"
29
+ require_relative "polars/dynamic_group_by"
30
+ require_relative "polars/exceptions"
31
+ require_relative "polars/expr"
32
+ require_relative "polars/functions"
33
+ require_relative "polars/functions/as_datatype"
34
+ require_relative "polars/functions/col"
35
+ require_relative "polars/functions/eager"
36
+ require_relative "polars/functions/lazy"
37
+ require_relative "polars/functions/len"
38
+ require_relative "polars/functions/lit"
39
+ require_relative "polars/functions/random"
40
+ require_relative "polars/functions/repeat"
41
+ require_relative "polars/functions/whenthen"
42
+ require_relative "polars/functions/aggregation/horizontal"
43
+ require_relative "polars/functions/aggregation/vertical"
44
+ require_relative "polars/functions/range/date_range"
45
+ require_relative "polars/functions/range/int_range"
46
+ require_relative "polars/group_by"
47
+ require_relative "polars/io"
48
+ require_relative "polars/lazy_frame"
49
+ require_relative "polars/lazy_group_by"
50
+ require_relative "polars/list_expr"
51
+ require_relative "polars/list_name_space"
52
+ require_relative "polars/meta_expr"
53
+ require_relative "polars/name_expr"
54
+ require_relative "polars/rolling_group_by"
55
+ require_relative "polars/series"
56
+ require_relative "polars/slice"
57
+ require_relative "polars/sql_context"
58
+ require_relative "polars/string_cache"
59
+ require_relative "polars/string_expr"
60
+ require_relative "polars/string_name_space"
61
+ require_relative "polars/struct_expr"
62
+ require_relative "polars/struct_name_space"
63
+ require_relative "polars/testing"
64
+ require_relative "polars/utils"
65
+ require_relative "polars/version"
66
+ require_relative "polars/whenthen"
67
+
68
+ module Polars
69
+ extend Convert
70
+ extend Functions
71
+ extend IO
72
+ end
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: polars-df
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.0
5
+ platform: x86_64-linux-musl
6
+ authors:
7
+ - Andrew Kane
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-05-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bigdecimal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ force_ruby_platform: false
28
+ description:
29
+ email: andrew@ankane.org
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".yardopts"
35
+ - CHANGELOG.md
36
+ - Cargo.lock
37
+ - Cargo.toml
38
+ - LICENSE-THIRD-PARTY.txt
39
+ - LICENSE.txt
40
+ - README.md
41
+ - lib/polars-df.rb
42
+ - lib/polars.rb
43
+ - lib/polars/3.1/polars.so
44
+ - lib/polars/3.2/polars.so
45
+ - lib/polars/3.3/polars.so
46
+ - lib/polars/array_expr.rb
47
+ - lib/polars/array_name_space.rb
48
+ - lib/polars/batched_csv_reader.rb
49
+ - lib/polars/binary_expr.rb
50
+ - lib/polars/binary_name_space.rb
51
+ - lib/polars/cat_expr.rb
52
+ - lib/polars/cat_name_space.rb
53
+ - lib/polars/config.rb
54
+ - lib/polars/convert.rb
55
+ - lib/polars/data_frame.rb
56
+ - lib/polars/data_types.rb
57
+ - lib/polars/date_time_expr.rb
58
+ - lib/polars/date_time_name_space.rb
59
+ - lib/polars/dynamic_group_by.rb
60
+ - lib/polars/exceptions.rb
61
+ - lib/polars/expr.rb
62
+ - lib/polars/expr_dispatch.rb
63
+ - lib/polars/functions.rb
64
+ - lib/polars/functions/aggregation/horizontal.rb
65
+ - lib/polars/functions/aggregation/vertical.rb
66
+ - lib/polars/functions/as_datatype.rb
67
+ - lib/polars/functions/col.rb
68
+ - lib/polars/functions/eager.rb
69
+ - lib/polars/functions/lazy.rb
70
+ - lib/polars/functions/len.rb
71
+ - lib/polars/functions/lit.rb
72
+ - lib/polars/functions/random.rb
73
+ - lib/polars/functions/range/date_range.rb
74
+ - lib/polars/functions/range/int_range.rb
75
+ - lib/polars/functions/repeat.rb
76
+ - lib/polars/functions/whenthen.rb
77
+ - lib/polars/group_by.rb
78
+ - lib/polars/io.rb
79
+ - lib/polars/lazy_frame.rb
80
+ - lib/polars/lazy_group_by.rb
81
+ - lib/polars/list_expr.rb
82
+ - lib/polars/list_name_space.rb
83
+ - lib/polars/meta_expr.rb
84
+ - lib/polars/name_expr.rb
85
+ - lib/polars/plot.rb
86
+ - lib/polars/rolling_group_by.rb
87
+ - lib/polars/series.rb
88
+ - lib/polars/slice.rb
89
+ - lib/polars/sql_context.rb
90
+ - lib/polars/string_cache.rb
91
+ - lib/polars/string_expr.rb
92
+ - lib/polars/string_name_space.rb
93
+ - lib/polars/struct_expr.rb
94
+ - lib/polars/struct_name_space.rb
95
+ - lib/polars/testing.rb
96
+ - lib/polars/utils.rb
97
+ - lib/polars/version.rb
98
+ - lib/polars/whenthen.rb
99
+ homepage: https://github.com/ankane/polars-ruby
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '3.1'
112
+ - - "<"
113
+ - !ruby/object:Gem::Version
114
+ version: 3.4.dev
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: 3.3.22
120
+ requirements: []
121
+ rubygems_version: 3.4.4
122
+ signing_key:
123
+ specification_version: 4
124
+ summary: Blazingly fast DataFrames for Ruby
125
+ test_files: []