carray 2.0.0 → 3.0.0

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 (339) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +5 -25
  3. data/CHANGELOG.md +16 -0
  4. data/LICENSE +1 -1
  5. data/NEWS.md +3 -0
  6. data/README.md +128 -44
  7. data/carray.gemspec +22 -24
  8. data/ext/ca_array_pool.c +91 -0
  9. data/ext/ca_axis_descriptor.h +186 -0
  10. data/ext/ca_axis_dispatch.c +924 -0
  11. data/ext/ca_axis_group.c +1208 -0
  12. data/ext/ca_bincmp_dispatch.c +76 -0
  13. data/ext/ca_bincmp_dispatch.h +85 -0
  14. data/ext/ca_binop_dispatch.c +125 -0
  15. data/ext/ca_binop_dispatch.h +159 -0
  16. data/ext/ca_categorical_iterator.c +1375 -0
  17. data/ext/ca_compare.c +94 -0
  18. data/ext/ca_compare.h +26 -0
  19. data/ext/ca_composite_dispatch.c +414 -0
  20. data/ext/ca_composite_dispatch.h +116 -0
  21. data/ext/ca_for_buffer.h +96 -0
  22. data/ext/ca_for_each_element.h +241 -0
  23. data/ext/ca_group_iter.c +304 -0
  24. data/ext/ca_iter_substrate.h +325 -0
  25. data/ext/ca_kernel_iterator.c +4321 -0
  26. data/ext/ca_kernel_iterator.h +2603 -0
  27. data/ext/ca_moncmp_dispatch.c +37 -0
  28. data/ext/ca_moncmp_dispatch.h +62 -0
  29. data/ext/ca_monop_dispatch.c +200 -0
  30. data/ext/ca_monop_dispatch.h +235 -0
  31. data/ext/ca_obj_array.c +355 -359
  32. data/ext/ca_obj_bincmp.c +809 -0
  33. data/ext/ca_obj_binop.c +892 -0
  34. data/ext/ca_obj_bitarray.c +369 -164
  35. data/ext/ca_obj_bitfield.c +294 -234
  36. data/ext/ca_obj_block.c +189 -711
  37. data/ext/ca_obj_byte_swap.c +766 -0
  38. data/ext/ca_obj_const_string.c +965 -0
  39. data/ext/ca_obj_face.c +670 -0
  40. data/ext/ca_obj_face.h +247 -0
  41. data/ext/ca_obj_fake.c +228 -100
  42. data/ext/ca_obj_farray.c +54 -441
  43. data/ext/ca_obj_field.c +82 -529
  44. data/ext/ca_obj_fixlen_string.c +306 -0
  45. data/ext/ca_obj_grid.c +858 -440
  46. data/ext/ca_obj_meld.c +1034 -0
  47. data/ext/ca_obj_moncmp.c +569 -0
  48. data/ext/ca_obj_monop.c +1111 -0
  49. data/ext/ca_obj_object.c +774 -298
  50. data/ext/ca_obj_record.c +468 -0
  51. data/ext/ca_obj_reduce.c +97 -82
  52. data/ext/ca_obj_refer.c +569 -459
  53. data/ext/ca_obj_remap.c +475 -0
  54. data/ext/ca_obj_repeat.c +92 -477
  55. data/ext/ca_obj_roll.c +616 -0
  56. data/ext/ca_obj_select.c +344 -296
  57. data/ext/ca_obj_select_axis.c +1296 -0
  58. data/ext/ca_obj_shift.c +230 -792
  59. data/ext/ca_obj_source.c +78 -0
  60. data/ext/ca_obj_stack.c +1173 -0
  61. data/ext/ca_obj_stride.c +2501 -0
  62. data/ext/ca_obj_string.c +268 -0
  63. data/ext/ca_obj_tile.c +614 -0
  64. data/ext/ca_obj_time.c +546 -0
  65. data/ext/ca_obj_timedelta.c +435 -0
  66. data/ext/ca_obj_transpose.c +62 -516
  67. data/ext/ca_obj_triop.c +746 -0
  68. data/ext/ca_obj_unbound_repeat.c +208 -241
  69. data/ext/ca_obj_window.c +1131 -563
  70. data/ext/ca_op_byte_swap.c +175 -0
  71. data/ext/ca_op_ipower.c +319 -0
  72. data/ext/ca_op_powi.h +88 -0
  73. data/ext/ca_sort_kernels.h +132 -0
  74. data/ext/ca_sweep_engine.c +430 -0
  75. data/ext/ca_sweep_engine.h +157 -0
  76. data/ext/ca_transform_common.c +228 -0
  77. data/ext/ca_triop_dispatch.c +55 -0
  78. data/ext/ca_triop_dispatch.h +62 -0
  79. data/ext/carray.h +795 -402
  80. data/ext/carray_access.c +831 -711
  81. data/ext/carray_attribute.c +98 -330
  82. data/ext/carray_bincount.c +255 -0
  83. data/ext/carray_broadcast.c +283 -0
  84. data/ext/carray_call_cfunc.c +1360 -828
  85. data/ext/carray_call_cfunc.h +160 -0
  86. data/ext/carray_cast.c +1212 -301
  87. data/ext/carray_cast_func.rb +81 -40
  88. data/ext/carray_class.c +53 -63
  89. data/ext/carray_config.h +28 -0
  90. data/ext/carray_conversion.c +350 -346
  91. data/ext/carray_copy.c +156 -268
  92. data/ext/carray_core.c +1342 -199
  93. data/ext/carray_count.c +312 -0
  94. data/ext/carray_data_type.c +43 -19
  95. data/ext/carray_element.c +585 -213
  96. data/ext/carray_factorize.c +2542 -0
  97. data/ext/carray_generate.c +230 -559
  98. data/ext/carray_histogram.c +490 -0
  99. data/ext/carray_hold.c +228 -0
  100. data/ext/carray_index_classifier.c +1035 -0
  101. data/ext/carray_index_classifier.h +27 -0
  102. data/ext/carray_internal.h +120 -0
  103. data/ext/carray_kernels_bincmp.c +4445 -0
  104. data/ext/carray_kernels_binop.c +10979 -0
  105. data/ext/carray_kernels_init.c +36 -0
  106. data/ext/carray_kernels_map.c +3466 -0
  107. data/ext/carray_kernels_moncmp.c +2096 -0
  108. data/ext/carray_kernels_monop.c +18312 -0
  109. data/ext/carray_kernels_reduce_aggregate.c +25836 -0
  110. data/ext/carray_kernels_reduce_boolean.c +329 -0
  111. data/ext/carray_kernels_reduce_cumulative.c +14592 -0
  112. data/ext/carray_kernels_reduce_extreme.c +16947 -0
  113. data/ext/carray_kernels_reduce_variance.c +3909 -0
  114. data/ext/carray_kernels_scan.c +3692 -0
  115. data/ext/carray_kernels_search.c +32137 -0
  116. data/ext/carray_kernels_sort.c +10625 -0
  117. data/ext/carray_kernels_triop.c +1391 -0
  118. data/ext/carray_lazy.c +567 -0
  119. data/ext/carray_loop.c +88 -200
  120. data/ext/carray_mask.c +848 -154
  121. data/ext/carray_math_kernel.h +120 -0
  122. data/ext/carray_mathfunc.c +10 -241
  123. data/ext/carray_median_percentile.c +1257 -0
  124. data/ext/carray_memory_view.c +1625 -0
  125. data/ext/carray_operator.c +1526 -318
  126. data/ext/carray_order.c +664 -1394
  127. data/ext/carray_partition.c +416 -0
  128. data/ext/carray_random.c +518 -0
  129. data/ext/carray_scatter.c +357 -0
  130. data/ext/carray_slab.c +1219 -0
  131. data/ext/carray_slab.h +84 -0
  132. data/ext/carray_sort.c +829 -0
  133. data/ext/carray_sort_kernel.c +620 -0
  134. data/ext/carray_struct.c +695 -0
  135. data/ext/carray_test.c +343 -229
  136. data/ext/carray_undef.c +34 -17
  137. data/ext/carray_utils.c +175 -74
  138. data/ext/extconf.rb +216 -55
  139. data/ext/mk_call_cfunc.rb +480 -0
  140. data/ext/mkkernel.rb +8842 -0
  141. data/ext/ruby_carray.c +202 -101
  142. data/ext/version.h +4 -14
  143. data/ext/version.rb +5 -13
  144. data/lib/carray/arrow_tensor.rb +401 -0
  145. data/lib/carray/attribute.rb +166 -0
  146. data/lib/carray/autoload_carray.rb +220 -0
  147. data/lib/carray/autoload_method_extension.rb +44 -0
  148. data/lib/carray/axis_group.rb +711 -0
  149. data/lib/carray/basics.rb +481 -0
  150. data/lib/carray/bincount_nd.rb +358 -0
  151. data/lib/carray/block_iterator.rb +604 -0
  152. data/lib/carray/boolean_reduce.rb +109 -0
  153. data/lib/carray/categorical.rb +561 -0
  154. data/lib/carray/categorical_iterator.rb +1062 -0
  155. data/lib/carray/complex.rb +150 -0
  156. data/lib/carray/conditional.rb +216 -0
  157. data/lib/carray/const_string.rb +228 -0
  158. data/lib/carray/construct.rb +139 -328
  159. data/lib/carray/core_extensions.rb +240 -0
  160. data/lib/carray/data_type_extension.rb +233 -0
  161. data/lib/carray/fixlen_string.rb +95 -0
  162. data/lib/carray/frame/concat.rb +132 -0
  163. data/lib/carray/frame/convert.rb +95 -0
  164. data/lib/carray/frame/csv_parser.rb +211 -0
  165. data/lib/carray/frame/frame.rb +649 -0
  166. data/lib/carray/frame/group.rb +186 -0
  167. data/lib/carray/frame/io.rb +164 -0
  168. data/lib/carray/frame/join.rb +248 -0
  169. data/lib/carray/frame/records.rb +99 -0
  170. data/lib/carray/frame/sort.rb +113 -0
  171. data/lib/carray/frame/verbs.rb +299 -0
  172. data/lib/carray/frame.rb +16 -0
  173. data/lib/carray/histogram.rb +512 -0
  174. data/lib/carray/inspect.rb +37 -20
  175. data/lib/carray/iterator.rb +57 -349
  176. data/lib/carray/lazy.rb +889 -0
  177. data/lib/carray/mask_gap_fill.rb +200 -0
  178. data/lib/carray/math.rb +78 -342
  179. data/lib/carray/meld_reduce.rb +289 -0
  180. data/lib/carray/methods/align_addr.rb +116 -0
  181. data/lib/carray/methods/bin.rb +128 -0
  182. data/lib/carray/methods/bincount.rb +87 -0
  183. data/lib/carray/methods/bit_string.rb +92 -0
  184. data/lib/carray/methods/broadcast.rb +63 -0
  185. data/lib/carray/methods/choose.rb +39 -0
  186. data/lib/carray/methods/composition.rb +280 -0
  187. data/lib/carray/methods/gather_nd.rb +206 -0
  188. data/lib/carray/methods/index.rb +39 -0
  189. data/lib/carray/methods/insert_block.rb +99 -0
  190. data/lib/carray/methods/is_in.rb +141 -0
  191. data/lib/carray/methods/join.rb +90 -0
  192. data/lib/carray/methods/locate_addr.rb +47 -0
  193. data/lib/carray/methods/mask_duplicates.rb +41 -0
  194. data/lib/carray/methods/meshgrid.rb +91 -0
  195. data/lib/carray/methods/mode.rb +126 -0
  196. data/lib/carray/methods/nunique.rb +46 -0
  197. data/lib/carray/methods/resize.rb +56 -0
  198. data/lib/carray/methods/snap.rb +156 -0
  199. data/lib/carray/methods/string_format.rb +57 -0
  200. data/lib/carray/methods/unique.rb +47 -0
  201. data/lib/carray/methods/value_counts.rb +71 -0
  202. data/lib/carray/mkmf.rb +124 -101
  203. data/lib/carray/runtime.rb +108 -0
  204. data/lib/carray/serialize.rb +478 -167
  205. data/lib/carray/slab_iterator.rb +292 -0
  206. data/lib/carray/stack.rb +291 -0
  207. data/lib/carray/string.rb +56 -180
  208. data/lib/carray/string_operation_extension.rb +289 -0
  209. data/lib/carray/struct.rb +335 -323
  210. data/lib/carray/struct_builder.rb +697 -0
  211. data/lib/carray/table.rb +41 -2
  212. data/lib/carray/time.rb +2255 -38
  213. data/lib/carray/window_iterator.rb +655 -0
  214. data/lib/carray.rb +55 -57
  215. metadata +163 -130
  216. data/Rakefile +0 -51
  217. data/TODO.md +0 -18
  218. data/ext/ca_iter_block.c +0 -257
  219. data/ext/ca_iter_dimension.c +0 -299
  220. data/ext/ca_iter_window.c +0 -214
  221. data/ext/ca_obj_mapping.c +0 -644
  222. data/ext/carray_iterator.c +0 -641
  223. data/ext/carray_math.rb +0 -850
  224. data/ext/carray_numeric.c +0 -259
  225. data/ext/carray_sort_addr.c +0 -254
  226. data/ext/carray_stat.c +0 -2100
  227. data/ext/carray_stat_proc.rb +0 -1999
  228. data/ext/mkmath.rb +0 -741
  229. data/ext/ruby_ccomplex.c +0 -509
  230. data/ext/ruby_float_func.c +0 -86
  231. data/lib/carray/array.rb +0 -8
  232. data/lib/carray/autoload/autoload_base.rb +0 -19
  233. data/lib/carray/autoload/autoload_gem_cairo.rb +0 -9
  234. data/lib/carray/autoload/autoload_gem_ffi.rb +0 -9
  235. data/lib/carray/autoload/autoload_gem_gnuplot.rb +0 -2
  236. data/lib/carray/autoload/autoload_gem_io_csv.rb +0 -14
  237. data/lib/carray/autoload/autoload_gem_io_pg.rb +0 -6
  238. data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +0 -12
  239. data/lib/carray/autoload/autoload_gem_narray.rb +0 -10
  240. data/lib/carray/autoload/autoload_gem_numo_narray.rb +0 -15
  241. data/lib/carray/autoload/autoload_gem_opencv.rb +0 -16
  242. data/lib/carray/autoload/autoload_gem_random.rb +0 -8
  243. data/lib/carray/autoload/autoload_gem_rmagick.rb +0 -23
  244. data/lib/carray/autoload/autoload_gem_zimg.rb +0 -3
  245. data/lib/carray/autoload/autoload_io_imagemagick.rb +0 -6
  246. data/lib/carray/autoload/autoload_math_histogram.rb +0 -5
  247. data/lib/carray/autoload/autoload_math_recurrence.rb +0 -6
  248. data/lib/carray/autoload/autoload_object_iterator.rb +0 -1
  249. data/lib/carray/autoload/autoload_object_link.rb +0 -1
  250. data/lib/carray/autoload/autoload_object_pack.rb +0 -2
  251. data/lib/carray/autoload.rb +0 -141
  252. data/lib/carray/basic.rb +0 -191
  253. data/lib/carray/broadcast.rb +0 -101
  254. data/lib/carray/compose.rb +0 -315
  255. data/lib/carray/convert.rb +0 -115
  256. data/lib/carray/info.rb +0 -110
  257. data/lib/carray/io/imagemagick.rb +0 -235
  258. data/lib/carray/mask.rb +0 -102
  259. data/lib/carray/math/histogram.rb +0 -177
  260. data/lib/carray/math/recurrence.rb +0 -93
  261. data/lib/carray/object/ca_obj_iterator.rb +0 -50
  262. data/lib/carray/object/ca_obj_link.rb +0 -50
  263. data/lib/carray/object/ca_obj_pack.rb +0 -99
  264. data/lib/carray/obsolete.rb +0 -256
  265. data/lib/carray/ordering.rb +0 -181
  266. data/lib/carray/testing.rb +0 -51
  267. data/lib/carray/transform.rb +0 -109
  268. data/misc/Methods.ja.md +0 -182
  269. data/misc/NOTE +0 -51
  270. data/spec/Classes/CABitfield_spec.rb +0 -58
  271. data/spec/Classes/CABlockIterator_spec.rb +0 -114
  272. data/spec/Classes/CABlock_spec.rb +0 -205
  273. data/spec/Classes/CAField_spec.rb +0 -39
  274. data/spec/Classes/CAGrid_spec.rb +0 -75
  275. data/spec/Classes/CAMap_spec.rb +0 -0
  276. data/spec/Classes/CAMapping_spec.rb +0 -105
  277. data/spec/Classes/CAObject_attribute_spec.rb +0 -33
  278. data/spec/Classes/CAObject_spec.rb +0 -33
  279. data/spec/Classes/CARefer_spec.rb +0 -93
  280. data/spec/Classes/CARepeat_spec.rb +0 -65
  281. data/spec/Classes/CASelect_spec.rb +0 -22
  282. data/spec/Classes/CAShift_spec.rb +0 -16
  283. data/spec/Classes/CAStruct_spec.rb +0 -71
  284. data/spec/Classes/CATranspose_spec.rb +0 -60
  285. data/spec/Classes/CAUnboudRepeat_spec.rb +0 -102
  286. data/spec/Classes/CAWindow_spec.rb +0 -54
  287. data/spec/Classes/CAWrap_spec.rb +0 -8
  288. data/spec/Classes/CArray_spec.rb +0 -184
  289. data/spec/Classes/CScalar_spec.rb +0 -55
  290. data/spec/Classes/ex1.rb +0 -46
  291. data/spec/Features/feature_130_spec.rb +0 -19
  292. data/spec/Features/feature_attributes_spec.rb +0 -280
  293. data/spec/Features/feature_boolean_spec.rb +0 -98
  294. data/spec/Features/feature_broadcast.rb +0 -116
  295. data/spec/Features/feature_cast_function.rb +0 -19
  296. data/spec/Features/feature_cast_spec.rb +0 -33
  297. data/spec/Features/feature_class_spec.rb +0 -84
  298. data/spec/Features/feature_complex_spec.rb +0 -42
  299. data/spec/Features/feature_composite_spec.rb +0 -124
  300. data/spec/Features/feature_convert_spec.rb +0 -46
  301. data/spec/Features/feature_copy_spec.rb +0 -123
  302. data/spec/Features/feature_creation_spec.rb +0 -84
  303. data/spec/Features/feature_element_spec.rb +0 -144
  304. data/spec/Features/feature_extream_spec.rb +0 -54
  305. data/spec/Features/feature_generate_spec.rb +0 -74
  306. data/spec/Features/feature_index_spec.rb +0 -69
  307. data/spec/Features/feature_mask_spec.rb +0 -580
  308. data/spec/Features/feature_math_spec.rb +0 -97
  309. data/spec/Features/feature_order_spec.rb +0 -146
  310. data/spec/Features/feature_ref_store_spec.rb +0 -209
  311. data/spec/Features/feature_serialization_spec.rb +0 -125
  312. data/spec/Features/feature_stat_spec.rb +0 -397
  313. data/spec/Features/feature_virtual_spec.rb +0 -48
  314. data/spec/Features/method_eq_spec.rb +0 -81
  315. data/spec/Features/method_is_nan_spec.rb +0 -12
  316. data/spec/Features/method_map_spec.rb +0 -54
  317. data/spec/Features/method_max_with.rb +0 -20
  318. data/spec/Features/method_min_with.rb +0 -19
  319. data/spec/Features/method_ne_spec.rb +0 -18
  320. data/spec/Features/method_project_spec.rb +0 -188
  321. data/spec/Features/method_ref_spec.rb +0 -27
  322. data/spec/Features/method_round_spec.rb +0 -11
  323. data/spec/Features/method_s_linspace_spec.rb +0 -48
  324. data/spec/Features/method_s_span_spec.rb +0 -14
  325. data/spec/Features/method_seq_spec.rb +0 -47
  326. data/spec/Features/method_sort_with.rb +0 -43
  327. data/spec/Features/method_sorted_with.rb +0 -29
  328. data/spec/Features/method_span_spec.rb +0 -42
  329. data/spec/Features/method_wrap_readonly_spec.rb +0 -43
  330. data/spec/UnitTest/test_CAVirtual.rb +0 -214
  331. data/spec/spec_all.rb +0 -10
  332. data/utils/ca_ase.rb +0 -21
  333. data/utils/ca_methods.rb +0 -15
  334. data/utils/cast_checker.rb +0 -30
  335. data/utils/convert_test.rb +0 -73
  336. data/utils/extract_yard.rb +0 -22
  337. data/utils/guess_shape.rb +0 -76
  338. data/utils/monkey_patch_methods.rb +0 -62
  339. data/utils/remove_resource_fork.sh +0 -5
