carray 2.0.1 → 3.0.1

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 (386) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +6 -25
  3. data/CHANGELOG.md +338 -0
  4. data/{NEWS.md → CHANGELOG.v1.md} +3 -0
  5. data/LICENSE +1 -1
  6. data/README.md +120 -36
  7. data/carray.gemspec +32 -30
  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 +1244 -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 +124 -0
  15. data/ext/ca_binop_dispatch.h +152 -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 +239 -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 +4367 -0
  26. data/ext/ca_kernel_iterator.h +2596 -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 +839 -0
  33. data/ext/ca_obj_binop.c +948 -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 +967 -0
  39. data/ext/ca_obj_face.c +750 -0
  40. data/ext/ca_obj_face.h +279 -0
  41. data/ext/ca_obj_fake.c +239 -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 +308 -0
  45. data/ext/ca_obj_grid.c +866 -440
  46. data/ext/ca_obj_meld.c +1039 -0
  47. data/ext/ca_obj_moncmp.c +588 -0
  48. data/ext/ca_obj_monop.c +1123 -0
  49. data/ext/ca_obj_object.c +866 -296
  50. data/ext/ca_obj_record.c +470 -0
  51. data/ext/ca_obj_reduce.c +97 -82
  52. data/ext/ca_obj_refer.c +593 -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 +624 -0
  56. data/ext/ca_obj_select.c +344 -296
  57. data/ext/ca_obj_select_axis.c +1306 -0
  58. data/ext/ca_obj_shift.c +231 -793
  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 +2584 -0
  62. data/ext/ca_obj_string.c +270 -0
  63. data/ext/ca_obj_tile.c +622 -0
  64. data/ext/ca_obj_time.c +548 -0
  65. data/ext/ca_obj_timedelta.c +437 -0
  66. data/ext/ca_obj_transpose.c +62 -516
  67. data/ext/ca_obj_triop.c +785 -0
  68. data/ext/ca_obj_window.c +1202 -565
  69. data/ext/ca_op_byte_swap.c +175 -0
  70. data/ext/ca_op_cmplx64.h +123 -0
  71. data/ext/ca_op_ipower.c +316 -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 +473 -0
  75. data/ext/ca_sweep_engine.h +166 -0
  76. data/ext/ca_transform_common.c +235 -0
  77. data/ext/ca_triop_dispatch.c +55 -0
  78. data/ext/ca_triop_dispatch.h +62 -0
  79. data/ext/carray.h +810 -420
  80. data/ext/carray_access.c +873 -731
  81. data/ext/carray_attribute.c +98 -329
  82. data/ext/carray_bincount.c +255 -0
  83. data/ext/carray_broadcast.c +376 -0
  84. data/ext/carray_build_flags.h +3 -0
  85. data/ext/carray_call_cfunc.c +2897 -874
  86. data/ext/carray_call_cfunc.h +313 -0
  87. data/ext/carray_cast.c +1264 -315
  88. data/ext/carray_cast_func.rb +81 -40
  89. data/ext/carray_class.c +53 -63
  90. data/ext/carray_config.h +28 -0
  91. data/ext/carray_conversion.c +350 -346
  92. data/ext/carray_copy.c +168 -270
  93. data/ext/carray_core.c +1396 -206
  94. data/ext/carray_count.c +312 -0
  95. data/ext/carray_data_type.c +43 -19
  96. data/ext/carray_element.c +585 -213
  97. data/ext/carray_factorize.c +2542 -0
  98. data/ext/carray_generate.c +230 -559
  99. data/ext/carray_histogram.c +490 -0
  100. data/ext/carray_hold.c +228 -0
  101. data/ext/carray_index_classifier.c +1021 -0
  102. data/ext/carray_index_classifier.h +27 -0
  103. data/ext/carray_internal.h +136 -0
  104. data/ext/carray_kernels_bincmp.c +4446 -0
  105. data/ext/carray_kernels_binop.c +11001 -0
  106. data/ext/carray_kernels_init.c +1131 -0
  107. data/ext/carray_kernels_map.c +3467 -0
  108. data/ext/carray_kernels_moncmp.c +2097 -0
  109. data/ext/carray_kernels_monop.c +18313 -0
  110. data/ext/carray_kernels_reduce_aggregate.c +25837 -0
  111. data/ext/carray_kernels_reduce_boolean.c +330 -0
  112. data/ext/carray_kernels_reduce_cumulative.c +14593 -0
  113. data/ext/carray_kernels_reduce_extreme.c +16948 -0
  114. data/ext/carray_kernels_reduce_variance.c +3910 -0
  115. data/ext/carray_kernels_scan.c +3693 -0
  116. data/ext/carray_kernels_search.c +32138 -0
  117. data/ext/carray_kernels_sort.c +10626 -0
  118. data/ext/carray_kernels_triop.c +1392 -0
  119. data/ext/carray_lazy.c +737 -0
  120. data/ext/carray_loop.c +88 -200
  121. data/ext/carray_mask.c +853 -158
  122. data/ext/carray_math_kernel.h +120 -0
  123. data/ext/carray_mathfunc.c +10 -241
  124. data/ext/carray_median_percentile.c +1257 -0
  125. data/ext/carray_memory_view.c +1650 -0
  126. data/ext/carray_operator.c +1525 -320
  127. data/ext/carray_order.c +664 -1394
  128. data/ext/carray_partition.c +416 -0
  129. data/ext/carray_random.c +518 -0
  130. data/ext/carray_scatter.c +357 -0
  131. data/ext/carray_slab.c +1219 -0
  132. data/ext/carray_slab.h +84 -0
  133. data/ext/carray_sort.c +829 -0
  134. data/ext/carray_sort_kernel.c +620 -0
  135. data/ext/carray_struct.c +695 -0
  136. data/ext/carray_test.c +343 -229
  137. data/ext/carray_undef.c +34 -17
  138. data/ext/carray_utils.c +175 -74
  139. data/ext/extconf.rb +234 -55
  140. data/ext/mk_call_cfunc.rb +671 -0
  141. data/ext/mkkernel.rb +9096 -0
  142. data/ext/ruby_carray.c +211 -108
  143. data/ext/version.h +4 -14
  144. data/ext/version.rb +5 -13
  145. data/lib/carray/arrow_tensor.rb +401 -0
  146. data/lib/carray/attribute.rb +166 -0
  147. data/lib/carray/autoload_carray.rb +239 -0
  148. data/lib/carray/autoload_method_extension.rb +45 -0
  149. data/lib/carray/axis_group.rb +711 -0
  150. data/lib/carray/basics.rb +481 -0
  151. data/lib/carray/bincount_nd.rb +358 -0
  152. data/lib/carray/block_iterator.rb +614 -0
  153. data/lib/carray/boolean_reduce.rb +109 -0
  154. data/lib/carray/categorical.rb +561 -0
  155. data/lib/carray/categorical_iterator.rb +1084 -0
  156. data/lib/carray/complex.rb +150 -0
  157. data/lib/carray/conditional.rb +216 -0
  158. data/lib/carray/const_string.rb +228 -0
  159. data/lib/carray/construct.rb +160 -328
  160. data/lib/carray/core_extensions.rb +297 -0
  161. data/lib/carray/data_type_extension.rb +250 -0
  162. data/lib/carray/fixlen_string.rb +95 -0
  163. data/lib/carray/frame/concat.rb +132 -0
  164. data/lib/carray/frame/convert.rb +95 -0
  165. data/lib/carray/frame/csv_parser.rb +211 -0
  166. data/lib/carray/frame/frame.rb +642 -0
  167. data/lib/carray/frame/group.rb +186 -0
  168. data/lib/carray/frame/io.rb +321 -0
  169. data/lib/carray/frame/join.rb +248 -0
  170. data/lib/carray/frame/records.rb +99 -0
  171. data/lib/carray/frame/sort.rb +113 -0
  172. data/lib/carray/frame/verbs.rb +316 -0
  173. data/lib/carray/frame.rb +16 -0
  174. data/lib/carray/fuse_source.rb +123 -0
  175. data/lib/carray/fusion.rb +218 -0
  176. data/lib/carray/histogram.rb +512 -0
  177. data/lib/carray/inspect.rb +37 -26
  178. data/lib/carray/iterator.rb +58 -349
  179. data/lib/carray/lazy.rb +941 -0
  180. data/lib/carray/mask_gap_fill.rb +200 -0
  181. data/lib/carray/math.rb +78 -342
  182. data/lib/carray/meld_reduce.rb +289 -0
  183. data/lib/carray/methods/align_addr.rb +116 -0
  184. data/lib/carray/methods/bin.rb +128 -0
  185. data/lib/carray/methods/bincount.rb +87 -0
  186. data/lib/carray/methods/bit_string.rb +92 -0
  187. data/lib/carray/methods/broadcast.rb +63 -0
  188. data/lib/carray/methods/choose.rb +39 -0
  189. data/lib/carray/methods/composition.rb +280 -0
  190. data/lib/carray/methods/gather_nd.rb +206 -0
  191. data/lib/carray/methods/index.rb +39 -0
  192. data/lib/carray/methods/insert_block.rb +99 -0
  193. data/lib/carray/methods/is_in.rb +141 -0
  194. data/lib/carray/methods/join.rb +90 -0
  195. data/lib/carray/methods/locate_addr.rb +52 -0
  196. data/lib/carray/methods/mask_duplicates.rb +41 -0
  197. data/lib/carray/methods/meshgrid.rb +90 -0
  198. data/lib/carray/methods/mode.rb +126 -0
  199. data/lib/carray/methods/nunique.rb +46 -0
  200. data/lib/carray/methods/resize.rb +56 -0
  201. data/lib/carray/methods/snap.rb +161 -0
  202. data/lib/carray/methods/string_format.rb +57 -0
  203. data/lib/carray/methods/unique.rb +47 -0
  204. data/lib/carray/methods/value_counts.rb +71 -0
  205. data/lib/carray/mkmf.rb +124 -101
  206. data/lib/carray/runtime.rb +89 -0
  207. data/lib/carray/serialize.rb +478 -167
  208. data/lib/carray/slab_iterator.rb +305 -0
  209. data/lib/carray/stack.rb +291 -0
  210. data/lib/carray/string.rb +56 -180
  211. data/lib/carray/string_operation_extension.rb +289 -0
  212. data/lib/carray/struct.rb +335 -323
  213. data/lib/carray/struct_builder.rb +697 -0
  214. data/lib/carray/table.rb +41 -2
  215. data/lib/carray/time.rb +2654 -38
  216. data/lib/carray/window_iterator.rb +927 -0
  217. data/lib/carray.rb +55 -57
  218. data/yard-stubs/ca_obj_array.rb +385 -0
  219. data/yard-stubs/ca_obj_bitarray.rb +38 -0
  220. data/yard-stubs/ca_obj_bitfield.rb +43 -0
  221. data/yard-stubs/ca_obj_block.rb +73 -0
  222. data/yard-stubs/ca_obj_byte_swap.rb +56 -0
  223. data/yard-stubs/ca_obj_fake.rb +31 -0
  224. data/yard-stubs/ca_obj_farray.rb +32 -0
  225. data/yard-stubs/ca_obj_field.rb +45 -0
  226. data/yard-stubs/ca_obj_grid.rb +35 -0
  227. data/yard-stubs/ca_obj_refer.rb +72 -0
  228. data/yard-stubs/ca_obj_roll.rb +45 -0
  229. data/yard-stubs/ca_obj_shift.rb +43 -0
  230. data/yard-stubs/ca_obj_stride.rb +181 -0
  231. data/yard-stubs/ca_obj_tile.rb +29 -0
  232. data/yard-stubs/ca_obj_transpose.rb +40 -0
  233. data/yard-stubs/ca_obj_window.rb +49 -0
  234. data/yard-stubs/carray_access.rb +131 -0
  235. data/yard-stubs/carray_attribute.rb +246 -0
  236. data/yard-stubs/carray_broadcast.rb +37 -0
  237. data/yard-stubs/carray_cast.rb +489 -0
  238. data/yard-stubs/carray_class.rb +65 -0
  239. data/yard-stubs/carray_conversion.rb +76 -0
  240. data/yard-stubs/carray_copy.rb +79 -0
  241. data/yard-stubs/carray_core.rb +114 -0
  242. data/yard-stubs/carray_count.rb +79 -0
  243. data/yard-stubs/carray_element.rb +108 -0
  244. data/yard-stubs/carray_generate.rb +66 -0
  245. data/yard-stubs/carray_lazy.rb +23 -0
  246. data/yard-stubs/carray_loop.rb +140 -0
  247. data/yard-stubs/carray_mask.rb +259 -0
  248. data/yard-stubs/carray_math.rb +132 -0
  249. data/yard-stubs/carray_mathfunc.rb +45 -0
  250. data/yard-stubs/carray_median_percentile.rb +89 -0
  251. data/yard-stubs/carray_memory_view.rb +163 -0
  252. data/yard-stubs/carray_order.rb +312 -0
  253. data/yard-stubs/carray_random.rb +89 -0
  254. data/yard-stubs/carray_scatter.rb +106 -0
  255. data/yard-stubs/carray_slab.rb +57 -0
  256. data/yard-stubs/carray_sort.rb +163 -0
  257. data/yard-stubs/carray_test.rb +85 -0
  258. data/yard-stubs/carray_undef.rb +64 -0
  259. data/yard-stubs/carray_utils.rb +97 -0
  260. data/yard-stubs/ruby_carray.rb +193 -0
  261. metadata +220 -138
  262. data/Rakefile +0 -51
  263. data/TODO.md +0 -18
  264. data/ext/ca_iter_block.c +0 -257
  265. data/ext/ca_iter_dimension.c +0 -299
  266. data/ext/ca_iter_window.c +0 -214
  267. data/ext/ca_obj_mapping.c +0 -644
  268. data/ext/ca_obj_unbound_repeat.c +0 -529
  269. data/ext/carray_iterator.c +0 -641
  270. data/ext/carray_math.rb +0 -850
  271. data/ext/carray_numeric.c +0 -259
  272. data/ext/carray_sort_addr.c +0 -254
  273. data/ext/carray_stat.c +0 -2100
  274. data/ext/carray_stat_proc.rb +0 -1999
  275. data/ext/mkmath.rb +0 -741
  276. data/ext/ruby_ccomplex.c +0 -509
  277. data/ext/ruby_float_func.c +0 -86
  278. data/lib/carray/array.rb +0 -8
  279. data/lib/carray/autoload/autoload_base.rb +0 -19
  280. data/lib/carray/autoload/autoload_gem_cairo.rb +0 -9
  281. data/lib/carray/autoload/autoload_gem_ffi.rb +0 -9
  282. data/lib/carray/autoload/autoload_gem_gnuplot.rb +0 -2
  283. data/lib/carray/autoload/autoload_gem_io_csv.rb +0 -14
  284. data/lib/carray/autoload/autoload_gem_io_pg.rb +0 -6
  285. data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +0 -12
  286. data/lib/carray/autoload/autoload_gem_narray.rb +0 -10
  287. data/lib/carray/autoload/autoload_gem_numo_narray.rb +0 -15
  288. data/lib/carray/autoload/autoload_gem_opencv.rb +0 -16
  289. data/lib/carray/autoload/autoload_gem_random.rb +0 -8
  290. data/lib/carray/autoload/autoload_gem_rmagick.rb +0 -23
  291. data/lib/carray/autoload/autoload_gem_zimg.rb +0 -3
  292. data/lib/carray/autoload/autoload_io_imagemagick.rb +0 -6
  293. data/lib/carray/autoload/autoload_math_histogram.rb +0 -5
  294. data/lib/carray/autoload/autoload_math_recurrence.rb +0 -6
  295. data/lib/carray/autoload/autoload_object_iterator.rb +0 -1
  296. data/lib/carray/autoload/autoload_object_link.rb +0 -1
  297. data/lib/carray/autoload/autoload_object_pack.rb +0 -2
  298. data/lib/carray/autoload.rb +0 -141
  299. data/lib/carray/basic.rb +0 -191
  300. data/lib/carray/broadcast.rb +0 -101
  301. data/lib/carray/compose.rb +0 -315
  302. data/lib/carray/convert.rb +0 -115
  303. data/lib/carray/info.rb +0 -110
  304. data/lib/carray/io/imagemagick.rb +0 -235
  305. data/lib/carray/mask.rb +0 -102
  306. data/lib/carray/math/histogram.rb +0 -177
  307. data/lib/carray/math/recurrence.rb +0 -93
  308. data/lib/carray/object/ca_obj_iterator.rb +0 -50
  309. data/lib/carray/object/ca_obj_link.rb +0 -50
  310. data/lib/carray/object/ca_obj_pack.rb +0 -99
  311. data/lib/carray/obsolete.rb +0 -256
  312. data/lib/carray/ordering.rb +0 -181
  313. data/lib/carray/testing.rb +0 -51
  314. data/lib/carray/transform.rb +0 -109
  315. data/mailmap +0 -1
  316. data/misc/Methods.ja.md +0 -182
  317. data/misc/NOTE +0 -51
  318. data/spec/Classes/CABitfield_spec.rb +0 -58
  319. data/spec/Classes/CABlockIterator_spec.rb +0 -114
  320. data/spec/Classes/CABlock_spec.rb +0 -205
  321. data/spec/Classes/CAField_spec.rb +0 -39
  322. data/spec/Classes/CAGrid_spec.rb +0 -75
  323. data/spec/Classes/CAMap_spec.rb +0 -0
  324. data/spec/Classes/CAMapping_spec.rb +0 -105
  325. data/spec/Classes/CAObject_attribute_spec.rb +0 -33
  326. data/spec/Classes/CAObject_spec.rb +0 -33
  327. data/spec/Classes/CARefer_spec.rb +0 -93
  328. data/spec/Classes/CARepeat_spec.rb +0 -65
  329. data/spec/Classes/CASelect_spec.rb +0 -22
  330. data/spec/Classes/CAShift_spec.rb +0 -16
  331. data/spec/Classes/CAStruct_spec.rb +0 -71
  332. data/spec/Classes/CATranspose_spec.rb +0 -60
  333. data/spec/Classes/CAUnboudRepeat_spec.rb +0 -102
  334. data/spec/Classes/CAWindow_spec.rb +0 -54
  335. data/spec/Classes/CAWrap_spec.rb +0 -8
  336. data/spec/Classes/CArray_spec.rb +0 -184
  337. data/spec/Classes/CScalar_spec.rb +0 -55
  338. data/spec/Features/feature_130_spec.rb +0 -19
  339. data/spec/Features/feature_attributes_spec.rb +0 -280
  340. data/spec/Features/feature_boolean_spec.rb +0 -98
  341. data/spec/Features/feature_broadcast.rb +0 -116
  342. data/spec/Features/feature_cast_function.rb +0 -19
  343. data/spec/Features/feature_cast_spec.rb +0 -33
  344. data/spec/Features/feature_class_spec.rb +0 -84
  345. data/spec/Features/feature_complex_spec.rb +0 -42
  346. data/spec/Features/feature_composite_spec.rb +0 -124
  347. data/spec/Features/feature_convert_spec.rb +0 -46
  348. data/spec/Features/feature_copy_spec.rb +0 -123
  349. data/spec/Features/feature_creation_spec.rb +0 -84
  350. data/spec/Features/feature_element_spec.rb +0 -144
  351. data/spec/Features/feature_extream_spec.rb +0 -54
  352. data/spec/Features/feature_generate_spec.rb +0 -74
  353. data/spec/Features/feature_index_spec.rb +0 -69
  354. data/spec/Features/feature_mask_spec.rb +0 -580
  355. data/spec/Features/feature_math_spec.rb +0 -97
  356. data/spec/Features/feature_order_spec.rb +0 -146
  357. data/spec/Features/feature_ref_store_spec.rb +0 -209
  358. data/spec/Features/feature_serialization_spec.rb +0 -125
  359. data/spec/Features/feature_stat_spec.rb +0 -397
  360. data/spec/Features/feature_virtual_spec.rb +0 -48
  361. data/spec/Features/method_eq_spec.rb +0 -81
  362. data/spec/Features/method_is_nan_spec.rb +0 -12
  363. data/spec/Features/method_map_spec.rb +0 -54
  364. data/spec/Features/method_max_with.rb +0 -20
  365. data/spec/Features/method_min_with.rb +0 -19
  366. data/spec/Features/method_ne_spec.rb +0 -18
  367. data/spec/Features/method_project_spec.rb +0 -188
  368. data/spec/Features/method_ref_spec.rb +0 -27
  369. data/spec/Features/method_round_spec.rb +0 -11
  370. data/spec/Features/method_s_linspace_spec.rb +0 -48
  371. data/spec/Features/method_s_span_spec.rb +0 -14
  372. data/spec/Features/method_seq_spec.rb +0 -47
  373. data/spec/Features/method_sort_with.rb +0 -43
  374. data/spec/Features/method_sorted_with.rb +0 -29
  375. data/spec/Features/method_span_spec.rb +0 -42
  376. data/spec/Features/method_wrap_readonly_spec.rb +0 -43
  377. data/spec/UnitTest/test_CAVirtual.rb +0 -214
  378. data/spec/spec_all.rb +0 -10
  379. data/utils/ca_ase.rb +0 -21
  380. data/utils/ca_methods.rb +0 -15
  381. data/utils/cast_checker.rb +0 -30
  382. data/utils/convert_test.rb +0 -73
  383. data/utils/extract_yard.rb +0 -22
  384. data/utils/guess_shape.rb +0 -76
  385. data/utils/monkey_patch_methods.rb +0 -62
  386. data/utils/remove_resource_fork.sh +0 -5
