polars-df 0.15.0 → 0.26.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.
Files changed (206) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +274 -0
  3. data/Cargo.lock +1465 -867
  4. data/Cargo.toml +3 -0
  5. data/LICENSE.txt +2 -2
  6. data/README.md +87 -37
  7. data/ext/polars/Cargo.toml +47 -16
  8. data/ext/polars/src/c_api/allocator.rs +7 -0
  9. data/ext/polars/src/c_api/mod.rs +1 -0
  10. data/ext/polars/src/catalog/mod.rs +1 -0
  11. data/ext/polars/src/catalog/unity.rs +470 -0
  12. data/ext/polars/src/conversion/any_value.rs +99 -84
  13. data/ext/polars/src/conversion/categorical.rs +30 -0
  14. data/ext/polars/src/conversion/chunked_array.rs +71 -62
  15. data/ext/polars/src/conversion/datetime.rs +63 -0
  16. data/ext/polars/src/conversion/mod.rs +796 -312
  17. data/ext/polars/src/dataframe/construction.rs +6 -18
  18. data/ext/polars/src/dataframe/export.rs +30 -39
  19. data/ext/polars/src/dataframe/general.rs +294 -362
  20. data/ext/polars/src/dataframe/io.rs +33 -150
  21. data/ext/polars/src/dataframe/map.rs +175 -0
  22. data/ext/polars/src/dataframe/mod.rs +37 -5
  23. data/ext/polars/src/dataframe/serde.rs +23 -8
  24. data/ext/polars/src/error.rs +44 -7
  25. data/ext/polars/src/exceptions.rs +21 -8
  26. data/ext/polars/src/expr/array.rs +86 -22
  27. data/ext/polars/src/expr/binary.rs +50 -1
  28. data/ext/polars/src/expr/bitwise.rs +39 -0
  29. data/ext/polars/src/expr/categorical.rs +20 -0
  30. data/ext/polars/src/expr/datatype.rs +51 -0
  31. data/ext/polars/src/expr/datetime.rs +99 -41
  32. data/ext/polars/src/expr/extension.rs +12 -0
  33. data/ext/polars/src/expr/general.rs +252 -128
  34. data/ext/polars/src/expr/list.rs +56 -60
  35. data/ext/polars/src/expr/meta.rs +30 -35
  36. data/ext/polars/src/expr/mod.rs +28 -6
  37. data/ext/polars/src/expr/name.rs +29 -14
  38. data/ext/polars/src/expr/rolling.rs +111 -3
  39. data/ext/polars/src/expr/selector.rs +219 -0
  40. data/ext/polars/src/expr/serde.rs +28 -0
  41. data/ext/polars/src/expr/string.rs +118 -20
  42. data/ext/polars/src/expr/struct.rs +14 -1
  43. data/ext/polars/src/file.rs +194 -86
  44. data/ext/polars/src/functions/aggregation.rs +13 -12
  45. data/ext/polars/src/functions/business.rs +2 -3
  46. data/ext/polars/src/functions/eager.rs +3 -2
  47. data/ext/polars/src/functions/io.rs +90 -18
  48. data/ext/polars/src/functions/lazy.rs +267 -118
  49. data/ext/polars/src/functions/meta.rs +8 -7
  50. data/ext/polars/src/functions/misc.rs +1 -1
  51. data/ext/polars/src/functions/mod.rs +2 -1
  52. data/ext/polars/src/functions/range.rs +88 -31
  53. data/ext/polars/src/functions/strings.rs +6 -0
  54. data/ext/polars/src/functions/utils.rs +8 -0
  55. data/ext/polars/src/interop/arrow/mod.rs +52 -1
  56. data/ext/polars/src/interop/arrow/{to_ruby.rs → to_rb.rs} +37 -7
  57. data/ext/polars/src/interop/arrow/to_rust.rs +43 -0
  58. data/ext/polars/src/interop/numo/to_numo_df.rs +1 -1
  59. data/ext/polars/src/interop/numo/to_numo_series.rs +72 -50
  60. data/ext/polars/src/io/cloud_options.rs +107 -0
  61. data/ext/polars/src/io/mod.rs +4 -0
  62. data/ext/polars/src/io/scan_options.rs +113 -0
  63. data/ext/polars/src/io/sink_options.rs +46 -0
  64. data/ext/polars/src/io/sink_output.rs +21 -0
  65. data/ext/polars/src/lazyframe/exitable.rs +39 -0
  66. data/ext/polars/src/lazyframe/general.rs +846 -368
  67. data/ext/polars/src/lazyframe/mod.rs +58 -5
  68. data/ext/polars/src/lazyframe/optflags.rs +59 -0
  69. data/ext/polars/src/lazyframe/serde.rs +36 -4
  70. data/ext/polars/src/lazyframe/sink.rs +46 -0
  71. data/ext/polars/src/lazygroupby.rs +38 -9
  72. data/ext/polars/src/lib.rs +574 -165
  73. data/ext/polars/src/map/lazy.rs +44 -74
  74. data/ext/polars/src/map/mod.rs +18 -254
  75. data/ext/polars/src/map/series.rs +241 -1087
  76. data/ext/polars/src/on_startup.rs +192 -9
  77. data/ext/polars/src/prelude.rs +1 -0
  78. data/ext/polars/src/rb_modules.rs +10 -57
  79. data/ext/polars/src/ruby/exceptions.rs +26 -0
  80. data/ext/polars/src/ruby/gvl.rs +104 -0
  81. data/ext/polars/src/ruby/lazy.rs +46 -0
  82. data/ext/polars/src/ruby/mod.rs +11 -0
  83. data/ext/polars/src/ruby/numo.rs +52 -0
  84. data/ext/polars/src/ruby/plan_callback.rs +198 -0
  85. data/ext/polars/src/ruby/rb_modules.rs +16 -0
  86. data/ext/polars/src/ruby/ruby_convert_registry.rs +51 -0
  87. data/ext/polars/src/ruby/ruby_function.rs +11 -0
  88. data/ext/polars/src/ruby/ruby_udf.rs +164 -0
  89. data/ext/polars/src/ruby/thread.rs +65 -0
  90. data/ext/polars/src/ruby/utils.rs +39 -0
  91. data/ext/polars/src/series/aggregation.rs +116 -91
  92. data/ext/polars/src/series/arithmetic.rs +16 -22
  93. data/ext/polars/src/series/comparison.rs +101 -222
  94. data/ext/polars/src/series/construction.rs +80 -70
  95. data/ext/polars/src/series/export.rs +98 -56
  96. data/ext/polars/src/series/general.rs +323 -440
  97. data/ext/polars/src/series/import.rs +22 -5
  98. data/ext/polars/src/series/map.rs +103 -0
  99. data/ext/polars/src/series/mod.rs +57 -15
  100. data/ext/polars/src/series/scatter.rs +139 -82
  101. data/ext/polars/src/sql.rs +16 -9
  102. data/ext/polars/src/testing/frame.rs +31 -0
  103. data/ext/polars/src/testing/mod.rs +5 -0
  104. data/ext/polars/src/testing/series.rs +31 -0
  105. data/ext/polars/src/timeout.rs +105 -0
  106. data/ext/polars/src/utils.rs +105 -4
  107. data/lib/polars/array_expr.rb +500 -22
  108. data/lib/polars/array_name_space.rb +384 -10
  109. data/lib/polars/batched_csv_reader.rb +48 -66
  110. data/lib/polars/binary_expr.rb +217 -0
  111. data/lib/polars/binary_name_space.rb +155 -1
  112. data/lib/polars/cat_expr.rb +224 -0
  113. data/lib/polars/cat_name_space.rb +132 -32
  114. data/lib/polars/catalog/unity/catalog_info.rb +20 -0
  115. data/lib/polars/catalog/unity/column_info.rb +31 -0
  116. data/lib/polars/catalog/unity/namespace_info.rb +21 -0
  117. data/lib/polars/catalog/unity/table_info.rb +50 -0
  118. data/lib/polars/catalog.rb +448 -0
  119. data/lib/polars/collect_batches.rb +22 -0
  120. data/lib/polars/config.rb +3 -3
  121. data/lib/polars/convert.rb +201 -36
  122. data/lib/polars/data_frame.rb +2851 -1017
  123. data/lib/polars/data_frame_plot.rb +173 -0
  124. data/lib/polars/data_type_expr.rb +52 -0
  125. data/lib/polars/data_type_group.rb +6 -0
  126. data/lib/polars/data_types.rb +118 -18
  127. data/lib/polars/date_time_expr.rb +426 -84
  128. data/lib/polars/date_time_name_space.rb +384 -111
  129. data/lib/polars/dynamic_group_by.rb +102 -10
  130. data/lib/polars/exceptions.rb +50 -5
  131. data/lib/polars/expr.rb +2159 -915
  132. data/lib/polars/extension_expr.rb +39 -0
  133. data/lib/polars/extension_name_space.rb +39 -0
  134. data/lib/polars/functions/aggregation/horizontal.rb +11 -6
  135. data/lib/polars/functions/aggregation/vertical.rb +2 -3
  136. data/lib/polars/functions/as_datatype.rb +290 -8
  137. data/lib/polars/functions/business.rb +95 -0
  138. data/lib/polars/functions/col.rb +6 -5
  139. data/lib/polars/functions/datatype.rb +62 -0
  140. data/lib/polars/functions/eager.rb +426 -24
  141. data/lib/polars/functions/escape_regex.rb +21 -0
  142. data/lib/polars/functions/lazy.rb +813 -195
  143. data/lib/polars/functions/lit.rb +21 -10
  144. data/lib/polars/functions/range/int_range.rb +74 -2
  145. data/lib/polars/functions/range/linear_space.rb +195 -0
  146. data/lib/polars/functions/range/time_range.rb +1 -1
  147. data/lib/polars/functions/repeat.rb +7 -12
  148. data/lib/polars/functions/whenthen.rb +2 -2
  149. data/lib/polars/group_by.rb +188 -58
  150. data/lib/polars/iceberg_dataset.rb +108 -0
  151. data/lib/polars/in_process_query.rb +37 -0
  152. data/lib/polars/io/cloud.rb +18 -0
  153. data/lib/polars/io/csv.rb +336 -128
  154. data/lib/polars/io/database.rb +19 -4
  155. data/lib/polars/io/delta.rb +134 -0
  156. data/lib/polars/io/iceberg.rb +34 -0
  157. data/lib/polars/io/ipc.rb +63 -63
  158. data/lib/polars/io/json.rb +16 -0
  159. data/lib/polars/io/lines.rb +172 -0
  160. data/lib/polars/io/ndjson.rb +176 -20
  161. data/lib/polars/io/parquet.rb +173 -95
  162. data/lib/polars/io/scan_options.rb +55 -0
  163. data/lib/polars/io/sink_options.rb +27 -0
  164. data/lib/polars/io/utils.rb +17 -0
  165. data/lib/polars/lazy_frame.rb +3017 -622
  166. data/lib/polars/lazy_group_by.rb +436 -2
  167. data/lib/polars/list_expr.rb +551 -59
  168. data/lib/polars/list_name_space.rb +465 -51
  169. data/lib/polars/meta_expr.rb +146 -24
  170. data/lib/polars/name_expr.rb +87 -2
  171. data/lib/polars/query_opt_flags.rb +264 -0
  172. data/lib/polars/rolling_group_by.rb +90 -5
  173. data/lib/polars/scan_cast_options.rb +86 -0
  174. data/lib/polars/schema.rb +128 -0
  175. data/lib/polars/selector.rb +245 -0
  176. data/lib/polars/selectors.rb +1048 -201
  177. data/lib/polars/series.rb +2522 -774
  178. data/lib/polars/series_plot.rb +72 -0
  179. data/lib/polars/slice.rb +1 -1
  180. data/lib/polars/sql_context.rb +13 -6
  181. data/lib/polars/string_cache.rb +19 -72
  182. data/lib/polars/string_expr.rb +561 -107
  183. data/lib/polars/string_name_space.rb +781 -109
  184. data/lib/polars/struct_expr.rb +139 -18
  185. data/lib/polars/struct_name_space.rb +19 -1
  186. data/lib/polars/testing.rb +24 -273
  187. data/lib/polars/utils/constants.rb +2 -0
  188. data/lib/polars/utils/construction/data_frame.rb +410 -0
  189. data/lib/polars/utils/construction/series.rb +350 -0
  190. data/lib/polars/utils/construction/utils.rb +9 -0
  191. data/lib/polars/utils/convert.rb +18 -8
  192. data/lib/polars/utils/deprecation.rb +11 -0
  193. data/lib/polars/utils/parse.rb +62 -9
  194. data/lib/polars/utils/reduce_balanced.rb +43 -0
  195. data/lib/polars/utils/serde.rb +22 -0
  196. data/lib/polars/utils/unstable.rb +19 -0
  197. data/lib/polars/utils/various.rb +86 -1
  198. data/lib/polars/utils.rb +63 -48
  199. data/lib/polars/version.rb +1 -1
  200. data/lib/polars.rb +85 -2
  201. metadata +80 -28
  202. data/ext/polars/src/allocator.rs +0 -13
  203. data/ext/polars/src/batched_csv.rs +0 -138
  204. data/ext/polars/src/functions/string_cache.rs +0 -25
  205. data/ext/polars/src/map/dataframe.rs +0 -338
  206. data/lib/polars/plot.rb +0 -109
