carray 3.0.3 → 3.0.5
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 +469 -0
- data/README.md +3 -2
- data/carray.gemspec +1 -1
- data/ext/ca_array_pool.c +25 -1
- data/ext/ca_axis_descriptor.h +27 -24
- data/ext/ca_axis_dispatch.c +14 -26
- 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 +231 -153
- data/ext/ca_compare.c +9 -20
- data/ext/ca_composite_dispatch.c +9 -9
- data/ext/ca_group_iter.c +16 -17
- data/ext/ca_kernel_iterator.c +1240 -2000
- data/ext/ca_kernel_iterator.h +502 -519
- data/ext/ca_monop_dispatch.c +82 -59
- data/ext/ca_monop_dispatch.h +1 -0
- data/ext/ca_obj_array.c +152 -45
- data/ext/ca_obj_bincmp.c +25 -21
- data/ext/ca_obj_binop.c +16 -26
- data/ext/ca_obj_bitarray.c +8 -3
- data/ext/ca_obj_bitfield.c +63 -49
- data/ext/ca_obj_block.c +18 -9
- data/ext/ca_obj_byte_swap.c +7 -7
- data/ext/ca_obj_const_string.c +188 -22
- data/ext/ca_obj_face.c +280 -58
- 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 +30 -8
- data/ext/ca_obj_fixlen_string.c +2 -3
- data/ext/ca_obj_grid.c +455 -134
- data/ext/ca_obj_meld.c +172 -34
- data/ext/ca_obj_moncmp.c +23 -8
- data/ext/ca_obj_monop.c +113 -67
- data/ext/ca_obj_object.c +210 -52
- data/ext/ca_obj_record.c +15 -7
- data/ext/ca_obj_reduce.c +17 -8
- data/ext/ca_obj_refer.c +42 -35
- data/ext/ca_obj_remap.c +30 -9
- data/ext/ca_obj_repeat.c +9 -10
- data/ext/ca_obj_roll.c +31 -10
- data/ext/ca_obj_select.c +48 -14
- data/ext/ca_obj_select_axis.c +15 -47
- data/ext/ca_obj_shift.c +41 -7
- data/ext/ca_obj_stack.c +180 -34
- data/ext/ca_obj_stride.c +190 -134
- data/ext/ca_obj_string.c +80 -4
- data/ext/ca_obj_tile.c +32 -11
- data/ext/ca_obj_time.c +22 -6
- data/ext/ca_obj_timedelta.c +22 -6
- data/ext/ca_obj_transpose.c +13 -7
- data/ext/ca_obj_triop.c +26 -32
- data/ext/ca_obj_window.c +267 -74
- data/ext/ca_op_ipower.c +4 -4
- data/ext/ca_sort_kernels.h +6 -3
- data/ext/ca_sweep_engine.c +2 -2
- data/ext/caframe_csv_reader.c +80 -1
- data/ext/carray.h +214 -75
- data/ext/carray_access.c +200 -99
- data/ext/carray_address_basis.c +343 -87
- data/ext/carray_attribute.c +113 -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 +375 -96
- data/ext/carray_cast_func.rb +90 -20
- data/ext/carray_class.c +4 -3
- data/ext/carray_config.h +28 -0
- data/ext/carray_conversion.c +18 -9
- data/ext/carray_copy.c +51 -14
- data/ext/carray_core.c +150 -55
- data/ext/carray_count.c +56 -20
- data/ext/carray_element.c +81 -33
- data/ext/carray_factorize.c +138 -84
- data/ext/carray_generate.c +199 -52
- data/ext/carray_histogram.c +63 -18
- data/ext/carray_hold.c +12 -15
- data/ext/carray_index_classifier.c +388 -176
- data/ext/carray_internal.h +348 -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 +10897 -0
- data/ext/carray_kernels_triop.c +1864 -0
- data/ext/carray_key_windows.c +220 -0
- data/ext/carray_lazy.c +170 -111
- data/ext/carray_mask.c +337 -94
- data/ext/carray_median_percentile.c +82 -28
- data/ext/carray_memory_view.c +669 -561
- data/ext/carray_operator.c +129 -52
- data/ext/carray_order.c +604 -77
- data/ext/carray_partition.c +28 -27
- data/ext/carray_random.c +85 -31
- data/ext/carray_round.c +273 -0
- data/ext/carray_scatter.c +87 -45
- data/ext/carray_segment.c +3 -3
- data/ext/carray_slab.c +123 -37
- data/ext/carray_sort.c +259 -51
- data/ext/carray_sort_kernel.c +5 -7
- data/ext/carray_struct.c +54 -61
- data/ext/carray_test.c +26 -5
- data/ext/carray_time_text.c +4 -2
- data/ext/carray_undef.c +4 -0
- data/ext/carray_utils.c +309 -66
- data/ext/mk_call_cfunc.rb +19 -2
- data/ext/mkkernel.rb +403 -350
- data/ext/ruby_carray.c +10 -4
- data/ext/version.h +4 -4
- data/lib/carray/attribute.rb +139 -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 +105 -17
- 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 +195 -59
- data/lib/carray/categorical_iterator.rb +132 -29
- data/lib/carray/complex.rb +5 -5
- data/lib/carray/conditional.rb +67 -18
- data/lib/carray/const_string.rb +24 -5
- data/lib/carray/construct.rb +15 -11
- data/lib/carray/data_type_extension.rb +9 -1
- data/lib/carray/distance_limit.rb +77 -0
- data/lib/carray/fixlen_string.rb +48 -3
- data/lib/carray/frame/column_verbs.rb +71 -0
- data/lib/carray/frame/concat.rb +17 -3
- 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 +252 -28
- data/lib/carray/frame/group.rb +603 -101
- data/lib/carray/frame/io.rb +117 -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 +42 -6
- 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 +217 -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 +61 -37
- 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 +323 -88
- data/lib/carray/serialize.rb +45 -14
- data/lib/carray/slab_iterator.rb +50 -0
- data/lib/carray/stack.rb +15 -12
- data/lib/carray/string.rb +113 -5
- data/lib/carray/string_operation_extension.rb +21 -6
- data/lib/carray/struct.rb +9 -21
- data/lib/carray/struct_builder.rb +24 -11
- data/lib/carray/time.rb +819 -158
- 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_transpose.rb +5 -4
- data/yard-stubs/ca_obj_window.rb +8 -3
- data/yard-stubs/carray_access.rb +6 -1
- data/yard-stubs/carray_attribute.rb +3 -6
- data/yard-stubs/carray_cast.rb +12 -0
- data/yard-stubs/carray_conversion.rb +7 -2
- data/yard-stubs/carray_copy.rb +4 -2
- data/yard-stubs/carray_count.rb +4 -4
- data/yard-stubs/carray_element.rb +17 -10
- data/yard-stubs/carray_generate.rb +21 -1
- data/yard-stubs/carray_mask.rb +32 -3
- data/yard-stubs/carray_math.rb +41 -5
- data/yard-stubs/carray_median_percentile.rb +5 -2
- data/yard-stubs/carray_memory_view.rb +40 -23
- data/yard-stubs/carray_order.rb +129 -22
- data/yard-stubs/carray_random.rb +13 -4
- data/yard-stubs/carray_scatter.rb +17 -10
- 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/ext/ca_group_iter.c
CHANGED
|
@@ -14,13 +14,14 @@
|
|
|
14
14
|
Split summary:
|
|
15
15
|
- ca_argv_has_group / rb_ca_fetch_group : here (called by carray_access.c)
|
|
16
16
|
- CAGroupIterator + the tier-1 reduction methods driving
|
|
17
|
-
|
|
17
|
+
__reduce_by_axis_groups__ : here
|
|
18
18
|
- reduce_plan / bundle assembly / output-axis permutation (metadata) : Ruby
|
|
19
|
-
- the O(N) compute kernel
|
|
19
|
+
- the O(N) compute kernel __reduce_by_axis_groups__ : ca_axis_group.c
|
|
20
20
|
|
|
21
21
|
--------------------------------------------------------------------------- */
|
|
22
22
|
|
|
23
23
|
#include "carray.h"
|
|
24
|
+
#include "carray_internal.h" /* ca_check_rank_fits */
|
|
24
25
|
|
|
25
26
|
/* lib/carray/axis_group.rb registers these classes here on first load (and
|
|
26
27
|
loading is wired so that load happens as soon as any categorical exists —
|
|
@@ -34,7 +35,7 @@ static VALUE rb_cCAGroupIterator = Qnil;
|
|
|
34
35
|
static ID id_value, id_spec, id_axis_group, id_reduce_plan, id_parse_axis;
|
|
35
36
|
static ID id_axis_group_reduce, id_reshape, id_transpose, id_labels;
|
|
36
37
|
|
|
37
|
-
/* CArray.
|
|
38
|
+
/* CArray.register_axis_group_classes(CACategorical, AxisGroup) — called
|
|
38
39
|
from the top of lib/carray/axis_group.rb so the C type gate can recognise
|
|
39
40
|
the classifier/spec types without triggering autoload on every [] call. */
|
|
40
41
|
static VALUE
|
|
@@ -120,7 +121,7 @@ rb_ca_fetch_group (int argc, VALUE *argv, VALUE self)
|
|
|
120
121
|
validates the slot layout = one slot per source axis). */
|
|
121
122
|
spec = rb_funcallv(self, id_axis_group, argc, argv);
|
|
122
123
|
}
|
|
123
|
-
return rb_funcall(rb_cCAGroupIterator, rb_intern("
|
|
124
|
+
return rb_funcall(rb_cCAGroupIterator, rb_intern("build_for"), 2, self, spec);
|
|
124
125
|
}
|
|
125
126
|
|
|
126
127
|
/* --- CAGroupIterator -------------------------------------------------------
|
|
@@ -175,9 +176,7 @@ group_iter_shape_output (VALUE result, VALUE group_dims, VALUE perm, VALUE squee
|
|
|
175
176
|
ng = RARRAY_LEN(group_dims);
|
|
176
177
|
nband = cr->ndim - 1;
|
|
177
178
|
nd = ng + nband;
|
|
178
|
-
|
|
179
|
-
rb_raise(rb_eArgError, "axis_group: output ndim %ld too large", nd);
|
|
180
|
-
}
|
|
179
|
+
ca_check_rank_fits(nd, "axis_group");
|
|
181
180
|
for ( i = 0; i < ng; i++ ) {
|
|
182
181
|
dims[i] = RARRAY_AREF(group_dims, i);
|
|
183
182
|
}
|
|
@@ -219,7 +218,7 @@ group_iter_shape_output (VALUE result, VALUE group_dims, VALUE perm, VALUE squee
|
|
|
219
218
|
static VALUE
|
|
220
219
|
group_iter_reduce (int argc, VALUE *argv, VALUE self)
|
|
221
220
|
{
|
|
222
|
-
ID op_id = rb_frame_this_func();
|
|
221
|
+
ID op_id = rb_frame_this_func(); /* frame-name: picks the op, names no error */
|
|
223
222
|
VALUE op_sym = ID2SYM(op_id);
|
|
224
223
|
VALUE value = rb_ivar_get(self, id_value);
|
|
225
224
|
VALUE spec = rb_ivar_get(self, id_spec);
|
|
@@ -247,7 +246,7 @@ group_iter_reduce (int argc, VALUE *argv, VALUE self)
|
|
|
247
246
|
|
|
248
247
|
/* min_count: / fill_value: are applied to the grouped result; any other
|
|
249
248
|
keyword is refused before the work is done. */
|
|
250
|
-
rb_funcall(
|
|
249
|
+
rb_funcall(self, rb_intern("check_reduce_keywords"), 2,
|
|
251
250
|
op_sym, NIL_P(kw) ? rb_hash_new() : kw);
|
|
252
251
|
|
|
253
252
|
/* group reduction */
|
|
@@ -262,14 +261,14 @@ group_iter_reduce (int argc, VALUE *argv, VALUE self)
|
|
|
262
261
|
/* a count reads only the mask, so a payload the kernel cannot read
|
|
263
262
|
(object, fixlen, ...) is counted through a boolean stand-in */
|
|
264
263
|
if ( op_id == rb_intern("count") || op_id == rb_intern("count_not_masked") ) {
|
|
265
|
-
value = rb_funcall(rb_cAxisGroup, rb_intern("
|
|
264
|
+
value = rb_funcall(rb_cAxisGroup, rb_intern("count_stand_in"), 1, value);
|
|
266
265
|
}
|
|
267
266
|
result = rb_funcall(value, id_axis_group_reduce, 3,
|
|
268
267
|
group_axes, bundles, op_sym);
|
|
269
268
|
result = group_iter_shape_output(result, group_dims, perm, squeeze);
|
|
270
269
|
if ( ! NIL_P(kw) ) {
|
|
271
|
-
result = rb_funcall(
|
|
272
|
-
|
|
270
|
+
result = rb_funcall(self, rb_intern("finish_reduction"), 3,
|
|
271
|
+
op_sym, kw, result);
|
|
273
272
|
}
|
|
274
273
|
return result;
|
|
275
274
|
}
|
|
@@ -282,21 +281,21 @@ Init_ca_group_iter (void)
|
|
|
282
281
|
id_axis_group = rb_intern("axis_group");
|
|
283
282
|
id_reduce_plan = rb_intern("reduce_plan");
|
|
284
283
|
id_parse_axis = rb_intern("parse_axis");
|
|
285
|
-
id_axis_group_reduce = rb_intern("
|
|
284
|
+
id_axis_group_reduce = rb_intern("__reduce_by_axis_groups__");
|
|
286
285
|
id_reshape = rb_intern("reshape");
|
|
287
286
|
id_transpose = rb_intern("transpose");
|
|
288
287
|
id_labels = rb_intern("labels");
|
|
289
288
|
|
|
290
|
-
|
|
291
|
-
|
|
289
|
+
rb_define_private_method(rb_singleton_class(rb_cCArray), "register_axis_group_classes",
|
|
290
|
+
rb_ca_register_axis_group_classes, 2);
|
|
292
291
|
|
|
293
292
|
rb_cCAGroupIterator =
|
|
294
293
|
rb_define_class("CAGroupIterator",
|
|
295
294
|
rb_const_get(rb_cObject, rb_intern("CAIterator")));
|
|
296
295
|
rb_gc_register_address(&rb_cCAGroupIterator);
|
|
297
296
|
|
|
298
|
-
|
|
299
|
-
|
|
297
|
+
rb_define_private_method(rb_singleton_class(rb_cCAGroupIterator), "build_for",
|
|
298
|
+
rb_ca_group_iter_build, 2);
|
|
300
299
|
rb_define_method(rb_cCAGroupIterator, "value", rb_ca_group_iter_value, 0);
|
|
301
300
|
rb_define_method(rb_cCAGroupIterator, "spec", rb_ca_group_iter_spec, 0);
|
|
302
301
|
rb_define_method(rb_cCAGroupIterator, "labels", rb_ca_group_iter_labels, -1);
|