data/ext/ruby_carray.c CHANGED
@@ -1,27 +1,33 @@
1
1
  /* ---------------------------------------------------------------------------
2
2
 
3
- ruby_carray.c
3
+ Single entry point Init_carray_ext: declares the CArray class
4
+ hierarchy + exception class + CA module, populates top-level
5
+ constants (CA_RANK_MAX / CA_* data_type Symbols / alignment
6
+ values), then drives the per-module Init_* sequence in load order.
4
7
 
5
- This file is part of Ruby/CArray extension library.
6
-
7
- Copyright (C) 2005-2025 Hiroki Motoyoshi
8
+ CAREFUL: the Init_* call order below carries real ordering
9
+ invariants in several places (e.g. CAStride before its subclasses,
10
+ ca_op_ipower before mask_fast_paths, ca_face before its concrete
11
+ Faces, lazy before monop). Each load-bearing edge is annotated at
12
+ the callsite; do not reorder without reading those notes.
8
13
 
9
14
  ---------------------------------------------------------------------------- */
10
15
 
11
16
  #include "carray.h"
17
+ #include "carray_build_flags.h"
12
18
  #include "version.h"
13
19
 
14
20
  #ifdef HAVE_RB_ARITHMETIC_SEQUENCE_EXTRACT
15
21
  VALUE rb_cArithSeq;
