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,16 +1,3 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray_cast_func.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
-
14
1
  data_type = []
15
2
  %w[
16
3
  CA_FIXLEN
@@ -48,10 +35,8 @@ ctype = {
48
35
  CA_UINT64 => "uint64_t",
49
36
  CA_FLOAT32 => "float32_t",
50
37
  CA_FLOAT64 => "float64_t",
51
- CA_FLOAT128 => "float128_t",
52
38
  CA_CMPLX64 => "cmplx64_t",
53
39
  CA_CMPLX128 => "cmplx128_t",
54
- CA_CMPLX256 => "cmplx256_t",
55
40
  CA_OBJECT => "VALUE"
56
41
  }
57
42
 
@@ -68,10 +53,8 @@ obj2cval = {
68
53
  CA_UINT64 => "OBJ2ULL",
69
54
  CA_FLOAT32 => "OBJ2DBL",
70
55
  CA_FLOAT64 => "OBJ2DBL",
71
- CA_FLOAT128 => "OBJ2DBL", ### upcast
72
56
  CA_CMPLX64 => "NUM2CC",
73
57
  CA_CMPLX128 => "NUM2CC",
74
- CA_CMPLX256 => "NUM2CC", ### upcast
75
58
  CA_OBJECT => ""
76
59
  }
77
60
 
@@ -88,10 +71,8 @@ cval2obj = {
88
71
  CA_UINT64 => "ULL2NUM",
89
72
  CA_FLOAT32 => "rb_float_new",
90
73
  CA_FLOAT64 => "rb_float_new",
91
- CA_FLOAT128 => "rb_float_new", ### downcast
92
- CA_CMPLX64 => "rb_ccomplex_new",
93
- CA_CMPLX128 => "rb_ccomplex_new",
94
- CA_CMPLX256 => "rb_ccomplex_new", ### downcast
74
+ CA_CMPLX64 => "CC2NUM",
75
+ CA_CMPLX128 => "CC2NUM",
95
76
  CA_OBJECT => ""
96
77
  }
97
78
 
@@ -106,10 +87,8 @@ NUMERIC = [
106
87
  CA_UINT64 ,
107
88
  CA_FLOAT32 ,
108
89
  CA_FLOAT64 ,
109
- CA_FLOAT128 ,
110
90
  CA_CMPLX64 ,
111
91
  CA_CMPLX128 ,
112
- CA_CMPLX256 ,
113
92
  ]
114
93
 
115
94
  INTEGER = [
@@ -123,6 +102,40 @@ INTEGER = [
123
102
  CA_UINT64 ,
124
103
  ]
125
104
 
105
+ FLOAT = [
106
+ CA_FLOAT32 ,
107
+ CA_FLOAT64 ,
108
+ ]
109
+
110
+ # object -> int/float cast: a parse failure masks the output cell (UNDEF)
111
+ # instead of a silent 0.0 (float) or a raise (int). These parsers report
112
+ # failure through an out-param whose C type is `oktype`.
113
+ obj2cval_ok = {
114
+ CA_INT8 => "rb_obj2long_ok",
115
+ CA_UINT8 => "rb_obj2ulong_ok",
116
+ CA_INT16 => "rb_obj2long_ok",
117
+ CA_UINT16 => "rb_obj2ulong_ok",
118
+ CA_INT32 => "rb_obj2long_ok",
119
+ CA_UINT32 => "rb_obj2ulong_ok",
120
+ CA_INT64 => "rb_obj2ll_ok",
121
+ CA_UINT64 => "rb_obj2ull_ok",
122
+ CA_FLOAT32 => "ca_obj2dbl_ok",
123
+ CA_FLOAT64 => "ca_obj2dbl_ok",
124
+ }
125
+
126
+ oktype = {
127
+ CA_INT8 => "long",
128
+ CA_UINT8 => "unsigned long",
129
+ CA_INT16 => "long",
130
+ CA_UINT16 => "unsigned long",
131
+ CA_INT32 => "long",
132
+ CA_UINT32 => "unsigned long",
133
+ CA_INT64 => "long long",
134
+ CA_UINT64 => "unsigned long long",
135
+ CA_FLOAT32 => "double",
136
+ CA_FLOAT64 => "double",
137
+ }
138
+
126
139
  BOOLEAN = [
127
140
  CA_BOOLEAN
128
141
  ]
@@ -154,20 +167,13 @@ end
154
167
  puts %{
155
168
  /* ---------------------------------------------------------------------------
156
169
 
157
- carray_cast_func.c
158
-
159
- This file is part of Ruby/CArray extension library.
160
- You can redistribute it and/or modify it under the terms of
161
- the Ruby\'s licence.
162
-
163
- This file is automatically generated from carray_math.rb.
164
- Copyright (C) 2005-2025 Hiroki Motoyoshi
170
+ carray_cast_func.c -- GENERATED by ext/carray_cast_func.rb -- DO NOT EDIT
165
171
 
166
172
  ---------------------------------------------------------------------------- */
167
173
 
168
174
  #include "carray.h"
169
175
 
170
- static void
176
+ static void __attribute__((noreturn))
171
177
  ca_cast_not_implemented(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
172
178
  {
173
179
  rb_raise(rb_eCADataTypeError,
@@ -332,9 +338,6 @@ puts
332
338
  ca_size_t k;
333
339
  if ( m ) {
334
340
  boolean8_t *pm = m;
335
- #ifdef _OPENMP
336
- #pragma omp parallel for private(pm,p1,p2)
337
- #endif
338
341
  for (k=0; k<n; k++) {
339
342
  pm = m + k;
340
343
  if ( ! *pm ) {
@@ -345,9 +348,6 @@ puts
345
348
  }
346
349
  }
347
350
  else {
348
- #ifdef _OPENMP
349
- #pragma omp parallel for private(p1,p2)
350
- #endif
351
351
  for (k=0; k<n; k++) {
352
352
  p1 = q1 + k;
353
353
  p2 = q2 + k;
@@ -455,10 +455,51 @@ OBJECT.each do |type1|
455
455
  (BOOLEAN+NUMERIC+OBJECT).each do |type2|
456
456
  ctype1 = ctype[type1]
457
457
  ctype2 = ctype[type2]
458
+ CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
459
+ if (INTEGER+FLOAT).include?(type2)
460
+ # object -> int/float: parse failure -> masked (UNDEF) output cell.
461
+ # The mask-aware loop runs only when a mask buffer is supplied (m);
462
+ # #to_type always supplies one for these targets so the whole
463
+ # user-facing object->numeric surface gets the masking semantics.
464
+ # With no mask buffer (internal single-cell / view paths) the legacy
465
+ # value parser keeps its old behaviour (lenient 0.0 float / raising
466
+ # int), leaving those paths byte-identical.
467
+ conv_ok = obj2cval_ok[type2]
468
+ conv = obj2cval[type2]
469
+ oktype2 = oktype[type2]
470
+ puts <<-END_DEF .gsub(/^ {6}/, '')
471
+ static void
472
+ ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
473
+ {
474
+ VALUE *p1 = ptr1;
475
+ #{ctype2} *p2 = ptr2;
476
+ #{oktype2} tmp;
477
+ if ( m ) {
478
+ while ( n-- ) {
479
+ if ( !*m ) {
480
+ if ( #{conv_ok}(*p1, &tmp) ) {
481
+ *p2 = (#{ctype2}) tmp;
482
+ }
483
+ else {
484
+ *m = 1;
485
+ *p2 = 0;
486
+ }
487
+ }
488
+ p1++; p2++; m++;
489
+ }
490
+ }
491
+ else {
492
+ while ( n-- ) { *p2 = (#{ctype2}) #{conv}(*p1); p1++; p2++; }
493
+ }
494
+ return;
495
+ }
496
+ END_DEF
497
+ puts
498
+ next
499
+ end
458
500
  unless conv = obj2cval[type2]
459
501
  next
460
502
  end
461
- CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
462
503
  puts <<-END_DEF .gsub(/^ {6}/, '')
463
504
  static void
464
505
  ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
@@ -466,7 +507,7 @@ OBJECT.each do |type1|
466
507
  VALUE *p1 = ptr1;
467
508
  #{ctype2} *p2 = ptr2;
468
509
  if ( m ) {
469
- while ( n-- ) {
510
+ while ( n-- ) {
470
511
  if ( !*m ) { *p2 = (#{ctype2}) #{conv}(*p1); }
471
512
  p1++; p2++; m++;
472
513
  }
data/ext/carray_class.c CHANGED
@@ -1,65 +1,58 @@
1
1
  /* ---------------------------------------------------------------------------
2
2
 
3
- carray_class.c
4
-
5
- This file is part of Ruby/CArray extension library.
6
-
7
- Copyright (C) 2005-2025 Hiroki Motoyoshi
3
+ CArray class-level inquiries: host endianness, sizeof(data_type),
4
+ data_type ↔ name / code conversion.
8
5
 
9
6
  ---------------------------------------------------------------------------- */
10
7
 
11
8
  #include "carray.h"
12
9
 
13
- /* @overload endian
14
-
15
- (Inquiry)
16
- Returns the machine endianness.
17
- 0 (CA_LITTLE_ENDIAN)
18
- 1 (CA_BIG_ENDIAN)
19
- */
10
+ /* ------------------------------------------------------------------- */
11
+ /* Symbol cache for data_type code → Symbol lookup.
12
+ *
13
+ * Pre-computed at Init time so `ca.data_type` can return
14
+ * `ID2SYM(ca_data_type_sym[ca->data_type])` with no rb_intern call
15
+ * per access.
16
+ *
17
+ * Indexed by data_type code (0 = CA_FIXLEN ... CA_NTYPE-1 = CA_OBJECT).
18
+ * Symbol name = ca_type_name[i] ("fixlen" / "int8" / ... / "object").
19
+ * Unused slots (CA_FLOAT128 = 12, CA_CMPLX256 = 15) are populated but
20
+ * never reached at runtime because ca_valid[] is 0 there.
21
+ * ------------------------------------------------------------------- */
22
+
23
+ ID ca_data_type_sym[CA_NTYPE];
24
+
25
+ VALUE
26
+ rb_ca_data_type_to_sym (int8_t data_type)
27
+ {
28
+ CA_CHECK_DATA_TYPE(data_type);
29
+ return ID2SYM(ca_data_type_sym[data_type]);
30
+ }
20
31
 
32
+ /* Returns the machine endianness as an integer
33
+ (0 = CA_LITTLE_ENDIAN, 1 = CA_BIG_ENDIAN). */
21
34
  static VALUE
22
35
  rb_ca_s_endian (VALUE klass)
23
36
  {
24
37
  return INT2NUM(ca_endian);
25
38
  }
26
39
 
27
- /* @overload big_endian?
28
-
29
- (Inquiry)
30
- Returns true if the byte order of the architecture is big endian.
31
- */
32
-
40
+ /* Returns true if the host byte order is big-endian. */
33
41
  static VALUE
34
42
  rb_ca_s_big_endian_p (VALUE klass)
35
43
  {
36
44
  return ( ca_endian == CA_BIG_ENDIAN ) ? Qtrue : Qfalse;
37
45
  }
38
46
 
39
- /* @overload little_endian?
40
-
41
- (Inquiry)
42
- Returns true if the byte order of the architecture is
43
- little endian.
44
- */
45
-
47
+ /* Returns true if the host byte order is little-endian. */
46
48
  static VALUE
47
49
  rb_ca_s_little_endian_p (VALUE klass)
48
50
  {
49
51
  return ( ca_endian == CA_LITTLE_ENDIAN ) ? Qtrue : Qfalse;
50
52
  }
51
53
 
52
- /* @overload sizeof (data_type)
53
-
54
- (Inquiry)
55
- Returns the byte length of an element of the given data type.
56
- Retruns <code>0</code> if data_type is equal to CA_FIXLEN.
57
- CArray.sizeof(CA_INT32) #=> 4
58
- CArray.sizeof(CA_DOUBLE) #=> 8
59
- CArray.sizeof(CA_FIXLEN) #=> 0
60
-
61
- */
62
-
54
+ /* Returns the byte length of one element of the given data_type.
55
+ Returns 0 for CA_FIXLEN (whose width is per-instance, not per-type). */
63
56
  static VALUE
64
57
  rb_ca_s_sizeof (VALUE klass, VALUE rtype)
65
58
  {
@@ -69,44 +62,41 @@ rb_ca_s_sizeof (VALUE klass, VALUE rtype)
69
62
  return SIZE2NUM(bytes);
70
63
  }
71
64
 
72
-
73
- /* @overload data_type?(data_type)
74
-
75
- (Inquiry)
76
- Returns true if the given data_type indicate the valid data_type.
77
- */
78
-
65
+ /* Returns the string representation of a data_type specifier.
66
+ Accepts Symbol, Integer code, Class, or String uniformly via
67
+ rb_ca_guess_type. */
79
68
  static VALUE
80
- rb_ca_s_data_type (VALUE klass, VALUE rtype)
69
+ rb_ca_s_data_type_name (VALUE klass, VALUE type)
81
70
  {
82
- int8_t data_type = rb_ca_guess_type(rtype);
83
- if ( data_type <= CA_NONE || data_type >= CA_NTYPE ) {
84
- rb_raise(rb_eArgError,
85
- "data type is out of range (%i..%i)", CA_NONE+1, CA_NTYPE-1);
86
- }
87
- return ca_valid[data_type] == 1 ? Qtrue : Qfalse;
71
+ int8_t data_type = rb_ca_guess_type(type);
72
+ CA_CHECK_DATA_TYPE(data_type);
73
+ return rb_str_new2(ca_type_name[data_type]);
88
74
  }
89
75
 
90
- /* @overload data_type_name(data_type)
91
-
92
- (Inquiry)
93
- Returns string representaion of the data_type specifier.
94
- */
95
-
96
-
76
+ /* Returns the internal int8_t data_type code (e.g. 8 for :int64,
77
+ 11 for :float64). Inverse of rb_ca_s_data_type_name (which returns
78
+ a String). Accepts the same representations.
79
+ Used by Ruby-side code that needs to compute kernel op_ids from a
80
+ data_type (e.g. CAMonOp::CAST_BASE + code in lib/carray/lazy.rb).
81
+ End users normally do not need this -- use Symbol comparison or
82
+ the CA_* constants. */
97
83
  static VALUE
98
- rb_ca_s_data_type_name (VALUE klass, VALUE type)
84
+ rb_ca_s_data_type_code (VALUE klass, VALUE type)
99
85
  {
100
- int8_t data_type = NUM2INT(type);
86
+ int8_t data_type = rb_ca_guess_type(type);
101
87
  CA_CHECK_DATA_TYPE(data_type);
102
- return rb_str_new2(ca_type_name[data_type]);
88
+ return INT2NUM(data_type);
103
89
  }
104
90
 
105
91
  /* ------------------------------------------------------------------- */
106
92
 
107
93
  void
108
- Init_carray_class ()
94
+ Init_carray_class (void)
109
95
  {
96
+ /* NOTE: ca_data_type_sym[] cache is initialized earlier in
97
+ Init_carray_ext (ruby_carray.c) before the CA_* data_type constants
98
+ are defined. Don't re-initialize here. */
99
+
110
100
  rb_define_const(rb_cObject, "CA_BIG_ENDIAN", INT2NUM(CA_BIG_ENDIAN));
111
101
  rb_define_const(rb_cObject, "CA_LITTLE_ENDIAN", INT2NUM(CA_LITTLE_ENDIAN));
112
102
 
@@ -116,9 +106,9 @@ Init_carray_class ()
116
106
  rb_define_singleton_method(rb_cCArray, "little_endian?",
117
107
  rb_ca_s_little_endian_p, 0);
118
108
  rb_define_singleton_method(rb_cCArray, "sizeof", rb_ca_s_sizeof, 1);
119
- rb_define_singleton_method(rb_cCArray, "data_type?",
120
- rb_ca_s_data_type, 1);
121
109
  rb_define_singleton_method(rb_cCArray, "data_type_name",
122
110
  rb_ca_s_data_type_name, 1);
111
+ rb_define_singleton_method(rb_cCArray, "data_type_code",
112
+ rb_ca_s_data_type_code, 1);
123
113
  }
124
114
 
@@ -0,0 +1,28 @@
1
+ #ifndef CARRAY_CONFIG_H
2
+ #define CARRAY_CONFIG_H
3
+ #define HAVE_SYS_TYPES_H 1
4
+ #define HAVE_STDINT_H 1
5
+ #define HAVE_TYPE_INT8_T 1
6
+ #define HAVE_TYPE_UINT8_T 1
7
+ #define HAVE_TYPE_INT16_T 1
8
+ #define HAVE_TYPE_UINT16_T 1
9
+ #define HAVE_TYPE_INT32_T 1
10
+ #define HAVE_TYPE_UINT32_T 1
11
+ #define HAVE_TYPE_INT64_T 1
12
+ #define HAVE_TYPE_UINT64_T 1
13
+ #define HAVE_TYPE_LONG_LONG 1
14
+ #define HAVE_TYPE_FLOAT 1
15
+ #define HAVE_TYPE_DOUBLE 1
16
+ #define HAVE_COMPLEX_H 1
17
+ #define HAVE_TYPE_FLOAT_COMPLEX 1
18
+ #define HAVE_TYPE_DOUBLE_COMPLEX 1
19
+ #define HAVE_TGMATH_H 1
20
+ #define HAVE_ATAN2 1
21
+ #define HAVE_HYPOT 1
22
+ #define HAVE_LGAMMA 1
23
+ #define HAVE_EXPM1 1
24
+ #define HAVE_MERGESORT 1
25
+ #define HAVE_STRPTIME 1
26
+ #define HAVE_RB_ARITHMETIC_SEQUENCE_EXTRACT 1
27
+ #define HAVE_RUBY_MEMORY_VIEW_H 1
28
+ #endif