@@ -0,0 +1,220 @@
1
+ # ----------------------------------------------------------------------------
2
+ #
3
+ # carray/autoload_carray.rb
4
+ #
5
+ # Autoload stubs for CArray's Ruby-side surface. Loaded from lib/carray.rb
6
+ # after autoload_method_extension is installed. Split by intent:
7
+ #
8
+ # (1) Top-level feature files under carray/ — constant class + entry
9
+ # methods (Serializer, TableMethods, iterators, aggregation
10
+ # accumulators, categorical / axis-group).
11
+ # (2) Single-feature method files under carray/methods/ — each first
12
+ # call requires its file, whose definitions overwrite the stubs
13
+ # and re-dispatch. None of these methods has internal callers,
14
+ # so they never load unless user code uses them.
15
+ #
16
+ # ----------------------------------------------------------------------------
17
+
18
+
19
+ # ============================================================================
20
+ # (1) Top-level feature files
21
+ # ============================================================================
22
+
23
+ # ---- Inspection (#inspect / #source_code) ----------------------------------
24
+ #
25
+ # CArray::Inspector (:nodoc:) and #inspect / #source_code live in carray/inspect.rb.
26
+ # #inspect is an implicit method (p / pp / irb / error interpolation), so the
27
+ # stub loads the file the first time any CArray is displayed. Nothing in the
28
+ # eager core references it at load time; #desc is private (code-internal) and
29
+ # Inspector is internal, so only the two public methods need stubs.
30
+
31
+ class CArray
32
+ inspect_rb = "carray/inspect"
33
+ autoload_method "inspect", inspect_rb
34
+ autoload_method "source_code", inspect_rb
35
+ end
36
+
37
+ # ---- Serializer / Marshal / dump / load ------------------------------------
38
+
39
+ class CArray
40
+ serialize_rb = "carray/serialize"
41
+ autoload :Serializer, serialize_rb
42
+ autoload_method "self.save", serialize_rb
43
+ autoload_method "self.load", serialize_rb
44
+ autoload_method "self.dump", serialize_rb
45
+ autoload_method "self.load_from_file", serialize_rb
46
+ autoload_method "marshal_dump", serialize_rb
47
+ autoload_method "marshal_load", serialize_rb
48
+ end
49
+
50
+ # ---- Arrow tensor IPC (interop) --------------------------------------------
51
+
52
+ class CArray
53
+ arrow_tensor_rb = "carray/arrow_tensor"
54
+ autoload :ArrowTensor, arrow_tensor_rb
55
+ autoload_method "self.load_arrow_tensor", arrow_tensor_rb
56
+ autoload_method "save_arrow_tensor", arrow_tensor_rb
57
+ end
58
+
59
+ # ---- Table (row-major dispatch helper) -------------------------------------
60
+
61
+ class CArray
62
+ autoload :TableMethods, "carray/table"
63
+ end
64
+
65
+ # ---- Iterators (class / slab) ----------------------------------------------
66
+
67
+ autoload :CASlabIterator, "carray/slab_iterator"
68
+ autoload :CAWindowIterator, "carray/window_iterator"
69
+ autoload :CABlockIterator, "carray/block_iterator"
70
+
71
+ class CArray
72
+ autoload_method "windows", "carray/window_iterator"
73
+ autoload_method "blocks", "carray/block_iterator"
74
+ end
75
+
76
+ # ---- Aggregation accumulators (histogram / bincount_nd) --------------------
77
+
78
+ class CArray
79
+ histogram_rb = "carray/histogram"
80
+ autoload :Histogram, histogram_rb
81
+ autoload_method "histogram1d", histogram_rb
82
+ autoload_method "histogram2d", histogram_rb
83
+ autoload_method "histogram", histogram_rb
84
+
85
+ bincount_nd_rb = "carray/bincount_nd"
86
+ autoload :BincountND, bincount_nd_rb
87
+ autoload_method "bincount_nd", bincount_nd_rb
88
+ end
89
+
90
+ # ---- Categorical / Axis-group reduction ------------------------------------
91
+ #
92
+ # Classifier is CACategorical; axis_group builds the reduction spec.
93
+ # AxisGroup / GroupLabels are top-level;
94
+ # CAGroupIterator is C-defined (ext/ca_group_iter.c), no autoload.
95
+ # The C `[]` type gate (ext/ca_group_iter.c) arms itself lazily the first
96
+ # time a fixlen-surface CArray index appears, so a categorical from any
97
+ # construction path (`categorize` / CACategorical.from_codes) is recognised
98
+ # without routing categorical's autoload through this file (which would
99
+ # recurse when categorical.rb reopens `class CACategorical`).
100
+
101
+ class CArray
102
+ categorical_rb = "carray/categorical"
103
+ autoload_method "categorize", categorical_rb
104
+
105
+ axis_group_rb = "carray/axis_group"
106
+ autoload_method "axis_group", axis_group_rb
107
+
108
+ categorical_iterator_rb = "carray/categorical_iterator"
109
+ autoload_method "group_by_category", categorical_iterator_rb
110
+ autoload_method "group_by_run", categorical_iterator_rb
111
+ end
112
+
113
+ autoload :CACategorical, "carray/categorical"
114
+ autoload :CACategoricalIterator, "carray/categorical_iterator"
115
+ autoload :AxisGroup, "carray/axis_group"
116
+ autoload :GroupLabels, "carray/axis_group"
117
+
118
+
119
+ # ---- CAStruct / CAUnion (fixlen data_class DSL) ----------------------------
120
+ #
121
+ # The struct/union surface is only reached through CArray.struct / .union
122
+ # (definition) or the CAStruct / CAUnion constants (subclassing, rescue
123
+ # CAStruct::Error). Nothing in the eager core references it, so it loads on
124
+ # first use. CAStruct::Builder stays nested-autoloaded inside struct.rb.
125
+
126
+ autoload :CAStruct, "carray/struct"
127
+ autoload :CAUnion, "carray/struct"
128
+
129
+ # ---- CAFrame (DataFrame over CArray columns) -------------------------------
130
+ #
131
+ # The frame is only reached through the CAFrame constant (CAFrame.new /
132
+ # .from_csv / subclassing) or GroupedFrame (obtained from CAFrame#group_by,
133
+ # by which point CAFrame is already loaded). Both constants live in the same
134
+ # require bundle (carray/frame.rb), so autoloading either loads the whole
135
+ # frame. Nothing in the eager core references them, so it loads on first use.
136
+
137
+ autoload :CAFrame, "carray/frame"
138
+ autoload :GroupedFrame, "carray/frame"
139
+
140
+ class CArray
141
+ struct_rb = "carray/struct"
142
+ autoload_method "self.struct", struct_rb
143
+ autoload_method "self.union", struct_rb
144
+ autoload_method "st", struct_rb
145
+ end
146
+
147
+ # ---- CAStack composition surface (stack / meld / montage / split / append) --
148
+ #
149
+ # CAStack is C-defined (ext/ca_obj_stack.c), so its constant and raw
150
+ # `CAStack.new` are always present without this file. Only the Ruby
151
+ # composition surface lives in carray/stack.rb; nothing in the eager core
152
+ # calls it (promote_list / normalize_axis are C-defined), so it loads on
153
+ # first use. CAStack#append needs its own stub, so CAStack extends the DSL.
154
+
155
+ class CArray
156
+ stack_rb = "carray/stack"
157
+ autoload_method "self.stack", stack_rb
158
+ autoload_method "self.meld", stack_rb
159
+ autoload_method "self.montage", stack_rb
160
+ autoload_method "stack", stack_rb
161
+ autoload_method "meld", stack_rb
162
+ autoload_method "split", stack_rb
163
+ end
164
+
165
+ class CAStack
166
+ extend AutoloadMethodExtension
167
+ autoload_method "append", "carray/stack"
168
+ end
169
+
170
+
171
+ # ============================================================================
172
+ # (2) Single-feature method files under carray/methods/
173
+ # ============================================================================
174
+
175
+ class CArray
176
+ # composition family (eager ragged list -> one array)
177
+ autoload_method "self.concatenate", "carray/methods/composition"
178
+ autoload_method "concatenate", "carray/methods/composition"
179
+ autoload_method "self.mosaic", "carray/methods/composition"
180
+ autoload_method "self.tabulate", "carray/methods/composition"
181
+
182
+ autoload_method "self.meshgrid", "carray/methods/meshgrid"
183
+
184
+ autoload_method "bincount", "carray/methods/bincount"
185
+ autoload_method "self.broadcast", "carray/methods/broadcast"
186
+ autoload_method "gather_nd", "carray/methods/gather_nd"
187
+ autoload_method "put_nd", "carray/methods/gather_nd"
188
+ autoload_method "mask_duplicates", "carray/methods/mask_duplicates"
189
+ autoload_method "unique", "carray/methods/unique"
190
+ autoload_method "is_in", "carray/methods/is_in"
191
+ autoload_method "intersection", "carray/methods/is_in"
192
+ autoload_method "difference", "carray/methods/is_in"
193
+ autoload_method "union", "carray/methods/is_in"
194
+ autoload_method "self.align_addr", "carray/methods/align_addr"
195
+ autoload_method "self.align_nearest_addr", "carray/methods/align_addr"
196
+ autoload_method "value_counts", "carray/methods/value_counts"
197
+ autoload_method "nunique", "carray/methods/nunique"
198
+ autoload_method "is_mode", "carray/methods/mode"
199
+ autoload_method "mode", "carray/methods/mode"
200
+ autoload_method "snap", "carray/methods/snap"
201
+ autoload_method "snap_to", "carray/methods/snap"
202
+ autoload_method "bin", "carray/methods/bin"
203
+ autoload_method "bin_to", "carray/methods/bin"
204
+ autoload_method "index", "carray/methods/index"
205
+ autoload_method "indices", "carray/methods/index"
206
+ autoload_method "to_bit_string", "carray/methods/bit_string"
207
+ autoload_method "from_bit_string", "carray/methods/bit_string"
208
+ autoload_method "self.from_bit_string", "carray/methods/bit_string"
209
+ autoload_method "pack_bits", "carray/methods/bit_string"
210
+ autoload_method "validity_bits", "carray/methods/bit_string"
211
+ autoload_method "choose", "carray/methods/choose"
212
+ autoload_method "join", "carray/methods/join"
213
+ autoload_method "locate_addr", "carray/methods/locate_addr"
214
+ autoload_method "locate_nearest_addr", "carray/methods/locate_addr"
215
+ autoload_method "resize", "carray/methods/resize"
216
+ autoload_method "insert_block", "carray/methods/insert_block"
217
+ autoload_method "delete_block", "carray/methods/insert_block"
218
+ autoload_method "self.format", "carray/methods/string_format"
219
+ autoload_method "format", "carray/methods/string_format"
220
+ end
@@ -0,0 +1,44 @@
1
+ # Mixin that adds a small `autoload_method` DSL to a class:
2
+ #
3
+ # class Foo
4
+ # extend AutoloadMethodExtension
5
+ # autoload_method "self.bar", "libfoo" # singleton method stub
6
+ # autoload_method "baz", "libfoo" # instance method stub
7
+ # end
8
+ #
9
+ # Each stub requires `library` on first call; after the require, the
10
+ # real definition (which the library must install) replaces the stub
11
+ # and the original call is forwarded.
12
+ #
13
+ # Defined at the top level instead of nested under CArray so companion
14
+ # gems can extend their own classes with the same DSL. Module-wide
15
+ # monkey patching is avoided -- only classes that explicitly `extend
16
+ # AutoloadMethodExtension` gain the method.
17
+
18
+ module AutoloadMethodExtension
19
+ # @!visibility private
20
+ def autoload_method (method, library)
21
+ if method.to_s =~ /\Aself\.(.+)\z/
22
+ name = $1.to_sym
23
+ target = singleton_class
24
+ else
25
+ name = method.to_sym
26
+ target = self
27
+ end
28
+ autoload_define(target, name, library, method)
29
+ end
30
+
31
+ private
32
+
33
+ def autoload_define (target, name, library, original_spec)
34
+ target.send(:define_method, name) do |*args, **kwargs, &block|
35
+ begin
36
+ require library
37
+ rescue LoadError
38
+ raise "error in autoloading '#{library}' hooked by method " \
39
+ "'#{original_spec}', check gem installation."
40
+ end
41
+ send(name, *args, **kwargs, &block)
42
+ end
43
+ end
44
+ end