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_loop.c
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
---------------------------------------------------------------------------- */
|
|
12
12
|
|
|
13
13
|
#include "carray.h"
|
|
14
|
+
#include "carray_internal.h" /* ca_attach_window */
|
|
14
15
|
|
|
15
16
|
static VALUE
|
|
16
17
|
rb_ca_s_each_index_internal (int ndim, VALUE *dim, uint8_t indim, VALUE ridx)
|
|
@@ -176,29 +177,89 @@ rb_ca_each_index (VALUE self)
|
|
|
176
177
|
return rb_ca_index_walk(self, ca, 0, idx, ridx, 0);
|
|
177
178
|
}
|
|
178
179
|
|
|
179
|
-
/*
|
|
180
|
-
block
|
|
181
|
-
|
|
180
|
+
/* The map! family yields inside self's attach window and converts
|
|
181
|
+
what the block returns, so each loop runs through ca_attach_window:
|
|
182
|
+
a raise, a break or a throw out of the block still syncs the cells
|
|
183
|
+
already stored and detaches self. */
|
|
184
|
+
|
|
185
|
+
typedef struct {
|
|
186
|
+
VALUE self;
|
|
187
|
+
CArray *ca;
|
|
188
|
+
volatile VALUE ridx;
|
|
189
|
+
int mode;
|
|
190
|
+
} ca_map_ctx_t;
|
|
191
|
+
|
|
182
192
|
static VALUE
|
|
183
|
-
|
|
193
|
+
ca_map_bang_body (VALUE arg)
|
|
184
194
|
{
|
|
195
|
+
ca_map_ctx_t *c = (ca_map_ctx_t *) arg;
|
|
185
196
|
volatile VALUE obj;
|
|
186
|
-
CArray *ca;
|
|
187
|
-
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
|
188
197
|
ca_size_t i;
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
198
|
+
for (i=0; i<c->ca->elements; i++) {
|
|
199
|
+
obj = rb_yield(rb_ca_fetch_addr(c->self, i));
|
|
200
|
+
rb_ca_store_addr(c->self, i, obj);
|
|
201
|
+
}
|
|
202
|
+
return Qnil;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
static VALUE
|
|
206
|
+
ca_map_with_addr_bang_body (VALUE arg)
|
|
207
|
+
{
|
|
208
|
+
ca_map_ctx_t *c = (ca_map_ctx_t *) arg;
|
|
209
|
+
volatile VALUE obj;
|
|
210
|
+
ca_size_t i;
|
|
211
|
+
for (i=0; i<c->ca->elements; i++) {
|
|
212
|
+
obj = rb_yield_values(2, rb_ca_fetch_addr(c->self, i), SIZE2NUM(i));
|
|
213
|
+
rb_ca_store_addr(c->self, i, obj);
|
|
214
|
+
}
|
|
215
|
+
return Qnil;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
static VALUE
|
|
219
|
+
ca_map_addr_bang_body (VALUE arg)
|
|
220
|
+
{
|
|
221
|
+
ca_map_ctx_t *c = (ca_map_ctx_t *) arg;
|
|
222
|
+
volatile VALUE obj;
|
|
223
|
+
ca_size_t i;
|
|
224
|
+
for (i=0; i<c->ca->elements; i++) {
|
|
225
|
+
obj = rb_yield(SIZE2NUM(i));
|
|
226
|
+
rb_ca_store_addr(c->self, i, obj);
|
|
196
227
|
}
|
|
197
|
-
|
|
198
|
-
|
|
228
|
+
return Qnil;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
static VALUE
|
|
232
|
+
ca_map_index_walk_body (VALUE arg)
|
|
233
|
+
{
|
|
234
|
+
ca_map_ctx_t *c = (ca_map_ctx_t *) arg;
|
|
235
|
+
ca_size_t idx[CA_RANK_MAX];
|
|
236
|
+
rb_ca_index_walk(c->self, c->ca, 0, idx, c->ridx, c->mode);
|
|
237
|
+
return Qnil;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* Runs body over self in a write window. mode is for the index walk. */
|
|
241
|
+
static VALUE
|
|
242
|
+
ca_map_bang_run (VALUE self, VALUE (*body)(VALUE), int mode)
|
|
243
|
+
{
|
|
244
|
+
ca_map_ctx_t c;
|
|
245
|
+
rb_ca_modify(self);
|
|
246
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, c.ca);
|
|
247
|
+
c.self = self;
|
|
248
|
+
c.ridx = rb_ary_new2(c.ca->ndim);
|
|
249
|
+
c.mode = mode;
|
|
250
|
+
ca_attach_window(1, &c.ca, "w", body, (VALUE) &c);
|
|
199
251
|
return self;
|
|
200
252
|
}
|
|
201
253
|
|
|
254
|
+
/* CArray#map! {|elem| ... } -- yield each cell value, store the
|
|
255
|
+
block's return back at the same flat address. Mutates self. */
|
|
256
|
+
static VALUE
|
|
257
|
+
rb_ca_map_bang (VALUE self)
|
|
258
|
+
{
|
|
259
|
+
RETURN_ENUMERATOR(self, 0, 0);
|
|
260
|
+
return ca_map_bang_run(self, ca_map_bang_body, 0);
|
|
261
|
+
}
|
|
262
|
+
|
|
202
263
|
/* CArray#each_with_index {|elem, i, j, ...| ... } -- yield each cell
|
|
203
264
|
value followed by its multi-dim index components (individual args;
|
|
204
265
|
see rb_ca_index_walk header). */
|
|
@@ -221,18 +282,9 @@ rb_ca_each_with_index (VALUE self)
|
|
|
221
282
|
static VALUE
|
|
222
283
|
rb_ca_map_with_index_bang (VALUE self)
|
|
223
284
|
{
|
|
224
|
-
CArray *ca;
|
|
225
|
-
ca_size_t idx[CA_RANK_MAX];
|
|
226
|
-
volatile VALUE ridx;
|
|
227
285
|
RETURN_ENUMERATOR(self, 0, 0);
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
ca_attach(ca);
|
|
231
|
-
ridx = rb_ary_new2(ca->ndim);
|
|
232
|
-
rb_ca_index_walk(self, ca, 0, idx, ridx, CA_LOOP_WITH_VALUE | CA_LOOP_STORE);
|
|
233
|
-
ca_sync(ca);
|
|
234
|
-
ca_detach(ca);
|
|
235
|
-
return self;
|
|
286
|
+
return ca_map_bang_run(self, ca_map_index_walk_body,
|
|
287
|
+
CA_LOOP_WITH_VALUE | CA_LOOP_STORE);
|
|
236
288
|
}
|
|
237
289
|
|
|
238
290
|
|
|
@@ -242,18 +294,8 @@ rb_ca_map_with_index_bang (VALUE self)
|
|
|
242
294
|
static VALUE
|
|
243
295
|
rb_ca_map_index_bang (VALUE self)
|
|
244
296
|
{
|
|
245
|
-
CArray *ca;
|
|
246
|
-
ca_size_t idx[CA_RANK_MAX];
|
|
247
|
-
volatile VALUE ridx;
|
|
248
297
|
RETURN_ENUMERATOR(self, 0, 0);
|
|
249
|
-
|
|
250
|
-
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
251
|
-
ca_attach(ca);
|
|
252
|
-
ridx = rb_ary_new2(ca->ndim);
|
|
253
|
-
rb_ca_index_walk(self, ca, 0, idx, ridx, CA_LOOP_STORE);
|
|
254
|
-
ca_sync(ca);
|
|
255
|
-
ca_detach(ca);
|
|
256
|
-
return self;
|
|
298
|
+
return ca_map_bang_run(self, ca_map_index_walk_body, CA_LOOP_STORE);
|
|
257
299
|
}
|
|
258
300
|
|
|
259
301
|
/* CArray#map_with_addr! {|elem, addr| ... } -- yield (value, flat
|
|
@@ -261,21 +303,8 @@ rb_ca_map_index_bang (VALUE self)
|
|
|
261
303
|
static VALUE
|
|
262
304
|
rb_ca_map_with_addr_bang (VALUE self)
|
|
263
305
|
{
|
|
264
|
-
volatile VALUE obj;
|
|
265
|
-
CArray *ca;
|
|
266
|
-
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
|
267
|
-
ca_size_t i;
|
|
268
306
|
RETURN_ENUMERATOR(self, 0, 0);
|
|
269
|
-
|
|
270
|
-
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
271
|
-
ca_attach(ca);
|
|
272
|
-
for (i=0; i<elements; i++) {
|
|
273
|
-
obj = rb_yield_values(2, rb_ca_fetch_addr(self, i), SIZE2NUM(i));
|
|
274
|
-
rb_ca_store_addr(self, i, obj);
|
|
275
|
-
}
|
|
276
|
-
ca_sync(ca);
|
|
277
|
-
ca_detach(ca);
|
|
278
|
-
return self;
|
|
307
|
+
return ca_map_bang_run(self, ca_map_with_addr_bang_body, 0);
|
|
279
308
|
}
|
|
280
309
|
|
|
281
310
|
|
|
@@ -284,21 +313,8 @@ rb_ca_map_with_addr_bang (VALUE self)
|
|
|
284
313
|
static VALUE
|
|
285
314
|
rb_ca_map_addr_bang (VALUE self)
|
|
286
315
|
{
|
|
287
|
-
volatile VALUE obj;
|
|
288
|
-
CArray *ca;
|
|
289
|
-
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
|
290
|
-
ca_size_t i;
|
|
291
316
|
RETURN_ENUMERATOR(self, 0, 0);
|
|
292
|
-
|
|
293
|
-
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
294
|
-
ca_attach(ca);
|
|
295
|
-
for (i=0; i<elements; i++) {
|
|
296
|
-
obj = rb_yield(SIZE2NUM(i));
|
|
297
|
-
rb_ca_store_addr(self, i, obj);
|
|
298
|
-
}
|
|
299
|
-
ca_sync(ca);
|
|
300
|
-
ca_detach(ca);
|
|
301
|
-
return self;
|
|
317
|
+
return ca_map_bang_run(self, ca_map_addr_bang_body, 0);
|
|
302
318
|
}
|
|
303
319
|
|
|
304
320
|
|