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.
Files changed (221) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +469 -0
  3. data/README.md +3 -2
  4. data/carray.gemspec +1 -1
  5. data/ext/ca_array_pool.c +25 -1
  6. data/ext/ca_axis_descriptor.h +27 -24
  7. data/ext/ca_axis_dispatch.c +14 -26
  8. data/ext/ca_axis_group.c +27 -27
  9. data/ext/ca_binop_dispatch.c +1 -29
  10. data/ext/ca_binop_dispatch.h +0 -1
  11. data/ext/ca_categorical_iterator.c +231 -153
  12. data/ext/ca_compare.c +9 -20
  13. data/ext/ca_composite_dispatch.c +9 -9
  14. data/ext/ca_group_iter.c +16 -17
  15. data/ext/ca_kernel_iterator.c +1240 -2000
  16. data/ext/ca_kernel_iterator.h +502 -519
  17. data/ext/ca_monop_dispatch.c +82 -59
  18. data/ext/ca_monop_dispatch.h +1 -0
  19. data/ext/ca_obj_array.c +152 -45
  20. data/ext/ca_obj_bincmp.c +25 -21
  21. data/ext/ca_obj_binop.c +16 -26
  22. data/ext/ca_obj_bitarray.c +8 -3
  23. data/ext/ca_obj_bitfield.c +63 -49
  24. data/ext/ca_obj_block.c +18 -9
  25. data/ext/ca_obj_byte_swap.c +7 -7
  26. data/ext/ca_obj_const_string.c +188 -22
  27. data/ext/ca_obj_face.c +280 -58
  28. data/ext/ca_obj_face.h +19 -0
  29. data/ext/ca_obj_fake.c +15 -29
  30. data/ext/ca_obj_farray.c +6 -3
  31. data/ext/ca_obj_field.c +30 -8
  32. data/ext/ca_obj_fixlen_string.c +2 -3
  33. data/ext/ca_obj_grid.c +455 -134
  34. data/ext/ca_obj_meld.c +172 -34
  35. data/ext/ca_obj_moncmp.c +23 -8
  36. data/ext/ca_obj_monop.c +113 -67
  37. data/ext/ca_obj_object.c +210 -52
  38. data/ext/ca_obj_record.c +15 -7
  39. data/ext/ca_obj_reduce.c +17 -8
  40. data/ext/ca_obj_refer.c +42 -35
  41. data/ext/ca_obj_remap.c +30 -9
  42. data/ext/ca_obj_repeat.c +9 -10
  43. data/ext/ca_obj_roll.c +31 -10
  44. data/ext/ca_obj_select.c +48 -14
  45. data/ext/ca_obj_select_axis.c +15 -47
  46. data/ext/ca_obj_shift.c +41 -7
  47. data/ext/ca_obj_stack.c +180 -34
  48. data/ext/ca_obj_stride.c +190 -134
  49. data/ext/ca_obj_string.c +80 -4
  50. data/ext/ca_obj_tile.c +32 -11
  51. data/ext/ca_obj_time.c +22 -6
  52. data/ext/ca_obj_timedelta.c +22 -6
  53. data/ext/ca_obj_transpose.c +13 -7
  54. data/ext/ca_obj_triop.c +26 -32
  55. data/ext/ca_obj_window.c +267 -74
  56. data/ext/ca_op_ipower.c +4 -4
  57. data/ext/ca_sort_kernels.h +6 -3
  58. data/ext/ca_sweep_engine.c +2 -2
  59. data/ext/caframe_csv_reader.c +80 -1
  60. data/ext/carray.h +214 -75
  61. data/ext/carray_access.c +200 -99
  62. data/ext/carray_address_basis.c +343 -87
  63. data/ext/carray_attribute.c +113 -6
  64. data/ext/carray_bincount.c +10 -8
  65. data/ext/carray_broadcast.c +13 -8
  66. data/ext/carray_build_flags.h +3 -0
  67. data/ext/carray_call_cfunc.c +108 -0
  68. data/ext/carray_cast.c +375 -96
  69. data/ext/carray_cast_func.rb +90 -20
  70. data/ext/carray_class.c +4 -3
  71. data/ext/carray_config.h +28 -0
  72. data/ext/carray_conversion.c +18 -9
  73. data/ext/carray_copy.c +51 -14
  74. data/ext/carray_core.c +150 -55
  75. data/ext/carray_count.c +56 -20
  76. data/ext/carray_element.c +81 -33
  77. data/ext/carray_factorize.c +138 -84
  78. data/ext/carray_generate.c +199 -52
  79. data/ext/carray_histogram.c +63 -18
  80. data/ext/carray_hold.c +12 -15
  81. data/ext/carray_index_classifier.c +388 -176
  82. data/ext/carray_internal.h +348 -29
  83. data/ext/carray_kernels_bincmp.c +4453 -0
  84. data/ext/carray_kernels_binop.c +11368 -0
  85. data/ext/carray_kernels_init.c +1734 -0
  86. data/ext/carray_kernels_moncmp.c +2104 -0
  87. data/ext/carray_kernels_monop.c +18369 -0
  88. data/ext/carray_kernels_reduce_aggregate.c +23818 -0
  89. data/ext/carray_kernels_reduce_boolean.c +406 -0
  90. data/ext/carray_kernels_reduce_cumulative.c +10086 -0
  91. data/ext/carray_kernels_reduce_extreme.c +17634 -0
  92. data/ext/carray_kernels_reduce_variance.c +3849 -0
  93. data/ext/carray_kernels_scan.c +4302 -0
  94. data/ext/carray_kernels_search.c +33829 -0
  95. data/ext/carray_kernels_sort.c +10897 -0
  96. data/ext/carray_kernels_triop.c +1864 -0
  97. data/ext/carray_key_windows.c +220 -0
  98. data/ext/carray_lazy.c +170 -111
  99. data/ext/carray_mask.c +337 -94
  100. data/ext/carray_median_percentile.c +82 -28
  101. data/ext/carray_memory_view.c +669 -561
  102. data/ext/carray_operator.c +129 -52
  103. data/ext/carray_order.c +604 -77
  104. data/ext/carray_partition.c +28 -27
  105. data/ext/carray_random.c +85 -31
  106. data/ext/carray_round.c +273 -0
  107. data/ext/carray_scatter.c +87 -45
  108. data/ext/carray_segment.c +3 -3
  109. data/ext/carray_slab.c +123 -37
  110. data/ext/carray_sort.c +259 -51
  111. data/ext/carray_sort_kernel.c +5 -7
  112. data/ext/carray_struct.c +54 -61
  113. data/ext/carray_test.c +26 -5
  114. data/ext/carray_time_text.c +4 -2
  115. data/ext/carray_undef.c +4 -0
  116. data/ext/carray_utils.c +309 -66
  117. data/ext/mk_call_cfunc.rb +19 -2
  118. data/ext/mkkernel.rb +403 -350
  119. data/ext/ruby_carray.c +10 -4
  120. data/ext/version.h +4 -4
  121. data/lib/carray/attribute.rb +139 -22
  122. data/lib/carray/autoload_carray.rb +8 -31
  123. data/lib/carray/autoload_method_extension.rb +14 -5
  124. data/lib/carray/axis_group.rb +255 -106
  125. data/lib/carray/basics.rb +105 -17
  126. data/lib/carray/bincount_nd.rb +12 -2
  127. data/lib/carray/block_iterator.rb +126 -23
  128. data/lib/carray/boolean_reduce.rb +17 -17
  129. data/lib/carray/categorical.rb +195 -59
  130. data/lib/carray/categorical_iterator.rb +132 -29
  131. data/lib/carray/complex.rb +5 -5
  132. data/lib/carray/conditional.rb +67 -18
  133. data/lib/carray/const_string.rb +24 -5
  134. data/lib/carray/construct.rb +15 -11
  135. data/lib/carray/data_type_extension.rb +9 -1
  136. data/lib/carray/distance_limit.rb +77 -0
  137. data/lib/carray/fixlen_string.rb +48 -3
  138. data/lib/carray/frame/column_verbs.rb +71 -0
  139. data/lib/carray/frame/concat.rb +17 -3
  140. data/lib/carray/frame/convert.rb +69 -0
  141. data/lib/carray/frame/csv_parser.rb +111 -17
  142. data/lib/carray/frame/describe.rb +3 -2
  143. data/lib/carray/frame/frame.rb +252 -28
  144. data/lib/carray/frame/group.rb +603 -101
  145. data/lib/carray/frame/io.rb +117 -28
  146. data/lib/carray/frame/join.rb +312 -51
  147. data/lib/carray/frame/records.rb +83 -7
  148. data/lib/carray/frame/reshape.rb +42 -35
  149. data/lib/carray/frame/sort.rb +7 -19
  150. data/lib/carray/frame/verbs.rb +188 -48
  151. data/lib/carray/frame/windows.rb +117 -0
  152. data/lib/carray/frame.rb +2 -0
  153. data/lib/carray/fuse_source.rb +42 -6
  154. data/lib/carray/fusion.rb +40 -16
  155. data/lib/carray/histogram.rb +6 -1
  156. data/lib/carray/inspect.rb +31 -8
  157. data/lib/carray/iterator.rb +85 -7
  158. data/lib/carray/key_windows.rb +620 -0
  159. data/lib/carray/lazy.rb +217 -183
  160. data/lib/carray/mask_gap_fill.rb +63 -57
  161. data/lib/carray/meld_reduce.rb +12 -14
  162. data/lib/carray/methods/bin.rb +26 -18
  163. data/lib/carray/methods/bincount.rb +16 -0
  164. data/lib/carray/methods/bit_string.rb +1 -1
  165. data/lib/carray/methods/choose.rb +16 -3
  166. data/lib/carray/methods/composition.rb +3 -1
  167. data/lib/carray/methods/gather_nd.rb +14 -5
  168. data/lib/carray/methods/insert_block.rb +2 -2
  169. data/lib/carray/methods/is_between.rb +59 -0
  170. data/lib/carray/methods/is_in.rb +61 -37
  171. data/lib/carray/methods/join.rb +1 -6
  172. data/lib/carray/methods/lag.rb +49 -0
  173. data/lib/carray/methods/locate_addr.rb +47 -51
  174. data/lib/carray/methods/mode.rb +1 -1
  175. data/lib/carray/methods/nunique.rb +11 -6
  176. data/lib/carray/methods/resize.rb +3 -3
  177. data/lib/carray/methods/value_counts.rb +4 -11
  178. data/lib/carray/record_order.rb +3 -3
  179. data/lib/carray/rng.rb +3 -0
  180. data/lib/carray/runtime.rb +53 -8
  181. data/lib/carray/segment_iterator.rb +323 -88
  182. data/lib/carray/serialize.rb +45 -14
  183. data/lib/carray/slab_iterator.rb +50 -0
  184. data/lib/carray/stack.rb +15 -12
  185. data/lib/carray/string.rb +113 -5
  186. data/lib/carray/string_operation_extension.rb +21 -6
  187. data/lib/carray/struct.rb +9 -21
  188. data/lib/carray/struct_builder.rb +24 -11
  189. data/lib/carray/time.rb +819 -158
  190. data/lib/carray/window_iterator.rb +122 -16
  191. data/lib/carray.rb +7 -0
  192. data/yard-stubs/ca_obj_bitfield.rb +1 -1
  193. data/yard-stubs/ca_obj_field.rb +4 -0
  194. data/yard-stubs/ca_obj_grid.rb +21 -10
  195. data/yard-stubs/ca_obj_refer.rb +2 -1
  196. data/yard-stubs/ca_obj_roll.rb +2 -2
  197. data/yard-stubs/ca_obj_shift.rb +5 -1
  198. data/yard-stubs/ca_obj_tile.rb +1 -1
  199. data/yard-stubs/ca_obj_transpose.rb +5 -4
  200. data/yard-stubs/ca_obj_window.rb +8 -3
  201. data/yard-stubs/carray_access.rb +6 -1
  202. data/yard-stubs/carray_attribute.rb +3 -6
  203. data/yard-stubs/carray_cast.rb +12 -0
  204. data/yard-stubs/carray_conversion.rb +7 -2
  205. data/yard-stubs/carray_copy.rb +4 -2
  206. data/yard-stubs/carray_count.rb +4 -4
  207. data/yard-stubs/carray_element.rb +17 -10
  208. data/yard-stubs/carray_generate.rb +21 -1
  209. data/yard-stubs/carray_mask.rb +32 -3
  210. data/yard-stubs/carray_math.rb +41 -5
  211. data/yard-stubs/carray_median_percentile.rb +5 -2
  212. data/yard-stubs/carray_memory_view.rb +40 -23
  213. data/yard-stubs/carray_order.rb +129 -22
  214. data/yard-stubs/carray_random.rb +13 -4
  215. data/yard-stubs/carray_scatter.rb +17 -10
  216. data/yard-stubs/carray_slab.rb +9 -2
  217. data/yard-stubs/carray_sort.rb +6 -5
  218. data/yard-stubs/carray_test.rb +5 -3
  219. metadata +25 -3
  220. data/lib/carray/arrow_tensor.rb +0 -401
  221. 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
- __axis_group_reduce__ : here
17
+ __reduce_by_axis_groups__ : here
18
18
  - reduce_plan / bundle assembly / output-axis permutation (metadata) : Ruby
19
- - the O(N) compute kernel __axis_group_reduce__ : ca_axis_group.c
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.__register_axis_group_classes__(CACategorical, AxisGroup) — called
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("__build__"), 2, self, spec);
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
- if ( nd > CA_RANK_MAX ) {
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(rb_cAxisGroup, rb_intern("__check_reduce_keywords__"), 2,
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("__count_stand_in__"), 1, value);
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(rb_cAxisGroup, rb_intern("__finish_reduction__"), 4,
272
- self, op_sym, kw, result);
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("__axis_group_reduce__");
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
- rb_define_singleton_method(rb_cCArray, "__register_axis_group_classes__",
291
- rb_ca_register_axis_group_classes, 2);
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
- rb_define_singleton_method(rb_cCAGroupIterator, "__build__",
299
- rb_ca_group_iter_build, 2);
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);