16
22
  #endif
23
+
24
+ /* Form-only base of the 3.0 iterator family (defined in Init_carray_ext). */
25
+ VALUE rb_cCAIterator;
17
26
 
18
27
  VALUE rb_eCADataTypeError;
19
28
  VALUE rb_mCA;
20
29
 
21
- VALUE CA_NIL;
22
-
23
- void Init_ccomplex ();
24
- void Init_numeric_float_function ();
30
+ VALUE CA_UNSPECIFIED;
25
31
 
26
32
  void Init_carray_core ();
27
33
  void Init_carray_undef ();
@@ -31,51 +37,92 @@ void Init_carray_test ();
31
37
  void Init_carray_attribute ();
32
38
  void Init_carray_loop ();
33
39
  void Init_carray_mask ();
40
+ void Init_carray_hold ();
41
+ void Init_carray_mask_fast_paths (); /* patches generated bit-op tables;
42
+ must run AFTER Init_ca_op_ipower */
34
43
  void Init_carray_access ();
44
+ void Init_carray_index_classifier ();
35
45
  void Init_carray_element ();
36
- void Init_carray_iterator ();
46
+ void Init_carray_scatter (); /* scatter_*! family */
47
+ void Init_ca_axis_group (); /* devel/MEMO_AXIS_GROUP.md — axis-group reduction kernel */
48
+ void Init_ca_group_iter (); /* devel/MEMO_AXIS_GROUP.md — axis-group [] surface */
49
+ void Init_carray_bincount (); /* bincount dedicated kernel */
50
+ void Init_carray_factorize (); /* single-pass integer factorization for categorize */
51
+ void Init_carray_histogram (); /* histogram + histbin_ki */
52
+ void Init_ca_categorical_iterator (); /* CACategoricalIterator counting-sort scatter */
37
53
  void Init_carray_operator ();
