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/ca_iter_block.c DELETED
@@ -1,257 +0,0 @@
1
- /* ---------------------------------------------------------------------------
2
-
3
- ca_iter_block.c
4
-
5
- This file is part of Ruby/CArray extension library.
6
-
7
- Copyright (C) 2005-2025 Hiroki Motoyoshi
8
-
9
- ---------------------------------------------------------------------------- */
10
-
11
- #include "carray.h"
12
-
13
- extern const rb_data_type_t cablockiterator_data_type;
14
-
15
- const rb_data_type_t cablockiterator_data_type = {
16
- .parent = &caiterator_data_type,
17
- .wrap_struct_name = "CABlockIterator",
18
- .function = {
19
- .dmark = NULL,
20
- .dfree = free,
21
- .dsize = NULL,
22
- .dcompact = NULL
23
- },
24
- .flags = RUBY_TYPED_FREE_IMMEDIATELY
25
- };
26
-
27
- /* yard:
28
- class CABlockIterator < CAIterator # :nodoc:
29
- end
30
- */
31
-
32
-
33
- VALUE rb_cCABlockIterator;
34
-
35
- /*
36
- typedef struct {
37
- int16_t obj_type;
38
- int8_t data_type;
39
- int8_t ndim;
40
- int32_t flags;
41
- ca_size_t bytes;
42
- ca_size_t elements;
43
- ca_size_t *dim;
44
- char *ptr;
45
- CArray *mask;
46
- CArray *parent;
47
- uint32_t attach;
48
- uint8_t nosync;
49
- // ----------
50
- int8_t maxdim_index;
51
- ca_size_t maxdim_step;
52
- ca_size_t maxdim_step0;
53
- ca_size_t offset;
54
- ca_size_t *start;
55
- ca_size_t *step;
56
- ca_size_t *count;
57
- ca_size_t *size0;
58
- } CABlock; // 68 + 20*(ndim) (bytes)
59
- */
60
-
61
- typedef struct {
62
- int8_t ndim;
63
- ca_size_t dim[CA_RANK_MAX];
64
- CArray *reference;
65
- CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
66
- CArray * (*kernel_at_index)(void *, ca_size_t *, CArray *);
67
- CArray * (*kernel_move_to_addr)(void *, ca_size_t, CArray *);
68
- CArray * (*kernel_move_to_index)(void *, ca_size_t *, CArray *);
69
- /* ----------- */
70
- CABlock *kernel;
71
- } CABlockIterator;
72
-
73
- /* ----------------------------------------------------------------- */
74
-
75
- static CArray *
76
- ca_bi_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
77
- {
78
- CABlockIterator *bit = (CABlockIterator *) it;
79
- CABlock *kernel;
80
- int8_t i;
81
- ca_size_t j;
82
-
83
- if ( ref == bit->reference ) {
84
- kernel = (CABlock *)ca_clone(bit->kernel);
85
- }
86
- else {
87
- CABlock *ck = (CABlock *)bit->kernel;
88
- kernel = ca_block_new(ref,
89
- ck->ndim, ck->size0,
90
- ck->start, ck->step, ck->count,
91
- ck->offset);
92
- }
93
-
94
- ca_update_mask(kernel);
95
-
96
- for (i=0; i<kernel->ndim; i++) {
97
- j = idx[i];
98
- CA_CHECK_INDEX(j, bit->dim[i]);
99
- kernel->start[i] += j * kernel->dim[i];
100
- if ( kernel->mask ) {
101
- ((CABlock*)(kernel->mask))->start[i] += j * kernel->dim[i];
102
- }
103
- }
104
-
105
- return (CArray*) kernel;
106
- }
107
-
108
- static CArray *
109
- ca_bi_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
110
- {
111
- CABlockIterator *bit = (CABlockIterator *) it;
112
- ca_size_t *dim = bit->dim;
113
- ca_size_t idx[CA_RANK_MAX];
114
- int8_t i;
115
- for (i=bit->ndim-1; i>=0; i--) {
116
- idx[i] = addr % dim[i];
117
- addr /= dim[i];
118
- }
119
- return ca_bi_kernel_at_index(it, idx, ref);
120
- }
121
-
122
-
123
- static CArray *
124
- ca_bi_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
125
- {
126
- CABlockIterator *bit = (CABlockIterator *) it;
127
- CABlock *kernel = (CABlock *) kern;
128
- int8_t i;
129
- ca_size_t j;
130
-
131
- ca_update_mask(kernel);
132
-
133
- for (i=0; i<kernel->ndim; i++) {
134
- j = idx[i];
135
- CA_CHECK_INDEX(j, bit->dim[i]);
136
- kernel->start[i] = j * kernel->dim[i];
137
- if ( kernel->mask ) {
138
- ((CABlock*)(kernel->mask))->start[i] = j * kernel->dim[i];
139
- }
140
- }
141
-
142
- return (CArray*) kernel;
143
- }
144
-
145
- static CArray *
146
- ca_bi_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
147
- {
148
- CABlockIterator *bit = (CABlockIterator *) it;
149
- ca_size_t *dim = bit->dim;
150
- ca_size_t idx[CA_RANK_MAX];
151
- int8_t i;
152
- for (i=bit->ndim-1; i>=0; i--) {
153
- idx[i] = addr % dim[i];
154
- addr /= dim[i];
155
- }
156
- return ca_bi_kernel_move_to_index(it, idx, ref);
157
- }
158
-
159
- void
160
- ca_bi_setup (VALUE self, VALUE rref, VALUE rker)
161
- {
162
- CABlockIterator *it;
163
- CArray *ref;
164
- CABlock *ker;
165
- ca_size_t dim[CA_RANK_MAX];
166
- int8_t i;
167
-
168
- rker = rb_obj_clone(rker);
169
-
170
- TypedData_Get_Struct(self, CABlockIterator, &cablockiterator_data_type, it);
171
- TypedData_Get_Struct(rref, CArray, &carray_data_type, ref);
172
- TypedData_Get_Struct(rker, CABlock, &cablock_data_type, ker);
173
-
174
- if ( ref->ndim != ker->ndim ) {
175
- rb_raise(rb_eRuntimeError, "ndim mismatch between reference and kernel");
176
- }
177
-
178
- for (i=0; i<ref->ndim; i++) {
179
- if ( ker->step[i] != 1 ) {
180
- rb_raise(rb_eRuntimeError, "block should be contiguous");
181
- }
182
- dim[i] = ( ref->dim[i] - ker->start[i] ) / ker->dim[i];
183
- /*
184
- if ( ref->dim[i] % ker->dim[i] != 0 ) {
185
- rb_raise(rb_eRuntimeError, "invalid block size");
186
- }
187
- */
188
- }
189
-
190
- it->ndim = ref->ndim;
191
- memcpy(it->dim, dim, it->ndim * sizeof(ca_size_t));
192
- it->reference = ref;
193
- it->kernel = ker;
194
- it->kernel_at_addr = ca_bi_kernel_at_addr;
195
- it->kernel_at_index = ca_bi_kernel_at_index;
196
- it->kernel_move_to_addr = ca_bi_kernel_move_to_addr;
197
- it->kernel_move_to_index = ca_bi_kernel_move_to_index;
198
-
199
- rb_ivar_set(self, rb_intern("@reference"), rref); /* required ivar */
200
- rb_ivar_set(self, rb_intern("@kernel"), rker);
201
- }
202
-
203
- static VALUE
204
- rb_bi_s_allocate (VALUE klass)
205
- {
206
- CABlockIterator *it;
207
- return TypedData_Make_Struct(klass, CABlockIterator, &cablockiterator_data_type, it);
208
- }
209
-
210
- static VALUE
211
- rb_bi_initialize_copy (VALUE self, VALUE other)
212
- {
213
- ca_bi_setup(other, rb_ivar_get(self, rb_intern("@reference")),
214
- rb_ivar_get(self, rb_intern("@kernel")));
215
- return self;
216
- }
217
-
218
- /* yard:
219
- class CArray
220
- # Create block iterator.
221
- def blocks (*args)
222
- end
223
- end
224
- */
225
-
226
- static VALUE
227
- rb_ca_block_iterator (int argc, VALUE *argv, VALUE self)
228
- {
229
- VALUE obj, rker;
230
- CArray *ker;
231
-
232
- rker = rb_ca_fetch2(self, argc, argv);
233
-
234
- rb_check_carray_object(rker);
235
- TypedData_Get_Struct(rker, CArray, &carray_data_type, ker);
236
-
237
- if ( ker->obj_type != CA_OBJ_BLOCK ) {
238
- rb_raise(rb_eRuntimeError, "kernel must be CABlock object");
239
- }
240
-
241
- obj = rb_bi_s_allocate(rb_cCABlockIterator);
242
- ca_bi_setup(obj, self, rker);
243
-
244
- return obj;
245
- }
246
-
247
- void
248
- Init_ca_iter_block ()
249
- {
250
- rb_cCABlockIterator = rb_define_class("CABlockIterator", rb_cCAIterator);
251
- rb_define_const(rb_cCABlockIterator, "UNIFORM_KERNEL", Qtrue);
252
- rb_define_alloc_func(rb_cCABlockIterator, rb_bi_s_allocate);
253
- rb_define_method(rb_cCABlockIterator, "initialize_copy",
254
- rb_bi_initialize_copy, 1);
255
- rb_define_method(rb_cCArray, "blocks", rb_ca_block_iterator, -1);
256
- }
257
-
@@ -1,299 +0,0 @@
1
- /* ---------------------------------------------------------------------------
2
-
3
- ca_iter_dimension.c
4
-
5
- This file is part of Ruby/CArray extension library.
6
-
7
- Copyright (C) 2005-2025 Hiroki Motoyoshi
8
-
9
- ---------------------------------------------------------------------------- */
10
-
11
- #include "ruby.h"
12
- #include "carray.h"
13
-
14
- VALUE rb_cCADimIterator;
15
-
16
- /* yard:
17
- class CADimensionIterator < CAIterator # :nodoc:
18
- end
19
- */
20
-
21
- typedef struct {
22
- int8_t ndim;
23
- ca_size_t dim[CA_RANK_MAX];
24
- CArray *reference;
25
- CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
26
- CArray * (*kernel_at_index)(void *, ca_size_t *, CArray *);
27
- CArray * (*kernel_move_to_addr)(void *, ca_size_t, CArray *);
28
- CArray * (*kernel_move_to_index)(void *, ca_size_t *, CArray *);
29
- /* ----------- */
30
- CArray *kernel;
31
- int8_t symflag[CA_RANK_MAX];
32
- int8_t symindex[CA_RANK_MAX];
33
- } CADimIterator;
34
-
35
- const rb_data_type_t cadimiterator_data_type = {
36
- .parent = &caiterator_data_type,
37
- .wrap_struct_name = "CADimIterator",
38
- .function = {
39
- .dmark = NULL,
40
- .dfree = free,
41
- .dsize = NULL,
42
- .dcompact = NULL
43
- },
44
- .flags = RUBY_TYPED_FREE_IMMEDIATELY
45
- };
46
-
47
- /* -------------------------------------------------------------------- */
48
-
49
- static CArray *
50
- ca_di_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
51
- {
52
- CADimIterator *dit = (CADimIterator *)it;
53
- CABlock *kernel;
54
- int8_t i;
55
- ca_size_t val;
56
-
57
- if ( ref == dit->reference ) {
58
- kernel = ca_clone(dit->kernel);
59
- }
60
- else {
61
- CABlock *ck = (CABlock *)dit->kernel;
62
- kernel = ca_block_new(ref,
63
- ck->ndim, ck->size0,
64
- ck->start, ck->step, ck->count,
65
- ck->offset);
66
- }
67
-
68
- ca_update_mask(kernel);
69
-
70
- for (i=0; i<dit->ndim; i++) {
71
- val = idx[i];
72
- CA_CHECK_INDEX(val, dit->dim[i]);
73
- kernel->start[dit->symindex[i]] = val * kernel->step[dit->symindex[i]];
74
- if ( kernel->mask ) {
75
- ((CABlock*)(kernel->mask))->start[dit->symindex[i]] =
76
- val * kernel->step[dit->symindex[i]];
77
- }
78
- }
79
-
80
- return (CArray*) kernel;
81
- }
82
-
83
- static CArray *
84
- ca_di_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
85
- {
86
- CADimIterator *dit = (CADimIterator *) it;
87
- ca_size_t *dim = dit->dim;
88
- ca_size_t idx[CA_RANK_MAX];
89
- int8_t i;
90
- for (i=dit->ndim-1; i>=0; i--) {
91
- idx[i] = addr % dim[i];
92
- addr /= dim[i];
93
- }
94
- return ca_di_kernel_at_index(it, idx, ref);
95
- }
96
-
97
- static CArray *
98
- ca_di_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
99
- {
100
- CADimIterator *dit = (CADimIterator *)it;
101
- CABlock *kernel = (CABlock *) kern;
102
- int8_t i;
103
- ca_size_t val;
104
-
105
- ca_update_mask(kernel);
106
-
107
- for (i=0; i<dit->ndim; i++) {
108
- val = idx[i];
109
- CA_CHECK_INDEX(val, dit->dim[i]);
110
- kernel->start[dit->symindex[i]] = val * kernel->step[dit->symindex[i]];
111
- if ( kernel->mask ) {
112
- ((CABlock*)(kernel->mask))->start[dit->symindex[i]] =
113
- val * kernel->step[dit->symindex[i]];
114
- }
115
- }
116
-
117
- return (CArray*) kernel;
118
- }
119
-
120
- static CArray *
121
- ca_di_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
122
- {
123
- CADimIterator *dit = (CADimIterator *) it;
124
- ca_size_t *dim = dit->dim;
125
- ca_size_t idx[CA_RANK_MAX];
126
- int8_t i;
127
- for (i=dit->ndim-1; i>=0; i--) {
128
- idx[i] = addr % dim[i];
129
- addr /= dim[i];
130
- }
131
- return ca_di_kernel_move_to_index(it, idx, ref);
132
- }
133
-
134
- VALUE rb_ca_ref_block (VALUE self, CAIndexInfo *info);
135
-
136
- void
137
- ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
138
- {
139
- volatile VALUE rindex, rker, rsymtbl;
140
- CADimIterator *it;
141
- CAIndexInfo blk_spec;
142
- int8_t ndim;
143
- int i, j;
144
-
145
- TypedData_Get_Struct(self, CADimIterator, &cadimiterator_data_type, it);
146
-
147
- if ( info->type != CA_REG_ITERATOR ) {
148
- rb_raise(rb_eRuntimeError, "given spec is not for dim iteratror");
149
- }
150
-
151
- rsymtbl = rb_hash_new();
152
-
153
- blk_spec = *info;
154
- blk_spec.type = CA_REG_BLOCK;
155
- for (i=0; i<info->ndim; i++) {
156
- if ( info->index_type[i] == CA_IDX_SYMBOL ) {
157
- blk_spec.index_type[i] = CA_IDX_ALL;
158
- rb_hash_aset(rsymtbl, ID2SYM(blk_spec.index[i].symbol.id), INT2NUM(i));
159
- }
160
- }
161
-
162
- rref = rb_ca_ref_block(rref, &blk_spec);
163
-
164
- rindex = rb_ary_new2(info->ndim);
165
- ndim = 0;
166
-
167
- j = 0;
168
-
169
- for (i=0; i<info->ndim; i++) {
170
- if ( info->index_type[i] == CA_IDX_SCALAR ) {
171
- rb_ary_store(rindex, i, SIZE2NUM(info->index[i].scalar));
172
- continue; /* escape from j++ */
173
- }
174
- else if ( info->index_type[i] == CA_IDX_SYMBOL ) {
175
- rb_ary_store(rindex, i, rb_ary_new3(1, SIZE2NUM(0)));
176
- it->symflag[j] = 1;
177
- it->symindex[ndim] = j;
178
- ndim++;
179
- }
180
- else if ( info->index_type[i] == CA_IDX_ALL ) {
181
- rb_ary_store(rindex, i, Qnil);
182
- it->symflag[j] = 0;
183
- }
184
- else if ( info->index_type[i] == CA_IDX_BLOCK ) {
185
- rb_ary_store(rindex, i,
186
- rb_ary_new3(3, SIZE2NUM(0),
187
- SIZE2NUM(info->index[i].block.count),
188
- SIZE2NUM(1)));
189
- it->symflag[j] = 0;
190
- }
191
- j++;
192
- }
193
-
194
- rker = rb_apply(rref, rb_intern("[]"), rindex);
195
-
196
- it->ndim = ndim;
197
- TypedData_Get_Struct(rref, CArray, &carray_data_type, it->reference);
198
- TypedData_Get_Struct(rker, CArray, &carray_data_type, it->kernel);
199
- it->kernel_at_addr = ca_di_kernel_at_addr;
200
- it->kernel_at_index = ca_di_kernel_at_index;
201
- it->kernel_move_to_addr = ca_di_kernel_move_to_addr;
202
- it->kernel_move_to_index = ca_di_kernel_move_to_index;
203
-
204
- for (i=0; i<it->ndim; i++) {
205
- it->dim[i] = it->reference->dim[it->symindex[i]];
206
- }
207
-
208
- rb_ivar_set(self, rb_intern("@reference"), rref); /* required ivar */
209
- rb_ivar_set(self, rb_intern("@kernel"), rker);
210
- rb_ivar_set(self, rb_intern("@symtbl"), rsymtbl);
211
- }
212
-
213
- static VALUE
214
- rb_di_s_allocate (VALUE klass)
215
- {
216
- CADimIterator *it;
217
- return TypedData_Make_Struct(klass, CADimIterator, &cadimiterator_data_type, it);
218
- }
219
-
220
- static VALUE
221
- rb_di_initialize_copy (VALUE self, VALUE other)
222
- {
223
- volatile VALUE rref, rker;
224
- CADimIterator *is, *io;
225
-
226
- TypedData_Get_Struct(self, CADimIterator, &cadimiterator_data_type, is);
227
- TypedData_Get_Struct(other, CADimIterator, &cadimiterator_data_type, io);
228
-
229
- rref = rb_ivar_get(self, rb_intern("@reference"));
230
- rker = rb_obj_clone(rb_ivar_get(self, rb_intern("@kernel")));
231
-
232
- *io = *is;
233
-
234
- TypedData_Get_Struct(rker, CArray, &carray_data_type, io->kernel);
235
-
236
- rb_ivar_set(self, rb_intern("@reference"), rref); /* required ivar */
237
- rb_ivar_set(self, rb_intern("@kernel"), rker);
238
-
239
- return self;
240
- }
241
-
242
- VALUE
243
- rb_ca_dim_iterator (int argc, VALUE *argv, VALUE self)
244
- {
245
- volatile VALUE obj;
246
- CAIndexInfo info;
247
- CArray *ca;
248
-
249
- TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
250
-
251
- info.range_check = 1;
252
- rb_ca_scan_index(ca->ndim, ca->dim, ca->elements, argc, argv, &info);
253
-
254
- obj = rb_di_s_allocate(rb_cCADimIterator);
255
- ca_di_setup(obj, self, &info);
256
-
257
- return obj;
258
- }
259
-
260
- VALUE
261
- rb_dim_iter_new (VALUE rref, CAIndexInfo *info)
262
- {
263
- volatile VALUE obj;
264
-
265
- obj = rb_di_s_allocate(rb_cCADimIterator);
266
- ca_di_setup(obj, rref, info);
267
-
268
- return obj;
269
- }
270
-
271
- /* yard:
272
- class CADimensionIterator
273
- def sym2dim (sym)
274
- end
275
- end
276
- */
277
-
278
-
279
- VALUE
280
- rb_dim_iter_sym2dim (VALUE self, VALUE sym)
281
- {
282
- volatile VALUE rsymtbl;
283
- rsymtbl = rb_ivar_get(self, rb_intern("@symtbl"));
284
- return rb_hash_aref(rsymtbl, sym);
285
- }
286
-
287
- void
288
- Init_ca_iter_dimension ()
289
- {
290
- rb_cCADimIterator = rb_define_class("CADimensionIterator", rb_cCAIterator);
291
- rb_define_const(rb_cCADimIterator, "UNIFORM_KERNEL", Qtrue);
292
-
293
- rb_define_alloc_func(rb_cCADimIterator, rb_di_s_allocate);
294
- rb_define_method(rb_cCADimIterator, "initialize_copy",
295
- rb_di_initialize_copy, 1);
296
- /* rb_define_method(rb_cCArray, "dimension_iterator", rb_ca_dim_iterator, -1); */
297
- rb_define_method(rb_cCADimIterator, "sym2dim", rb_dim_iter_sym2dim, 1);
298
- }
299
-