@@ -16,7 +16,10 @@ module Polars
16
16
  val.is_a?(::Array) && val.all? { |x| pathlike?(x) }
17
17
  end
18
18
 
19
- def self.is_bool_sequence(val)
19
+ def self.is_bool_sequence(val, include_series: false)
20
+ if include_series && val.is_a?(Series)
21
+ return val.dtype == Boolean
22
+ end
20
23
  val.is_a?(::Array) && val.all? { |x| x == true || x == false }
21
24
  end
22
25
 
@@ -24,6 +27,15 @@ module Polars
24
27
  val.is_a?(::Array) && _is_iterable_of(val, Integer)
25
28
  end
26
29
 
30
+ def self.is_sequence(val, include_series: false)
31
+ val.is_a?(::Array) || (include_series && val.is_a?(Series))
32
+ end
33
+
34
+ # Check if an object is a sequence of `tp`, only sniffing the first element.
35
+ def self.is_non_empty_sequence_of(obj, tp)
36
+ !obj.empty? && obj[0].is_a?(tp)
37
+ end
38
+
27
39
  def self.is_str_sequence(val, allow_str: false)
28
40
  if allow_str == false && val.is_a?(::String)
29
41
  false
@@ -32,6 +44,20 @@ module Polars
32
44
  end
33
45
  end