38
- void Init_carray_numeric ();
39
- void Init_carray_math ();
54
+ void Init_ca_op_ipower ();
40
55
  void Init_carray_utils ();
41
56
  void Init_carray_order ();
42
- void Init_carray_sort_addr ();
43
- void Init_carray_stat ();
44
- void Init_carray_stat_proc ();
57
+ void Init_carray_partition (); /* partition / partition_copy */
58
+ void Init_carray_median_percentile (); /* median / percentile / quantile */
59
+ void Init_carray_sort (); /* sort / sort_copy / sort_addr / axis2addr */
60
+ void Init_carray_count ();
61
+ void Init_carray_kernels (); /* mkkernel-generated: reductions + maps */
45
62
  void Init_carray_utils ();
46
63
  void Init_carray_generate ();
47
64
  void Init_carray_copy ();
48
65
  void Init_carray_conversion ();
49
66
  void Init_carray_cast ();
67
+ void Init_carray_broadcast ();
50
68
 
51
69
  void Init_ca_obj_array ();
52
70
  void Init_ca_obj_refer ();
53
71
  void Init_ca_obj_farray ();
54
72
  void Init_ca_obj_block ();
55
73
  void Init_ca_obj_select ();
74
+ void Init_ca_obj_select_axis ();
56
75
  void Init_ca_obj_object ();
