polars-df 0.7.0-x86_64-darwin → 0.8.0-x86_64-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/Cargo.lock +284 -216
- data/LICENSE-THIRD-PARTY.txt +719 -1172
- data/lib/polars/3.1/polars.bundle +0 -0
- data/lib/polars/3.2/polars.bundle +0 -0
- data/lib/polars/{3.0 → 3.3}/polars.bundle +0 -0
- data/lib/polars/data_frame.rb +69 -65
- data/lib/polars/data_types.rb +4 -1
- data/lib/polars/date_time_expr.rb +10 -10
- data/lib/polars/date_time_name_space.rb +12 -12
- data/lib/polars/expr.rb +223 -18
- data/lib/polars/group_by.rb +1 -1
- data/lib/polars/io.rb +4 -4
- data/lib/polars/lazy_frame.rb +23 -23
- data/lib/polars/lazy_functions.rb +4 -20
- data/lib/polars/series.rb +289 -30
- data/lib/polars/sql_context.rb +1 -1
- data/lib/polars/struct_expr.rb +1 -1
- data/lib/polars/struct_name_space.rb +1 -1
- data/lib/polars/utils.rb +13 -13
- data/lib/polars/version.rb +1 -1
- metadata +5 -5
data/lib/polars/series.rb
CHANGED
@@ -34,7 +34,7 @@ module Polars
|
|
34
34
|
# s3 = Polars::Series.new([1, 2, 3])
|
35
35
|
def initialize(name = nil, values = nil, dtype: nil, strict: true, nan_to_null: false, dtype_if_empty: nil)
|
36
36
|
# Handle case where values are passed as the first argument
|
37
|
-
if !name.nil? && !name.is_a?(String)
|
37
|
+
if !name.nil? && !name.is_a?(::String)
|
38
38
|
if values.nil?
|
39
39
|
values = name
|
40
40
|
name = nil
|
@@ -46,7 +46,7 @@ module Polars
|
|
46
46
|
name = "" if name.nil?
|
47
47
|
|
48
48
|
# TODO improve
|
49
|
-
if values.is_a?(Range) && values.begin.is_a?(String)
|
49
|
+
if values.is_a?(Range) && values.begin.is_a?(::String)
|
50
50
|
values = values.to_a
|
51
51
|
end
|
52
52
|
|
@@ -341,7 +341,7 @@ module Polars
|
|
341
341
|
def []=(key, value)
|
342
342
|
if value.is_a?(::Array)
|
343
343
|
if is_numeric || is_datelike
|
344
|
-
|
344
|
+
scatter(key, value)
|
345
345
|
return
|
346
346
|
end
|
347
347
|
raise ArgumentError, "cannot set Series of dtype: #{dtype} with list/tuple as value; use a scalar value"
|
@@ -351,9 +351,9 @@ module Polars
|
|
351
351
|
if key.dtype == Boolean
|
352
352
|
self._s = set(key, value)._s
|
353
353
|
elsif key.dtype == UInt64
|
354
|
-
self._s =
|
354
|
+
self._s = scatter(key.cast(UInt32), value)._s
|
355
355
|
elsif key.dtype == UInt32
|
356
|
-
self._s =
|
356
|
+
self._s = scatter(key, value)._s
|
357
357
|
else
|
358
358
|
raise Todo
|
359
359
|
end
|
@@ -735,6 +735,212 @@ module Polars
|
|
735
735
|
Utils.wrap_df(_s.to_dummies(separator, drop_first))
|
736
736
|
end
|
737
737
|
|
738
|
+
# Bin continuous values into discrete categories.
|
739
|
+
#
|
740
|
+
# @param breaks [Array]
|
741
|
+
# List of unique cut points.
|
742
|
+
# @param labels [Array]
|
743
|
+
# Names of the categories. The number of labels must be equal to the number
|
744
|
+
# of cut points plus one.
|
745
|
+
# @param left_closed [Boolean]
|
746
|
+
# Set the intervals to be left-closed instead of right-closed.
|
747
|
+
# @param include_breaks [Boolean]
|
748
|
+
# Include a column with the right endpoint of the bin each observation falls
|
749
|
+
# in. This will change the data type of the output from a
|
750
|
+
# `Categorical` to a `Struct`.
|
751
|
+
#
|
752
|
+
# @return [Series]
|
753
|
+
#
|
754
|
+
# @example Divide the column into three categories.
|
755
|
+
# s = Polars::Series.new("foo", [-2, -1, 0, 1, 2])
|
756
|
+
# s.cut([-1, 1], labels: ["a", "b", "c"])
|
757
|
+
# # =>
|
758
|
+
# # shape: (5,)
|
759
|
+
# # Series: 'foo' [cat]
|
760
|
+
# # [
|
761
|
+
# # "a"
|
762
|
+
# # "a"
|
763
|
+
# # "b"
|
764
|
+
# # "b"
|
765
|
+
# # "c"
|
766
|
+
# # ]
|
767
|
+
#
|
768
|
+
# @example Create a DataFrame with the breakpoint and category for each value.
|
769
|
+
# cut = s.cut([-1, 1], include_breaks: true).alias("cut")
|
770
|
+
# s.to_frame.with_columns(cut).unnest("cut")
|
771
|
+
# # =>
|
772
|
+
# # shape: (5, 3)
|
773
|
+
# # ┌─────┬─────────────┬────────────┐
|
774
|
+
# # │ foo ┆ break_point ┆ category │
|
775
|
+
# # │ --- ┆ --- ┆ --- │
|
776
|
+
# # │ i64 ┆ f64 ┆ cat │
|
777
|
+
# # ╞═════╪═════════════╪════════════╡
|
778
|
+
# # │ -2 ┆ -1.0 ┆ (-inf, -1] │
|
779
|
+
# # │ -1 ┆ -1.0 ┆ (-inf, -1] │
|
780
|
+
# # │ 0 ┆ 1.0 ┆ (-1, 1] │
|
781
|
+
# # │ 1 ┆ 1.0 ┆ (-1, 1] │
|
782
|
+
# # │ 2 ┆ inf ┆ (1, inf] │
|
783
|
+
# # └─────┴─────────────┴────────────┘
|
784
|
+
def cut(breaks, labels: nil, left_closed: false, include_breaks: false)
|
785
|
+
result = (
|
786
|
+
to_frame
|
787
|
+
.select(
|
788
|
+
Polars.col(name).cut(
|
789
|
+
breaks,
|
790
|
+
labels: labels,
|
791
|
+
left_closed: left_closed,
|
792
|
+
include_breaks: include_breaks
|
793
|
+
)
|
794
|
+
)
|
795
|
+
.to_series
|
796
|
+
)
|
797
|
+
|
798
|
+
if include_breaks
|
799
|
+
result = result.struct.rename_fields(["break_point", "category"])
|
800
|
+
end
|
801
|
+
|
802
|
+
result
|
803
|
+
end
|
804
|
+
|
805
|
+
# Bin continuous values into discrete categories based on their quantiles.
|
806
|
+
#
|
807
|
+
# @param quantiles [Array]
|
808
|
+
# Either a list of quantile probabilities between 0 and 1 or a positive
|
809
|
+
# integer determining the number of bins with uniform probability.
|
810
|
+
# @param labels [Array]
|
811
|
+
# Names of the categories. The number of labels must be equal to the number
|
812
|
+
# of cut points plus one.
|
813
|
+
# @param left_closed [Boolean]
|
814
|
+
# Set the intervals to be left-closed instead of right-closed.
|
815
|
+
# @param allow_duplicates [Boolean]
|
816
|
+
# If set to `true`, duplicates in the resulting quantiles are dropped,
|
817
|
+
# rather than raising a `DuplicateError`. This can happen even with unique
|
818
|
+
# probabilities, depending on the data.
|
819
|
+
# @param include_breaks [Boolean]
|
820
|
+
# Include a column with the right endpoint of the bin each observation falls
|
821
|
+
# in. This will change the data type of the output from a
|
822
|
+
# `Categorical` to a `Struct`.
|
823
|
+
#
|
824
|
+
# @return [Series]
|
825
|
+
#
|
826
|
+
# @example Divide a column into three categories according to pre-defined quantile probabilities.
|
827
|
+
# s = Polars::Series.new("foo", [-2, -1, 0, 1, 2])
|
828
|
+
# s.qcut([0.25, 0.75], labels: ["a", "b", "c"])
|
829
|
+
# # =>
|
830
|
+
# # shape: (5,)
|
831
|
+
# # Series: 'foo' [cat]
|
832
|
+
# # [
|
833
|
+
# # "a"
|
834
|
+
# # "a"
|
835
|
+
# # "b"
|
836
|
+
# # "b"
|
837
|
+
# # "c"
|
838
|
+
# # ]
|
839
|
+
#
|
840
|
+
# @example Divide a column into two categories using uniform quantile probabilities.
|
841
|
+
# s.qcut(2, labels: ["low", "high"], left_closed: true)
|
842
|
+
# # =>
|
843
|
+
# # shape: (5,)
|
844
|
+
# # Series: 'foo' [cat]
|
845
|
+
# # [
|
846
|
+
# # "low"
|
847
|
+
# # "low"
|
848
|
+
# # "high"
|
849
|
+
# # "high"
|
850
|
+
# # "high"
|
851
|
+
# # ]
|
852
|
+
#
|
853
|
+
# @example Create a DataFrame with the breakpoint and category for each value.
|
854
|
+
# cut = s.qcut([0.25, 0.75], include_breaks: true).alias("cut")
|
855
|
+
# s.to_frame.with_columns(cut).unnest("cut")
|
856
|
+
# # =>
|
857
|
+
# # shape: (5, 3)
|
858
|
+
# # ┌─────┬─────────────┬────────────┐
|
859
|
+
# # │ foo ┆ break_point ┆ category │
|
860
|
+
# # │ --- ┆ --- ┆ --- │
|
861
|
+
# # │ i64 ┆ f64 ┆ cat │
|
862
|
+
# # ╞═════╪═════════════╪════════════╡
|
863
|
+
# # │ -2 ┆ -1.0 ┆ (-inf, -1] │
|
864
|
+
# # │ -1 ┆ -1.0 ┆ (-inf, -1] │
|
865
|
+
# # │ 0 ┆ 1.0 ┆ (-1, 1] │
|
866
|
+
# # │ 1 ┆ 1.0 ┆ (-1, 1] │
|
867
|
+
# # │ 2 ┆ inf ┆ (1, inf] │
|
868
|
+
# # └─────┴─────────────┴────────────┘
|
869
|
+
def qcut(quantiles, labels: nil, left_closed: false, allow_duplicates: false, include_breaks: false)
|
870
|
+
result = (
|
871
|
+
to_frame
|
872
|
+
.select(
|
873
|
+
Polars.col(name).qcut(
|
874
|
+
quantiles,
|
875
|
+
labels: labels,
|
876
|
+
left_closed: left_closed,
|
877
|
+
allow_duplicates: allow_duplicates,
|
878
|
+
include_breaks: include_breaks
|
879
|
+
)
|
880
|
+
)
|
881
|
+
.to_series
|
882
|
+
)
|
883
|
+
|
884
|
+
if include_breaks
|
885
|
+
result = result.struct.rename_fields(["break_point", "category"])
|
886
|
+
end
|
887
|
+
|
888
|
+
result
|
889
|
+
end
|
890
|
+
|
891
|
+
# Get the lengths of runs of identical values.
|
892
|
+
#
|
893
|
+
# @return [Series]
|
894
|
+
#
|
895
|
+
# @example
|
896
|
+
# s = Polars::Series.new("s", [1, 1, 2, 1, nil, 1, 3, 3])
|
897
|
+
# s.rle.struct.unnest
|
898
|
+
# # =>
|
899
|
+
# # shape: (6, 2)
|
900
|
+
# # ┌─────────┬────────┐
|
901
|
+
# # │ lengths ┆ values │
|
902
|
+
# # │ --- ┆ --- │
|
903
|
+
# # │ i32 ┆ i64 │
|
904
|
+
# # ╞═════════╪════════╡
|
905
|
+
# # │ 2 ┆ 1 │
|
906
|
+
# # │ 1 ┆ 2 │
|
907
|
+
# # │ 1 ┆ 1 │
|
908
|
+
# # │ 1 ┆ null │
|
909
|
+
# # │ 1 ┆ 1 │
|
910
|
+
# # │ 2 ┆ 3 │
|
911
|
+
# # └─────────┴────────┘
|
912
|
+
def rle
|
913
|
+
super
|
914
|
+
end
|
915
|
+
|
916
|
+
# Map values to run IDs.
|
917
|
+
#
|
918
|
+
# Similar to RLE, but it maps each value to an ID corresponding to the run into
|
919
|
+
# which it falls. This is especially useful when you want to define groups by
|
920
|
+
# runs of identical values rather than the values themselves.
|
921
|
+
#
|
922
|
+
# @return [Series]
|
923
|
+
#
|
924
|
+
# @example
|
925
|
+
# s = Polars::Series.new("s", [1, 1, 2, 1, nil, 1, 3, 3])
|
926
|
+
# s.rle_id()
|
927
|
+
# # =>
|
928
|
+
# # shape: (8,)
|
929
|
+
# # Series: 's' [u32]
|
930
|
+
# # [
|
931
|
+
# # 0
|
932
|
+
# # 0
|
933
|
+
# # 1
|
934
|
+
# # 2
|
935
|
+
# # 3
|
936
|
+
# # 4
|
937
|
+
# # 5
|
938
|
+
# # 5
|
939
|
+
# # ]
|
940
|
+
def rle_id
|
941
|
+
super
|
942
|
+
end
|
943
|
+
|
738
944
|
# Count the unique values in a Series.
|
739
945
|
#
|
740
946
|
# @param sort [Boolean]
|
@@ -1248,15 +1454,45 @@ module Polars
|
|
1248
1454
|
|
1249
1455
|
# Return the `k` largest elements.
|
1250
1456
|
#
|
1251
|
-
#
|
1457
|
+
# @param k [Integer]
|
1458
|
+
# Number of elements to return.
|
1459
|
+
#
|
1460
|
+
# @return [Boolean]
|
1461
|
+
#
|
1462
|
+
# @example
|
1463
|
+
# s = Polars::Series.new("a", [2, 5, 1, 4, 3])
|
1464
|
+
# s.top_k(k: 3)
|
1465
|
+
# # =>
|
1466
|
+
# # shape: (3,)
|
1467
|
+
# # Series: 'a' [i64]
|
1468
|
+
# # [
|
1469
|
+
# # 5
|
1470
|
+
# # 4
|
1471
|
+
# # 3
|
1472
|
+
# # ]
|
1473
|
+
def top_k(k: 5)
|
1474
|
+
super
|
1475
|
+
end
|
1476
|
+
|
1477
|
+
# Return the `k` smallest elements.
|
1252
1478
|
#
|
1253
1479
|
# @param k [Integer]
|
1254
1480
|
# Number of elements to return.
|
1255
|
-
# @param reverse [Boolean]
|
1256
|
-
# Return the smallest elements.
|
1257
1481
|
#
|
1258
1482
|
# @return [Boolean]
|
1259
|
-
|
1483
|
+
#
|
1484
|
+
# @example
|
1485
|
+
# s = Polars::Series.new("a", [2, 5, 1, 4, 3])
|
1486
|
+
# s.bottom_k(k: 3)
|
1487
|
+
# # =>
|
1488
|
+
# # shape: (3,)
|
1489
|
+
# # Series: 'a' [i64]
|
1490
|
+
# # [
|
1491
|
+
# # 1
|
1492
|
+
# # 2
|
1493
|
+
# # 3
|
1494
|
+
# # ]
|
1495
|
+
def bottom_k(k: 5)
|
1260
1496
|
super
|
1261
1497
|
end
|
1262
1498
|
|
@@ -1705,26 +1941,40 @@ module Polars
|
|
1705
1941
|
# @example
|
1706
1942
|
# s = Polars::Series.new("a", [1, 2, 3])
|
1707
1943
|
# s2 = Polars::Series.new("b", [4, 5, 6])
|
1708
|
-
# s.
|
1944
|
+
# s.equals(s)
|
1709
1945
|
# # => true
|
1710
|
-
# s.
|
1946
|
+
# s.equals(s2)
|
1711
1947
|
# # => false
|
1712
|
-
def
|
1713
|
-
_s.
|
1948
|
+
def equals(other, null_equal: false, strict: false)
|
1949
|
+
_s.equals(other._s, null_equal, strict)
|
1714
1950
|
end
|
1951
|
+
alias_method :series_equal, :equals
|
1715
1952
|
|
1716
|
-
#
|
1953
|
+
# Return the number of elements in the Series.
|
1717
1954
|
#
|
1718
1955
|
# @return [Integer]
|
1719
1956
|
#
|
1720
1957
|
# @example
|
1721
|
-
# s = Polars::Series.new("a", [1, 2,
|
1958
|
+
# s = Polars::Series.new("a", [1, 2, nil])
|
1959
|
+
# s.count
|
1960
|
+
# # => 3
|
1961
|
+
def count
|
1962
|
+
warn "`Series#count` will exclude null values in 0.9.0. Use `Series#length` instead."
|
1963
|
+
# len - null_count
|
1964
|
+
len
|
1965
|
+
end
|
1966
|
+
|
1967
|
+
# Return the number of elements in the Series.
|
1968
|
+
#
|
1969
|
+
# @return [Integer]
|
1970
|
+
#
|
1971
|
+
# @example
|
1972
|
+
# s = Polars::Series.new("a", [1, 2, nil])
|
1722
1973
|
# s.len
|
1723
1974
|
# # => 3
|
1724
1975
|
def len
|
1725
1976
|
_s.len
|
1726
1977
|
end
|
1727
|
-
alias_method :count, :len
|
1728
1978
|
alias_method :length, :len
|
1729
1979
|
alias_method :size, :len
|
1730
1980
|
|
@@ -1886,7 +2136,7 @@ module Polars
|
|
1886
2136
|
# s.is_utf8
|
1887
2137
|
# # => true
|
1888
2138
|
def is_utf8
|
1889
|
-
dtype ==
|
2139
|
+
dtype == String
|
1890
2140
|
end
|
1891
2141
|
alias_method :utf8?, :is_utf8
|
1892
2142
|
|
@@ -1982,7 +2232,7 @@ module Polars
|
|
1982
2232
|
# # 10
|
1983
2233
|
# # 3
|
1984
2234
|
# # ]
|
1985
|
-
def
|
2235
|
+
def scatter(idx, value)
|
1986
2236
|
if idx.is_a?(Integer)
|
1987
2237
|
idx = [idx]
|
1988
2238
|
end
|
@@ -1991,7 +2241,7 @@ module Polars
|
|
1991
2241
|
end
|
1992
2242
|
|
1993
2243
|
idx = Series.new("", idx)
|
1994
|
-
if value.is_a?(Integer) || value.is_a?(Float) || Utils.bool?(value) || value.is_a?(String) || value.nil?
|
2244
|
+
if value.is_a?(Integer) || value.is_a?(Float) || Utils.bool?(value) || value.is_a?(::String) || value.nil?
|
1995
2245
|
value = Series.new("", [value])
|
1996
2246
|
|
1997
2247
|
# if we need to set more than a single value, we extend it
|
@@ -2001,9 +2251,10 @@ module Polars
|
|
2001
2251
|
elsif !value.is_a?(Series)
|
2002
2252
|
value = Series.new("", value)
|
2003
2253
|
end
|
2004
|
-
_s.
|
2254
|
+
_s.scatter(idx._s, value._s)
|
2005
2255
|
self
|
2006
2256
|
end
|
2257
|
+
alias_method :set_at_idx, :scatter
|
2007
2258
|
|
2008
2259
|
# Create an empty copy of the current Series.
|
2009
2260
|
#
|
@@ -2830,7 +3081,8 @@ module Polars
|
|
2830
3081
|
weights: nil,
|
2831
3082
|
min_periods: nil,
|
2832
3083
|
center: false,
|
2833
|
-
ddof: 1
|
3084
|
+
ddof: 1,
|
3085
|
+
warn_if_unsorted: true
|
2834
3086
|
)
|
2835
3087
|
to_frame
|
2836
3088
|
.select(
|
@@ -2839,7 +3091,8 @@ module Polars
|
|
2839
3091
|
weights: weights,
|
2840
3092
|
min_periods: min_periods,
|
2841
3093
|
center: center,
|
2842
|
-
ddof: ddof
|
3094
|
+
ddof: ddof,
|
3095
|
+
warn_if_unsorted: warn_if_unsorted
|
2843
3096
|
)
|
2844
3097
|
)
|
2845
3098
|
.to_series
|
@@ -2883,7 +3136,8 @@ module Polars
|
|
2883
3136
|
weights: nil,
|
2884
3137
|
min_periods: nil,
|
2885
3138
|
center: false,
|
2886
|
-
ddof: 1
|
3139
|
+
ddof: 1,
|
3140
|
+
warn_if_unsorted: true
|
2887
3141
|
)
|
2888
3142
|
to_frame
|
2889
3143
|
.select(
|
@@ -2892,7 +3146,8 @@ module Polars
|
|
2892
3146
|
weights: weights,
|
2893
3147
|
min_periods: min_periods,
|
2894
3148
|
center: center,
|
2895
|
-
ddof: ddof
|
3149
|
+
ddof: ddof,
|
3150
|
+
warn_if_unsorted: warn_if_unsorted
|
2896
3151
|
)
|
2897
3152
|
)
|
2898
3153
|
.to_series
|
@@ -2934,7 +3189,8 @@ module Polars
|
|
2934
3189
|
window_size,
|
2935
3190
|
weights: nil,
|
2936
3191
|
min_periods: nil,
|
2937
|
-
center: false
|
3192
|
+
center: false,
|
3193
|
+
warn_if_unsorted: true
|
2938
3194
|
)
|
2939
3195
|
if min_periods.nil?
|
2940
3196
|
min_periods = window_size
|
@@ -2946,7 +3202,8 @@ module Polars
|
|
2946
3202
|
window_size,
|
2947
3203
|
weights: weights,
|
2948
3204
|
min_periods: min_periods,
|
2949
|
-
center: center
|
3205
|
+
center: center,
|
3206
|
+
warn_if_unsorted: warn_if_unsorted
|
2950
3207
|
)
|
2951
3208
|
)
|
2952
3209
|
.to_series
|
@@ -3005,7 +3262,8 @@ module Polars
|
|
3005
3262
|
window_size: 2,
|
3006
3263
|
weights: nil,
|
3007
3264
|
min_periods: nil,
|
3008
|
-
center: false
|
3265
|
+
center: false,
|
3266
|
+
warn_if_unsorted: true
|
3009
3267
|
)
|
3010
3268
|
if min_periods.nil?
|
3011
3269
|
min_periods = window_size
|
@@ -3019,7 +3277,8 @@ module Polars
|
|
3019
3277
|
window_size: window_size,
|
3020
3278
|
weights: weights,
|
3021
3279
|
min_periods: min_periods,
|
3022
|
-
center: center
|
3280
|
+
center: center,
|
3281
|
+
warn_if_unsorted: warn_if_unsorted
|
3023
3282
|
)
|
3024
3283
|
)
|
3025
3284
|
.to_series
|
@@ -3761,7 +4020,7 @@ module Polars
|
|
3761
4020
|
return Utils.wrap_s(_s.send(op, other._s))
|
3762
4021
|
end
|
3763
4022
|
|
3764
|
-
if (other.is_a?(Float) || other.is_a?(::Date) || other.is_a?(::DateTime) || other.is_a?(::Time) || other.is_a?(String)) && !is_float
|
4023
|
+
if (other.is_a?(Float) || other.is_a?(::Date) || other.is_a?(::DateTime) || other.is_a?(::Time) || other.is_a?(::String)) && !is_float
|
3765
4024
|
_s2 = sequence_to_rbseries(name, [other])
|
3766
4025
|
return Utils.wrap_s(_s.send(op, _s2))
|
3767
4026
|
end
|
@@ -3927,7 +4186,7 @@ module Polars
|
|
3927
4186
|
return RbSeries.new_series_list(name, values, strict)
|
3928
4187
|
else
|
3929
4188
|
constructor =
|
3930
|
-
if value.is_a?(String)
|
4189
|
+
if value.is_a?(::String)
|
3931
4190
|
if value.encoding == Encoding::UTF_8
|
3932
4191
|
RbSeries.method(:new_str)
|
3933
4192
|
else
|
data/lib/polars/sql_context.rb
CHANGED
data/lib/polars/struct_expr.rb
CHANGED
data/lib/polars/utils.rb
CHANGED
@@ -27,7 +27,7 @@ module Polars
|
|
27
27
|
if obj.is_a?(Range)
|
28
28
|
# size only works for numeric ranges
|
29
29
|
obj.to_a.length
|
30
|
-
elsif obj.is_a?(String)
|
30
|
+
elsif obj.is_a?(::String)
|
31
31
|
nil
|
32
32
|
else
|
33
33
|
obj.length
|
@@ -116,7 +116,7 @@ module Polars
|
|
116
116
|
end
|
117
117
|
|
118
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)
|
119
|
+
if exprs.is_a?(::String) || exprs.is_a?(Symbol) || exprs.is_a?(Expr) || exprs.is_a?(Series)
|
120
120
|
exprs = [exprs]
|
121
121
|
end
|
122
122
|
|
@@ -124,9 +124,9 @@ module Polars
|
|
124
124
|
end
|
125
125
|
|
126
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
|
127
|
+
if (expr.is_a?(::String) || expr.is_a?(Symbol)) && !str_to_lit
|
128
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?
|
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
130
|
lit(expr)
|
131
131
|
elsif expr.is_a?(Expr)
|
132
132
|
expr
|
@@ -152,7 +152,7 @@ module Polars
|
|
152
152
|
if data_type == Unknown
|
153
153
|
return include_unknown
|
154
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)
|
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
156
|
end
|
157
157
|
|
158
158
|
def self.map_rb_type_to_dtype(ruby_dtype)
|
@@ -160,7 +160,7 @@ module Polars
|
|
160
160
|
Float64
|
161
161
|
elsif ruby_dtype == Integer
|
162
162
|
Int64
|
163
|
-
elsif ruby_dtype == String
|
163
|
+
elsif ruby_dtype == ::String
|
164
164
|
Utf8
|
165
165
|
elsif ruby_dtype == TrueClass || ruby_dtype == FalseClass
|
166
166
|
Boolean
|
@@ -211,7 +211,7 @@ module Polars
|
|
211
211
|
projection = nil
|
212
212
|
if columns
|
213
213
|
raise Todo
|
214
|
-
# if columns.is_a?(String) || columns.is_a?(Symbol)
|
214
|
+
# if columns.is_a?(::String) || columns.is_a?(Symbol)
|
215
215
|
# columns = [columns]
|
216
216
|
# elsif is_int_sequence(columns)
|
217
217
|
# projection = columns.to_a
|
@@ -243,11 +243,11 @@ module Polars
|
|
243
243
|
end
|
244
244
|
|
245
245
|
def self.strlike?(value)
|
246
|
-
value.is_a?(String) || value.is_a?(Symbol)
|
246
|
+
value.is_a?(::String) || value.is_a?(Symbol)
|
247
247
|
end
|
248
248
|
|
249
249
|
def self.pathlike?(value)
|
250
|
-
value.is_a?(String) || (defined?(Pathname) && value.is_a?(Pathname))
|
250
|
+
value.is_a?(::String) || (defined?(Pathname) && value.is_a?(Pathname))
|
251
251
|
end
|
252
252
|
|
253
253
|
def self._is_iterable_of(val, eltype)
|
@@ -275,10 +275,10 @@ module Polars
|
|
275
275
|
end
|
276
276
|
|
277
277
|
def self.is_str_sequence(val, allow_str: false)
|
278
|
-
if allow_str == false && val.is_a?(String)
|
278
|
+
if allow_str == false && val.is_a?(::String)
|
279
279
|
false
|
280
280
|
else
|
281
|
-
val.is_a?(::Array) && _is_iterable_of(val, String)
|
281
|
+
val.is_a?(::Array) && _is_iterable_of(val, ::String)
|
282
282
|
end
|
283
283
|
end
|
284
284
|
|
@@ -289,10 +289,10 @@ module Polars
|
|
289
289
|
def self.parse_as_expression(input, str_as_lit: false, structify: false)
|
290
290
|
if input.is_a?(Expr)
|
291
291
|
expr = input
|
292
|
-
elsif input.is_a?(String) && !str_as_lit
|
292
|
+
elsif input.is_a?(::String) && !str_as_lit
|
293
293
|
expr = Polars.col(input)
|
294
294
|
structify = false
|
295
|
-
elsif [Integer, Float, String, Series, ::Date, ::Time, ::DateTime].any? { |cls| input.is_a?(cls) } || input.nil?
|
295
|
+
elsif [Integer, Float, ::String, Series, ::Date, ::Time, ::DateTime].any? { |cls| input.is_a?(cls) } || input.nil?
|
296
296
|
expr = Polars.lit(input)
|
297
297
|
structify = false
|
298
298
|
elsif input.is_a?(Array)
|
data/lib/polars/version.rb
CHANGED
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.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: x86_64-darwin
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: andrew@ankane.org
|
@@ -25,9 +25,9 @@ files:
|
|
25
25
|
- README.md
|
26
26
|
- lib/polars-df.rb
|
27
27
|
- lib/polars.rb
|
28
|
-
- lib/polars/3.0/polars.bundle
|
29
28
|
- lib/polars/3.1/polars.bundle
|
30
29
|
- lib/polars/3.2/polars.bundle
|
30
|
+
- lib/polars/3.3/polars.bundle
|
31
31
|
- lib/polars/array_expr.rb
|
32
32
|
- lib/polars/array_name_space.rb
|
33
33
|
- lib/polars/batched_csv_reader.rb
|
@@ -80,10 +80,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements:
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '3.
|
83
|
+
version: '3.1'
|
84
84
|
- - "<"
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: 3.
|
86
|
+
version: 3.4.dev
|
87
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
89
|
- - ">="
|