34
46
 
47
+ def self.range_to_series(name, rng, dtype: nil)
48
+ dtype ||= Int64
49
+ if dtype.integer?
50
+ range = F.int_range(
51
+ rng.first, rng.last + (rng.exclude_end? ? 0 : 1), step: 1, dtype: dtype, eager: true
52
+ )
53
+ else
54
+ range = F.int_range(
55
+ rng.first, rng.last + (rng.exclude_end? ? 0 : 1), step: 1, eager: true
56
+ ).cast(dtype)
57
+ end
58
+ range.alias(name)
59
+ end
60
+
35
61
  def self.arrlen(obj)
36
62
  if obj.is_a?(Range)
37
63
  # size only works for numeric ranges
@@ -68,6 +94,10 @@ module Polars
68
94
  end
69
95
  end
70
96
 
97
+ def self._polars_warn(msg)
98
+ warn msg
99
+ end
100
+
71
101
  def self.extend_bool(value, n_match, value_name, match_name)
72
102
  values = bool?(value) ? [value] * n_match : value
73
103
  if n_match != values.length
@@ -76,5 +106,60 @@ module Polars
76
106
  end
77
107
  values
78
108
  end
109
+
110
+ def self.require_same_type(current, other)
111
+ if !other.is_a?(current.class) && !current.is_a?(other.class)
112
+ msg = (
113
+ "expected `other` to be a #{current.inspect}, " +
114
+ "not #{other.inspect}"
115
+ )
116
+ raise TypeError, msg
117
+ end
118
+ end
119
+
120
+ def self._update_columns(df, new_columns)
121
+ if df.width > new_columns.length
122
+ cols = df.columns
123
+ new_columns.each_with_index do |name, i|
124
+ cols[i] = name
125
+ end
126
+ new_columns = cols
127
+ end
128
+ df.columns = new_columns.to_a
129
+ df
130
+ end
131
+
132
+ def self.parse_percentiles(
133
+ percentiles, inject_median: false
134
+ )
135
+ if percentiles.is_a?(Float)
136
+ percentiles = [percentiles]
137
+ elsif percentiles.nil?
138
+ percentiles = []
139
+ end
140
+ if !percentiles.all? { |p| p >= 0 && p <= 1 }
141
+ msg = "`percentiles` must all be in the range [0, 1]"
142
+ raise ArgumentError, msg
143
+ end
144
+
145
+ sub_50_percentiles = percentiles.select { |p| p < 0.5 }.sort
146
+ at_or_above_50_percentiles = percentiles.select { |p| p >= 0.5 }.sort
147
+
148
+ if inject_median && (!at_or_above_50_percentiles || at_or_above_50_percentiles[0] != 0.5)
149
+ at_or_above_50_percentiles = [0.5, *at_or_above_50_percentiles]
150
+ end
151
+
152
+ [*sub_50_percentiles, *at_or_above_50_percentiles]
153
+ end
154
+
155
+ def self.display_dot_graph(
156
+ dot:,
157
+ show: true,
158
+ output_path: nil,
159
+ raw_output: false,
160
+ figsize: [16.0, 12.0]
161
+ )
162
+ raise Todo
163
+ end
79
164
  end
