carray 2.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +5 -25
  3. data/CHANGELOG.md +16 -0
  4. data/LICENSE +1 -1
  5. data/NEWS.md +3 -0
  6. data/README.md +128 -44
  7. data/carray.gemspec +22 -24
  8. data/ext/ca_array_pool.c +91 -0
  9. data/ext/ca_axis_descriptor.h +186 -0
  10. data/ext/ca_axis_dispatch.c +924 -0
  11. data/ext/ca_axis_group.c +1208 -0
  12. data/ext/ca_bincmp_dispatch.c +76 -0
  13. data/ext/ca_bincmp_dispatch.h +85 -0
  14. data/ext/ca_binop_dispatch.c +125 -0
  15. data/ext/ca_binop_dispatch.h +159 -0
  16. data/ext/ca_categorical_iterator.c +1375 -0
  17. data/ext/ca_compare.c +94 -0
  18. data/ext/ca_compare.h +26 -0
  19. data/ext/ca_composite_dispatch.c +414 -0
  20. data/ext/ca_composite_dispatch.h +116 -0
  21. data/ext/ca_for_buffer.h +96 -0
  22. data/ext/ca_for_each_element.h +241 -0
  23. data/ext/ca_group_iter.c +304 -0
  24. data/ext/ca_iter_substrate.h +325 -0
  25. data/ext/ca_kernel_iterator.c +4321 -0
  26. data/ext/ca_kernel_iterator.h +2603 -0
  27. data/ext/ca_moncmp_dispatch.c +37 -0
  28. data/ext/ca_moncmp_dispatch.h +62 -0
  29. data/ext/ca_monop_dispatch.c +200 -0
  30. data/ext/ca_monop_dispatch.h +235 -0
  31. data/ext/ca_obj_array.c +355 -359
  32. data/ext/ca_obj_bincmp.c +809 -0
  33. data/ext/ca_obj_binop.c +892 -0
  34. data/ext/ca_obj_bitarray.c +369 -164
  35. data/ext/ca_obj_bitfield.c +294 -234
  36. data/ext/ca_obj_block.c +189 -711
  37. data/ext/ca_obj_byte_swap.c +766 -0
  38. data/ext/ca_obj_const_string.c +965 -0
  39. data/ext/ca_obj_face.c +670 -0
  40. data/ext/ca_obj_face.h +247 -0
  41. data/ext/ca_obj_fake.c +228 -100
  42. data/ext/ca_obj_farray.c +54 -441
  43. data/ext/ca_obj_field.c +82 -529
  44. data/ext/ca_obj_fixlen_string.c +306 -0
  45. data/ext/ca_obj_grid.c +858 -440
  46. data/ext/ca_obj_meld.c +1034 -0
  47. data/ext/ca_obj_moncmp.c +569 -0
  48. data/ext/ca_obj_monop.c +1111 -0
  49. data/ext/ca_obj_object.c +774 -298
  50. data/ext/ca_obj_record.c +468 -0
  51. data/ext/ca_obj_reduce.c +97 -82
  52. data/ext/ca_obj_refer.c +569 -459
  53. data/ext/ca_obj_remap.c +475 -0
  54. data/ext/ca_obj_repeat.c +92 -477
  55. data/ext/ca_obj_roll.c +616 -0
  56. data/ext/ca_obj_select.c +344 -296
  57. data/ext/ca_obj_select_axis.c +1296 -0
  58. data/ext/ca_obj_shift.c +230 -792
  59. data/ext/ca_obj_source.c +78 -0
  60. data/ext/ca_obj_stack.c +1173 -0
  61. data/ext/ca_obj_stride.c +2501 -0
  62. data/ext/ca_obj_string.c +268 -0
  63. data/ext/ca_obj_tile.c +614 -0
  64. data/ext/ca_obj_time.c +546 -0
  65. data/ext/ca_obj_timedelta.c +435 -0
  66. data/ext/ca_obj_transpose.c +62 -516
  67. data/ext/ca_obj_triop.c +746 -0
  68. data/ext/ca_obj_unbound_repeat.c +208 -241
  69. data/ext/ca_obj_window.c +1131 -563
  70. data/ext/ca_op_byte_swap.c +175 -0
  71. data/ext/ca_op_ipower.c +319 -0
  72. data/ext/ca_op_powi.h +88 -0
  73. data/ext/ca_sort_kernels.h +132 -0
  74. data/ext/ca_sweep_engine.c +430 -0
  75. data/ext/ca_sweep_engine.h +157 -0
  76. data/ext/ca_transform_common.c +228 -0
  77. data/ext/ca_triop_dispatch.c +55 -0
  78. data/ext/ca_triop_dispatch.h +62 -0
  79. data/ext/carray.h +795 -402
  80. data/ext/carray_access.c +831 -711
  81. data/ext/carray_attribute.c +98 -330
  82. data/ext/carray_bincount.c +255 -0
  83. data/ext/carray_broadcast.c +283 -0
  84. data/ext/carray_call_cfunc.c +1360 -828
  85. data/ext/carray_call_cfunc.h +160 -0
  86. data/ext/carray_cast.c +1212 -301
  87. data/ext/carray_cast_func.rb +81 -40
  88. data/ext/carray_class.c +53 -63
  89. data/ext/carray_config.h +28 -0
  90. data/ext/carray_conversion.c +350 -346
  91. data/ext/carray_copy.c +156 -268
  92. data/ext/carray_core.c +1342 -199
  93. data/ext/carray_count.c +312 -0
  94. data/ext/carray_data_type.c +43 -19
  95. data/ext/carray_element.c +585 -213
  96. data/ext/carray_factorize.c +2542 -0
  97. data/ext/carray_generate.c +230 -559
  98. data/ext/carray_histogram.c +490 -0
  99. data/ext/carray_hold.c +228 -0
  100. data/ext/carray_index_classifier.c +1035 -0
  101. data/ext/carray_index_classifier.h +27 -0
  102. data/ext/carray_internal.h +120 -0
  103. data/ext/carray_kernels_bincmp.c +4445 -0
  104. data/ext/carray_kernels_binop.c +10979 -0
  105. data/ext/carray_kernels_init.c +36 -0
  106. data/ext/carray_kernels_map.c +3466 -0
  107. data/ext/carray_kernels_moncmp.c +2096 -0
  108. data/ext/carray_kernels_monop.c +18312 -0
  109. data/ext/carray_kernels_reduce_aggregate.c +25836 -0
  110. data/ext/carray_kernels_reduce_boolean.c +329 -0
  111. data/ext/carray_kernels_reduce_cumulative.c +14592 -0
  112. data/ext/carray_kernels_reduce_extreme.c +16947 -0
  113. data/ext/carray_kernels_reduce_variance.c +3909 -0
  114. data/ext/carray_kernels_scan.c +3692 -0
  115. data/ext/carray_kernels_search.c +32137 -0
  116. data/ext/carray_kernels_sort.c +10625 -0
  117. data/ext/carray_kernels_triop.c +1391 -0
  118. data/ext/carray_lazy.c +567 -0
  119. data/ext/carray_loop.c +88 -200
  120. data/ext/carray_mask.c +848 -154
  121. data/ext/carray_math_kernel.h +120 -0
  122. data/ext/carray_mathfunc.c +10 -241
  123. data/ext/carray_median_percentile.c +1257 -0
  124. data/ext/carray_memory_view.c +1625 -0
  125. data/ext/carray_operator.c +1526 -318
  126. data/ext/carray_order.c +664 -1394
  127. data/ext/carray_partition.c +416 -0
  128. data/ext/carray_random.c +518 -0
  129. data/ext/carray_scatter.c +357 -0
  130. data/ext/carray_slab.c +1219 -0
  131. data/ext/carray_slab.h +84 -0
  132. data/ext/carray_sort.c +829 -0
  133. data/ext/carray_sort_kernel.c +620 -0
  134. data/ext/carray_struct.c +695 -0
  135. data/ext/carray_test.c +343 -229
  136. data/ext/carray_undef.c +34 -17
  137. data/ext/carray_utils.c +175 -74
  138. data/ext/extconf.rb +216 -55
  139. data/ext/mk_call_cfunc.rb +480 -0
  140. data/ext/mkkernel.rb +8842 -0
  141. data/ext/ruby_carray.c +202 -101
  142. data/ext/version.h +4 -14
  143. data/ext/version.rb +5 -13
  144. data/lib/carray/arrow_tensor.rb +401 -0
  145. data/lib/carray/attribute.rb +166 -0
  146. data/lib/carray/autoload_carray.rb +220 -0
  147. data/lib/carray/autoload_method_extension.rb +44 -0
  148. data/lib/carray/axis_group.rb +711 -0
  149. data/lib/carray/basics.rb +481 -0
  150. data/lib/carray/bincount_nd.rb +358 -0
  151. data/lib/carray/block_iterator.rb +604 -0
  152. data/lib/carray/boolean_reduce.rb +109 -0
  153. data/lib/carray/categorical.rb +561 -0
  154. data/lib/carray/categorical_iterator.rb +1062 -0
  155. data/lib/carray/complex.rb +150 -0
  156. data/lib/carray/conditional.rb +216 -0
  157. data/lib/carray/const_string.rb +228 -0
  158. data/lib/carray/construct.rb +139 -328
  159. data/lib/carray/core_extensions.rb +240 -0
  160. data/lib/carray/data_type_extension.rb +233 -0
  161. data/lib/carray/fixlen_string.rb +95 -0
  162. data/lib/carray/frame/concat.rb +132 -0
  163. data/lib/carray/frame/convert.rb +95 -0
  164. data/lib/carray/frame/csv_parser.rb +211 -0
  165. data/lib/carray/frame/frame.rb +649 -0
  166. data/lib/carray/frame/group.rb +186 -0
  167. data/lib/carray/frame/io.rb +164 -0
  168. data/lib/carray/frame/join.rb +248 -0
  169. data/lib/carray/frame/records.rb +99 -0
  170. data/lib/carray/frame/sort.rb +113 -0
  171. data/lib/carray/frame/verbs.rb +299 -0
  172. data/lib/carray/frame.rb +16 -0
  173. data/lib/carray/histogram.rb +512 -0
  174. data/lib/carray/inspect.rb +37 -20
  175. data/lib/carray/iterator.rb +57 -349
  176. data/lib/carray/lazy.rb +889 -0
  177. data/lib/carray/mask_gap_fill.rb +200 -0
  178. data/lib/carray/math.rb +78 -342
  179. data/lib/carray/meld_reduce.rb +289 -0
  180. data/lib/carray/methods/align_addr.rb +116 -0
  181. data/lib/carray/methods/bin.rb +128 -0
  182. data/lib/carray/methods/bincount.rb +87 -0
  183. data/lib/carray/methods/bit_string.rb +92 -0
  184. data/lib/carray/methods/broadcast.rb +63 -0
  185. data/lib/carray/methods/choose.rb +39 -0
  186. data/lib/carray/methods/composition.rb +280 -0
  187. data/lib/carray/methods/gather_nd.rb +206 -0
  188. data/lib/carray/methods/index.rb +39 -0
  189. data/lib/carray/methods/insert_block.rb +99 -0
  190. data/lib/carray/methods/is_in.rb +141 -0
  191. data/lib/carray/methods/join.rb +90 -0
  192. data/lib/carray/methods/locate_addr.rb +47 -0
  193. data/lib/carray/methods/mask_duplicates.rb +41 -0
  194. data/lib/carray/methods/meshgrid.rb +91 -0
  195. data/lib/carray/methods/mode.rb +126 -0
  196. data/lib/carray/methods/nunique.rb +46 -0
  197. data/lib/carray/methods/resize.rb +56 -0
  198. data/lib/carray/methods/snap.rb +156 -0
  199. data/lib/carray/methods/string_format.rb +57 -0
  200. data/lib/carray/methods/unique.rb +47 -0
  201. data/lib/carray/methods/value_counts.rb +71 -0
  202. data/lib/carray/mkmf.rb +124 -101
  203. data/lib/carray/runtime.rb +108 -0
  204. data/lib/carray/serialize.rb +478 -167
  205. data/lib/carray/slab_iterator.rb +292 -0
  206. data/lib/carray/stack.rb +291 -0
  207. data/lib/carray/string.rb +56 -180
  208. data/lib/carray/string_operation_extension.rb +289 -0
  209. data/lib/carray/struct.rb +335 -323
  210. data/lib/carray/struct_builder.rb +697 -0
  211. data/lib/carray/table.rb +41 -2
  212. data/lib/carray/time.rb +2255 -38
  213. data/lib/carray/window_iterator.rb +655 -0
  214. data/lib/carray.rb +55 -57
  215. metadata +163 -130
  216. data/Rakefile +0 -51
  217. data/TODO.md +0 -18
  218. data/ext/ca_iter_block.c +0 -257
  219. data/ext/ca_iter_dimension.c +0 -299
  220. data/ext/ca_iter_window.c +0 -214
  221. data/ext/ca_obj_mapping.c +0 -644
  222. data/ext/carray_iterator.c +0 -641
  223. data/ext/carray_math.rb +0 -850
  224. data/ext/carray_numeric.c +0 -259
  225. data/ext/carray_sort_addr.c +0 -254
  226. data/ext/carray_stat.c +0 -2100
  227. data/ext/carray_stat_proc.rb +0 -1999
  228. data/ext/mkmath.rb +0 -741
  229. data/ext/ruby_ccomplex.c +0 -509
  230. data/ext/ruby_float_func.c +0 -86
  231. data/lib/carray/array.rb +0 -8
  232. data/lib/carray/autoload/autoload_base.rb +0 -19
  233. data/lib/carray/autoload/autoload_gem_cairo.rb +0 -9
  234. data/lib/carray/autoload/autoload_gem_ffi.rb +0 -9
  235. data/lib/carray/autoload/autoload_gem_gnuplot.rb +0 -2
  236. data/lib/carray/autoload/autoload_gem_io_csv.rb +0 -14
  237. data/lib/carray/autoload/autoload_gem_io_pg.rb +0 -6
  238. data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +0 -12
  239. data/lib/carray/autoload/autoload_gem_narray.rb +0 -10
  240. data/lib/carray/autoload/autoload_gem_numo_narray.rb +0 -15
  241. data/lib/carray/autoload/autoload_gem_opencv.rb +0 -16
  242. data/lib/carray/autoload/autoload_gem_random.rb +0 -8
  243. data/lib/carray/autoload/autoload_gem_rmagick.rb +0 -23
  244. data/lib/carray/autoload/autoload_gem_zimg.rb +0 -3
  245. data/lib/carray/autoload/autoload_io_imagemagick.rb +0 -6
  246. data/lib/carray/autoload/autoload_math_histogram.rb +0 -5
  247. data/lib/carray/autoload/autoload_math_recurrence.rb +0 -6
  248. data/lib/carray/autoload/autoload_object_iterator.rb +0 -1
  249. data/lib/carray/autoload/autoload_object_link.rb +0 -1
  250. data/lib/carray/autoload/autoload_object_pack.rb +0 -2
  251. data/lib/carray/autoload.rb +0 -141
  252. data/lib/carray/basic.rb +0 -191
  253. data/lib/carray/broadcast.rb +0 -101
  254. data/lib/carray/compose.rb +0 -315
  255. data/lib/carray/convert.rb +0 -115
  256. data/lib/carray/info.rb +0 -110
  257. data/lib/carray/io/imagemagick.rb +0 -235
  258. data/lib/carray/mask.rb +0 -102
  259. data/lib/carray/math/histogram.rb +0 -177
  260. data/lib/carray/math/recurrence.rb +0 -93
  261. data/lib/carray/object/ca_obj_iterator.rb +0 -50
  262. data/lib/carray/object/ca_obj_link.rb +0 -50
  263. data/lib/carray/object/ca_obj_pack.rb +0 -99
  264. data/lib/carray/obsolete.rb +0 -256
  265. data/lib/carray/ordering.rb +0 -181
  266. data/lib/carray/testing.rb +0 -51
  267. data/lib/carray/transform.rb +0 -109
  268. data/misc/Methods.ja.md +0 -182
  269. data/misc/NOTE +0 -51
  270. data/spec/Classes/CABitfield_spec.rb +0 -58
  271. data/spec/Classes/CABlockIterator_spec.rb +0 -114
  272. data/spec/Classes/CABlock_spec.rb +0 -205
  273. data/spec/Classes/CAField_spec.rb +0 -39
  274. data/spec/Classes/CAGrid_spec.rb +0 -75
  275. data/spec/Classes/CAMap_spec.rb +0 -0
  276. data/spec/Classes/CAMapping_spec.rb +0 -105
  277. data/spec/Classes/CAObject_attribute_spec.rb +0 -33
  278. data/spec/Classes/CAObject_spec.rb +0 -33
  279. data/spec/Classes/CARefer_spec.rb +0 -93
  280. data/spec/Classes/CARepeat_spec.rb +0 -65
  281. data/spec/Classes/CASelect_spec.rb +0 -22
  282. data/spec/Classes/CAShift_spec.rb +0 -16
  283. data/spec/Classes/CAStruct_spec.rb +0 -71
  284. data/spec/Classes/CATranspose_spec.rb +0 -60
  285. data/spec/Classes/CAUnboudRepeat_spec.rb +0 -102
  286. data/spec/Classes/CAWindow_spec.rb +0 -54
  287. data/spec/Classes/CAWrap_spec.rb +0 -8
  288. data/spec/Classes/CArray_spec.rb +0 -184
  289. data/spec/Classes/CScalar_spec.rb +0 -55
  290. data/spec/Classes/ex1.rb +0 -46
  291. data/spec/Features/feature_130_spec.rb +0 -19
  292. data/spec/Features/feature_attributes_spec.rb +0 -280
  293. data/spec/Features/feature_boolean_spec.rb +0 -98
  294. data/spec/Features/feature_broadcast.rb +0 -116
  295. data/spec/Features/feature_cast_function.rb +0 -19
  296. data/spec/Features/feature_cast_spec.rb +0 -33
  297. data/spec/Features/feature_class_spec.rb +0 -84
  298. data/spec/Features/feature_complex_spec.rb +0 -42
  299. data/spec/Features/feature_composite_spec.rb +0 -124
  300. data/spec/Features/feature_convert_spec.rb +0 -46
  301. data/spec/Features/feature_copy_spec.rb +0 -123
  302. data/spec/Features/feature_creation_spec.rb +0 -84
  303. data/spec/Features/feature_element_spec.rb +0 -144
  304. data/spec/Features/feature_extream_spec.rb +0 -54
  305. data/spec/Features/feature_generate_spec.rb +0 -74
  306. data/spec/Features/feature_index_spec.rb +0 -69
  307. data/spec/Features/feature_mask_spec.rb +0 -580
  308. data/spec/Features/feature_math_spec.rb +0 -97
  309. data/spec/Features/feature_order_spec.rb +0 -146
  310. data/spec/Features/feature_ref_store_spec.rb +0 -209
  311. data/spec/Features/feature_serialization_spec.rb +0 -125
  312. data/spec/Features/feature_stat_spec.rb +0 -397
  313. data/spec/Features/feature_virtual_spec.rb +0 -48
  314. data/spec/Features/method_eq_spec.rb +0 -81
  315. data/spec/Features/method_is_nan_spec.rb +0 -12
  316. data/spec/Features/method_map_spec.rb +0 -54
  317. data/spec/Features/method_max_with.rb +0 -20
  318. data/spec/Features/method_min_with.rb +0 -19
  319. data/spec/Features/method_ne_spec.rb +0 -18
  320. data/spec/Features/method_project_spec.rb +0 -188
  321. data/spec/Features/method_ref_spec.rb +0 -27
  322. data/spec/Features/method_round_spec.rb +0 -11
  323. data/spec/Features/method_s_linspace_spec.rb +0 -48
  324. data/spec/Features/method_s_span_spec.rb +0 -14
  325. data/spec/Features/method_seq_spec.rb +0 -47
  326. data/spec/Features/method_sort_with.rb +0 -43
  327. data/spec/Features/method_sorted_with.rb +0 -29
  328. data/spec/Features/method_span_spec.rb +0 -42
  329. data/spec/Features/method_wrap_readonly_spec.rb +0 -43
  330. data/spec/UnitTest/test_CAVirtual.rb +0 -214
  331. data/spec/spec_all.rb +0 -10
  332. data/utils/ca_ase.rb +0 -21
  333. data/utils/ca_methods.rb +0 -15
  334. data/utils/cast_checker.rb +0 -30
  335. data/utils/convert_test.rb +0 -73
  336. data/utils/extract_yard.rb +0 -22
  337. data/utils/guess_shape.rb +0 -76
  338. data/utils/monkey_patch_methods.rb +0 -62
  339. data/utils/remove_resource_fork.sh +0 -5
@@ -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-2020 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-2020 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