57
76
  void Init_ca_obj_grid ();
58
77
  void Init_ca_obj_window ();
59
78
  void Init_ca_obj_shift ();
79
+ void Init_ca_obj_tile ();
80
+ void Init_ca_obj_roll ();
81
+ void Init_ca_obj_stack (); /* multi-parent outer-axis stack */
82
+ void Init_ca_obj_meld (); /* multi-parent ragged concat along existing axis */
60
83
  void Init_ca_obj_transpose ();
61
- void Init_ca_obj_mapping ();
62
84
  void Init_ca_obj_repeat ();
63
- void Init_ca_obj_unbound_repeat ();
64
85
  void Init_ca_obj_reduce ();
65
86
  void Init_ca_obj_field ();
66
87
  void Init_ca_obj_fake ();
88
+ void Init_ca_obj_byte_swap ();
89
+ void Init_ca_face (); /* CAFace abstract base; must precede CATime / CATimedelta / CARecord / CAConstString */
90
+ void Init_ca_source (); /* CASource abstract base; concrete sources live in C extensions */
91
+ void Init_ca_obj_time (); /* first numeric Face */
92
+ void Init_ca_obj_timedelta (); /* CATime sibling */
93
+ void Init_ca_obj_record (); /* composite Face for CAStruct backing */
94
+ void Init_ca_obj_const_string ();/* read-only variable-length string Face */
95
+ void Init_ca_obj_string (); /* mutable string Face over CA_OBJECT storage */
96
+ void Init_ca_obj_fixlen_string ();/* string Face over CA_FIXLEN storage */
67
97
  void Init_ca_obj_bitarray ();
68
98
  void Init_ca_obj_bitfield ();
69
-
70
- void Init_carray_iterator ();
71
- void Init_ca_iter_dimension ();
72
- void Init_ca_iter_block ();
73
- void Init_ca_iter_window ();
99
+ void Init_ca_obj_stride ();
100
+ void Init_ca_obj_remap (); /* internal-only (no Ruby surface) */
101
+ void Init_carray_lazy (); /* CALazyMarker; must precede Init_ca_obj_monop / _binop / _moncmp / _bincmp */
102
+ void Init_ca_obj_monop (); /* CAMonOp + lazy elementwise monadic dispatch */
103
+ void Init_ca_obj_binop (); /* CABinOp + lazy elementwise binary dispatch */
104
+ void Init_ca_obj_triop (); /* CATriOp + lazy elementwise triadic dispatch */
105
+ void Init_ca_obj_bincmp (); /* CABinCmp + lazy elementwise comparison dispatch */
106
+ void Init_ca_obj_moncmp (); /* CAMonCmp + lazy elementwise predicate dispatch */
107
+
108
+ /* Init_carray_iterator retired; CAIterator is a form-only base defined inline
109
+ in Init_carray_ext (accessors in lib/carray/iterator.rb). The 2.0 C engines
110
+ (dimension / window / block iterators) were retired in 3.0. */
74
111
 
75
112
  void Init_carray_mathfunc ();
76
113
 
114
+ void Init_carray_memory_view ();
115
+
116
+ void Init_carray_struct ();
117
+
118
+ void Init_carray_random ();
119
+
120
+ void Init_ca_kernel_iterator ();
121
+
122
+ void Init_carray_slab ();
123
+
77
124
  void