80
165
  end
data/lib/polars/utils.rb CHANGED
@@ -4,7 +4,7 @@ module Polars
4
4
  DTYPE_TEMPORAL_UNITS = ["ns", "us", "ms"]
5
5
 
6
6
  def self.is_polars_dtype(dtype, include_unknown: false)
7
- is_dtype = dtype.is_a?(Symbol) || dtype.is_a?(::String) || dtype.is_a?(DataType) || (dtype.is_a?(Class) && dtype < DataType)
7
+ is_dtype = dtype.is_a?(DataType) || (dtype.is_a?(Class) && dtype < DataType)
8
8
 
9
9
  if !include_unknown
10
10
  is_dtype && dtype != Unknown
@@ -17,42 +17,6 @@ module Polars
17
17
  obj.is_a?(Expr) && obj.meta.is_column
18
18
  end
19
19
 
20
- def self.map_rb_type_to_dtype(ruby_dtype)
21
- if ruby_dtype == Float
22
- Float64
23
- elsif ruby_dtype == Integer
24
- Int64
25
- elsif ruby_dtype == ::String
26
- Utf8
27
- elsif ruby_dtype == TrueClass || ruby_dtype == FalseClass
28
- Boolean
29
- elsif ruby_dtype == DateTime || ruby_dtype == ::Time || (defined?(ActiveSupport::TimeWithZone) && ruby_dtype == ActiveSupport::TimeWithZone)
30
- Datetime.new("ns")
31
- elsif ruby_dtype == ::Date
32
- Date
33
- elsif ruby_dtype == ::Array
34
- List
35
- elsif ruby_dtype == NilClass
36
- Null
37
- else
38
- raise TypeError, "Invalid type"
39
- end
40
- end
41
-
42
- # TODO fix
43
- def self.rb_type_to_dtype(data_type)
44
- if is_polars_dtype(data_type)
45
- data_type = data_type.to_s if data_type.is_a?(Symbol)
46
- return data_type
47
- end
48
-
49
- begin
50
- map_rb_type_to_dtype(data_type)
51
- rescue TypeError
52
- raise ArgumentError, "Conversion of Ruby data type #{data_type.inspect} to Polars data type not implemented."
53
- end
54
- end
55
-
56
20
  def self.parse_row_index_args(row_index_name = nil, row_index_offset = 0)
57
21
  if row_index_name.nil?
58
22
  nil
@@ -64,15 +28,14 @@ module Polars
64
28
  def self.handle_projection_columns(columns)
65
29
  projection = nil
66
30
  if columns
67
- raise Todo
68
- # if columns.is_a?(::String) || columns.is_a?(Symbol)
69
- # columns = [columns]
70
- # elsif is_int_sequence(columns)
71
- # projection = columns.to_a
72
- # columns = nil
73
- # elsif !is_str_sequence(columns)
74
- # raise ArgumentError, "columns arg should contain a list of all integers or all strings values."
75
- # end
31
+ if columns.is_a?(::String)
32
+ columns = [columns]
33
+ elsif is_int_sequence(columns)
34
+ projection = columns.to_a
35
+ columns = nil
36
+ elsif !is_str_sequence(columns)
37
+ raise ArgumentError, "columns arg should contain a list of all integers or all strings values."
38
+ end
76
39
  end
77
40
  [projection, columns]
78
41
  end
@@ -107,7 +70,7 @@ module Polars
107
70
  end
108
71
 
109
72
  def self.is_selector(obj)
110
- obj.is_a?(Selectors::SelectorProxy)
73
+ obj.is_a?(Selector)
111
74
  end
