carray 3.0.3 → 3.0.4
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 +264 -0
- data/README.md +3 -2
- data/carray.gemspec +1 -1
- data/ext/ca_axis_descriptor.h +27 -24
- data/ext/ca_axis_dispatch.c +1 -6
- data/ext/ca_axis_group.c +27 -27
- data/ext/ca_binop_dispatch.c +1 -29
- data/ext/ca_binop_dispatch.h +0 -1
- data/ext/ca_categorical_iterator.c +205 -134
- data/ext/ca_compare.c +7 -18
- data/ext/ca_group_iter.c +16 -17
- data/ext/ca_kernel_iterator.c +1234 -1994
- data/ext/ca_kernel_iterator.h +391 -437
- data/ext/ca_monop_dispatch.c +82 -59
- data/ext/ca_monop_dispatch.h +1 -0
- data/ext/ca_obj_array.c +96 -39
- data/ext/ca_obj_bincmp.c +24 -21
- data/ext/ca_obj_binop.c +15 -26
- data/ext/ca_obj_bitarray.c +3 -2
- data/ext/ca_obj_bitfield.c +5 -6
- data/ext/ca_obj_block.c +18 -9
- data/ext/ca_obj_byte_swap.c +5 -6
- data/ext/ca_obj_const_string.c +173 -19
- data/ext/ca_obj_face.c +238 -57
- data/ext/ca_obj_face.h +19 -0
- data/ext/ca_obj_fake.c +15 -29
- data/ext/ca_obj_farray.c +6 -3
- data/ext/ca_obj_field.c +17 -5
- data/ext/ca_obj_fixlen_string.c +2 -3
- data/ext/ca_obj_grid.c +406 -132
- data/ext/ca_obj_meld.c +172 -34
- data/ext/ca_obj_moncmp.c +23 -8
- data/ext/ca_obj_monop.c +67 -57
- data/ext/ca_obj_object.c +157 -51
- data/ext/ca_obj_record.c +12 -7
- data/ext/ca_obj_reduce.c +13 -8
- data/ext/ca_obj_refer.c +25 -27
- data/ext/ca_obj_remap.c +30 -9
- data/ext/ca_obj_repeat.c +9 -10
- data/ext/ca_obj_roll.c +6 -5
- data/ext/ca_obj_select.c +14 -9
- data/ext/ca_obj_select_axis.c +15 -47
- data/ext/ca_obj_shift.c +11 -1
- data/ext/ca_obj_stack.c +179 -34
- data/ext/ca_obj_stride.c +162 -115
- data/ext/ca_obj_string.c +71 -4
- data/ext/ca_obj_tile.c +6 -5
- data/ext/ca_obj_time.c +22 -6
- data/ext/ca_obj_timedelta.c +22 -6
- data/ext/ca_obj_transpose.c +5 -3
- data/ext/ca_obj_triop.c +23 -32
- data/ext/ca_obj_window.c +190 -26
- data/ext/ca_sweep_engine.c +2 -2
- data/ext/caframe_csv_reader.c +80 -1
- data/ext/carray.h +181 -75
- data/ext/carray_access.c +184 -96
- data/ext/carray_address_basis.c +343 -87
- data/ext/carray_attribute.c +89 -6
- data/ext/carray_bincount.c +10 -8
- data/ext/carray_broadcast.c +13 -8
- data/ext/carray_build_flags.h +3 -0
- data/ext/carray_call_cfunc.c +108 -0
- data/ext/carray_cast.c +142 -24
- data/ext/carray_cast_func.rb +46 -6
- data/ext/carray_class.c +4 -3
- data/ext/carray_config.h +28 -0
- data/ext/carray_conversion.c +16 -7
- data/ext/carray_copy.c +51 -14
- data/ext/carray_core.c +147 -55
- data/ext/carray_count.c +50 -20
- data/ext/carray_element.c +76 -33
- data/ext/carray_factorize.c +118 -64
- data/ext/carray_generate.c +191 -50
- data/ext/carray_histogram.c +62 -17
- data/ext/carray_hold.c +12 -15
- data/ext/carray_index_classifier.c +388 -176
- data/ext/carray_internal.h +336 -29
- data/ext/carray_kernels_bincmp.c +4453 -0
- data/ext/carray_kernels_binop.c +11368 -0
- data/ext/carray_kernels_init.c +1734 -0
- data/ext/carray_kernels_moncmp.c +2104 -0
- data/ext/carray_kernels_monop.c +18369 -0
- data/ext/carray_kernels_reduce_aggregate.c +23818 -0
- data/ext/carray_kernels_reduce_boolean.c +406 -0
- data/ext/carray_kernels_reduce_cumulative.c +10086 -0
- data/ext/carray_kernels_reduce_extreme.c +17634 -0
- data/ext/carray_kernels_reduce_variance.c +3849 -0
- data/ext/carray_kernels_scan.c +4302 -0
- data/ext/carray_kernels_search.c +33829 -0
- data/ext/carray_kernels_sort.c +10906 -0
- data/ext/carray_kernels_triop.c +1864 -0
- data/ext/carray_key_windows.c +216 -0
- data/ext/carray_lazy.c +170 -111
- data/ext/carray_mask.c +292 -72
- data/ext/carray_median_percentile.c +82 -28
- data/ext/carray_memory_view.c +669 -561
- data/ext/carray_operator.c +124 -47
- data/ext/carray_order.c +384 -76
- data/ext/carray_partition.c +28 -27
- data/ext/carray_random.c +67 -13
- data/ext/carray_round.c +273 -0
- data/ext/carray_scatter.c +63 -38
- data/ext/carray_segment.c +3 -3
- data/ext/carray_slab.c +91 -28
- data/ext/carray_sort.c +35 -35
- data/ext/carray_struct.c +19 -18
- data/ext/carray_test.c +26 -5
- data/ext/carray_undef.c +4 -0
- data/ext/carray_utils.c +246 -45
- data/ext/mk_call_cfunc.rb +19 -2
- data/ext/mkkernel.rb +198 -240
- data/ext/ruby_carray.c +10 -4
- data/ext/version.h +4 -4
- data/lib/carray/attribute.rb +126 -22
- data/lib/carray/autoload_carray.rb +8 -31
- data/lib/carray/autoload_method_extension.rb +14 -5
- data/lib/carray/axis_group.rb +255 -106
- data/lib/carray/basics.rb +78 -10
- data/lib/carray/bincount_nd.rb +12 -2
- data/lib/carray/block_iterator.rb +126 -23
- data/lib/carray/boolean_reduce.rb +17 -17
- data/lib/carray/categorical.rb +165 -43
- data/lib/carray/categorical_iterator.rb +130 -27
- data/lib/carray/complex.rb +5 -5
- data/lib/carray/conditional.rb +67 -18
- data/lib/carray/const_string.rb +14 -5
- data/lib/carray/construct.rb +15 -11
- data/lib/carray/data_type_extension.rb +1 -0
- data/lib/carray/distance_limit.rb +77 -0
- data/lib/carray/fixlen_string.rb +7 -1
- data/lib/carray/frame/column_verbs.rb +70 -0
- data/lib/carray/frame/convert.rb +69 -0
- data/lib/carray/frame/csv_parser.rb +111 -17
- data/lib/carray/frame/describe.rb +3 -2
- data/lib/carray/frame/frame.rb +246 -21
- data/lib/carray/frame/group.rb +510 -95
- data/lib/carray/frame/io.rb +115 -28
- data/lib/carray/frame/join.rb +312 -51
- data/lib/carray/frame/records.rb +83 -7
- data/lib/carray/frame/reshape.rb +42 -35
- data/lib/carray/frame/sort.rb +7 -19
- data/lib/carray/frame/verbs.rb +188 -48
- data/lib/carray/frame/windows.rb +117 -0
- data/lib/carray/frame.rb +2 -0
- data/lib/carray/fuse_source.rb +11 -4
- data/lib/carray/fusion.rb +40 -16
- data/lib/carray/histogram.rb +6 -1
- data/lib/carray/inspect.rb +31 -8
- data/lib/carray/iterator.rb +85 -7
- data/lib/carray/key_windows.rb +620 -0
- data/lib/carray/lazy.rb +182 -183
- data/lib/carray/mask_gap_fill.rb +63 -57
- data/lib/carray/meld_reduce.rb +12 -14
- data/lib/carray/methods/bin.rb +26 -18
- data/lib/carray/methods/bincount.rb +16 -0
- data/lib/carray/methods/bit_string.rb +1 -1
- data/lib/carray/methods/choose.rb +16 -3
- data/lib/carray/methods/composition.rb +3 -1
- data/lib/carray/methods/gather_nd.rb +14 -5
- data/lib/carray/methods/insert_block.rb +2 -2
- data/lib/carray/methods/is_between.rb +59 -0
- data/lib/carray/methods/is_in.rb +53 -36
- data/lib/carray/methods/join.rb +1 -6
- data/lib/carray/methods/lag.rb +49 -0
- data/lib/carray/methods/locate_addr.rb +47 -51
- data/lib/carray/methods/mode.rb +1 -1
- data/lib/carray/methods/nunique.rb +11 -6
- data/lib/carray/methods/resize.rb +3 -3
- data/lib/carray/methods/value_counts.rb +4 -11
- data/lib/carray/record_order.rb +3 -3
- data/lib/carray/rng.rb +3 -0
- data/lib/carray/runtime.rb +53 -8
- data/lib/carray/segment_iterator.rb +313 -82
- data/lib/carray/serialize.rb +24 -10
- data/lib/carray/slab_iterator.rb +50 -0
- data/lib/carray/string.rb +105 -5
- data/lib/carray/string_operation_extension.rb +8 -1
- data/lib/carray/struct.rb +9 -21
- data/lib/carray/struct_builder.rb +19 -8
- data/lib/carray/time.rb +726 -104
- data/lib/carray/window_iterator.rb +122 -16
- data/lib/carray.rb +7 -0
- data/yard-stubs/ca_obj_bitfield.rb +1 -1
- data/yard-stubs/ca_obj_field.rb +4 -0
- data/yard-stubs/ca_obj_grid.rb +21 -10
- data/yard-stubs/ca_obj_refer.rb +2 -1
- data/yard-stubs/ca_obj_roll.rb +2 -2
- data/yard-stubs/ca_obj_shift.rb +5 -1
- data/yard-stubs/ca_obj_tile.rb +1 -1
- data/yard-stubs/ca_obj_window.rb +8 -3
- data/yard-stubs/carray_access.rb +6 -1
- data/yard-stubs/carray_attribute.rb +0 -5
- data/yard-stubs/carray_cast.rb +10 -0
- data/yard-stubs/carray_conversion.rb +2 -1
- data/yard-stubs/carray_copy.rb +4 -2
- data/yard-stubs/carray_count.rb +4 -4
- data/yard-stubs/carray_element.rb +10 -4
- data/yard-stubs/carray_generate.rb +21 -1
- data/yard-stubs/carray_mask.rb +26 -2
- data/yard-stubs/carray_math.rb +27 -1
- data/yard-stubs/carray_median_percentile.rb +5 -2
- data/yard-stubs/carray_memory_view.rb +40 -23
- data/yard-stubs/carray_order.rb +29 -18
- data/yard-stubs/carray_random.rb +13 -4
- data/yard-stubs/carray_scatter.rb +14 -9
- data/yard-stubs/carray_slab.rb +9 -2
- data/yard-stubs/carray_sort.rb +6 -5
- data/yard-stubs/carray_test.rb +5 -3
- metadata +25 -3
- data/lib/carray/arrow_tensor.rb +0 -401
- data/lib/carray/table.rb +0 -108
data/lib/carray/runtime.rb
CHANGED
|
@@ -15,13 +15,22 @@ class CArray
|
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
# True when a development build runs with CARRAY_GENERAL_PATH=2: the
|
|
19
|
+
# kernel iterator then delivers every source through the view's own
|
|
20
|
+
# transfer. A release build has no switch.
|
|
21
|
+
unless respond_to?(:__iter_by_transfer_only__)
|
|
22
|
+
def self.__iter_by_transfer_only__ # :nodoc:
|
|
23
|
+
false
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
18
27
|
# String fallback for the global cast functions CA_INT32(data) etc. The C
|
|
19
28
|
# dispatcher (ext/carray_cast.c) handles every other input class in C and
|
|
20
29
|
# delegates only String here, because the whitespace / `,` / `;` /
|
|
21
30
|
# `_`->UNDEF parser is far more natural (and maintainable) in Ruby.
|
|
22
31
|
# +type+ arrives as the data_type Symbol. Required: without it
|
|
23
32
|
# +CA_INT32("1 2 3")+ and friends raise.
|
|
24
|
-
def self.
|
|
33
|
+
def self.cast_string (type, v)
|
|
25
34
|
if type == CA_OBJECT
|
|
26
35
|
return CScalar.new(CA_OBJECT) { v }
|
|
27
36
|
elsif type == CA_BOOLEAN
|
|
@@ -40,7 +49,7 @@ class CArray
|
|
|
40
49
|
return CArray.new(type, CArray.guess_array_shape(v)).tap { |a| a[] = v }
|
|
41
50
|
end
|
|
42
51
|
end
|
|
43
|
-
private_class_method :
|
|
52
|
+
private_class_method :cast_string
|
|
44
53
|
|
|
45
54
|
# CA_OBJECT escape for the weighted-sum kernel (mkkernel object_escape:).
|
|
46
55
|
# The C dispatcher (carray_kernels.c rb_ca_wsum_ki) intercepts CA_OBJECT
|
|
@@ -53,18 +62,18 @@ class CArray
|
|
|
53
62
|
# scalar or a full-shape weight), matching CArray's explicit-broadcast rule.
|
|
54
63
|
# +opts+ is the trailing options Hash (axis:/keep_axis:/min_count:/
|
|
55
64
|
# fill_value:) forwarded verbatim by the C escape; it goes straight to +sum+.
|
|
56
|
-
def
|
|
65
|
+
def wsum_object (weights, opts = {}) # :nodoc:
|
|
57
66
|
(self * weights).sum(**opts)
|
|
58
67
|
end
|
|
59
|
-
private :
|
|
68
|
+
private :wsum_object
|
|
60
69
|
|
|
61
70
|
# CA_OBJECT escape for the weighted-mean kernel. Weighted mean is
|
|
62
71
|
# +Σ(w*v) / Σw+ over the cells valid after mask overlay (a masked value OR a
|
|
63
72
|
# masked weight drops the cell from BOTH sums). The denominator is guarded:
|
|
64
73
|
# an empty / all-masked slab or weights summing to zero yields UNDEF (the
|
|
65
74
|
# object analogue of the numeric kernel's 0/0 -> NaN, since objects have no
|
|
66
|
-
# NaN). Weight forms and +opts+ as in {#
|
|
67
|
-
def
|
|
75
|
+
# NaN). Weight forms and +opts+ as in {#wsum_object}.
|
|
76
|
+
def wmean_object (weights, opts = {}) # :nodoc:
|
|
68
77
|
axis = opts[:axis]
|
|
69
78
|
keep_axis = opts[:keep_axis]
|
|
70
79
|
prod = self * weights
|
|
@@ -84,9 +93,45 @@ class CArray
|
|
|
84
93
|
else
|
|
85
94
|
num / den
|
|
86
95
|
end
|
|
87
|
-
CArray.
|
|
96
|
+
CArray.__fill_undefined_result_cells__(result, opts[:fill_value])
|
|
97
|
+
end
|
|
98
|
+
private :wmean_object
|
|
99
|
+
|
|
100
|
+
# Define on +mod+ one method per name in +names+, each a `def` that passes
|
|
101
|
+
# its own name and its arguments to the private method +to+:
|
|
102
|
+
#
|
|
103
|
+
# CArray.send(:define_named_methods, self, [:sum, :min], :fold_reduction)
|
|
104
|
+
# # def sum (...) = fold_reduction(:sum, ...)
|
|
105
|
+
#
|
|
106
|
+
# A method made by define_method carries no name in its frame, so an error
|
|
107
|
+
# raised inside it cannot name the method the user called; a `def` does.
|
|
108
|
+
# With +super_block+ the method passes its arguments as an Array and a Hash,
|
|
109
|
+
# and a block that calls the method it overrides with the arguments the
|
|
110
|
+
# block is given (`yield(*args, **kw)`).
|
|
111
|
+
#
|
|
112
|
+
# With +template+ (and no +to+) each method is written out from it, for a
|
|
113
|
+
# method on a path where a helper call would cost: __NAME__ is the name and
|
|
114
|
+
# __VALUE__ the value +names+ (a Hash) gives it, inspected.
|
|
115
|
+
NAMED_METHOD = /\A(?:[a-z_]\w*[?!]?|\+|-|\*\*?|\/|%|<=>|==|<=?|>=?|<<|>>|&|\||\^|~|[+-]@)\z/
|
|
116
|
+
def self.define_named_methods (mod, names, to = nil, super_block: false, template: nil)
|
|
117
|
+
loc = caller_locations(1, 1).first
|
|
118
|
+
names.each do |name, value|
|
|
119
|
+
unless name.to_s.match?(NAMED_METHOD)
|
|
120
|
+
raise ArgumentError, "define_named_methods: #{name.inspect} is not a method name"
|
|
121
|
+
end
|
|
122
|
+
src = if template
|
|
123
|
+
template.gsub("__NAME__", name.to_s).gsub("__VALUE__", value.inspect)
|
|
124
|
+
elsif super_block
|
|
125
|
+
"def #{name}(*args, **kw, &blk)\n" \
|
|
126
|
+
" #{to}(:#{name}, args, kw) { |*a, **k| super(*a, **k, &blk) }\n" \
|
|
127
|
+
"end\n"
|
|
128
|
+
else
|
|
129
|
+
"def #{name}(...)\n #{to}(:#{name}, ...)\nend\n"
|
|
130
|
+
end
|
|
131
|
+
mod.class_eval(src, loc.path, loc.lineno)
|
|
132
|
+
end
|
|
88
133
|
end
|
|
89
|
-
|
|
134
|
+
private_class_method :define_named_methods
|
|
90
135
|
|
|
91
136
|
end
|
|
92
137
|
|