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
@@ -1,641 +0,0 @@
1
- /* ---------------------------------------------------------------------------
2
-
3
- carray_iterator.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
- const rb_data_type_t caiterator_data_type = {
14
- .wrap_struct_name = "CAIterator",
15
- .function = {
16
- .dmark = ca_mark,
17
- .dfree = ca_free,
18
- .dsize = NULL,
19
- .dcompact = NULL
20
- },
21
- .flags = RUBY_TYPED_FREE_IMMEDIATELY
22
- };
23
-
24
- VALUE rb_cCAIterator;
25
-
26
- int8_t
27
- ca_iter_ndim (VALUE self)
28
- {
29
- int8_t ndim;
30
- if ( TYPE(self) == T_DATA ) {
31
- CAIterator *it;
32
- TypedData_Get_Struct(self, CAIterator, &caiterator_data_type, it);
33
- ndim = it->ndim;
34
- }
35
- else {
36
- VALUE rndim = rb_ivar_get(self, rb_intern("@ndim"));
37
- ndim = (int8_t) NUM2LONG(rndim);
38
- }
39
- return ndim;
40
- }
41
-
42
- void
43
- ca_iter_dim (VALUE self, ca_size_t *dim)
44
- {
45
- int i;
46
- if ( TYPE(self) == T_DATA ) {
47
- CAIterator *it;
48
- TypedData_Get_Struct(self, CAIterator, &caiterator_data_type, it);
49
- for (i=0; i<it->ndim; i++) {
50
- dim[i] = it->dim[i];
51
- }
52
- }
53
- else {
54
- VALUE rndim = rb_ivar_get(self, rb_intern("@ndim"));
55
- VALUE rdim = rb_ivar_get(self, rb_intern("@dim"));
56
- int8_t ndim;
57
- ndim = (int8_t) NUM2INT(rndim);
58
- for (i=0; i<ndim; i++) {
59
- dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
60
- }
61
- }
62
- }
63
-
64
- ca_size_t
65
- ca_iter_elements (VALUE self)
66
- {
67
- int i, elements;
68
- if ( TYPE(self) == T_DATA ) {
69
- CAIterator *it;
70
- TypedData_Get_Struct(self, CAIterator, &caiterator_data_type, it);
71
- elements = 1;
72
- for (i=0; i<it->ndim; i++) {
73
- elements *= it->dim[i];
74
- }
75
- }
76
- else {
77
- VALUE rndim = rb_ivar_get(self, rb_intern("@ndim"));
78
- VALUE rdim = rb_ivar_get(self, rb_intern("@dim"));
79
- int8_t ndim = (int8_t) NUM2INT(rndim);
80
- elements = 1;
81
- for (i=0; i<ndim; i++) {
82
- elements *= NUM2SIZE(rb_ary_entry(rdim, i));
83
- }
84
- }
85
- return elements;
86
- }
87
-
88
- VALUE
89
- ca_iter_reference (VALUE self)
90
- {
91
- return rb_ivar_get(self, rb_intern("@reference"));
92
- }
93
-
94
- VALUE
95
- ca_iter_kernel_at_addr (VALUE self, ca_size_t addr, VALUE rref)
96
- {
97
- volatile VALUE rker;
98
- if ( TYPE(self) == T_DATA ) {
99
- CAIterator *it;
100
- CArray *ref, *ker;
101
- TypedData_Get_Struct(self, CAIterator, &caiterator_data_type, it);
102
- TypedData_Get_Struct(rref, CArray, &carray_data_type, ref);
103
- ker = it->kernel_at_addr(it, addr, ref);
104
- rker = ca_wrap_struct(ker);
105
- rb_ca_data_type_inherit(rker, rref);
106
- rb_ca_set_parent(rker, rref);
107
- }
108
- else {
109
- rker = rb_funcall(self, rb_intern("kernel_at_addr"), 2,
110
- SIZE2NUM(addr), rref);
111
- }
112
- return rker;
113
- }
114
-
115
- VALUE
116
- ca_iter_kernel_at_index (VALUE self, ca_size_t *idx, VALUE rref)
117
- {
118
- VALUE rker;
119
- if ( TYPE(self) == T_DATA ) {
120
- CAIterator *it;
121
- CArray *ref, *ker;
122
- TypedData_Get_Struct(self, CAIterator, &caiterator_data_type, it);
123
- TypedData_Get_Struct(rref, CArray, &carray_data_type, ref);
124
- ker = it->kernel_at_index(it, idx, ref);
125
- rker = ca_wrap_struct(ker);
126
- rb_ca_data_type_inherit(rker, rref);
127
- rb_ca_set_parent(rker, rref);
128
- }
129
- else {
130
- VALUE vidx;
131
- int8_t ndim = ca_iter_ndim(self);
132
- int i;
133
- vidx = rb_ary_new2(ndim);
134
- for (i=0; i<ndim; i++) {
135
- rb_ary_store(vidx, i, SIZE2NUM(idx[i]));
136
- }
137
- rker = rb_funcall(self, rb_intern("kernel_at_index"), 2,
138
- vidx, rref);
139
- }
140
- return rker;
141
- }
142
-
143
- VALUE
144
- ca_iter_kernel_move_to_addr (VALUE self, ca_size_t addr, VALUE rref)
145
- {
146
- if ( TYPE(self) == T_DATA ) {
147
- CAIterator *it;
148
- CArray *ker;
149
- TypedData_Get_Struct(self, CAIterator, &caiterator_data_type, it);
150
- TypedData_Get_Struct(rref, CArray, &carray_data_type, ker);
151
- it->kernel_move_to_addr(it, addr, ker);
152
- }
153
- else {
154
- rb_funcall(self, rb_intern("kernel_move_to_addr"), 2,
155
- SIZE2NUM(addr), rref);
156
- }
157
- return rref;
158
- }
159
-
160
- VALUE
161
- ca_iter_kernel_move_to_index (VALUE self, ca_size_t *idx, VALUE rref)
162
- {
163
- if ( TYPE(self) == T_DATA ) {
164
- CAIterator *it;
165
- CArray *ker;
166
- TypedData_Get_Struct(self, CAIterator, &caiterator_data_type, it);
167
- TypedData_Get_Struct(rref, CArray, &carray_data_type, ker);
168
- it->kernel_move_to_index(it, idx, ker);
169
- }
170
- else {
171
- VALUE vidx;
172
- int8_t ndim = ca_iter_ndim(self);
173
- int i;
174
- vidx = rb_ary_new2(ndim);
175
- for (i=0; i<ndim; i++) {
176
- rb_ary_store(vidx, i, SIZE2NUM(idx[i]));
177
- }
178
- rb_funcall(self, rb_intern("kernel_move_to_index"), 2,
179
- vidx, rref);
180
- }
181
- return rref;
182
- }
183
-
184
-
185
- VALUE
186
- ca_iter_prepare_output (VALUE self, VALUE rtype, VALUE rbytes)
187
- {
188
- volatile VALUE obj;
189
- CArray *co;
190
- int8_t data_type;
191
- ca_size_t bytes;
192
- int i;
193
-
194
- rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
195
-
196
- if ( TYPE(self) == T_DATA ) {
197
- CAIterator *it;
198
- TypedData_Get_Struct(self, CAIterator, &caiterator_data_type, it);
199
- co = carray_new_safe(data_type, it->ndim, it->dim, bytes, NULL);
200
- }
201
- else {
202
- VALUE rndim = rb_ivar_get(self, rb_intern("@ndim"));
203
- VALUE rdim = rb_ivar_get(self, rb_intern("@dim"));
204
- int8_t ndim = NUM2LONG(rndim);
205
- ca_size_t dim[CA_RANK_MAX];
206
- for (i=0; i<ndim; i++) {
207
- dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
208
- }
209
- co = carray_new_safe(data_type, ndim, dim, bytes, NULL);
210
- }
211
-
212
- obj = ca_wrap_struct(co);
213
- rb_ca_data_type_import(obj, rtype);
214
-
215
- return obj;
216
- }
217
-
218
- /* -------------------------------------------------------------------- */
219
-
220
- /* yard:
221
- class CAIterator
222
- def ndim
223
- end
224
- end
225
- */
226
-
227
-
228
- VALUE
229
- rb_ca_iter_ndim (VALUE self)
230
- {
231
- return LONG2NUM(ca_iter_ndim(self));
232
- }
233
-
234
- /* yard:
235
- class CAIterator
236
- def dim
237
- end
238
- end
239
- */
240
-
241
- VALUE
242
- rb_ca_iter_dim (VALUE self)
243
- {
244
- VALUE rdim;
245
- ca_size_t dim[CA_RANK_MAX];
246
- int8_t ndim = ca_iter_ndim(self);
247
- int i;
248
- ca_iter_dim(self, dim);
249
- rdim = rb_ary_new2(ndim);
250
- for (i=0; i<ndim; i++) {
251
- rb_ary_store(rdim, i, SIZE2NUM(dim[i]));
252
- }
253
- return rdim;
254
- }
255
-
256
- /* yard:
257
- class CAIterator
258
- def elements
259
- end
260
- end
261
- */
262
-
263
- VALUE
264
- rb_ca_iter_elements (VALUE self)
265
- {
266
- return SIZE2NUM(ca_iter_elements(self));
267
- }
268
-
269
- /* yard:
270
- class CAIterator
271
- def reference
272
- end
273
- end
274
- */
275
-
276
- VALUE
277
- rb_ca_iter_reference (VALUE self)
278
- {
279
- return ca_iter_reference(self);
280
- }
281
-
282
- /* yard:
283
- class CAIterator
284
- def kernel_at_addr
285
- end
286
- end
287
- */
288
-
289
- VALUE
290
- rb_ca_iter_kernel_at_addr (int argc, VALUE *argv, VALUE self)
291
- {
292
- volatile VALUE raddr, rcarray;
293
- rb_scan_args(argc, argv, "11", (VALUE *) &raddr, (VALUE *) &rcarray);
294
- if ( NIL_P(rcarray) ) {
295
- rcarray = rb_ca_iter_reference(self);
296
- }
297
- return ca_iter_kernel_at_addr(self, NUM2SIZE(raddr), rcarray);
298
- }
299
-
300
- /* yard:
301
- class CAIterator
302
- def kernel_at_index
303
- end
304
- end
305
- */
306
-
307
- VALUE
308
- rb_ca_iter_kernel_at_index (int argc, VALUE *argv, VALUE self)
309
- {
310
- volatile VALUE rindex, rcarray;
311
- ca_size_t idx[CA_RANK_MAX];
312
- int8_t ndim = ca_iter_ndim(self);
313
- int i;
314
-
315
- rb_scan_args(argc, argv, "11", (VALUE *) &rindex, (VALUE *) &rcarray);
316
-
317
- if ( NIL_P(rcarray) ) {
318
- rcarray = rb_ca_iter_reference(self);
319
- }
320
-
321
- for (i=0; i<ndim; i++) {
322
- idx[i] = NUM2SIZE(rb_ary_entry(rindex, i));
323
- }
324
-
325
- return ca_iter_kernel_at_index(self, idx, rcarray);
326
- }
327
-
328
- /* yard:
329
- class CAIterator
330
- def kernel_move_to_addr
331
- end
332
- end
333
- */
334
-
335
- VALUE
336
- rb_ca_iter_kernel_move_to_addr (VALUE self, VALUE raddr, VALUE rker)
337
- {
338
- return ca_iter_kernel_move_to_addr(self, NUM2SIZE(raddr), rker);
339
- }
340
-
341
- /* yard:
342
- class CAIterator
343
- def kernel_move_to_index
344
- end
345
- end
346
- */
347
-
348
- VALUE
349
- rb_ca_iter_kernel_move_to_index (VALUE self, VALUE rindex, VALUE rker)
350
- {
351
- ca_size_t idx[CA_RANK_MAX];
352
- int8_t ndim = ca_iter_ndim(self);
353
- int i;
354
-
355
- for (i=0; i<ndim; i++) {
356
- idx[i] = NUM2SIZE(rb_ary_entry(rindex, i));
357
- }
358
-
359
- return ca_iter_kernel_move_to_index(self, idx, rker);
360
- }
361
-
362
- /* yard:
363
- class CAIterator
364
- def prepare_output
365
- end
366
- end
367
- */
368
-
369
- VALUE
370
- rb_ca_iter_prepare_output (int argc, VALUE *argv, VALUE self)
371
- {
372
- VALUE rtype, ropt, rbytes = Qnil;
373
-
374
- rb_scan_args(argc, argv, "11", &rtype, &ropt);
375
- rb_scan_options(ropt, "bytes", &rbytes);
376
-
377
- return ca_iter_prepare_output(self, rtype, rbytes);
378
- }
379
-
380
- /* -------------------------------------------------------------------- */
381
-
382
- /* yard:
383
- class CAIterator
384
- def calculate (data_type=nil, )
385
- end
386
- end
387
- */
388
-
389
- VALUE
390
- rb_ca_iter_calculate (int argc, VALUE *argv, VALUE self)
391
- {
392
- volatile VALUE rtype, rbytes, routput, rref, rker, rout;
393
- CArray *co, *cr, *ck;
394
- ca_size_t elements;
395
- int8_t data_type;
396
- ca_size_t bytes;
397
- int i;
398
-
399
- if ( argc < 1 ) {
400
- rb_raise(rb_eArgError, "invalid # of arguments");
401
- }
402
-
403
- elements = ca_iter_elements(self);
404
-
405
- rref = ca_iter_reference(self);
406
- TypedData_Get_Struct(rref, CArray, &carray_data_type, cr);
407
-
408
- if ( NIL_P(argv[0]) ) {
409
- rtype = INT2NUM(cr->data_type);
410
- rbytes = SIZE2NUM(cr->bytes);
411
- }
412
- else {
413
- rb_ca_guess_type_and_bytes(argv[0], Qnil, &data_type, &bytes);
414
- rtype = INT2NUM(data_type);
415
- rbytes = SIZE2NUM(bytes);
416
- }
417
- argc--;
418
- argv++;
419
-
420
- routput = ca_iter_prepare_output(self, rtype, rbytes);
421
- TypedData_Get_Struct(routput, CArray, &carray_data_type, co);
422
-
423
- ca_attach(cr);
424
-
425
- if ( rb_const_get(CLASS_OF(self), rb_intern("UNIFORM_KERNEL")) ) {
426
-
427
- rker = ca_iter_kernel_at_addr(self, 0, rref);
428
-
429
- TypedData_Get_Struct(rker, CArray, &carray_data_type, ck);
430
- ca_attach(ck);
431
-
432
- if ( rb_block_given_p() ) {
433
- for (i=0; i<elements; i++) {
434
- ca_iter_kernel_move_to_addr(self, i, rker);
435
- ca_update(ck);
436
- rout = rb_yield(rker);
437
- rb_ca_store_addr(routput, i, rout);
438
- }
439
- }
440
- else {
441
- if ( argc < 1 ) {
442
- rb_raise(rb_eArgError, "invalid # of arguments");
443
- }
444
- for (i=0; i<elements; i++) {
445
- ca_iter_kernel_move_to_addr(self, i, rker);
446
- ca_update(ck);
447
- rout = rb_funcall2(rker, SYM2ID(argv[0]), argc-1, &argv[1]);
448
- rb_ca_store_addr(routput, i, rout);
449
- }
450
- }
451
-
452
- ca_detach(ck);
453
- }
454
- else {
455
-
456
- if ( rb_block_given_p() ) {
457
- for (i=0; i<elements; i++) {
458
- rker = ca_iter_kernel_at_addr(self, i, rref);
459
- rout = rb_yield(rker);
460
- rb_ca_store_addr(routput, i, rout);
461
- }
462
- }
463
- else {
464
- if ( argc < 1 ) {
465
- rb_raise(rb_eArgError, "invalid # of arguments");
466
- }
467
- for (i=0; i<elements; i++) {
468
- rker = ca_iter_kernel_at_addr(self, i, rref);
469
- rout = rb_funcall2(rker, SYM2ID(argv[0]), argc-1, &argv[1]);
470
- rb_ca_store_addr(routput, i, rout);
471
- }
472
- }
473
-
474
- }
475
-
476
- ca_detach(cr);
477
-
478
- return routput;
479
- }
480
-
481
- /* yard:
482
- class CAIterator
483
- def filter
484
- end
485
- end
486
- */
487
-
488
- VALUE
489
- rb_ca_iter_filter (int argc, VALUE *argv, VALUE self)
490
- {
491
- volatile VALUE routput, rref, rker, rout;
492
- CArray *co, *cr, *ck, *cq;
493
- ca_size_t elements;
494
- int8_t data_type;
495
- int i;
496
-
497
- if ( argc < 2 ) {
498
- rb_raise(rb_eArgError, "invalid # of arguments");
499
- }
500
-
501
- elements = ca_iter_elements(self);
502
- rref = ca_iter_reference(self);
503
-
504
- TypedData_Get_Struct(rref, CArray, &carray_data_type, cr);
505
-
506
- /* FIXME: check data_type validity */
507
-
508
- data_type = NIL_P(argv[0]) ? cr->data_type : rb_ca_guess_type(argv[0]);
509
- argc--;
510
- argv++;
511
-
512
- co = carray_new(data_type, cr->ndim, cr->dim, 0, NULL);
513
- routput = ca_wrap_struct(co);
514
-
515
- if ( NIL_P(argv[0]) ) {
516
- rb_ca_data_type_inherit(routput, rref);
517
- }
518
-
519
- ca_attach(cr);
520
-
521
- if ( rb_const_get(CLASS_OF(self), rb_intern("UNIFORM_KERNEL")) ) {
522
-
523
- rker = ca_iter_kernel_at_addr(self, 0, rref);
524
- TypedData_Get_Struct(rker, CArray, &carray_data_type, ck);
525
- ca_allocate(ck);
526
-
527
- rout = ca_iter_kernel_at_addr(self, 0, routput);
528
- TypedData_Get_Struct(rker, CArray, &carray_data_type, cq);
529
- ca_allocate(cq);
530
-
531
- for (i=0; i<elements; i++) {
532
- ca_iter_kernel_move_to_addr(self, i, rker);
533
- ca_iter_kernel_move_to_addr(self, i, rout);
534
- ca_update(ck);
535
- rb_funcall(rout, rb_intern("[]="), 1,
536
- rb_funcall2(rker, SYM2ID(argv[0]), argc-1, &argv[1]));
537
- ca_sync(cq);
538
- }
539
-
540
- ca_detach_n(2, ck, cq);
541
-
542
- }
543
- else {
544
-
545
- for (i=0; i<elements; i++) {
546
- rker = ca_iter_kernel_at_addr(self, i, rref);
547
- rout = ca_iter_kernel_at_addr(self, i, routput);
548
- rb_funcall(rout, rb_intern("[]="), 1,
549
- rb_funcall2(rker, SYM2ID(argv[0]), argc-1, &argv[1]));
550
- }
551
-
552
- }
553
-
554
- ca_detach(cr);
555
- return routput;
556
- }
557
-
558
- /* yard:
559
- class CAIterator
560
- def evaluate
561
- end
562
- end
563
- */
564
-
565
- VALUE
566
- rb_ca_iter_evaluate (int argc, VALUE *argv, VALUE self)
567
- {
568
- volatile VALUE rref, rker;
569
- CArray *cr, *ck;
570
- ca_size_t elements;
571
- int i;
572
-
573
- elements = ca_iter_elements(self);
574
- rref = ca_iter_reference(self);
575
-
576
- TypedData_Get_Struct(rref, CArray, &carray_data_type, cr);
577
-
578
- ca_attach(cr);
579
-
580
- if ( rb_const_get(CLASS_OF(self), rb_intern("UNIFORM_KERNEL")) ) {
581
-
582
- rker = ca_iter_kernel_at_addr(self, 0, rref);
583
-
584
- TypedData_Get_Struct(rker, CArray, &carray_data_type, ck);
585
-
586
- ca_attach(ck);
587
-
588
- for (i=0; i<elements; i++) {
589
- ca_iter_kernel_move_to_addr(self, i, rker);
590
- ca_update(ck);
591
- rb_funcall2(rker, SYM2ID(argv[0]), argc-1, &argv[1]);
592
- }
593
-
594
- ca_detach(ck);
595
- }
596
- else {
597
-
598
- for (i=0; i<elements; i++) {
599
- rker = ca_iter_kernel_at_addr(self, i, rref);
600
- rb_funcall2(rker, SYM2ID(argv[0]), argc-1, &argv[1]);
601
- }
602
-
603
- }
604
-
605
- ca_sync(cr);
606
- ca_detach(cr);
607
-
608
- return self;
609
- }
610
-
611
-
612
- void
613
- Init_carray_iterator ()
614
- {
615
- rb_cCAIterator = rb_define_class("CAIterator", rb_cObject);
616
-
617
- rb_define_method(rb_cCAIterator, "ndim", rb_ca_iter_ndim, 0);
618
- rb_define_method(rb_cCAIterator, "rank", rb_ca_iter_ndim, 0); /* alias */
619
- rb_define_method(rb_cCAIterator, "dim", rb_ca_iter_dim, 0);
620
- rb_define_method(rb_cCAIterator, "shape", rb_ca_iter_dim, 0); /* alias */
621
- rb_define_method(rb_cCAIterator, "elements", rb_ca_iter_elements, 0);
622
- rb_define_method(rb_cCAIterator, "reference", rb_ca_iter_reference, 0);
623
-
624
- rb_define_method(rb_cCAIterator, "kernel_at_addr",
625
- rb_ca_iter_kernel_at_addr, -1);
626
- rb_define_method(rb_cCAIterator, "kernel_at_index",
627
- rb_ca_iter_kernel_at_index, -1);
628
- rb_define_method(rb_cCAIterator, "kernel_move_to_addr",
629
- rb_ca_iter_kernel_move_to_addr, 2);
630
- rb_define_method(rb_cCAIterator, "kernel_move_to_index",
631
- rb_ca_iter_kernel_move_to_index, 2);
632
- rb_define_method(rb_cCAIterator, "prepare_output",
633
- rb_ca_iter_prepare_output, -1);
634
-
635
- rb_define_method(rb_cCAIterator, "calculate", rb_ca_iter_calculate, -1);
636
- rb_define_method(rb_cCAIterator, "filter", rb_ca_iter_filter, -1);
637
- rb_define_method(rb_cCAIterator, "evaluate", rb_ca_iter_evaluate, -1);
638
-
639
- }
640
-
641
-