112
75
 
113
76
  def self.expand_selector(target, selector, strict: true)
@@ -153,13 +116,65 @@ module Polars
153
116
  if is_polars_dtype(input)
154
117
  input
155
118
  else
156
- raise Todo
119
+ parse_rb_type_into_dtype(input)
120
+ end
121
+ end
122
+
123
+ def self.try_parse_into_dtype(input)
124
+ parse_into_dtype(input)
125
+ rescue TypeError
126
+ nil
127
+ end
128
+
129
+ def self.parse_rb_type_into_dtype(input)
130
+ if input == Integer
131
+ Int64.new
132
+ elsif input == Float
133
+ Float64.new
134
+ elsif input == ::String
135
+ String.new
136
+ elsif input == ::Time || input == ::DateTime || (defined?(ActiveSupport::TimeWithZone) && input == ActiveSupport::TimeWithZone)
137
+ Datetime.new("ns")
138
+ elsif input == ::Date
139
+ Date.new
140
+ elsif input == NilClass
141
+ Null.new
142
+ elsif input == ::Array
143
+ List
144
+ # this is required as pass through. Don't remove
145
+ elsif input == Unknown
146
+ Unknown
147
+ else
148
+ _raise_on_invalid_dtype(input)
157
149
  end
158
150
  end
159
151
 
152
+ def self._raise_on_invalid_dtype(input)
153
+ # TODO improve
154
+ input_type = input.inspect
155
+ msg = "cannot parse input #{input_type} into Polars data type"
156
+ raise TypeError, msg
157
+ end
158
+
160
159
  def self.re_escape(s)
161
160
  # escapes _only_ those metachars with meaning to the rust regex crate
162
161
  Plr.re_escape(s)
163
162
  end
163
+
164
+ def self.parse_into_datatype_expr(input)
165
+ if input.is_a?(DataTypeExpr)
166
+ input
167
+ else
168
+ parse_into_dtype(input).to_dtype_expr
169
+ end
170
+ end
171
+
172
+ def self._chain_predicates(lhs, rhs)
173
+ if !lhs.nil?
174
+ raise Todo
175
+ else
176
+ _parse_inputs_as_iterable(rhs)
177
+ end
178
+ end
164
179
  end
165
180
  end
@@ -1,4 +1,4 @@
1
1
  module Polars
2
2
  # @private
3
- VERSION = "0.15.0"
3
+ VERSION = "0.26.0"
4
4
  end
data/lib/polars.rb CHANGED
@@ -6,7 +6,6 @@ rescue LoadError
6
6
  end
7
7
 
8
8
  # stdlib
9
- require "bigdecimal"
10
9
  require "date"
11
10
  require "stringio"
12
11
 
@@ -19,20 +18,32 @@ require_relative "polars/binary_expr"
19
18
  require_relative "polars/binary_name_space"
20
19
  require_relative "polars/cat_expr"
21
20
  require_relative "polars/cat_name_space"
21
+ require_relative "polars/catalog"
22
+ require_relative "polars/catalog/unity/catalog_info"
23
+ require_relative "polars/catalog/unity/column_info"
24
+ require_relative "polars/catalog/unity/namespace_info"
25
+ require_relative "polars/catalog/unity/table_info"
26
+ require_relative "polars/collect_batches"
22
27
  require_relative "polars/config"
23
28
  require_relative "polars/convert"
24
- require_relative "polars/plot"
25
29
  require_relative "polars/data_frame"
30
+ require_relative "polars/data_frame_plot"
26
31
  require_relative "polars/data_types"
32
+ require_relative "polars/data_type_expr"
27
33
  require_relative "polars/data_type_group"
28
34
  require_relative "polars/date_time_expr"
29
35
  require_relative "polars/date_time_name_space"
30
36
  require_relative "polars/dynamic_group_by"
31
37
  require_relative "polars/exceptions"
32
38
  require_relative "polars/expr"
39
+ require_relative "polars/extension_expr"
40
+ require_relative "polars/extension_name_space"
33
41
  require_relative "polars/functions/as_datatype"
42
+ require_relative "polars/functions/business"
34
43
  require_relative "polars/functions/col"
44
+ require_relative "polars/functions/datatype"
35
45
  require_relative "polars/functions/eager"
46
+ require_relative "polars/functions/escape_regex"
36
47
  require_relative "polars/functions/lazy"
37
48
  require_relative "polars/functions/len"
38
49
  require_relative "polars/functions/lit"
@@ -44,24 +55,39 @@ require_relative "polars/functions/aggregation/vertical"
44
55
  require_relative "polars/functions/range/date_range"
45
56
  require_relative "polars/functions/range/datetime_range"
46
57
  require_relative "polars/functions/range/int_range"
58
+ require_relative "polars/functions/range/linear_space"
47
59
  require_relative "polars/functions/range/time_range"
48
60
  require_relative "polars/group_by"
61
+ require_relative "polars/iceberg_dataset"
62
+ require_relative "polars/in_process_query"
49
63
  require_relative "polars/io/avro"
64
+ require_relative "polars/io/cloud"
50
65
  require_relative "polars/io/csv"
51
66
  require_relative "polars/io/database"
67
+ require_relative "polars/io/delta"
68
+ require_relative "polars/io/iceberg"
52
69
  require_relative "polars/io/ipc"
53
70
  require_relative "polars/io/json"
