carray 3.0.2 → 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 +568 -0
- data/README.md +6 -6
- data/carray.gemspec +1 -1
- data/ext/ca_axis_descriptor.h +27 -24
- data/ext/ca_axis_dispatch.c +220 -0
- data/ext/ca_axis_group.c +201 -123
- data/ext/ca_binop_dispatch.c +46 -52
- data/ext/ca_binop_dispatch.h +1 -1
- data/ext/ca_categorical_iterator.c +249 -183
- data/ext/ca_compare.c +7 -12
- data/ext/ca_for_buffer.h +21 -68
- data/ext/ca_group_iter.c +38 -23
- data/ext/ca_kernel_iterator.c +1765 -2076
- data/ext/ca_kernel_iterator.h +584 -566
- data/ext/ca_monop_dispatch.c +86 -63
- data/ext/ca_monop_dispatch.h +5 -0
- data/ext/ca_obj_array.c +223 -56
- data/ext/ca_obj_bincmp.c +172 -138
- data/ext/ca_obj_binop.c +116 -230
- data/ext/ca_obj_bitarray.c +40 -26
- data/ext/ca_obj_bitfield.c +100 -68
- data/ext/ca_obj_block.c +19 -9
- data/ext/ca_obj_byte_swap.c +45 -46
- data/ext/ca_obj_const_string.c +269 -44
- data/ext/ca_obj_face.c +612 -89
- data/ext/ca_obj_face.h +111 -47
- data/ext/ca_obj_fake.c +36 -79
- data/ext/ca_obj_farray.c +7 -3
- data/ext/ca_obj_field.c +33 -8
- data/ext/ca_obj_fixlen_string.c +23 -24
- data/ext/ca_obj_grid.c +541 -210
- data/ext/ca_obj_meld.c +331 -111
- data/ext/ca_obj_moncmp.c +80 -65
- data/ext/ca_obj_monop.c +177 -149
- data/ext/ca_obj_object.c +664 -248
- data/ext/ca_obj_record.c +63 -23
- data/ext/ca_obj_reduce.c +18 -16
- data/ext/ca_obj_refer.c +140 -58
- data/ext/ca_obj_remap.c +85 -24
- data/ext/ca_obj_repeat.c +24 -9
- data/ext/ca_obj_roll.c +121 -16
- data/ext/ca_obj_select.c +61 -58
- data/ext/ca_obj_select_axis.c +73 -107
- data/ext/ca_obj_shift.c +32 -102
- data/ext/ca_obj_stack.c +372 -122
- data/ext/ca_obj_stride.c +348 -140
- data/ext/ca_obj_string.c +88 -22
- data/ext/ca_obj_tile.c +38 -21
- data/ext/ca_obj_time.c +45 -31
- data/ext/ca_obj_timedelta.c +43 -29
- data/ext/ca_obj_transpose.c +17 -6
- data/ext/ca_obj_triop.c +125 -141
- data/ext/ca_obj_window.c +330 -44
- data/ext/ca_op_ipower.c +24 -11
- data/ext/ca_op_powi.h +57 -30
- data/ext/ca_pow5_table.h +656 -0
- data/ext/ca_sort_kernels.h +70 -0
- data/ext/ca_sweep_engine.c +104 -81
- data/ext/ca_sweep_engine.h +7 -20
- data/ext/ca_triop_dispatch.c +4 -1
- data/ext/ca_triop_dispatch.h +5 -2
- data/ext/caframe_csv_reader.c +542 -0
- data/ext/carray.h +241 -92
- data/ext/carray_access.c +608 -276
- data/ext/carray_address_basis.c +494 -97
- data/ext/carray_attribute.c +129 -4
- data/ext/carray_bincount.c +39 -7
- data/ext/carray_broadcast.c +56 -19
- data/ext/carray_build_flags.h +1 -1
- data/ext/carray_call_cfunc.c +108 -28
- data/ext/carray_cast.c +1576 -223
- data/ext/carray_cast_func.rb +77 -24
- data/ext/carray_class.c +4 -3
- data/ext/carray_conversion.c +208 -75
- data/ext/carray_copy.c +82 -24
- data/ext/carray_core.c +646 -162
- data/ext/carray_count.c +171 -88
- data/ext/carray_element.c +94 -60
- data/ext/carray_factorize.c +670 -324
- data/ext/carray_generate.c +260 -83
- data/ext/carray_histogram.c +209 -106
- data/ext/carray_hold.c +14 -16
- data/ext/carray_index_classifier.c +422 -243
- data/ext/carray_internal.h +692 -3
- data/ext/carray_kernels_bincmp.c +7 -0
- data/ext/carray_kernels_binop.c +487 -120
- data/ext/carray_kernels_init.c +653 -50
- data/ext/carray_kernels_moncmp.c +15 -8
- data/ext/carray_kernels_monop.c +99 -43
- data/ext/carray_kernels_reduce_aggregate.c +3925 -6112
- data/ext/carray_kernels_reduce_boolean.c +112 -36
- data/ext/carray_kernels_reduce_cumulative.c +2127 -6903
- data/ext/carray_kernels_reduce_extreme.c +3032 -2892
- data/ext/carray_kernels_reduce_variance.c +439 -500
- data/ext/carray_kernels_scan.c +1097 -488
- data/ext/carray_kernels_search.c +3787 -2176
- data/ext/carray_kernels_sort.c +1200 -920
- data/ext/carray_kernels_triop.c +479 -7
- data/ext/carray_key_windows.c +216 -0
- data/ext/carray_lazy.c +967 -153
- data/ext/carray_loop.c +81 -65
- data/ext/carray_mask.c +910 -324
- data/ext/carray_math_kernel.h +1 -0
- data/ext/carray_median_percentile.c +299 -100
- data/ext/carray_memory_view.c +872 -758
- data/ext/carray_operator.c +1171 -364
- data/ext/carray_order.c +505 -133
- data/ext/carray_partition.c +112 -65
- data/ext/carray_random.c +327 -239
- data/ext/carray_round.c +273 -0
- data/ext/carray_scatter.c +346 -78
- data/ext/carray_segment.c +257 -0
- data/ext/carray_slab.c +249 -86
- data/ext/carray_sort.c +224 -227
- data/ext/carray_sort_kernel.c +8 -1
- data/ext/carray_struct.c +118 -39
- data/ext/carray_test.c +193 -69
- data/ext/carray_time_text.c +1182 -0
- data/ext/carray_undef.c +4 -0
- data/ext/carray_utils.c +579 -113
- data/ext/extconf.rb +27 -2
- data/ext/mk_call_cfunc.rb +19 -4
- data/ext/mk_pow5_table.rb +35 -0
- data/ext/mkkernel.rb +1202 -1014
- data/ext/ruby_carray.c +17 -5
- data/ext/version.h +4 -4
- data/ext/version.rb +4 -2
- data/lib/carray/attribute.rb +160 -17
- data/lib/carray/autoload_carray.rb +23 -27
- data/lib/carray/autoload_method_extension.rb +20 -5
- data/lib/carray/axis_group.rb +360 -63
- data/lib/carray/basics.rb +162 -28
- data/lib/carray/bincount_nd.rb +18 -2
- data/lib/carray/block_iterator.rb +231 -58
- data/lib/carray/boolean_reduce.rb +34 -42
- data/lib/carray/categorical.rb +242 -52
- data/lib/carray/categorical_iterator.rb +437 -827
- data/lib/carray/complex.rb +41 -34
- data/lib/carray/conditional.rb +150 -14
- data/lib/carray/const_string.rb +59 -4
- 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/concat.rb +157 -6
- data/lib/carray/frame/convert.rb +82 -7
- data/lib/carray/frame/csv_parser.rb +688 -87
- data/lib/carray/frame/describe.rb +80 -0
- data/lib/carray/frame/frame.rb +369 -45
- data/lib/carray/frame/group.rb +631 -90
- data/lib/carray/frame/io.rb +506 -79
- data/lib/carray/frame/join.rb +411 -62
- data/lib/carray/frame/records.rb +116 -19
- data/lib/carray/frame/reshape.rb +455 -0
- data/lib/carray/frame/sort.rb +30 -18
- data/lib/carray/frame/verbs.rb +868 -61
- data/lib/carray/frame/windows.rb +117 -0
- data/lib/carray/frame.rb +4 -0
- data/lib/carray/fuse_source.rb +118 -2
- data/lib/carray/fusion.rb +257 -42
- data/lib/carray/histogram.rb +6 -1
- data/lib/carray/inspect.rb +54 -13
- data/lib/carray/iterator.rb +99 -9
- data/lib/carray/key_windows.rb +620 -0
- data/lib/carray/lazy.rb +216 -193
- data/lib/carray/mask_gap_fill.rb +112 -92
- data/lib/carray/math.rb +32 -19
- data/lib/carray/meld_reduce.rb +52 -21
- data/lib/carray/methods/align_addr.rb +8 -4
- data/lib/carray/methods/bin.rb +26 -18
- data/lib/carray/methods/bincount.rb +18 -2
- data/lib/carray/methods/bit_string.rb +15 -4
- data/lib/carray/methods/choose.rb +16 -3
- data/lib/carray/methods/composition.rb +18 -10
- data/lib/carray/methods/factorize.rb +2 -2
- data/lib/carray/methods/gather_nd.rb +25 -5
- data/lib/carray/methods/insert_block.rb +9 -14
- data/lib/carray/methods/is_between.rb +59 -0
- data/lib/carray/methods/is_in.rb +140 -10
- data/lib/carray/methods/join.rb +2 -7
- data/lib/carray/methods/lag.rb +49 -0
- data/lib/carray/methods/locate_addr.rb +182 -45
- data/lib/carray/methods/mode.rb +18 -1
- data/lib/carray/methods/nunique.rb +11 -6
- data/lib/carray/methods/repeat.rb +1 -20
- data/lib/carray/methods/resize.rb +21 -23
- data/lib/carray/methods/snap.rb +34 -12
- data/lib/carray/methods/unique.rb +11 -2
- data/lib/carray/methods/value_counts.rb +4 -11
- data/lib/carray/record_order.rb +208 -0
- data/lib/carray/rng.rb +3 -0
- data/lib/carray/runtime.rb +65 -17
- data/lib/carray/segment_iterator.rb +1221 -0
- data/lib/carray/serialize.rb +214 -30
- data/lib/carray/slab_iterator.rb +101 -27
- data/lib/carray/stack.rb +10 -4
- data/lib/carray/string.rb +105 -5
- data/lib/carray/string_operation_extension.rb +12 -4
- data/lib/carray/struct.rb +137 -58
- data/lib/carray/struct_builder.rb +124 -17
- data/lib/carray/time.rb +1222 -186
- data/lib/carray/window_iterator.rb +242 -81
- data/lib/carray.rb +9 -2
- data/yard-stubs/ca_obj_array.rb +4 -4
- data/yard-stubs/ca_obj_bitarray.rb +7 -0
- data/yard-stubs/ca_obj_bitfield.rb +23 -12
- data/yard-stubs/ca_obj_fake.rb +1 -1
- data/yard-stubs/ca_obj_field.rb +5 -1
- data/yard-stubs/ca_obj_grid.rb +21 -10
- data/yard-stubs/ca_obj_refer.rb +5 -4
- data/yard-stubs/ca_obj_roll.rb +2 -3
- data/yard-stubs/ca_obj_shift.rb +5 -1
- data/yard-stubs/ca_obj_stride.rb +10 -7
- data/yard-stubs/ca_obj_tile.rb +1 -1
- data/yard-stubs/ca_obj_transpose.rb +1 -1
- data/yard-stubs/ca_obj_window.rb +9 -5
- data/yard-stubs/carray_access.rb +11 -5
- data/yard-stubs/carray_attribute.rb +0 -5
- data/yard-stubs/carray_broadcast.rb +1 -1
- data/yard-stubs/carray_cast.rb +88 -43
- data/yard-stubs/carray_conversion.rb +15 -2
- data/yard-stubs/carray_copy.rb +12 -5
- data/yard-stubs/carray_core.rb +3 -3
- data/yard-stubs/carray_count.rb +9 -0
- data/yard-stubs/carray_element.rb +10 -4
- data/yard-stubs/carray_generate.rb +21 -1
- data/yard-stubs/carray_lazy.rb +5 -1
- data/yard-stubs/carray_loop.rb +4 -1
- data/yard-stubs/carray_mask.rb +60 -12
- data/yard-stubs/carray_math.rb +52 -14
- data/yard-stubs/carray_median_percentile.rb +15 -8
- data/yard-stubs/carray_memory_view.rb +40 -23
- data/yard-stubs/carray_order.rb +61 -29
- data/yard-stubs/carray_random.rb +13 -4
- data/yard-stubs/carray_scatter.rb +21 -9
- data/yard-stubs/carray_segment.rb +72 -0
- data/yard-stubs/carray_slab.rb +10 -2
- data/yard-stubs/carray_sort.rb +49 -8
- data/yard-stubs/carray_test.rb +15 -3
- data/yard-stubs/carray_utils.rb +0 -26
- metadata +19 -5
- data/ext/ca_for_each_element.h +0 -239
- data/ext/carray_kernels_map.c +0 -3467
- data/lib/carray/arrow_tensor.rb +0 -401
- data/lib/carray/table.rb +0 -108
data/ext/carray_copy.c
CHANGED
|
@@ -36,6 +36,42 @@ ca_fill_or_free (CArray *co, VALUE (*fill)(VALUE), VALUE arg)
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
void
|
|
40
|
+
ca_fill_or_xfree (void *buf, VALUE (*fill)(VALUE), VALUE arg)
|
|
41
|
+
{
|
|
42
|
+
int tag = 0;
|
|
43
|
+
rb_protect(fill, arg, &tag);
|
|
44
|
+
if ( tag ) {
|
|
45
|
+
xfree(buf);
|
|
46
|
+
rb_jump_tag(tag);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void
|
|
51
|
+
ca_fill_or_detach (int n, CArray **list, VALUE (*fill)(VALUE), VALUE arg)
|
|
52
|
+
{
|
|
53
|
+
int tag = 0;
|
|
54
|
+
int k;
|
|
55
|
+
rb_protect(fill, arg, &tag);
|
|
56
|
+
if ( tag ) {
|
|
57
|
+
for ( k = 0; k < n; k++ ) {
|
|
58
|
+
ca_detach(list[k]);
|
|
59
|
+
}
|
|
60
|
+
rb_jump_tag(tag);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
VALUE
|
|
65
|
+
ca_view_inherit_mask (VALUE view)
|
|
66
|
+
{
|
|
67
|
+
CArray *ca = (CArray *) view;
|
|
68
|
+
CArray *parent = ((CAView *) ca)->parent;
|
|
69
|
+
if ( parent && ca_has_mask(parent) ) {
|
|
70
|
+
ca_create_mask(ca);
|
|
71
|
+
}
|
|
72
|
+
return Qnil;
|
|
73
|
+
}
|
|
74
|
+
|
|
39
75
|
static VALUE
|
|
40
76
|
ca_copy_fill (VALUE arg)
|
|
41
77
|
{
|
|
@@ -72,14 +108,32 @@ ca_copy (void *ap)
|
|
|
72
108
|
|
|
73
109
|
pair[0] = ca;
|
|
74
110
|
pair[1] = co;
|
|
75
|
-
|
|
111
|
+
|
|
112
|
+
/* Object cells read from a view that computes them exist only in
|
|
113
|
+
co->ptr, and copying the mask afterwards can build it -- a lazy
|
|
114
|
+
expression's mask is computed from its operands -- which allocates.
|
|
115
|
+
Hold them until the copy is complete. carray_new has filled the
|
|
116
|
+
cells with valid VALUEs. */
|
|
117
|
+
if ( ca_is_object_type(co) ) {
|
|
118
|
+
int tag = 0;
|
|
119
|
+
int guard = ca_gc_hold_push(co->ptr, co->elements);
|
|
120
|
+
rb_protect(ca_copy_fill, (VALUE) pair, &tag);
|
|
121
|
+
ca_gc_hold_pop_to(guard);
|
|
122
|
+
if ( tag ) {
|
|
123
|
+
ca_free(co);
|
|
124
|
+
rb_jump_tag(tag);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
ca_fill_or_free(co, ca_copy_fill, (VALUE) pair);
|
|
129
|
+
}
|
|
76
130
|
|
|
77
131
|
return co;
|
|
78
132
|
}
|
|
79
133
|
|
|
80
134
|
/* Ruby entry for `CArray#copy`. Wraps `ca_copy` and, when `self` is a
|
|
81
135
|
* Face (e.g. CARecord), lifts the wrapped result so the derived class
|
|
82
|
-
* identity is preserved on the copy. */
|
|
136
|
+
* identity is preserved on the copy. The copy keeps self's attributes. */
|
|
83
137
|
VALUE
|
|
84
138
|
rb_ca_copy (VALUE self)
|
|
85
139
|
{
|
|
@@ -97,6 +151,7 @@ rb_ca_copy (VALUE self)
|
|
|
97
151
|
obj = ca_wrap_struct(co);
|
|
98
152
|
ca_gc_hold_pop_to(guard);
|
|
99
153
|
CA_FACE_LIFT_IF_FACE(obj, self, ca);
|
|
154
|
+
rb_ca_inherit_attr(obj, self);
|
|
100
155
|
return obj;
|
|
101
156
|
}
|
|
102
157
|
|
|
@@ -154,7 +209,7 @@ rb_ca_to_ca (int argc, VALUE *argv, VALUE self)
|
|
|
154
209
|
CArray *ca;
|
|
155
210
|
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
156
211
|
if ( ca_is_readonly(ca) ) {
|
|
157
|
-
|
|
212
|
+
ca_refuse_read_only();
|
|
158
213
|
}
|
|
159
214
|
}
|
|
160
215
|
return self;
|
|
@@ -201,7 +256,7 @@ CArray *
|
|
|
201
256
|
ca_template_safe2 (void *ap, int8_t data_type, ca_size_t bytes)
|
|
202
257
|
{
|
|
203
258
|
CArray *ca = (CArray *) ap;
|
|
204
|
-
|
|
259
|
+
CA_CHECK_DATA_TYPE_GIVEN(data_type);
|
|
205
260
|
if ( ca_is_scalar(ca) ) {
|
|
206
261
|
return (CArray*) cscalar_new(data_type, bytes, NULL);
|
|
207
262
|
}
|
|
@@ -220,9 +275,8 @@ ca_template_safe2 (void *ap, int8_t data_type, ca_size_t bytes)
|
|
|
220
275
|
* The arity dispatch matches `CArray.new` (ca_obj_array.c) so the two
|
|
221
276
|
* factories behave the same for block-driven initialisation. */
|
|
222
277
|
static VALUE
|
|
223
|
-
|
|
278
|
+
rb_ca_template_kw (int argc, VALUE *argv, VALUE ropt, VALUE self)
|
|
224
279
|
{
|
|
225
|
-
volatile VALUE ropt = rb_pop_options(&argc, &argv);
|
|
226
280
|
volatile VALUE obj, rtype, rbytes = Qnil;
|
|
227
281
|
CArray *ca, *co;
|
|
228
282
|
int8_t data_type;
|
|
@@ -243,6 +297,19 @@ rb_ca_template_method (int argc, VALUE *argv, VALUE self)
|
|
|
243
297
|
obj = ca_wrap_struct(co);
|
|
244
298
|
}
|
|
245
299
|
|
|
300
|
+
/* Preserve the Face identity only for a same-type template (no explicit
|
|
301
|
+
* retype). A retype (template(:boolean)) is a different-typed buffer and
|
|
302
|
+
* must not be re-wrapped as the Face. A same-type template of a Face with
|
|
303
|
+
* a valid blank form (CARecord carries its data_class through the struct
|
|
304
|
+
* tail; identity Faces alias same-type storage) is lifted so the class is
|
|
305
|
+
* preserved. A Face with no valid blank form (CAConstString's content-
|
|
306
|
+
* defined offset+buffer) overrides `template` in Ruby to return a plain
|
|
307
|
+
* array instead of a broken same-class shell. The lift comes before the
|
|
308
|
+
* block initialiser so its values are stored through the Face. */
|
|
309
|
+
if ( NIL_P(rtype) ) {
|
|
310
|
+
CA_FACE_LIFT_IF_FACE(obj, self, ca);
|
|
311
|
+
}
|
|
312
|
+
|
|
246
313
|
if ( rb_block_given_p() ) {
|
|
247
314
|
if ( rb_proc_arity(rb_block_proc()) == 0 ) {
|
|
248
315
|
volatile VALUE rval = rb_yield_values2(0, NULL);
|
|
@@ -256,10 +323,7 @@ rb_ca_template_method (int argc, VALUE *argv, VALUE self)
|
|
|
256
323
|
if ( co->ndim > 0 ) {
|
|
257
324
|
ca_size_t idx[CA_RANK_MAX];
|
|
258
325
|
volatile VALUE ridx = rb_ary_new2(co->ndim);
|
|
259
|
-
ca_attach(co);
|
|
260
326
|
rb_ca_index_walk(obj, co, 0, idx, ridx, CA_LOOP_STORE);
|
|
261
|
-
ca_sync(co);
|
|
262
|
-
ca_detach(co);
|
|
263
327
|
}
|
|
264
328
|
else {
|
|
265
329
|
volatile VALUE rval = rb_yield_values2(0, NULL);
|
|
@@ -268,21 +332,16 @@ rb_ca_template_method (int argc, VALUE *argv, VALUE self)
|
|
|
268
332
|
}
|
|
269
333
|
}
|
|
270
334
|
|
|
271
|
-
/* Preserve the Face identity only for a same-type template (no explicit
|
|
272
|
-
* retype). A retype (template(:boolean)) is a different-typed buffer and
|
|
273
|
-
* must not be re-wrapped as the Face. A same-type template of a Face with
|
|
274
|
-
* a valid blank form (CARecord carries its data_class through the struct
|
|
275
|
-
* tail; identity Faces alias same-type storage) is lifted so the class is
|
|
276
|
-
* preserved. A Face with no valid blank form (CAConstString's content-
|
|
277
|
-
* defined offset+buffer) overrides `template` in Ruby to return a plain
|
|
278
|
-
* array instead of a broken same-class shell. */
|
|
279
|
-
if ( NIL_P(rtype) ) {
|
|
280
|
-
CA_FACE_LIFT_IF_FACE(obj, self, ca);
|
|
281
|
-
}
|
|
282
|
-
|
|
283
335
|
return obj;
|
|
284
336
|
}
|
|
285
337
|
|
|
338
|
+
static VALUE
|
|
339
|
+
rb_ca_template_method (int argc, VALUE *argv, VALUE self)
|
|
340
|
+
{
|
|
341
|
+
volatile VALUE ropt = rb_pop_options(&argc, &argv);
|
|
342
|
+
return rb_ca_template_kw(argc, argv, ropt, self);
|
|
343
|
+
}
|
|
344
|
+
|
|
286
345
|
VALUE
|
|
287
346
|
rb_ca_template (VALUE self)
|
|
288
347
|
{
|
|
@@ -292,10 +351,9 @@ rb_ca_template (VALUE self)
|
|
|
292
351
|
VALUE
|
|
293
352
|
rb_ca_template_with_type (VALUE self, VALUE rtype, VALUE rbytes)
|
|
294
353
|
{
|
|
295
|
-
VALUE ropt = rb_hash_new();
|
|
296
|
-
VALUE args[2] = { rtype, ropt };
|
|
354
|
+
volatile VALUE ropt = rb_hash_new();
|
|
297
355
|
rb_set_options(ropt, "bytes", rbytes);
|
|
298
|
-
return
|
|
356
|
+
return rb_ca_template_kw(1, &rtype, ropt, self);
|
|
299
357
|
}
|
|
300
358
|
|
|
301
359
|
/* Returns `template` of the first non-scalar among `n` variadic CArray
|