78
- Init_carray_ext ()
125
+ Init_carray_ext (void)
79
126
  {
80
127
 
81
128
  #ifdef HAVE_RB_EXT_RACTOR_SAFE
@@ -93,68 +140,57 @@ Init_carray_ext ()
93
140
  rb_cCArray = rb_define_class("CArray", rb_cObject);
94
141
  rb_cCAWrap = rb_define_class("CAWrap", rb_cCArray);
95
142
  rb_cCScalar = rb_define_class("CScalar", rb_cCArray);
96
- rb_cCAVirtual = rb_define_class("CAVirtual", rb_cCArray);
97
- rb_cCARefer = rb_define_class("CARefer", rb_cCAVirtual);
98
- rb_cCABlock = rb_define_class("CABlock", rb_cCAVirtual);
99
- rb_cCASelect = rb_define_class("CASelect", rb_cCAVirtual);
100
- rb_cCAObject = rb_define_class("CAObject", rb_cCAVirtual);
101
- rb_cCARepeat = rb_define_class("CARepeat", rb_cCAVirtual);
102
- rb_cCAUnboundRepeat = rb_define_class("CAUnboundRepeat", rb_cCAVirtual);
103
-
143
+ rb_cCAView = rb_define_class("CAView", rb_cCArray);
144
+ /* CAREFUL: CAStride must exist before its subclasses (CARefer /
145
+ CABlock / CAField / CARepeat / CATranspose /
146
+ CAFarray) are defined or registered. See devel/CAStride.md. */
147
+ rb_cCAStride = rb_define_class("CAStride", rb_cCAView);
148
+ rb_cCARefer = rb_define_class("CARefer", rb_cCAStride);
149
+ rb_cCABlock = rb_define_class("CABlock", rb_cCAStride);
150
+ rb_cCAField = rb_define_class("CAField", rb_cCAStride);
151
+ rb_cCASelect = rb_define_class("CASelect", rb_cCAView);
152
+ rb_cCAObject = rb_define_class("CAObject", rb_cCAView);
153
+ rb_cCARepeat = rb_define_class("CARepeat", rb_cCAStride);
104
154
  rb_cCArrayMask = rb_define_class("CArrayMask", rb_cCArray);
155
+ rb_cCAStrideMask = rb_define_class("CAStrideMask", rb_cCAStride);
105
156
  rb_cCAReferMask = rb_define_class("CAReferMask", rb_cCARefer);
106
157
  rb_cCABlockMask = rb_define_class("CABlockMask", rb_cCABlock);
158
+ rb_cCAFieldMask = rb_define_class("CAFieldMask", rb_cCAField);
107
159
  rb_cCASelectMask = rb_define_class("CASelectMask", rb_cCASelect);
108
160
  rb_cCARepeatMask = rb_define_class("CARepeatMask", rb_cCARepeat);
109
- rb_cCAUnboundRepeatMask = rb_define_class("CAUnboundRepeatMask", rb_cCAUnboundRepeat);
110
161
 
111
162
  /* -- Exception class -- */
112
163
 
113
164
  rb_eCADataTypeError =
114
165
  rb_define_class_under(rb_cCArray, "DataTypeError", rb_eStandardError);
115
166
 
116
- /* yard:
117
- class CArray::DataTypeError # :nodoc:
118
- end
119
- */
120
-
121
- /* -- CA module -- */
122
- /* a namespace for misc utilities related with CArray */
167
+ /* -- CA module -- namespace for misc utilities related to CArray */
123
168
 
124
169
  rb_mCA = rb_define_module("CA");
125
170
 
126
- /* CArray constants */
127
-
128
171
  /* -- version -- */
129
172
 
130
- /* yard:
131
- class CArray
132
- VERSION = nil # :nodoc:
133
- VERSION_CODE = nil # :nodoc:
134
- VERSION_MAJOR = nil # :nodoc:
135
- VERSION_MINOR = nil # :nodoc:
136
- VERSION_TEENY = nil # :nodoc:
137
- VERSION_DATE = nil # :nodoc:
138
- end
139
- */
140
-
141
- /* @private */
142
- rb_define_const(rb_cCArray, "VERSION", rb_str_new2(CA_VERSION));
143
- /* @private */
144
- rb_define_const(rb_cCArray, "VERSION_CODE", INT2NUM(CA_VERSION_CODE));
145
- /* @private */
173
+ /* The flags this build's arithmetic was compiled with. Anything that
174
+ computes what these kernels compute, somewhere other than in them, has
175
+ to be built the same way to arrive at the same answer. */
176
+ rb_define_const(rb_cCArray, "BUILD_FLAGS", rb_str_new2(CA_BUILD_FLAGS));
177
+ rb_define_const(rb_cCArray, "VERSION", rb_str_new2(CA_VERSION));
178
+ rb_define_const(rb_cCArray, "VERSION_CODE", INT2NUM(CA_VERSION_CODE));
146
179
  rb_define_const(rb_cCArray, "VERSION_MAJOR", INT2NUM(CA_VERSION_MAJOR));
147
- /* @private */
148
180
  rb_define_const(rb_cCArray, "VERSION_MINOR", INT2NUM(CA_VERSION_MINOR));
149
- /* @private */
150
181
  rb_define_const(rb_cCArray, "VERSION_TEENY", INT2NUM(CA_VERSION_TEENY));
151
- /* @private */
152
- rb_define_const(rb_cCArray, "VERSION_DATE", rb_str_new2(CA_VERSION_DATE));
182
+ rb_define_const(rb_cCArray, "VERSION_DATE", rb_str_new2(CA_VERSION_DATE));
153
183
 
154
184
  /* -- system -- */
155
185
  rb_define_const(rb_cObject, "CA_RANK_MAX", INT2NUM(CA_RANK_MAX));
156
- CA_NIL = rb_funcall(rb_cObject, rb_intern("new"), 0);
157
- rb_define_const(rb_cObject, "CA_NIL", CA_NIL);
186
+ /* Sentinel meaning "the caller did not give this argument". It is
187
+ distinct from nil because nil is itself a legal fill value (a
188
+ CA_OBJECT array can be filled with nil), so nil cannot mark
189
+ absence. C code only ever compares against it; the value is never
190
+ read and must never be passed in from Ruby. The constant exists to
191
+ anchor the object against the GC. */
192
+ CA_UNSPECIFIED = rb_funcall(rb_cObject, rb_intern("new"), 0);
193
+ rb_define_const(rb_cCArray, "UNSPECIFIED", CA_UNSPECIFIED);
158
194
 
159
195
  #ifdef HAVE_COMPLEX_H
160
196
  /* @private */
@@ -166,32 +202,53 @@ Init_carray_ext ()
166
202
 
167
203
  /* -- data types -- */
168
204
 
169
- rb_define_const(rb_cObject, "CA_FIXLEN", INT2NUM(CA_FIXLEN));
170
- rb_define_const(rb_cObject, "CA_BOOLEAN", INT2NUM(CA_BOOLEAN));
171
- rb_define_const(rb_cObject, "CA_INT8", INT2NUM(CA_INT8));
172
- rb_define_const(rb_cObject, "CA_UINT8", INT2NUM(CA_UINT8));
173
- rb_define_const(rb_cObject, "CA_INT16", INT2NUM(CA_INT16));
174
- rb_define_const(rb_cObject, "CA_UINT16", INT2NUM(CA_UINT16));
175
- rb_define_const(rb_cObject, "CA_INT32", INT2NUM(CA_INT32));
176
- rb_define_const(rb_cObject, "CA_UINT32", INT2NUM(CA_UINT32));
177
- rb_define_const(rb_cObject, "CA_INT64", INT2NUM(CA_INT64));
178
- rb_define_const(rb_cObject, "CA_UINT64", INT2NUM(CA_UINT64));
179
- rb_define_const(rb_cObject, "CA_FLOAT32", INT2NUM(CA_FLOAT32));
180
- rb_define_const(rb_cObject, "CA_FLOAT64", INT2NUM(CA_FLOAT64));
181
- rb_define_const(rb_cObject, "CA_FLOAT128", INT2NUM(CA_FLOAT128));
182
- rb_define_const(rb_cObject, "CA_CMPLX64", INT2NUM(CA_CMPLX64));
183
- rb_define_const(rb_cObject, "CA_CMPLX128", INT2NUM(CA_CMPLX128));
184
- rb_define_const(rb_cObject, "CA_CMPLX256", INT2NUM(CA_CMPLX256));
185
- rb_define_const(rb_cObject, "CA_OBJECT", INT2NUM(CA_OBJECT));
186
-
187
- rb_define_const(rb_cObject, "CA_BYTE", INT2NUM(CA_BYTE));
188
- rb_define_const(rb_cObject, "CA_SHORT", INT2NUM(CA_INT16));
189
- rb_define_const(rb_cObject, "CA_INT", INT2NUM(CA_INT32));
190
- rb_define_const(rb_cObject, "CA_FLOAT", INT2NUM(CA_FLOAT));
191
- rb_define_const(rb_cObject, "CA_DOUBLE", INT2NUM(CA_DOUBLE));
192
- rb_define_const(rb_cObject, "CA_COMPLEX", INT2NUM(CA_COMPLEX));
193
- rb_define_const(rb_cObject, "CA_DCOMPLEX", INT2NUM(CA_DCOMPLEX));
194
- rb_define_const(rb_cObject, "CA_SIZE", INT2NUM(CA_SIZE));
205
+ /* CAREFUL: precompute the Symbol ID cache for the ca.data_type
206
+ accessor BEFORE the CA_* data_type constants below are defined —
207
+ they read from ca_data_type_sym[]. */
208
+ {
209
+ int i;
210
+ for ( i = 0; i < CA_NTYPE; i++ ) {
211
+ if ( ca_type_name[i] != NULL ) {
212
+ ca_data_type_sym[i] = rb_intern(ca_type_name[i]);
213
+ }
214
+ else {
215
+ ca_data_type_sym[i] = rb_intern("");
216
+ }
217
+ }
218
+ }
219
+
220
+ /* The Ruby-surface CA_* data_type constants are Symbols (the C
221
+ internal `#define CA_INT64 8` etc. is unchanged); both sides flip
222
+ to Symbol together so `case when CA_INT64` over `ca.data_type`
223
+ stays transparent. Alias constants (CA_DOUBLE etc.) share the
224
+ canonical Symbol via Symbol identity, so `CA_DOUBLE ==
225
+ CA_FLOAT64` evaluates true. */
226
+
227
+ rb_define_const(rb_cObject, "CA_FIXLEN", ID2SYM(ca_data_type_sym[CA_FIXLEN]));
228
+ rb_define_const(rb_cObject, "CA_BOOLEAN", ID2SYM(ca_data_type_sym[CA_BOOLEAN]));
229
+ rb_define_const(rb_cObject, "CA_INT8", ID2SYM(ca_data_type_sym[CA_INT8]));
230
+ rb_define_const(rb_cObject, "CA_UINT8", ID2SYM(ca_data_type_sym[CA_UINT8]));
231
+ rb_define_const(rb_cObject, "CA_INT16", ID2SYM(ca_data_type_sym[CA_INT16]));
232
+ rb_define_const(rb_cObject, "CA_UINT16", ID2SYM(ca_data_type_sym[CA_UINT16]));
233
+ rb_define_const(rb_cObject, "CA_INT32", ID2SYM(ca_data_type_sym[CA_INT32]));
234
+ rb_define_const(rb_cObject, "CA_UINT32", ID2SYM(ca_data_type_sym[CA_UINT32]));
235
+ rb_define_const(rb_cObject, "CA_INT64", ID2SYM(ca_data_type_sym[CA_INT64]));
236
+ rb_define_const(rb_cObject, "CA_UINT64", ID2SYM(ca_data_type_sym[CA_UINT64]));
237
+ rb_define_const(rb_cObject, "CA_FLOAT32", ID2SYM(ca_data_type_sym[CA_FLOAT32]));
238
+ rb_define_const(rb_cObject, "CA_FLOAT64", ID2SYM(ca_data_type_sym[CA_FLOAT64]));
239
+ rb_define_const(rb_cObject, "CA_CMPLX64", ID2SYM(ca_data_type_sym[CA_CMPLX64]));
240
+ rb_define_const(rb_cObject, "CA_CMPLX128", ID2SYM(ca_data_type_sym[CA_CMPLX128]));
241
+ rb_define_const(rb_cObject, "CA_OBJECT", ID2SYM(ca_data_type_sym[CA_OBJECT]));
242
+
243
+ /* Aliases share the canonical Symbol: CA_BYTE == CA_UINT8, etc. */
244
+ rb_define_const(rb_cObject, "CA_BYTE", ID2SYM(ca_data_type_sym[CA_BYTE]));
245
+ rb_define_const(rb_cObject, "CA_SHORT", ID2SYM(ca_data_type_sym[CA_INT16]));
246
+ rb_define_const(rb_cObject, "CA_INT", ID2SYM(ca_data_type_sym[CA_INT32]));
247
+ rb_define_const(rb_cObject, "CA_FLOAT", ID2SYM(ca_data_type_sym[CA_FLOAT]));
248
+ rb_define_const(rb_cObject, "CA_DOUBLE", ID2SYM(ca_data_type_sym[CA_DOUBLE]));
249
+ rb_define_const(rb_cObject, "CA_COMPLEX", ID2SYM(ca_data_type_sym[CA_COMPLEX]));
250
+ rb_define_const(rb_cObject, "CA_DCOMPLEX", ID2SYM(ca_data_type_sym[CA_DCOMPLEX]));
251
+ rb_define_const(rb_cObject, "CA_SIZE", ID2SYM(ca_data_type_sym[CA_SIZE]));
195
252
 
196
253
  rb_define_const(rb_cObject, "CA_ALIGN_VOIDP", INT2NUM(CA_ALIGN_VOIDP));
197
254
  rb_define_const(rb_cObject, "CA_ALIGN_FIXLEN", INT2NUM(CA_ALIGN_INT8));
@@ -202,38 +259,44 @@ Init_carray_ext ()
202
259
  rb_define_const(rb_cObject, "CA_ALIGN_INT64", INT2NUM(CA_ALIGN_INT64));
203
260
  rb_define_const(rb_cObject, "CA_ALIGN_FLOAT32", INT2NUM(CA_ALIGN_FLOAT32));
204
261
  rb_define_const(rb_cObject, "CA_ALIGN_FLOAT64", INT2NUM(CA_ALIGN_FLOAT64));
205
- rb_define_const(rb_cObject, "CA_ALIGN_FLOAT128", INT2NUM(CA_ALIGN_FLOAT128));
206
262
  rb_define_const(rb_cObject, "CA_ALIGN_CMPLX64", INT2NUM(CA_ALIGN_CMPLX64));
207
263
  rb_define_const(rb_cObject, "CA_ALIGN_CMPLX128", INT2NUM(CA_ALIGN_CMPLX128));
208
- rb_define_const(rb_cObject, "CA_ALIGN_CMPLX256", INT2NUM(CA_ALIGN_CMPLX256));
209
264
  rb_define_const(rb_cObject, "CA_ALIGN_OBJECT", INT2NUM(CA_ALIGN_OBJECT));
210
265
 
211
266
  /* load modules in external files */
212
267
 
213
268
  Init_carray_core(); /* Init_carray_core should be called first*/
214
269
 
215
- #ifdef HAVE_COMPLEX_H
216
- Init_ccomplex();
217
- #endif
218
-
219
- Init_numeric_float_function();
220
-
221
270
  Init_carray_class();
222
271
  Init_carray_data_type();
223
272
  Init_carray_test();
224
273
  Init_carray_attribute();
225
274
  Init_carray_undef();
226
275
  Init_carray_mask();
276
+ Init_carray_hold();
227
277
  Init_carray_loop();
228
278
  Init_carray_access();
279
+ Init_carray_index_classifier();
229
280
  Init_carray_element();
281
+ Init_carray_scatter();
282
+ Init_ca_axis_group(); /* devel/MEMO_AXIS_GROUP.md — axis-group reduction kernel */
283
+ Init_carray_bincount();
284
+ Init_carray_factorize();
285
+ Init_carray_histogram();
286
+ Init_ca_categorical_iterator();
230
287
  Init_carray_operator();
231
- Init_carray_math(); /* order of math, numeric should not be changed */
232
- Init_carray_numeric(); /* order of math, numeric should not be changed */
288
+ Init_ca_op_ipower(); /* CArray#pow / pow! + ipower fast path.
289
+ CAREFUL: must precede the numeric init
290
+ block that follows. */
291
+ Init_carray_mask_fast_paths(); /* patches bit-op tables for boolean8_t;
292
+ must run AFTER Init_ca_op_ipower
293
+ (which sets up the tables). */
233
294
  Init_carray_order();
234
- Init_carray_sort_addr();
235
- Init_carray_stat();
236
- Init_carray_stat_proc();
295
+ Init_carray_partition(); /* partition / partition_copy */
296
+ Init_carray_median_percentile(); /* needs partition_copy_c from carray_partition */
297
+ Init_carray_sort(); /* sort / sort_copy / sort_addr / axis2addr */
298
+ Init_carray_count();
299
+ Init_carray_kernels(); /* mkkernel-generated: reductions + maps */
237
300
 
238
301
  Init_carray_utils();
239
302
 
@@ -241,34 +304,74 @@ Init_carray_ext ()
241
304
  Init_carray_copy();
242
305
  Init_carray_conversion();
243
306
  Init_carray_cast();
307
+ Init_carray_broadcast();
244
308
 
245
309
  Init_ca_obj_array();
246
310
  Init_ca_obj_refer();
311
+ Init_ca_obj_stride(); /* CAREFUL: must precede CAStride subclasses
312
+ (farray / block / transpose / repeat /
313
+ unbound_repeat / field). */
247
314
  Init_ca_obj_farray();
248
315
  Init_ca_obj_block();
249
316
  Init_ca_obj_select();
317
+ Init_ca_obj_select_axis();
250
318
  Init_ca_obj_object();
251
319
  Init_ca_obj_grid();
252
320
  Init_ca_obj_window();
253
321
  Init_ca_obj_shift();
322
+ Init_ca_obj_tile();
323
+ Init_ca_obj_roll(); /* depends on tile */
324
+ Init_ca_obj_stack();
325
+ Init_ca_obj_meld();
254
326
  Init_ca_obj_transpose();
255
- Init_ca_obj_mapping();
256
327
  Init_ca_obj_repeat();
257
- Init_ca_obj_unbound_repeat();
258
328
  Init_ca_obj_reduce();
259
329
  Init_ca_obj_field();
260
330
  Init_ca_obj_fake();
331
+ Init_ca_obj_byte_swap();
332
+ Init_ca_source(); /* CASource: abstract, no obj_type of its own.
333
+ Concrete sources are registered by C
334
+ extensions via ca_install_obj_type. */
335
+ Init_ca_face(); /* CAREFUL: must precede every concrete Face
336
+ (datetime / timedelta / record /
337
+ const_string). */
338
+ Init_ca_obj_time();
339
+ Init_ca_obj_timedelta();
340
+ Init_ca_obj_record();
341
+ Init_ca_obj_const_string();
342
+ Init_ca_obj_string();
343
+ Init_ca_obj_fixlen_string();
261
344
  Init_ca_obj_bitarray();
262
345
  Init_ca_obj_bitfield();
346
+ Init_ca_obj_remap(); /* internal-only (no Ruby surface) */
347
+ Init_carray_lazy(); /* CALazyMarker; CAREFUL: must precede the
348
+ four lazy elementwise inits below. */
349
+ Init_ca_obj_monop();
350
+ Init_ca_obj_binop();
351
+ Init_ca_obj_triop();
352
+ Init_ca_obj_bincmp();
353
+ Init_ca_obj_moncmp();
354
+
355
+ /* CAIterator is the form-only base of the 3.0 iterator family; its shared
356
+ accessors are plain Ruby attr_readers (lib/carray/iterator.rb). The C
357
+ reduction iterators subclass it and carray_access.c constructs
358
+ CASlabIterator by name, so the class object must exist here. */
359
+ rb_cCAIterator = rb_define_class("CAIterator", rb_cObject);
360
+
361
+ Init_ca_group_iter(); /* devel/MEMO_AXIS_GROUP.md — axis-group [] surface
362
+ (CAGroupIterator); after CAIterator is defined
363
+ (CAGroupIterator subclasses it). */
263
364
 
264
- Init_carray_iterator();
365
+ Init_carray_mathfunc();
265
366
 
266
- Init_ca_iter_dimension();
267
- Init_ca_iter_block();
268
- Init_ca_iter_window();
367
+ Init_carray_memory_view();
269
368
 
270
- Init_carray_mathfunc();
369
+ Init_carray_struct();
370
+
371
+ Init_carray_random();
271
372
 
373
+ Init_ca_kernel_iterator();
272
374
 
375
+ Init_carray_slab();
273
376
  }