71
+ require_relative "polars/io/lines"
54
72
  require_relative "polars/io/ndjson"
55
73
  require_relative "polars/io/parquet"
74
+ require_relative "polars/io/scan_options"
75
+ require_relative "polars/io/sink_options"
76
+ require_relative "polars/io/utils"
56
77
  require_relative "polars/lazy_frame"
57
78
  require_relative "polars/lazy_group_by"
58
79
  require_relative "polars/list_expr"
59
80
  require_relative "polars/list_name_space"
60
81
  require_relative "polars/meta_expr"
61
82
  require_relative "polars/name_expr"
83
+ require_relative "polars/query_opt_flags"
62
84
  require_relative "polars/rolling_group_by"
85
+ require_relative "polars/scan_cast_options"
86
+ require_relative "polars/schema"
87
+ require_relative "polars/selector"
63
88
  require_relative "polars/selectors"
64
89
  require_relative "polars/series"
90
+ require_relative "polars/series_plot"
65
91
  require_relative "polars/slice"
66
92
  require_relative "polars/sql_context"
67
93
  require_relative "polars/string_cache"
@@ -72,8 +98,15 @@ require_relative "polars/struct_name_space"
72
98
  require_relative "polars/testing"
73
99
  require_relative "polars/utils"
74
100
  require_relative "polars/utils/constants"
101
+ require_relative "polars/utils/construction/data_frame"
102
+ require_relative "polars/utils/construction/series"
103
+ require_relative "polars/utils/construction/utils"
75
104
  require_relative "polars/utils/convert"
105
+ require_relative "polars/utils/deprecation"
76
106
  require_relative "polars/utils/parse"
107
+ require_relative "polars/utils/reduce_balanced"
108
+ require_relative "polars/utils/serde"
109
+ require_relative "polars/utils/unstable"
77
110
  require_relative "polars/utils/various"
78
111
  require_relative "polars/utils/wrap"
79
112
  require_relative "polars/version"
@@ -87,6 +120,56 @@ module Polars
87
120
  # @private
88
121
  F = self
89
122
 
123
+ # @private
124
+ NO_DEFAULT = Object.new
125
+
90
126
  # @private
91
127
  N_INFER_DEFAULT = 100
128
+
129
+ # @private
130
+ class ArrowArrayStream
131
+ def arrow_c_stream
132
+ self
133
+ end
134
+ end
135
+
136
+ # Return the number of threads in the Polars thread pool.
137
+ #
138
+ # @return [Integer]
139
+ def self.thread_pool_size
140
+ Plr.thread_pool_size
141
+ end
142
+
143
+ # Return the data type used for Polars indexing.
144
+ #
145
+ # @return [Object]
146
+ #
147
+ # @example
148
+ # Polars.get_index_type
149
+ # # => Polars::UInt32
150
+ def self.get_index_type
151
+ Plr.get_index_type
152
+ end
153
+
154
+ # Return detailed Polars build information.
155
+ #
156
+ # @return [Hash]
157
+ #
158
+ # @example
159
+ # Polars.build_info
160
+ def self.build_info
161
+ {"version" => VERSION}
162
+ end
163
+
164
+ # Print out the version of Polars and its optional dependencies.
165
+ #
166
+ # @return [nil]
167
+ def self.show_versions
168
+ puts "--------Version info---------"
169
+ puts "Polars: #{VERSION}"
170
+ puts "Index type: #{get_index_type}"
171
+ puts "Platform: #{RUBY_PLATFORM}"
172
+ puts "Ruby: #{RUBY_VERSION}"
173
+ nil
174
+ end
92
175
  end
metadata CHANGED
@@ -1,29 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polars-df
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-11-20 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  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
12
  - !ruby/object:Gem::Dependency
28
13
  name: rb_sys
29
14
  requirement: !ruby/object:Gem::Requirement
@@ -38,7 +23,6 @@ dependencies:
38
23
  - - ">="
39
24
  - !ruby/object:Gem::Version
40
25
  version: '0'
41
- description:
42
26
  email: andrew@ankane.org
43
27
  executables: []
44
28
  extensions:
@@ -53,29 +37,39 @@ files:
53
37
  - README.md
54
38
  - ext/polars/Cargo.toml
55
39
  - ext/polars/extconf.rb
56
- - ext/polars/src/allocator.rs
57
- - ext/polars/src/batched_csv.rs
40
+ - ext/polars/src/c_api/allocator.rs
41
+ - ext/polars/src/c_api/mod.rs
42
+ - ext/polars/src/catalog/mod.rs
43
+ - ext/polars/src/catalog/unity.rs
58
44
  - ext/polars/src/conversion/any_value.rs
45
+ - ext/polars/src/conversion/categorical.rs
59
46
  - ext/polars/src/conversion/chunked_array.rs
47
+ - ext/polars/src/conversion/datetime.rs
60
48
  - ext/polars/src/conversion/mod.rs
61
49
  - ext/polars/src/dataframe/construction.rs
62
50
  - ext/polars/src/dataframe/export.rs
63
51
  - ext/polars/src/dataframe/general.rs
64
52
  - ext/polars/src/dataframe/io.rs
53
+ - ext/polars/src/dataframe/map.rs
65
54
  - ext/polars/src/dataframe/mod.rs
66
55
  - ext/polars/src/dataframe/serde.rs
67
56
  - ext/polars/src/error.rs
68
57
  - ext/polars/src/exceptions.rs
