polars-df 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/Cargo.lock +142 -11
  4. data/Cargo.toml +5 -0
  5. data/ext/polars/Cargo.toml +17 -1
  6. data/ext/polars/src/apply/dataframe.rs +292 -0
  7. data/ext/polars/src/apply/mod.rs +254 -0
  8. data/ext/polars/src/apply/series.rs +1173 -0
  9. data/ext/polars/src/conversion.rs +180 -5
  10. data/ext/polars/src/dataframe.rs +146 -1
  11. data/ext/polars/src/error.rs +12 -0
  12. data/ext/polars/src/lazy/apply.rs +34 -2
  13. data/ext/polars/src/lazy/dataframe.rs +74 -3
  14. data/ext/polars/src/lazy/dsl.rs +136 -0
  15. data/ext/polars/src/lib.rs +199 -1
  16. data/ext/polars/src/list_construction.rs +100 -0
  17. data/ext/polars/src/series.rs +331 -0
  18. data/ext/polars/src/utils.rs +25 -0
  19. data/lib/polars/cat_name_space.rb +54 -0
  20. data/lib/polars/convert.rb +100 -0
  21. data/lib/polars/data_frame.rb +1558 -60
  22. data/lib/polars/date_time_expr.rb +2 -2
  23. data/lib/polars/date_time_name_space.rb +1484 -0
  24. data/lib/polars/dynamic_group_by.rb +49 -0
  25. data/lib/polars/expr.rb +4072 -107
  26. data/lib/polars/expr_dispatch.rb +8 -0
  27. data/lib/polars/functions.rb +192 -3
  28. data/lib/polars/group_by.rb +44 -3
  29. data/lib/polars/io.rb +20 -4
  30. data/lib/polars/lazy_frame.rb +800 -26
  31. data/lib/polars/lazy_functions.rb +687 -43
  32. data/lib/polars/lazy_group_by.rb +1 -0
  33. data/lib/polars/list_expr.rb +502 -5
  34. data/lib/polars/list_name_space.rb +346 -0
  35. data/lib/polars/rolling_group_by.rb +35 -0
  36. data/lib/polars/series.rb +934 -62
  37. data/lib/polars/string_expr.rb +189 -13
  38. data/lib/polars/string_name_space.rb +690 -0
  39. data/lib/polars/struct_name_space.rb +64 -0
  40. data/lib/polars/utils.rb +44 -0
  41. data/lib/polars/version.rb +1 -1
  42. data/lib/polars.rb +14 -1
  43. metadata +15 -3
@@ -0,0 +1,64 @@
1
+ module Polars
2
+ # Series.struct namespace.
3
+ class StructNameSpace
4
+ include ExprDispatch
5
+
6
+ self._accessor = "struct"
7
+
8
+ # @private
9
+ def initialize(series)
10
+ self._s = series._s
11
+ end
12
+
13
+ # Retrieve one of the fields of this `Struct` as a new Series.
14
+ #
15
+ # @return [Series]
16
+ def [](item)
17
+ if item.is_a?(Integer)
18
+ field(fields[item])
19
+ elsif item.is_a?(String)
20
+ field(item)
21
+ else
22
+ raise ArgumentError, "expected type Integer or String, got #{item.class.name}"
23
+ end
24
+ end
25
+
26
+ # Convert this Struct Series to a DataFrame.
27
+ #
28
+ # @return [DataFrame]
29
+ def to_frame
30
+ Utils.wrap_df(_s.struct_to_frame)
31
+ end
32
+
33
+ # Get the names of the fields.
34
+ #
35
+ # @return [Array]
36
+ def fields
37
+ if _s.nil?
38
+ []
39
+ else
40
+ _s.struct_fields
41
+ end
42
+ end
43
+
44
+ # Retrieve one of the fields of this `Struct` as a new Series.
45
+ #
46
+ # @param name [String]
47
+ # Name of the field
48
+ #
49
+ # @return [Series]
50
+ def field(name)
51
+ super
52
+ end
53
+
54
+ # Rename the fields of the struct.
55
+ #
56
+ # @param names [Array]
57
+ # New names in the order of the struct's fields
58
+ #
59
+ # @return [Series]
60
+ def rename_fields(names)
61
+ super
62
+ end
63
+ end
64
+ end
data/lib/polars/utils.rb CHANGED
@@ -11,6 +11,10 @@ module Polars
11
11
  DataFrame._from_rbdf(df)
12
12
  end
13
13
 
14
+ def self.wrap_ldf(ldf)
15
+ LazyFrame._from_rbldf(ldf)
16
+ end
17
+
14
18
  def self.wrap_expr(rbexpr)
15
19
  Expr._from_rbexpr(rbexpr)
16
20
  end
@@ -37,6 +41,34 @@ module Polars
37
41
  end
38
42
  end
39
43
 
44
+ def self._to_ruby_datetime(value, dtype, tu: "ns", tz: nil)
45
+ if dtype == :date
46
+ # days to seconds
47
+ # important to create from utc. Not doing this leads
48
+ # to inconsistencies dependent on the timezone you are in.
49
+ Time.at(value * 86400).utc.to_date
50
+ # TODO fix dtype
51
+ elsif dtype.to_s.start_with?("datetime[")
52
+ if tz.nil? || tz == ""
53
+ if tu == "ns"
54
+ raise Todo
55
+ elsif tu == "us"
56
+ dt = Time.at(value / 1000000, value % 1000000, :usec).utc
57
+ elsif tu == "ms"
58
+ raise Todo
59
+ else
60
+ raise ArgumentError, "tu must be one of {{'ns', 'us', 'ms'}}, got #{tu}"
61
+ end
62
+ else
63
+ raise Todo
64
+ end
65
+
66
+ dt
67
+ else
68
+ raise NotImplementedError
69
+ end
70
+ end
71
+
40
72
  def self.selection_to_rbexpr_list(exprs)
