carray 2.0.1 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +6 -25
  3. data/CHANGELOG.md +338 -0
  4. data/{NEWS.md → CHANGELOG.v1.md} +3 -0
  5. data/LICENSE +1 -1
  6. data/README.md +120 -36
  7. data/carray.gemspec +32 -30
  8. data/ext/ca_array_pool.c +91 -0
  9. data/ext/ca_axis_descriptor.h +186 -0
  10. data/ext/ca_axis_dispatch.c +924 -0
  11. data/ext/ca_axis_group.c +1244 -0
  12. data/ext/ca_bincmp_dispatch.c +76 -0
  13. data/ext/ca_bincmp_dispatch.h +85 -0
  14. data/ext/ca_binop_dispatch.c +124 -0
  15. data/ext/ca_binop_dispatch.h +152 -0
  16. data/ext/ca_categorical_iterator.c +1375 -0
  17. data/ext/ca_compare.c +94 -0
  18. data/ext/ca_compare.h +26 -0
  19. data/ext/ca_composite_dispatch.c +414 -0
  20. data/ext/ca_composite_dispatch.h +116 -0
  21. data/ext/ca_for_buffer.h +96 -0
  22. data/ext/ca_for_each_element.h +239 -0
  23. data/ext/ca_group_iter.c +304 -0
  24. data/ext/ca_iter_substrate.h +325 -0
  25. data/ext/ca_kernel_iterator.c +4367 -0
  26. data/ext/ca_kernel_iterator.h +2596 -0
  27. data/ext/ca_moncmp_dispatch.c +37 -0
  28. data/ext/ca_moncmp_dispatch.h +62 -0
  29. data/ext/ca_monop_dispatch.c +200 -0
  30. data/ext/ca_monop_dispatch.h +235 -0
  31. data/ext/ca_obj_array.c +355 -359
  32. data/ext/ca_obj_bincmp.c +839 -0
  33. data/ext/ca_obj_binop.c +948 -0
  34. data/ext/ca_obj_bitarray.c +369 -164
  35. data/ext/ca_obj_bitfield.c +294 -234
  36. data/ext/ca_obj_block.c +189 -711
  37. data/ext/ca_obj_byte_swap.c +766 -0
  38. data/ext/ca_obj_const_string.c +967 -0
  39. data/ext/ca_obj_face.c +750 -0
  40. data/ext/ca_obj_face.h +279 -0
  41. data/ext/ca_obj_fake.c +239 -100
  42. data/ext/ca_obj_farray.c +54 -441
  43. data/ext/ca_obj_field.c +82 -529
  44. data/ext/ca_obj_fixlen_string.c +308 -0
  45. data/ext/ca_obj_grid.c +866 -440
  46. data/ext/ca_obj_meld.c +1039 -0
  47. data/ext/ca_obj_moncmp.c +588 -0
  48. data/ext/ca_obj_monop.c +1123 -0
  49. data/ext/ca_obj_object.c +866 -296
  50. data/ext/ca_obj_record.c +470 -0
  51. data/ext/ca_obj_reduce.c +97 -82
  52. data/ext/ca_obj_refer.c +593 -459
  53. data/ext/ca_obj_remap.c +475 -0
  54. data/ext/ca_obj_repeat.c +92 -477
  55. data/ext/ca_obj_roll.c +624 -0
  56. data/ext/ca_obj_select.c +344 -296
  57. data/ext/ca_obj_select_axis.c +1306 -0
  58. data/ext/ca_obj_shift.c +231 -793
  59. data/ext/ca_obj_source.c +78 -0
  60. data/ext/ca_obj_stack.c +1173 -0
  61. data/ext/ca_obj_stride.c +2584 -0
  62. data/ext/ca_obj_string.c +270 -0
  63. data/ext/ca_obj_tile.c +622 -0
  64. data/ext/ca_obj_time.c +548 -0
  65. data/ext/ca_obj_timedelta.c +437 -0
  66. data/ext/ca_obj_transpose.c +62 -516
  67. data/ext/ca_obj_triop.c +785 -0
  68. data/ext/ca_obj_window.c +1202 -565
  69. data/ext/ca_op_byte_swap.c +175 -0
  70. data/ext/ca_op_cmplx64.h +123 -0
  71. data/ext/ca_op_ipower.c +316 -0
  72. data/ext/ca_op_powi.h +88 -0
  73. data/ext/ca_sort_kernels.h +132 -0
  74. data/ext/ca_sweep_engine.c +473 -0
  75. data/ext/ca_sweep_engine.h +166 -0
  76. data/ext/ca_transform_common.c +235 -0
  77. data/ext/ca_triop_dispatch.c +55 -0
  78. data/ext/ca_triop_dispatch.h +62 -0
  79. data/ext/carray.h +810 -420
  80. data/ext/carray_access.c +873 -731
  81. data/ext/carray_attribute.c +98 -329
  82. data/ext/carray_bincount.c +255 -0
  83. data/ext/carray_broadcast.c +376 -0
  84. data/ext/carray_build_flags.h +3 -0
  85. data/ext/carray_call_cfunc.c +2897 -874
  86. data/ext/carray_call_cfunc.h +313 -0
  87. data/ext/carray_cast.c +1264 -315
  88. data/ext/carray_cast_func.rb +81 -40
  89. data/ext/carray_class.c +53 -63
  90. data/ext/carray_config.h +28 -0
  91. data/ext/carray_conversion.c +350 -346
  92. data/ext/carray_copy.c +168 -270
  93. data/ext/carray_core.c +1396 -206
  94. data/ext/carray_count.c +312 -0
  95. data/ext/carray_data_type.c +43 -19
  96. data/ext/carray_element.c +585 -213
  97. data/ext/carray_factorize.c +2542 -0
  98. data/ext/carray_generate.c +230 -559
  99. data/ext/carray_histogram.c +490 -0
  100. data/ext/carray_hold.c +228 -0
  101. data/ext/carray_index_classifier.c +1021 -0
  102. data/ext/carray_index_classifier.h +27 -0
  103. data/ext/carray_internal.h +136 -0
  104. data/ext/carray_kernels_bincmp.c +4446 -0
  105. data/ext/carray_kernels_binop.c +11001 -0
  106. data/ext/carray_kernels_init.c +1131 -0
  107. data/ext/carray_kernels_map.c +3467 -0
  108. data/ext/carray_kernels_moncmp.c +2097 -0
  109. data/ext/carray_kernels_monop.c +18313 -0
  110. data/ext/carray_kernels_reduce_aggregate.c +25837 -0
  111. data/ext/carray_kernels_reduce_boolean.c +330 -0
  112. data/ext/carray_kernels_reduce_cumulative.c +14593 -0
  113. data/ext/carray_kernels_reduce_extreme.c +16948 -0
  114. data/ext/carray_kernels_reduce_variance.c +3910 -0
  115. data/ext/carray_kernels_scan.c +3693 -0
  116. data/ext/carray_kernels_search.c +32138 -0
  117. data/ext/carray_kernels_sort.c +10626 -0
  118. data/ext/carray_kernels_triop.c +1392 -0
  119. data/ext/carray_lazy.c +737 -0
  120. data/ext/carray_loop.c +88 -200
  121. data/ext/carray_mask.c +853 -158
  122. data/ext/carray_math_kernel.h +120 -0
  123. data/ext/carray_mathfunc.c +10 -241
  124. data/ext/carray_median_percentile.c +1257 -0
  125. data/ext/carray_memory_view.c +1650 -0
  126. data/ext/carray_operator.c +1525 -320
  127. data/ext/carray_order.c +664 -1394
  128. data/ext/carray_partition.c +416 -0
  129. data/ext/carray_random.c +518 -0
  130. data/ext/carray_scatter.c +357 -0
  131. data/ext/carray_slab.c +1219 -0
  132. data/ext/carray_slab.h +84 -0
  133. data/ext/carray_sort.c +829 -0
  134. data/ext/carray_sort_kernel.c +620 -0
  135. data/ext/carray_struct.c +695 -0
  136. data/ext/carray_test.c +343 -229
  137. data/ext/carray_undef.c +34 -17
  138. data/ext/carray_utils.c +175 -74
  139. data/ext/extconf.rb +234 -55
  140. data/ext/mk_call_cfunc.rb +671 -0
  141. data/ext/mkkernel.rb +9096 -0
  142. data/ext/ruby_carray.c +211 -108
  143. data/ext/version.h +4 -14
  144. data/ext/version.rb +5 -13
  145. data/lib/carray/arrow_tensor.rb +401 -0
  146. data/lib/carray/attribute.rb +166 -0
  147. data/lib/carray/autoload_carray.rb +239 -0
  148. data/lib/carray/autoload_method_extension.rb +45 -0
  149. data/lib/carray/axis_group.rb +711 -0
  150. data/lib/carray/basics.rb +481 -0
  151. data/lib/carray/bincount_nd.rb +358 -0
  152. data/lib/carray/block_iterator.rb +614 -0
  153. data/lib/carray/boolean_reduce.rb +109 -0
  154. data/lib/carray/categorical.rb +561 -0
  155. data/lib/carray/categorical_iterator.rb +1084 -0
  156. data/lib/carray/complex.rb +150 -0
  157. data/lib/carray/conditional.rb +216 -0
  158. data/lib/carray/const_string.rb +228 -0
  159. data/lib/carray/construct.rb +160 -328
  160. data/lib/carray/core_extensions.rb +297 -0
  161. data/lib/carray/data_type_extension.rb +250 -0
  162. data/lib/carray/fixlen_string.rb +95 -0
  163. data/lib/carray/frame/concat.rb +132 -0
  164. data/lib/carray/frame/convert.rb +95 -0
  165. data/lib/carray/frame/csv_parser.rb +211 -0
  166. data/lib/carray/frame/frame.rb +642 -0
  167. data/lib/carray/frame/group.rb +186 -0
  168. data/lib/carray/frame/io.rb +321 -0
  169. data/lib/carray/frame/join.rb +248 -0
  170. data/lib/carray/frame/records.rb +99 -0
  171. data/lib/carray/frame/sort.rb +113 -0
  172. data/lib/carray/frame/verbs.rb +316 -0
  173. data/lib/carray/frame.rb +16 -0
  174. data/lib/carray/fuse_source.rb +123 -0
  175. data/lib/carray/fusion.rb +218 -0
  176. data/lib/carray/histogram.rb +512 -0
  177. data/lib/carray/inspect.rb +37 -26
  178. data/lib/carray/iterator.rb +58 -349
  179. data/lib/carray/lazy.rb +941 -0
  180. data/lib/carray/mask_gap_fill.rb +200 -0
  181. data/lib/carray/math.rb +78 -342
  182. data/lib/carray/meld_reduce.rb +289 -0
  183. data/lib/carray/methods/align_addr.rb +116 -0
  184. data/lib/carray/methods/bin.rb +128 -0
  185. data/lib/carray/methods/bincount.rb +87 -0
  186. data/lib/carray/methods/bit_string.rb +92 -0
  187. data/lib/carray/methods/broadcast.rb +63 -0
  188. data/lib/carray/methods/choose.rb +39 -0
  189. data/lib/carray/methods/composition.rb +280 -0
  190. data/lib/carray/methods/gather_nd.rb +206 -0
  191. data/lib/carray/methods/index.rb +39 -0
  192. data/lib/carray/methods/insert_block.rb +99 -0
  193. data/lib/carray/methods/is_in.rb +141 -0
  194. data/lib/carray/methods/join.rb +90 -0
  195. data/lib/carray/methods/locate_addr.rb +52 -0
  196. data/lib/carray/methods/mask_duplicates.rb +41 -0
  197. data/lib/carray/methods/meshgrid.rb +90 -0
  198. data/lib/carray/methods/mode.rb +126 -0
  199. data/lib/carray/methods/nunique.rb +46 -0
  200. data/lib/carray/methods/resize.rb +56 -0
  201. data/lib/carray/methods/snap.rb +161 -0
  202. data/lib/carray/methods/string_format.rb +57 -0
  203. data/lib/carray/methods/unique.rb +47 -0
  204. data/lib/carray/methods/value_counts.rb +71 -0
  205. data/lib/carray/mkmf.rb +124 -101
  206. data/lib/carray/runtime.rb +89 -0
  207. data/lib/carray/serialize.rb +478 -167
  208. data/lib/carray/slab_iterator.rb +305 -0
  209. data/lib/carray/stack.rb +291 -0
  210. data/lib/carray/string.rb +56 -180
  211. data/lib/carray/string_operation_extension.rb +289 -0
  212. data/lib/carray/struct.rb +335 -323
  213. data/lib/carray/struct_builder.rb +697 -0
  214. data/lib/carray/table.rb +41 -2
  215. data/lib/carray/time.rb +2654 -38
  216. data/lib/carray/window_iterator.rb +927 -0
  217. data/lib/carray.rb +55 -57
  218. data/yard-stubs/ca_obj_array.rb +385 -0
  219. data/yard-stubs/ca_obj_bitarray.rb +38 -0
  220. data/yard-stubs/ca_obj_bitfield.rb +43 -0
  221. data/yard-stubs/ca_obj_block.rb +73 -0
  222. data/yard-stubs/ca_obj_byte_swap.rb +56 -0
  223. data/yard-stubs/ca_obj_fake.rb +31 -0
  224. data/yard-stubs/ca_obj_farray.rb +32 -0
  225. data/yard-stubs/ca_obj_field.rb +45 -0
  226. data/yard-stubs/ca_obj_grid.rb +35 -0
  227. data/yard-stubs/ca_obj_refer.rb +72 -0
  228. data/yard-stubs/ca_obj_roll.rb +45 -0
  229. data/yard-stubs/ca_obj_shift.rb +43 -0
  230. data/yard-stubs/ca_obj_stride.rb +181 -0
  231. data/yard-stubs/ca_obj_tile.rb +29 -0
  232. data/yard-stubs/ca_obj_transpose.rb +40 -0
  233. data/yard-stubs/ca_obj_window.rb +49 -0
  234. data/yard-stubs/carray_access.rb +131 -0
  235. data/yard-stubs/carray_attribute.rb +246 -0
  236. data/yard-stubs/carray_broadcast.rb +37 -0
  237. data/yard-stubs/carray_cast.rb +489 -0
  238. data/yard-stubs/carray_class.rb +65 -0
  239. data/yard-stubs/carray_conversion.rb +76 -0
  240. data/yard-stubs/carray_copy.rb +79 -0
  241. data/yard-stubs/carray_core.rb +114 -0
  242. data/yard-stubs/carray_count.rb +79 -0
  243. data/yard-stubs/carray_element.rb +108 -0
  244. data/yard-stubs/carray_generate.rb +66 -0
  245. data/yard-stubs/carray_lazy.rb +23 -0
  246. data/yard-stubs/carray_loop.rb +140 -0
  247. data/yard-stubs/carray_mask.rb +259 -0
  248. data/yard-stubs/carray_math.rb +132 -0
  249. data/yard-stubs/carray_mathfunc.rb +45 -0
  250. data/yard-stubs/carray_median_percentile.rb +89 -0
  251. data/yard-stubs/carray_memory_view.rb +163 -0
  252. data/yard-stubs/carray_order.rb +312 -0
  253. data/yard-stubs/carray_random.rb +89 -0
  254. data/yard-stubs/carray_scatter.rb +106 -0
  255. data/yard-stubs/carray_slab.rb +57 -0
  256. data/yard-stubs/carray_sort.rb +163 -0
  257. data/yard-stubs/carray_test.rb +85 -0
  258. data/yard-stubs/carray_undef.rb +64 -0
  259. data/yard-stubs/carray_utils.rb +97 -0
  260. data/yard-stubs/ruby_carray.rb +193 -0
  261. metadata +220 -138
  262. data/Rakefile +0 -51
  263. data/TODO.md +0 -18
  264. data/ext/ca_iter_block.c +0 -257
  265. data/ext/ca_iter_dimension.c +0 -299
  266. data/ext/ca_iter_window.c +0 -214
  267. data/ext/ca_obj_mapping.c +0 -644
  268. data/ext/ca_obj_unbound_repeat.c +0 -529
  269. data/ext/carray_iterator.c +0 -641
  270. data/ext/carray_math.rb +0 -850
  271. data/ext/carray_numeric.c +0 -259
  272. data/ext/carray_sort_addr.c +0 -254
  273. data/ext/carray_stat.c +0 -2100
  274. data/ext/carray_stat_proc.rb +0 -1999
  275. data/ext/mkmath.rb +0 -741
  276. data/ext/ruby_ccomplex.c +0 -509
  277. data/ext/ruby_float_func.c +0 -86
  278. data/lib/carray/array.rb +0 -8
  279. data/lib/carray/autoload/autoload_base.rb +0 -19
  280. data/lib/carray/autoload/autoload_gem_cairo.rb +0 -9
  281. data/lib/carray/autoload/autoload_gem_ffi.rb +0 -9
  282. data/lib/carray/autoload/autoload_gem_gnuplot.rb +0 -2
  283. data/lib/carray/autoload/autoload_gem_io_csv.rb +0 -14
  284. data/lib/carray/autoload/autoload_gem_io_pg.rb +0 -6
  285. data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +0 -12
  286. data/lib/carray/autoload/autoload_gem_narray.rb +0 -10
  287. data/lib/carray/autoload/autoload_gem_numo_narray.rb +0 -15
  288. data/lib/carray/autoload/autoload_gem_opencv.rb +0 -16
  289. data/lib/carray/autoload/autoload_gem_random.rb +0 -8
  290. data/lib/carray/autoload/autoload_gem_rmagick.rb +0 -23
  291. data/lib/carray/autoload/autoload_gem_zimg.rb +0 -3
  292. data/lib/carray/autoload/autoload_io_imagemagick.rb +0 -6
  293. data/lib/carray/autoload/autoload_math_histogram.rb +0 -5
  294. data/lib/carray/autoload/autoload_math_recurrence.rb +0 -6
  295. data/lib/carray/autoload/autoload_object_iterator.rb +0 -1
  296. data/lib/carray/autoload/autoload_object_link.rb +0 -1
  297. data/lib/carray/autoload/autoload_object_pack.rb +0 -2
  298. data/lib/carray/autoload.rb +0 -141
  299. data/lib/carray/basic.rb +0 -191
  300. data/lib/carray/broadcast.rb +0 -101
  301. data/lib/carray/compose.rb +0 -315
  302. data/lib/carray/convert.rb +0 -115
  303. data/lib/carray/info.rb +0 -110
  304. data/lib/carray/io/imagemagick.rb +0 -235
  305. data/lib/carray/mask.rb +0 -102
  306. data/lib/carray/math/histogram.rb +0 -177
  307. data/lib/carray/math/recurrence.rb +0 -93
  308. data/lib/carray/object/ca_obj_iterator.rb +0 -50
  309. data/lib/carray/object/ca_obj_link.rb +0 -50
  310. data/lib/carray/object/ca_obj_pack.rb +0 -99
  311. data/lib/carray/obsolete.rb +0 -256
  312. data/lib/carray/ordering.rb +0 -181
  313. data/lib/carray/testing.rb +0 -51
  314. data/lib/carray/transform.rb +0 -109
  315. data/mailmap +0 -1
  316. data/misc/Methods.ja.md +0 -182
  317. data/misc/NOTE +0 -51
  318. data/spec/Classes/CABitfield_spec.rb +0 -58
  319. data/spec/Classes/CABlockIterator_spec.rb +0 -114
  320. data/spec/Classes/CABlock_spec.rb +0 -205
  321. data/spec/Classes/CAField_spec.rb +0 -39
  322. data/spec/Classes/CAGrid_spec.rb +0 -75
  323. data/spec/Classes/CAMap_spec.rb +0 -0
  324. data/spec/Classes/CAMapping_spec.rb +0 -105
  325. data/spec/Classes/CAObject_attribute_spec.rb +0 -33
  326. data/spec/Classes/CAObject_spec.rb +0 -33
  327. data/spec/Classes/CARefer_spec.rb +0 -93
  328. data/spec/Classes/CARepeat_spec.rb +0 -65
  329. data/spec/Classes/CASelect_spec.rb +0 -22
  330. data/spec/Classes/CAShift_spec.rb +0 -16
  331. data/spec/Classes/CAStruct_spec.rb +0 -71
  332. data/spec/Classes/CATranspose_spec.rb +0 -60
  333. data/spec/Classes/CAUnboudRepeat_spec.rb +0 -102
  334. data/spec/Classes/CAWindow_spec.rb +0 -54
  335. data/spec/Classes/CAWrap_spec.rb +0 -8
  336. data/spec/Classes/CArray_spec.rb +0 -184
  337. data/spec/Classes/CScalar_spec.rb +0 -55
  338. data/spec/Features/feature_130_spec.rb +0 -19
  339. data/spec/Features/feature_attributes_spec.rb +0 -280
  340. data/spec/Features/feature_boolean_spec.rb +0 -98
  341. data/spec/Features/feature_broadcast.rb +0 -116
  342. data/spec/Features/feature_cast_function.rb +0 -19
  343. data/spec/Features/feature_cast_spec.rb +0 -33
  344. data/spec/Features/feature_class_spec.rb +0 -84
  345. data/spec/Features/feature_complex_spec.rb +0 -42
  346. data/spec/Features/feature_composite_spec.rb +0 -124
  347. data/spec/Features/feature_convert_spec.rb +0 -46
  348. data/spec/Features/feature_copy_spec.rb +0 -123
  349. data/spec/Features/feature_creation_spec.rb +0 -84
  350. data/spec/Features/feature_element_spec.rb +0 -144
  351. data/spec/Features/feature_extream_spec.rb +0 -54
  352. data/spec/Features/feature_generate_spec.rb +0 -74
  353. data/spec/Features/feature_index_spec.rb +0 -69
  354. data/spec/Features/feature_mask_spec.rb +0 -580
  355. data/spec/Features/feature_math_spec.rb +0 -97
  356. data/spec/Features/feature_order_spec.rb +0 -146
  357. data/spec/Features/feature_ref_store_spec.rb +0 -209
  358. data/spec/Features/feature_serialization_spec.rb +0 -125
  359. data/spec/Features/feature_stat_spec.rb +0 -397
  360. data/spec/Features/feature_virtual_spec.rb +0 -48
  361. data/spec/Features/method_eq_spec.rb +0 -81
  362. data/spec/Features/method_is_nan_spec.rb +0 -12
  363. data/spec/Features/method_map_spec.rb +0 -54
  364. data/spec/Features/method_max_with.rb +0 -20
  365. data/spec/Features/method_min_with.rb +0 -19
  366. data/spec/Features/method_ne_spec.rb +0 -18
  367. data/spec/Features/method_project_spec.rb +0 -188
  368. data/spec/Features/method_ref_spec.rb +0 -27
  369. data/spec/Features/method_round_spec.rb +0 -11
  370. data/spec/Features/method_s_linspace_spec.rb +0 -48
  371. data/spec/Features/method_s_span_spec.rb +0 -14
  372. data/spec/Features/method_seq_spec.rb +0 -47
  373. data/spec/Features/method_sort_with.rb +0 -43
  374. data/spec/Features/method_sorted_with.rb +0 -29
  375. data/spec/Features/method_span_spec.rb +0 -42
  376. data/spec/Features/method_wrap_readonly_spec.rb +0 -43
  377. data/spec/UnitTest/test_CAVirtual.rb +0 -214
  378. data/spec/spec_all.rb +0 -10
  379. data/utils/ca_ase.rb +0 -21
  380. data/utils/ca_methods.rb +0 -15
  381. data/utils/cast_checker.rb +0 -30
  382. data/utils/convert_test.rb +0 -73
  383. data/utils/extract_yard.rb +0 -22
  384. data/utils/guess_shape.rb +0 -76
  385. data/utils/monkey_patch_methods.rb +0 -62
  386. data/utils/remove_resource_fork.sh +0 -5