69
58
  - ext/polars/src/expr/array.rs
70
59
  - ext/polars/src/expr/binary.rs
60
+ - ext/polars/src/expr/bitwise.rs
71
61
  - ext/polars/src/expr/categorical.rs
62
+ - ext/polars/src/expr/datatype.rs
72
63
  - ext/polars/src/expr/datetime.rs
64
+ - ext/polars/src/expr/extension.rs
73
65
  - ext/polars/src/expr/general.rs
74
66
  - ext/polars/src/expr/list.rs
75
67
  - ext/polars/src/expr/meta.rs
76
68
  - ext/polars/src/expr/mod.rs
77
69
  - ext/polars/src/expr/name.rs
78
70
  - ext/polars/src/expr/rolling.rs
71
+ - ext/polars/src/expr/selector.rs
72
+ - ext/polars/src/expr/serde.rs
79
73
  - ext/polars/src/expr/string.rs
80
74
  - ext/polars/src/expr/struct.rs
81
75
  - ext/polars/src/file.rs
@@ -89,20 +83,29 @@ files:
89
83
  - ext/polars/src/functions/mod.rs
90
84
  - ext/polars/src/functions/random.rs
91
85
  - ext/polars/src/functions/range.rs
92
- - ext/polars/src/functions/string_cache.rs
86
+ - ext/polars/src/functions/strings.rs
87
+ - ext/polars/src/functions/utils.rs
93
88
  - ext/polars/src/functions/whenthen.rs
94
89
  - ext/polars/src/interop/arrow/mod.rs
95
- - ext/polars/src/interop/arrow/to_ruby.rs
90
+ - ext/polars/src/interop/arrow/to_rb.rs
91
+ - ext/polars/src/interop/arrow/to_rust.rs
96
92
  - ext/polars/src/interop/mod.rs
97
93
  - ext/polars/src/interop/numo/mod.rs
98
94
  - ext/polars/src/interop/numo/to_numo_df.rs
99
95
  - ext/polars/src/interop/numo/to_numo_series.rs
96
+ - ext/polars/src/io/cloud_options.rs
97
+ - ext/polars/src/io/mod.rs
98
+ - ext/polars/src/io/scan_options.rs
99
+ - ext/polars/src/io/sink_options.rs
100
+ - ext/polars/src/io/sink_output.rs
101
+ - ext/polars/src/lazyframe/exitable.rs
100
102
  - ext/polars/src/lazyframe/general.rs
101
103
  - ext/polars/src/lazyframe/mod.rs
104
+ - ext/polars/src/lazyframe/optflags.rs
102
105
  - ext/polars/src/lazyframe/serde.rs
106
+ - ext/polars/src/lazyframe/sink.rs
103
107
  - ext/polars/src/lazygroupby.rs
104
108
  - ext/polars/src/lib.rs
105
- - ext/polars/src/map/dataframe.rs
106
109
  - ext/polars/src/map/lazy.rs
107
110
  - ext/polars/src/map/mod.rs
108
111
  - ext/polars/src/map/series.rs
@@ -110,6 +113,18 @@ files:
110
113
  - ext/polars/src/on_startup.rs
111
114
  - ext/polars/src/prelude.rs
112
115
  - ext/polars/src/rb_modules.rs
116
+ - ext/polars/src/ruby/exceptions.rs
117
+ - ext/polars/src/ruby/gvl.rs
118
+ - ext/polars/src/ruby/lazy.rs
119
+ - ext/polars/src/ruby/mod.rs
120
+ - ext/polars/src/ruby/numo.rs
121
+ - ext/polars/src/ruby/plan_callback.rs
122
+ - ext/polars/src/ruby/rb_modules.rs
123
+ - ext/polars/src/ruby/ruby_convert_registry.rs
124
+ - ext/polars/src/ruby/ruby_function.rs
125
+ - ext/polars/src/ruby/ruby_udf.rs
126
+ - ext/polars/src/ruby/thread.rs
127
+ - ext/polars/src/ruby/utils.rs
113
128
  - ext/polars/src/series/aggregation.rs
114
129
  - ext/polars/src/series/arithmetic.rs
115
130
  - ext/polars/src/series/comparison.rs
@@ -117,9 +132,14 @@ files:
117
132
  - ext/polars/src/series/export.rs
118
133
  - ext/polars/src/series/general.rs
119
134
  - ext/polars/src/series/import.rs
135
+ - ext/polars/src/series/map.rs
120
136
  - ext/polars/src/series/mod.rs
121
137
  - ext/polars/src/series/scatter.rs
122
138
  - ext/polars/src/sql.rs
139
+ - ext/polars/src/testing/frame.rs
140
+ - ext/polars/src/testing/mod.rs
141
+ - ext/polars/src/testing/series.rs
142
+ - ext/polars/src/timeout.rs
123
143
  - ext/polars/src/utils.rs
124
144
  - lib/polars-df.rb
125
145
  - lib/polars.rb
@@ -130,9 +150,17 @@ files:
130
150
  - lib/polars/binary_name_space.rb
131
151
  - lib/polars/cat_expr.rb
132
152
  - lib/polars/cat_name_space.rb
153
+ - lib/polars/catalog.rb
154
+ - lib/polars/catalog/unity/catalog_info.rb
155
+ - lib/polars/catalog/unity/column_info.rb
156
+ - lib/polars/catalog/unity/namespace_info.rb
157
+ - lib/polars/catalog/unity/table_info.rb
158
+ - lib/polars/collect_batches.rb
133
159
  - lib/polars/config.rb