274
377
 
data/ext/version.h CHANGED
@@ -1,16 +1,6 @@
1
- /* ---------------------------------------------------------------------------
2
-
3
- version.h
4
-
5
- This file is part of Ruby/CArray extension library.
6
-
7
- Copyright (C) 2005-2025 Hiroki Motoyoshi
8
-
9
- ---------------------------------------------------------------------------- */
10
-
11
- #define CA_VERSION "2.0.1"
12
- #define CA_VERSION_CODE 201
13
- #define CA_VERSION_MAJOR 2
1
+ #define CA_VERSION "3.0.1"
2
+ #define CA_VERSION_CODE 301
3
+ #define CA_VERSION_MAJOR 3
14
4
  #define CA_VERSION_MINOR 0
15
5
  #define CA_VERSION_TEENY 1
16
- #define CA_VERSION_DATE "2025/12/22"
6
+ #define CA_VERSION_DATE "2026/09/07"
data/ext/version.rb CHANGED
@@ -1,15 +1,3 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # version.rb
4
- #
5
- # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
- #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
10
- #
11
- # ----------------------------------------------------------------------------
12
-
13
1
  def carray_version
14
2
 
15
3
  io = open(File.join(File.dirname(__FILE__), "version.h"))
@@ -36,7 +24,11 @@ def carray_version
36
24
  ca_version_code2 =
37
25
  100 * ca_version_major + 10*ca_version_minor + ca_version_teeny
38
26
 
39
- if ca_version != ca_version2 or ca_version_code != ca_version_code2
27
+ # Allow pre-release suffix like "3.0.0.dev" / "3.0.0.alpha1" while still
28
+ # validating the numeric MAJOR.MINOR.TEENY prefix.
29
+ ca_version_numeric = ca_version.split(".")[0, 3].join(".")
30
+
31
+ if ca_version_numeric != ca_version2 or ca_version_code != ca_version_code2
40
32
  raise "invalid version.h"
41
33
  end
42
34