41
73
  if exprs.is_a?(String) || exprs.is_a?(Expr) || exprs.is_a?(Series)
42
74
  exprs = [exprs]
@@ -143,5 +175,17 @@ module Polars
143
175
  def self.bool?(value)
144
176
  value == true || value == false
145
177
  end
178
+
179
+ def self._is_iterable_of(val, eltype)
180
+ val.all? { |x| x.is_a?(eltype) }
181
+ end
182
+
183
+ def self.is_str_sequence(val, allow_str: false)
184
+ if allow_str == false && val.is_a?(String)
185
+ false
186
+ else
187
+ val.is_a?(Array) && _is_iterable_of(val, String)
188
+ end
189
+ end
146
190
  end
147
191
  end
@@ -1,4 +1,4 @@
1
1
  module Polars
2
2
  # @private
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.5"
4
4
  end
data/lib/polars.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  # ext
2
- require "polars/polars"
2
+ begin
3
+ require "polars/#{RUBY_VERSION.to_f}/polars"
4
+ rescue LoadError
5
+ require "polars/polars"
6
+ end
3
7
 
4
8
  # stdlib
5
9
  require "date"
@@ -8,8 +12,12 @@ require "date"
8
12
  require "polars/expr_dispatch"
9
13
  require "polars/batched_csv_reader"
10
14
  require "polars/cat_expr"
15
+ require "polars/cat_name_space"
16
+ require "polars/convert"
11
17
  require "polars/data_frame"
12
18
  require "polars/date_time_expr"
19
+ require "polars/date_time_name_space"
20
+ require "polars/dynamic_group_by"
13
21
  require "polars/exceptions"
14
22
  require "polars/expr"
15
23
  require "polars/functions"
@@ -19,17 +27,22 @@ require "polars/lazy_frame"
19
27
  require "polars/lazy_functions"
20
28
  require "polars/lazy_group_by"
21
29
  require "polars/list_expr"
30
+ require "polars/list_name_space"
22
31
  require "polars/meta_expr"
32
+ require "polars/rolling_group_by"
23
33
  require "polars/series"
24
34
  require "polars/slice"
25
35
  require "polars/string_expr"
36
+ require "polars/string_name_space"
26
37
  require "polars/struct_expr"
38
+ require "polars/struct_name_space"
27
39
  require "polars/utils"
28
40
  require "polars/version"
29
41
  require "polars/when"
30
42
  require "polars/when_then"
31
43
 
32
44
  module Polars
45
+ extend Convert
33
46
  extend Functions
34
47
  extend IO
35
48
  extend LazyFunctions
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polars-df
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-28 00:00:00.000000000 Z
11
+ date: 2022-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rb_sys
@@ -39,6 +39,9 @@ files:
39
39
  - README.md
40
40
  - ext/polars/Cargo.toml
41
41
  - ext/polars/extconf.rb
42
+ - ext/polars/src/apply/dataframe.rs
43
+ - ext/polars/src/apply/mod.rs
44
+ - ext/polars/src/apply/series.rs
42
45
  - ext/polars/src/batched_csv.rs
43
46
  - ext/polars/src/conversion.rs
44
47
  - ext/polars/src/dataframe.rs
@@ -51,6 +54,7 @@ files:
51
54
  - ext/polars/src/lazy/mod.rs
52
55
  - ext/polars/src/lazy/utils.rs
53
56
  - ext/polars/src/lib.rs
57
+ - ext/polars/src/list_construction.rs
54
58
  - ext/polars/src/series.rs
55
59
  - ext/polars/src/set.rs
56
60
  - ext/polars/src/utils.rs
@@ -58,8 +62,12 @@ files:
58
62
  - lib/polars.rb
59
63
  - lib/polars/batched_csv_reader.rb
60
64
  - lib/polars/cat_expr.rb
65
+ - lib/polars/cat_name_space.rb
66
+ - lib/polars/convert.rb
61
67
  - lib/polars/data_frame.rb
62
68
  - lib/polars/date_time_expr.rb
69
+ - lib/polars/date_time_name_space.rb
70
+ - lib/polars/dynamic_group_by.rb
63
71
  - lib/polars/exceptions.rb
64
72
  - lib/polars/expr.rb
65
73
  - lib/polars/expr_dispatch.rb
@@ -70,11 +78,15 @@ files:
70
78
  - lib/polars/lazy_functions.rb
71
79
  - lib/polars/lazy_group_by.rb
72
80
  - lib/polars/list_expr.rb
81
+ - lib/polars/list_name_space.rb
73
82
  - lib/polars/meta_expr.rb
83
+ - lib/polars/rolling_group_by.rb
74
84
  - lib/polars/series.rb
75
85
  - lib/polars/slice.rb
76
86
  - lib/polars/string_expr.rb
87
+ - lib/polars/string_name_space.rb
77
88
  - lib/polars/struct_expr.rb
89
+ - lib/polars/struct_name_space.rb
78
90
  - lib/polars/utils.rb
79
91
  - lib/polars/version.rb
80
92
  - lib/polars/when.rb
@@ -98,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
110
  - !ruby/object:Gem::Version
99
111
  version: '0'
100
112
  requirements: []
101
- rubygems_version: 3.3.7
113
+ rubygems_version: 3.3.26
102
114
  signing_key:
103
115
  specification_version: 4
104
116
  summary: Blazingly fast DataFrames for Ruby