134
160
  - lib/polars/convert.rb
135
161
  - lib/polars/data_frame.rb
162
+ - lib/polars/data_frame_plot.rb
163
+ - lib/polars/data_type_expr.rb
136
164
  - lib/polars/data_type_group.rb
137
165
  - lib/polars/data_types.rb
138
166
  - lib/polars/date_time_expr.rb
@@ -141,11 +169,16 @@ files:
141
169
  - lib/polars/exceptions.rb
142
170
  - lib/polars/expr.rb
143
171
  - lib/polars/expr_dispatch.rb
172
+ - lib/polars/extension_expr.rb
173
+ - lib/polars/extension_name_space.rb
144
174
  - lib/polars/functions/aggregation/horizontal.rb
145
175
  - lib/polars/functions/aggregation/vertical.rb
146
176
  - lib/polars/functions/as_datatype.rb
177
+ - lib/polars/functions/business.rb
147
178
  - lib/polars/functions/col.rb
179
+ - lib/polars/functions/datatype.rb
148
180
  - lib/polars/functions/eager.rb
181
+ - lib/polars/functions/escape_regex.rb
149
182
  - lib/polars/functions/lazy.rb
150
183
  - lib/polars/functions/len.rb
151
184
  - lib/polars/functions/lit.rb
@@ -153,27 +186,41 @@ files:
153
186
  - lib/polars/functions/range/date_range.rb
154
187
  - lib/polars/functions/range/datetime_range.rb
155
188
  - lib/polars/functions/range/int_range.rb
189
+ - lib/polars/functions/range/linear_space.rb
156
190
  - lib/polars/functions/range/time_range.rb
157
191
  - lib/polars/functions/repeat.rb
158
192
  - lib/polars/functions/whenthen.rb
159
193
  - lib/polars/group_by.rb
194
+ - lib/polars/iceberg_dataset.rb
195
+ - lib/polars/in_process_query.rb
160
196
  - lib/polars/io/avro.rb
197
+ - lib/polars/io/cloud.rb
161
198
  - lib/polars/io/csv.rb
162
199
  - lib/polars/io/database.rb
200
+ - lib/polars/io/delta.rb
201
+ - lib/polars/io/iceberg.rb
163
202
  - lib/polars/io/ipc.rb
164
203
  - lib/polars/io/json.rb
204
+ - lib/polars/io/lines.rb
165
205
  - lib/polars/io/ndjson.rb
166
206
  - lib/polars/io/parquet.rb
207
+ - lib/polars/io/scan_options.rb
208
+ - lib/polars/io/sink_options.rb
209
+ - lib/polars/io/utils.rb
167
210
  - lib/polars/lazy_frame.rb
168
211
  - lib/polars/lazy_group_by.rb
169
212
  - lib/polars/list_expr.rb
170
213
  - lib/polars/list_name_space.rb
171
214
  - lib/polars/meta_expr.rb
172
215
  - lib/polars/name_expr.rb
173
- - lib/polars/plot.rb
216
+ - lib/polars/query_opt_flags.rb
174
217
  - lib/polars/rolling_group_by.rb
218
+ - lib/polars/scan_cast_options.rb
219
+ - lib/polars/schema.rb
220
+ - lib/polars/selector.rb
175
221
  - lib/polars/selectors.rb
176
222
  - lib/polars/series.rb
223
+ - lib/polars/series_plot.rb
177
224
  - lib/polars/slice.rb
178
225
  - lib/polars/sql_context.rb
179
226
  - lib/polars/string_cache.rb
@@ -184,8 +231,15 @@ files:
184
231
  - lib/polars/testing.rb
185
232
  - lib/polars/utils.rb
186
233
  - lib/polars/utils/constants.rb
234
+ - lib/polars/utils/construction/data_frame.rb
235
+ - lib/polars/utils/construction/series.rb
236
+ - lib/polars/utils/construction/utils.rb
187
237
  - lib/polars/utils/convert.rb
238
+ - lib/polars/utils/deprecation.rb
188
239
  - lib/polars/utils/parse.rb
240
+ - lib/polars/utils/reduce_balanced.rb
241
+ - lib/polars/utils/serde.rb
242
+ - lib/polars/utils/unstable.rb
189
243
  - lib/polars/utils/various.rb
190
244
  - lib/polars/utils/wrap.rb
191
245
  - lib/polars/version.rb
@@ -194,7 +248,6 @@ homepage: https://github.com/ankane/ruby-polars
194
248
  licenses:
195
249
  - MIT
196
250
  metadata: {}
197
- post_install_message:
198
251
  rdoc_options: []
199
252
  require_paths:
200
253
  - lib
@@ -202,15 +255,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
255
  requirements:
203
256
  - - ">="
204
257
  - !ruby/object:Gem::Version
205
- version: '3.1'
258
+ version: '3.3'
206
259
  required_rubygems_version: !ruby/object:Gem::Requirement
207
260
  requirements:
208
261
  - - ">="
209
262
  - !ruby/object:Gem::Version
210
263
  version: '0'
211
264
  requirements: []
212
- rubygems_version: 3.5.22
213
- signing_key:
265
+ rubygems_version: 4.0.13
214
266
  specification_version: 4
215
267
  summary: Blazingly fast DataFrames for Ruby
216
268
  test_files: []