data/ext/mkmath.rb DELETED
@@ -1,741 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # mkmath.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
- require 'stringio'
14
-
15
- def monfunc (op, name, hash)
16
- io = StringIO.new
17
- io.puts
18
- io.puts "/*----------------------- #{name} --------------------------*/"
19
- hash.each do |types, expr0|
20
- if not expr0
21
- next
22
- end
23
- expr0.gsub!(/#/, '*p')
24
- types.each do |type|
25
- if type
26
- expr = expr0.gsub(/<type>/, type)
27
- omp_ok = ( type != "VALUE" ) ? 1 : 0
28
- io.print %{
29
- static void
30
- ca_monop_#{name}_#{type} (ca_size_t n, boolean8_t *m, char *ptr1, ca_size_t i1, char *ptr2, ca_size_t i2)
31
- {
32
- #{type} *q1 = (#{type} *) ptr1, *q2 = (#{type} *) ptr2;
33
- #{type} *p1 = q1, *p2 = q2;
34
- ca_size_t k;
35
- if ( m ) {
36
- boolean8_t *pm;
37
- #if defined(_OPENMP) && #{omp_ok}
38
- #pragma omp parallel for private(pm,p1,p2)
39
- #endif
40
- for (k=0; k<n; k++) {
41
- pm = m + k;
42
- if ( ! *pm ) {
43
- p1 = q1 + k*i1;
44
- p2 = q2 + k*i2;
45
- {
46
- #{expr}
47
- }
48
- }
49
- }
50
- }
51
- else {
52
- #if defined(_OPENMP) && #{omp_ok}
53
- #pragma omp parallel for private(p1,p2)
54
- #endif
55
- for (k=0; k<n; k++) {
56
- p1 = q1 + k*i1;
57
- p2 = q2 + k*i2;
58
- {
59
- #{expr}
60
- }
61
- }
62
- }
63
- }
64
- }
65
- end
66
- end
67
- end
68
- io.puts
69
- io.puts "ca_monop_func_t"
70
- io.puts "ca_monop_#{name}[CA_NTYPE] = {"
71
- ALL_TYPES.each_index do |i|
72
- type = nil
73
- hash.each do |types, expr|
74
- if not expr
75
- next
76
- end
77
- type ||= types[i]
78
- end
79
- if type
80
- io.puts(" ca_monop_#{name}_#{type},")
81
- else
82
- io.puts(" ca_monop_not_implement,")
83
- end
84
- end
85
- io.puts "};"
86
- io.puts
87
- if hash.has_key?(INT_TYPES) or hash.has_key?(ALL_TYPES)
88
- io.print %{
89
- static VALUE rb_ca_#{name} (VALUE self)
90
- { return rb_ca_call_monop(self, ca_monop_#{name}); }
91
- }
92
- else
93
- io.print %{
94
- static VALUE rb_ca_#{name} (VALUE self)
95
- {
96
- if ( rb_ca_is_integer_type(self) ) {
97
- self = rb_ca_wrap_readonly(self, INT2NUM(CA_FLOAT64));
98
- }
99
- return rb_ca_call_monop(self, ca_monop_#{name});
100
- }
101
- }
102
- end
103
- io.print %{
104
- static VALUE rb_ca_#{name}_bang (VALUE self)
105
- { return rb_ca_call_monop_bang(self, ca_monop_#{name}); }
106
- }
107
- DEFINITIONS << io.string
108
- if op
109
- METHODS << %{
110
- rb_define_method(rb_cCArray, "#{op}", rb_ca_#{name}, 0);
111
- }
112
- end
113
- METHODS << %{
114
- rb_define_method(rb_cCArray, "#{name}!", rb_ca_#{name}_bang, 0);
115
- }
116
- DEFINITIONS << %{
117
- static VALUE rb_cmath_#{name} (VALUE mod, VALUE arg)
118
- { return ca_math_call(mod, arg, rb_intern("#{name}")); }
119
- }
120
- METHODS << %{
121
- rb_define_module_function(rb_mCAMath, "#{name}", rb_cmath_#{name}, 1);
122
- }
123
- end
124
-
125
-
126
- def monop (op, name, hash)
127
- io = StringIO.new
128
- io.puts
129
- io.puts "/*----------------------- #{name} --------------------------*/"
130
- hash.each do |types, expr0|
131
- if not expr0
132
- next
133
- end
134
- expr0.gsub!(/#/, '*p')
135
- types.each do |type|
136
- if type
137
- expr = expr0.gsub(/<type>/, type)
138
- omp_ok = ( type != "VALUE" ) ? 1 : 0
139
- io.print %{
140
- static void
141
- ca_monop_#{name}_#{type} (ca_size_t n, boolean8_t *m, char *ptr1, ca_size_t i1, char *ptr2, ca_size_t i2)
142
- {
143
- #{type} *q1 = (#{type} *) ptr1, *q2 = (#{type} *) ptr2;
144
- #{type} *p1 = q1, *p2 = q2;
145
- ca_size_t k;
146
- if ( m ) {
147
- boolean8_t *pm;
148
- #if defined(_OPENMP) && #{omp_ok}
149
- #pragma omp parallel for private(pm,p1,p2)
150
- #endif
151
- for (k=0; k<n; k++) {
152
- pm = m + k;
153
- if ( ! *pm ) {
154
- p1 = q1 + k*i1;
155
- p2 = q2 + k*i2;
156
- {
157
- #{expr}
158
- }
159
- }
160
- }
161
- }
162
- else {
163
- #if defined(_OPENMP) && #{omp_ok}
164
- #pragma omp parallel for private(p1,p2)
165
- #endif
166
- for (k=0; k<n; k++) {
167
- p1 = q1 + k*i1;
168
- p2 = q2 + k*i2;
169
- {
170
- #{expr}
171
- }
172
- }
173
- }
174
- }
175
- }
176
- end
177
- end
178
- end
179
- io.puts
180
- io.puts "ca_monop_func_t"
181
- io.puts "ca_monop_#{name}[CA_NTYPE] = {"
182
- ALL_TYPES.each_index do |i|
183
- type = nil
184
- hash.each do |types, expr|
185
- if not expr
186
- next
187
- end
188
- type ||= types[i]
189
- end
190
- if type
191
- io.puts(" ca_monop_#{name}_#{type},")
192
- else
193
- io.puts(" ca_monop_not_implement,")
194
- end
195
- end
196
- io.puts "};"
197
- io.puts
198
- io.print %{
199
- static VALUE rb_ca_#{name} (VALUE self)
200
- { return rb_ca_call_monop(self, ca_monop_#{name}); }
201
- static VALUE rb_ca_#{name}_bang (VALUE self)
202
- { return rb_ca_call_monop_bang(self, ca_monop_#{name}); }
203
- }
204
- DEFINITIONS << io.string
205
- if op
206
- METHODS << %{
207
- rb_define_method(rb_cCArray, "#{op}", rb_ca_#{name}, 0);
208
- }
209
- end
210
- METHODS << %{
211
- rb_define_method(rb_cCArray, "#{name}!", rb_ca_#{name}_bang, 0);
212
- }
213
-
214
- end
215
-
216
- def binop (op, name, hash)
217
- io = StringIO.new
218
- io.puts
219
- io.puts "/*----------------------- #{name} --------------------------*/"
220
- hash.each do |types, expr0|
221
- if not expr0
222
- next
223
- end
224
- expr0.gsub!(/#/, '*p')
225
- types.each do |type|
226
- if type
227
- expr = expr0.gsub(/<type>/, type)
228
- omp_ok = ( type != "VALUE" ) ? 1 : 0
229
- io.print %{
230
- static void
231
- ca_binop_#{name}_#{type} (ca_size_t n, boolean8_t *m, char *ptr1, ca_size_t i1, char *ptr2, ca_size_t i2, char *ptr3, ca_size_t i3)
232
- {
233
- #{type} *q1 = (#{type} *) ptr1, *q2 = (#{type} *) ptr2, *q3 = (#{type} *) ptr3;
234
- #{type} *p1 = q1, *p2 = q2, *p3 = q3;
235
- ca_size_t k;
236
- if ( m ) {
237
- boolean8_t *pm;
238
- #if defined(_OPENMP) && #{omp_ok}
239
- #pragma omp parallel for private(pm,p1,p2,p3)
240
- #endif
241
- for (k=0; k<n; k++) {
242
- pm = m + k;
243
- if ( ! *pm ) {
244
- p1 = q1 + k*i1;
245
- p2 = q2 + k*i2;
246
- p3 = q3 + k*i3;
247
- {
248
- #{expr}
249
- }
250
- }
251
- }
252
- }
253
- else {
254
- #if defined(_OPENMP) && #{omp_ok}
255
- #pragma omp parallel for private(p1,p2,p3)
256
- #endif
257
- for (k=0; k<n; k++) {
258
- p1 = q1 + k*i1;
259
- p2 = q2 + k*i2;
260
- p3 = q3 + k*i3;
261
- {
262
- #{expr}
263
- }
264
- }
265
- }
266
- }
267
- }
268
- end
269
- end
270
- end
271
- io.puts
272
- io.puts "ca_binop_func_t"
273
- io.puts "ca_binop_#{name}[CA_NTYPE] = {"
274
- ALL_TYPES.each_index do |i|
275
- type = nil
276
- hash.each do |types, expr|
277
- if not expr
278
- next
279
- end
280
- type ||= types[i]
281
- end
282
- if type
283
- io.puts(" ca_binop_#{name}_#{type},")
284
- else
285
- io.puts(" ca_binop_not_implement,")
286
- end
287
- end
288
- io.puts "};"
289
- io.puts
290
- io.print %{
291
- static VALUE rb_ca_#{name} (VALUE self, VALUE other)
292
- {
293
- if ( ! rb_ca_test_castable(other) ) {
294
- return rb_ca_binop_pass_to_other(self, other, rb_intern("#{op}"));
295
- }
296
- return rb_ca_call_binop(self, other, ca_binop_#{name});
297
- }
298
- static VALUE rb_ca_#{name}_bang (VALUE self, VALUE other)
299
- { return rb_ca_call_binop_bang(self, other, ca_binop_#{name}); }
300
- }
301
- DEFINITIONS << io.string
302
- if op
303
- METHODS << %{
304
- rb_define_method(rb_cCArray, "#{op}", rb_ca_#{name}, 1);
305
- }
306
- end
307
- METHODS << %{
308
- rb_define_method(rb_cCArray, "#{name}!", rb_ca_#{name}_bang, 1);
309
- }
310
-
311
- end
312
-
313
- def moncmp (op, name, hash)
314
- io = StringIO.new
315
- io.puts
316
- io.puts "/*----------------------- #{name} --------------------------*/"
317
- hash.each do |types, expr0|
318
- if not expr0
319
- next
320
- end
321
- expr0.gsub!(/#/, '*p')
322
- types.each do |type|
323
- if type
324
- expr = expr0.gsub(/<type>/, type)
325
- omp_ok = ( type != "VALUE" ) ? 1 : 0
326
- io.print %{
327
- static void
328
- ca_moncmp_#{name}_#{type} (ca_size_t n, boolean8_t *m, char *ptr1, ca_size_t i1, boolean8_t *ptr2, ca_size_t i2)
329
- {
330
- #{type} *q1 = (#{type} *) ptr1;
331
- #{type} *p1 = q1;
332
- boolean8_t *q2 = (boolean8_t *) ptr2;
333
- boolean8_t *p2 = q2;
334
- ca_size_t k;
335
- if ( m ) {
336
- boolean8_t *pm = m;
337
- #if defined(_OPENMP) && #{omp_ok}
338
- #pragma omp parallel for private(pm,p1,p2)
339
- #endif
340
- for (k=0; k<n; k++) {
341
- pm = m + k;
342
- if ( ! *pm ) {
343
- p1 = q1 + k*i1;
344
- p2 = q2 + k*i2;
345
- {
346
- #{expr}
347
- }
348
- }
349
- }
350
- }
351
- else {
352
- #if defined(_OPENMP) && #{omp_ok}
353
- #pragma omp parallel for private(p1,p2)
354
- #endif
355
- for (k=0; k<n; k++) {
356
- p1=q1+k*i1;
357
- p2=q2+k*i2;
358
- {
359
- #{expr}
360
- }
361
- }
362
- }
363
- }
364
- }
365
- end
366
- end
367
- end
368
- io.puts
369
- io.puts "ca_moncmp_func_t"
370
- io.puts "ca_moncmp_#{name}[CA_NTYPE] = {"
371
- ALL_TYPES.each_index do |i|
372
- type = nil
373
- hash.each do |types, expr|
374
- if not expr
375
- next
376
- end
377
- type ||= types[i]
378
- end
379
- if type
380
- io.puts(" ca_moncmp_#{name}_#{type},")
381
- else
382
- io.puts(" ca_moncmp_not_implement,")
383
- end
384
- end
385
- io.puts "};"
386
- io.puts
387
- io.print %{
388
- static VALUE rb_ca_#{name} (VALUE self)
389
- { return rb_ca_call_moncmp(self, ca_moncmp_#{name}); }
390
- }
391
- DEFINITIONS << io.string
392
- if op
393
- METHODS << %{
394
- rb_define_method(rb_cCArray, "#{op}", rb_ca_#{name}, 0);
395
- }
396
- end
397
- end
398
-
399
- EPSILON = {
400
- "float32_t" => "FLT_EPSILON",
401
- "float64_t" => "DBL_EPSILON",
402
- "float128_t" => "DBL_EPSILON",
403
- }
404
-
405
- def bincmp (op, name, hash)
406
- io = StringIO.new
407
- io.puts
408
- io.puts "/*----------------------- #{name} --------------------------*/"
409
- hash.each do |types, expr0|
410
- if not expr0
411
- next
412
- end
413
- expr0.gsub!(/#(\d)/, '*p\1')
414
- types.each do |type|
415
- if type
416
- expr = expr0.clone
417
- expr.gsub!(/<type>/, type)
418
- expr.gsub!(/<epsilon>/, EPSILON[type]||"")
419
- if type != "fixlen"
420
- omp_ok = ( type != "VALUE" ) ? 1 : 0
421
- io.print %{
422
- static void
423
- ca_bincmp_#{name}_#{type} (ca_size_t n, boolean8_t *m,
424
- char *ptr1, ca_size_t b1, ca_size_t i1,
425
- char *ptr2, ca_size_t b2, ca_size_t i2,
426
- char *ptr3, ca_size_t b3, ca_size_t i3)
427
- {
428
- #{type} *q1 = (#{type} *) ptr1, *q2 = (#{type} *) ptr2;
429
- #{type} *p1 = q1, *p2 = q2;
430
- boolean8_t *q3 = (boolean8_t *) ptr3;
431
- boolean8_t *p3 = q3;
432
- ca_size_t k;
433
- if ( m ) {
434
- boolean8_t *pm = m;
435
- #if defined(_OPENMP) && #{omp_ok}
436
- #pragma omp parallel for private(pm,p1,p2,p3)
437
- #endif
438
- for (k=0; k<n; k++) {
439
- pm = m + k;
440
- if ( ! *pm ) {
441
- p1 = q1 + k*i1;
442
- p2 = q2 + k*i2;
443
- p3 = q3 + k*i3;
444
- {
445
- #{expr}
446
- }
447
- }
448
- }
449
- }
450
- else {
451
- #if defined(_OPENMP) && #{omp_ok}
452
- #pragma omp parallel for private(p1,p2,p3)
453
- #endif
454
- for (k=0; k<n; k++) {
455
- p1=q1+k*i1;
456
- p2=q2+k*i2;
457
- p3=q3+k*i3;
458
- {
459
- #{expr}
460
- }
461
- }
462
- }
463
- }
464
- }
465
- else ### fixlen
466
- omp_ok = 1
467
- io.print %{
468
- static void
469
- ca_bincmp_#{name}_#{type} (ca_size_t n, boolean8_t *m,
470
- char *ptr1, ca_size_t b1, ca_size_t i1,
471
- char *ptr2, ca_size_t b2, ca_size_t i2,
472
- char *ptr3, ca_size_t b3, ca_size_t i3)
473
- {
474
- char *q1 = ptr1, *q2 = ptr2;
475
- char *p1 = q1, *p2 = q2;
476
- boolean8_t *q3 = (boolean8_t *) ptr3;
477
- boolean8_t *p3 = q3;
478
- ca_size_t s1 = b1*i1, s2 = b2*i2, s3 = b3*i3;
479
- ca_size_t k;
480
- if ( m ) {
481
- boolean8_t *pm = m;
482
- #if defined(_OPENMP) && #{omp_ok}
483
- #pragma omp parallel for private(pm,p1,p2,p3)
484
- #endif
485
- for (k=0; k<n; k++) {
486
- pm = m + k;
487
- if ( ! *pm ) {
488
- p1 = q1 + k*s1;
489
- p2 = q2 + k*s2;
490
- p3 = q3 + k*s3;
491
- {
492
- #{expr}
493
- }
494
- }
495
- }
496
- }
497
- else {
498
- #if defined(_OPENMP) && #{omp_ok}
499
- #pragma omp parallel for private(p1,p2,p3)
500
- #endif
501
- for (k=0; k<n; k++) {
502
- p1=q1+k*s1;
503
- p2=q2+k*s2;
504
- p3=q3+k*s3;
505
- {
506
- #{expr}
507
- }
508
- }
509
- }
510
- }
511
- }
512
- end
513
- end
514
- end
515
- end
516
- io.puts
517
- io.puts "ca_bincmp_func_t"
518
- io.puts "ca_bincmp_#{name}[CA_NTYPE] = {"
519
- ALL_TYPES.each_index do |i|
520
- type = nil
521
- hash.each do |types, expr|
522
- if not expr
523
- next
524
- end
525
- type ||= types[i]
526
- end
527
- if type
528
- io.puts(" ca_bincmp_#{name}_#{type},")
529
- else
530
- io.puts(" ca_bincmp_not_implement,")
531
- end
532
- end
533
- io.puts "};"
534
- io.puts
535
- io.print %{
536
- static VALUE rb_ca_#{name} (VALUE self, VALUE other)
537
- {
538
- if ( ! rb_ca_test_castable(other) ) {
539
- return rb_ca_binop_pass_to_other(self, other, rb_intern("#{op}"));
540
- }
541
- return rb_ca_call_bincmp(self, other, ca_bincmp_#{name});
542
- }
543
- }
544
- DEFINITIONS << io.string
545
- if op
546
- METHODS << %{
547
- rb_define_method(rb_cCArray, "#{op}", rb_ca_#{name}, 1);
548
- }
549
- end
550
- end
551
-
552
- def alias_op (op, name)
553
- METHODS << %{
554
- rb_define_alias(rb_cCArray, "#{op}", "#{name}");
555
- }
556
- end
557
-
558
- ALL_TYPES = [
559
- nil,
560
- nil,
561
- "int8_t",
562
- "uint8_t",
563
- "int16_t",
564
- "uint16_t",
565
- "int32_t",
566
- "uint32_t",
567
- "int64_t",
568
- "uint64_t",
569
- "float32_t",
570
- "float64_t",
571
- "float128_t",
572
- nil,
573
- nil,
574
- nil,
575
- nil,
576
- ]
577
-
578
- BOOL_TYPES = [
579
- nil,
580
- "boolean8_t",
581
- nil, #"int8_t",
582
- nil, #"uint8_t",
583
- nil,
584
- nil,
585
- nil,
586
- nil,
587
- nil,
588
- nil,
589
- nil,
590
- nil,
591
- nil,
592
- nil,
593
- nil,
594
- nil,
595
- nil,
596
- ]
597
-
598
- INT_TYPES = [
599
- nil,
600
- nil,
601
- "int8_t",
602
- "uint8_t",
603
- "int16_t",
604
- "uint16_t",
605
- "int32_t",
606
- "uint32_t",
607
- "int64_t",
608
- "uint64_t",
609
- nil,
610
- nil,
611
- nil,
612
- nil,
613
- nil,
614
- nil,
615
- nil,
616
- ]
617
-
618
- FLOAT_TYPES = [
619
- nil,
620
- nil,
621
- nil,
622
- nil,
623
- nil,
624
- nil,
625
- nil,
626
- nil,
627
- nil,
628
- nil,
629
- "float32_t",
630
- "float64_t",
631
- "float128_t",
632
- nil,
633
- nil,
634
- nil,
635
- nil,
636
- ]
637
-
638
- CMPLX_TYPES = [
639
- nil,
640
- nil,
641
- nil,
642
- nil,
643
- nil,
644
- nil,
645
- nil,
646
- nil,
647
- nil,
648
- nil,
649
- nil,
650
- nil,
651
- nil,
652
- "cmplx64_t",
653
- "cmplx128_t",
654
- "cmplx256_t",
655
- nil,
656
- ]
657
-
658
- OBJ_TYPES = [
659
- nil,
660
- nil,
661
- nil,
662
- nil,
663
- nil,
664
- nil,
665
- nil,
666
- nil,
667
- nil,
668
- nil,
669
- nil,
670
- nil,
671
- nil,
672
- nil,
673
- nil,
674
- nil,
675
- "VALUE",
676
- ]
677
-
678
- FIXLEN_TYPES = [
679
- "fixlen",
680
- nil,
681
- nil,
682
- nil,
683
- nil,
684
- nil,
685
- nil,
686
- nil,
687
- nil,
688
- nil,
689
- nil,
690
- nil,
691
- nil,
692
- nil,
693
- nil,
694
- nil,
695
- nil,
696
- ]
697
-
698
- begin
699
- open("carray_config.h") { |io|
700
- have_complex = false
701
- while line = io.gets
702
- if line =~ /HAVE_COMPLEX_H\s+(\d*)\s*/
703
- have_complex = ($1.to_i == 1)
704
- break
705
- end
706
- end
707
- HAVE_COMPLEX = have_complex
708
- }
709
- end
710
-
711
- HEADERS = ""
712
- DEFINITIONS = ""
713
- METHODS = ""
714
-
715
- CODETEXT = <<HERE
716
- <headers>
717
-
718
- #include <math.h>
719
- #include "carray.h"
720
-
721
- <definitions>
722
-
723
- void
724
- Init_<name> ()
725
- {
726
- <methods>
727
- }
728
-
729
- HERE
730
-
731
- def create_code (name, filename)
732
- code = CODETEXT.clone
733
- code.sub!("<name>", name)
734
- code.sub!("<headers>", HEADERS)
735
- code.sub!("<definitions>", DEFINITIONS)
736
- code.sub!("<methods>", METHODS)
737
- open(filename, "w") { |io|
738
- io.write code
739
- }
740
- end
741
-