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
data/ext/carray_numeric.c DELETED
@@ -1,259 +0,0 @@
1
- /* ---------------------------------------------------------------------------
2
-
3
- carray_numeric.c
4
-
5
- This file is part of Ruby/CArray extension library.
6
-
7
- Copyright (C) 2005-2020 Hiroki Motoyoshi
8
-
9
- ---------------------------------------------------------------------------- */
10
-
11
- #include "ruby.h"
12
- #include "carray.h"
13
-
14
- VALUE CA_NAN, CA_INF;
15
-
16
- static ID id___or__;
17
- static ID id___and__;
18
- static ID id___xor__;
19
- static ID id___rshift__;
20
- static ID id___lshift__;
21
-
22
- static ID id_bit_or;
23
- static ID id_bit_and;
24
- static ID id_bit_xor;
25
- static ID id_lshift;
26
- static ID id_rshift;
27
-
28
- static VALUE
29
- rb_hack_or(VALUE x, VALUE y)
30
- {
31
- if ( rb_obj_is_carray(y) ) {
32
- if ( rb_ca_is_boolean_type(y) ) {
33
- return rb_funcall(y, id_bit_or, 1, x);
34
- }
35
- else {
36
- #if RUBY_VERSION_CODE >= 190
37
- return rb_num_coerce_bin(x, y, '|');
38
- #else
39
- return rb_num_coerce_bin(x, y);
40
- #endif
41
- }
42
- }
43
- else {
44
- return rb_funcall(x, id___or__, 1, y);
45
- }
46
- }
47
-
48
- static VALUE
49
- rb_hack_and (VALUE x, VALUE y)
50
- {
51
- if ( rb_obj_is_carray(y) ) {
52
- if ( rb_ca_is_boolean_type(y) ) {
53
- return rb_funcall(y, id_bit_and, 1, x);
54
- }
55
- else {
56
- #if RUBY_VERSION_CODE >= 190
57
- return rb_num_coerce_bin(x, y, '&');
58
- #else
59
- return rb_num_coerce_bin(x, y);
60
- #endif
61
- }
62
- }
63
- else {
64
- return rb_funcall(x, id___and__, 1, y);
65
- }
66
- }
67
-
68
- static VALUE
69
- rb_hack_xor (VALUE x, VALUE y)
70
- {
71
- if ( rb_obj_is_carray(y) ) {
72
- if ( rb_ca_is_boolean_type(y) ) {
73
- return rb_funcall(y, id_bit_xor, 1, x);
74
- }
75
- else {
76
- #if RUBY_VERSION_CODE >= 190
77
- return rb_num_coerce_bin(x, y, '^');
78
- #else
79
- return rb_num_coerce_bin(x, y);
80
- #endif
81
- }
82
- }
83
- else {
84
- return rb_funcall(x, id___xor__, 1, y);
85
- }
86
- }
87
-
88
- static VALUE
89
- rb_hack_lshift (VALUE x, VALUE y)
90
- {
91
- if ( rb_obj_is_carray(y) ) {
92
- #if RUBY_VERSION_CODE >= 190
93
- return rb_num_coerce_bin(x, y, id_lshift);
94
- #else
95
- return rb_num_coerce_bin(x, y);
96
- #endif
97
- }
98
- else {
99
- return rb_funcall(x, id___lshift__, 1, y);
100
- }
101
- }
102
-
103
- static VALUE
104
- rb_hack_rshift (VALUE x, VALUE y)
105
- {
106
- if ( rb_obj_is_carray(y) ) {
107
- #if RUBY_VERSION_CODE >= 190
108
- return rb_num_coerce_bin(x, y, id_rshift);
109
- #else
110
- return rb_num_coerce_bin(x, y);
111
- #endif
112
- }
113
- else {
114
- return rb_funcall(x, id___rshift__, 1, y);
115
- }
116
- }
117
-
118
- /* ------------------------------------------------------------------- */
119
-
120
- #ifdef HAVE_COMPLEX_H
121
-
122
- #include <math.h>
123
- #include <float.h>
124
-
125
- #define proc_arg_cmplx(type) \
126
- { \
127
- type *p = (type *) ca->ptr; \
128
- double *q = (double *) co->ptr; \
129
- boolean8_t *m = (ca->mask) ? (boolean8_t *) ca->mask->ptr : NULL; \
130
- ca_size_t i; \
131
- if ( m ) { \
132
- for (i=ca->elements; i; i--, p++, q++) { \
133
- if ( ! *m++ ) \
134
- *q = carg(*p); \
135
- } \
136
- } \
137
- else { \
138
- for (i=ca->elements; i; i--, p++, q++) { \
139
- *q = carg(*p); \
140
- } \
141
- } \
142
- }
143
-
144
- static VALUE
145
- rb_ca_arg (VALUE self)
146
- {
147
- volatile VALUE obj;
148
- CArray *ca, *co;
149
-
150
- TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
151
-
152
- co = carray_new(CA_FLOAT64, ca->ndim, ca->dim, 0, NULL);
153
- obj = ca_wrap_struct(co);
154
-
155
- if ( ca_has_mask(ca) ) {
156
- ca_copy_mask_overlay(co, co->elements, 1, ca);
157
- }
158
-
159
- ca_attach(ca);
160
-
161
- switch ( ca->data_type ) {
162
- case CA_FLOAT32: proc_arg_cmplx(float32_t); break;
163
- case CA_FLOAT64: proc_arg_cmplx(float64_t); break;
164
- case CA_FLOAT128: proc_arg_cmplx(float128_t); break;
165
- case CA_CMPLX64: proc_arg_cmplx(cmplx64_t); break;
166
- case CA_CMPLX128: proc_arg_cmplx(cmplx128_t); break;
167
- case CA_CMPLX256: proc_arg_cmplx(cmplx256_t); break;
168
- default: rb_raise(rb_eRuntimeError, "invalid data type");
169
- }
170
-
171
- ca_detach(ca);
172
-
173
- return obj;
174
- }
175
-
176
- #endif
177
-
178
- void
179
- Init_carray_numeric ()
180
- {
181
- /* hack Fixnum and Bignum's "|", "&", "^", "<<", ">>" */
182
-
183
- id___or__ = rb_intern("__or__");
184
- id___and__ = rb_intern("__and__");
185
- id___xor__ = rb_intern("__xor__");
186
- id___rshift__ = rb_intern("__rshift__");
187
- id___lshift__ = rb_intern("__lshift__");
188
-
189
- id_bit_or = rb_intern("bit_or");
190
- id_bit_and = rb_intern("bit_and");
191
- id_bit_xor = rb_intern("bit_xor");
192
- id_lshift = rb_intern("<<");
193
- id_rshift = rb_intern(">>");
194
-
195
- CA_NAN = rb_float_new(0.0/0.0);
196
- CA_INF = rb_float_new(1.0/0.0);
197
- rb_define_const(rb_cObject, "CA_NAN", CA_NAN);
198
- rb_define_const(rb_cObject, "CA_INF", CA_INF);
199
-
200
- rb_define_alias(rb_cTrueClass, "__or__", "|");
201
- rb_define_alias(rb_cTrueClass, "__and__", "&");
202
- rb_define_alias(rb_cTrueClass, "__xor__", "^");
203
-
204
- rb_define_method(rb_cTrueClass, "|", rb_hack_or, 1);
205
- rb_define_method(rb_cTrueClass, "&", rb_hack_and, 1);
206
- rb_define_method(rb_cTrueClass, "^", rb_hack_xor, 1);
207
-
208
- rb_define_alias(rb_cFalseClass, "__or__", "|");
209
- rb_define_alias(rb_cFalseClass, "__and__", "&");
210
- rb_define_alias(rb_cFalseClass, "__xor__", "^");
211
-
212
- rb_define_method(rb_cFalseClass, "|", rb_hack_or, 1);
213
- rb_define_method(rb_cFalseClass, "&", rb_hack_and, 1);
214
- rb_define_method(rb_cFalseClass, "^", rb_hack_xor, 1);
215
-
216
- #if RUBY_VERSION_CODE >= 240
217
- rb_define_alias(rb_cInteger, "__or__", "|");
218
- rb_define_alias(rb_cInteger, "__and__", "&");
219
- rb_define_alias(rb_cInteger, "__xor__", "^");
220
- rb_define_alias(rb_cInteger, "__lshift__", "<<");
221
- rb_define_alias(rb_cInteger, "__rshift__", ">>");
222
-
223
- rb_define_method(rb_cInteger, "|", rb_hack_or, 1);
224
- rb_define_method(rb_cInteger, "&", rb_hack_and, 1);
225
- rb_define_method(rb_cInteger, "^", rb_hack_xor, 1);
226
- rb_define_method(rb_cInteger, "<<", rb_hack_lshift, 1);
227
- rb_define_method(rb_cInteger, ">>", rb_hack_rshift, 1);
228
- #else
229
- rb_define_alias(rb_cFixnum, "__or__", "|");
230
- rb_define_alias(rb_cFixnum, "__and__", "&");
231
- rb_define_alias(rb_cFixnum, "__xor__", "^");
232
- rb_define_alias(rb_cFixnum, "__lshift__", "<<");
233
- rb_define_alias(rb_cFixnum, "__rshift__", ">>");
234
-
235
- rb_define_alias(rb_cBignum, "__or__", "|");
236
- rb_define_alias(rb_cBignum, "__and__", "&");
237
- rb_define_alias(rb_cBignum, "__xor__", "^");
238
- rb_define_alias(rb_cBignum, "__lshift__", "<<");
239
- rb_define_alias(rb_cBignum, "__rshift__", ">>");
240
-
241
- rb_define_method(rb_cFixnum, "|", rb_hack_or, 1);
242
- rb_define_method(rb_cFixnum, "&", rb_hack_and, 1);
243
- rb_define_method(rb_cFixnum, "^", rb_hack_xor, 1);
244
- rb_define_method(rb_cFixnum, "<<", rb_hack_lshift, 1);
245
- rb_define_method(rb_cFixnum, ">>", rb_hack_rshift, 1);
246
-
247
- rb_define_method(rb_cBignum, "|", rb_hack_or, 1);
248
- rb_define_method(rb_cBignum, "&", rb_hack_and, 1);
249
- rb_define_method(rb_cBignum, "^", rb_hack_xor, 1);
250
- rb_define_method(rb_cBignum, "<<", rb_hack_lshift, 1);
251
- rb_define_method(rb_cBignum, ">>", rb_hack_rshift, 1);
252
- #endif
253
-
254
- #ifdef HAVE_COMPLEX_H
255
- rb_define_method(rb_cCArray, "arg", rb_ca_arg, 0);
256
- #endif
257
-
258
- }
259
-
@@ -1,254 +0,0 @@
1
- /* ---------------------------------------------------------------------------
2
-
3
- carray_sort_addr.c
4
-
5
- This file is part of Ruby/CArray extension library.
6
-
7
- Copyright (C) 2005-2020 Hiroki Motoyoshi
8
-
9
- ---------------------------------------------------------------------------- */
10
-
11
- #include "ruby.h"
12
- #include "carray.h"
13
- #include <math.h>
14
-
15
- /* ----------------------------------------------------------------- */
16
-
17
- typedef int (*ca_qsort_cmp_func)();
18
-
19
- #define qcmp_type(type) \
20
- static int \
21
- qcmp_## type (type *a, type *b) \
22
- { \
23
- if ( *a > *b ) return 1; \
24
- if ( *a < *b ) return -1; \
25
- return 0; \
26
- }
27
-
28
- #define qcmp_f_type(type) \
29
- static int \
30
- qcmp_## type (type *a, type *b) \
31
- { \
32
- if ( isnan(*a) && ( ! isnan(*b) ) ) return 1; \
33
- if ( isnan(*b) && ( ! isnan(*a) ) ) return -1; \
34
- if ( *a > *b ) return 1; \
35
- if ( *a < *b ) return -1; \
36
- return 0; \
37
- }
38
-
39
- static int
40
- qcmp_data (char *a, char *b, ca_size_t bytes)
41
- {
42
- int cmp;
43
- cmp = memcmp(a, b, bytes);
44
- if ( cmp != 0 ) return cmp;
45
- return 0;
46
- }
47
-
48
- static int
49
- qcmp_VALUE (VALUE *a, VALUE *b)
50
- {
51
- int cmp;
52
- cmp = NUM2INT(rb_funcall(*a, rb_intern("<=>"), 1, *b));
53
- if ( cmp != 0 ) return cmp;
54
- return 0;
55
- }
56
-
57
- qcmp_type(boolean8_t)
58
- qcmp_type(int8_t)
59
- qcmp_type(uint8_t)
60
- qcmp_type(int16_t)
61
- qcmp_type(uint16_t)
62
- qcmp_type(int32_t)
63
- qcmp_type(uint32_t)
64
- qcmp_type(int64_t)
65
- qcmp_type(uint64_t)
66
- qcmp_f_type(float32_t)
67
- qcmp_f_type(float64_t)
68
- qcmp_f_type(float128_t)
69
-
70
- static int
71
- qcmp_not_implement (void *a, void *b)
72
- {
73
- rb_raise(rb_eNotImpError,
74
- "compare function is not implemented for the data type");
75
- }
76
-
77
- static ca_qsort_cmp_func
78
- ca_qsort_cmp[CA_NTYPE] = {
79
- qcmp_data,
80
- qcmp_boolean8_t,
81
- qcmp_int8_t,
82
- qcmp_uint8_t,
83
- qcmp_int16_t,
84
- qcmp_uint16_t,
85
- qcmp_int32_t,
86
- qcmp_uint32_t,
87
- qcmp_int64_t,
88
- qcmp_uint64_t,
89
- qcmp_float32_t,
90
- qcmp_float64_t,
91
- qcmp_float128_t,
92
- qcmp_not_implement,
93
- qcmp_not_implement,
94
- qcmp_not_implement,
95
- qcmp_VALUE,
96
- };
97
-
98
- /* ----------------------------------------------------------------- */
99
-
100
- struct cmp_base {
101
- int n;
102
- CArray **ca;
103
- };
104
-
105
- struct cmp_data {
106
- ca_size_t i;
107
- struct cmp_base *base;
108
- };
109
-
110
- static int
111
- qcmp_func (struct cmp_data *a, struct cmp_data *b)
112
- {
113
- struct cmp_base *base = a->base;
114
- int n = base->n;
115
- CArray **ca = base->ca;
116
- ca_size_t ia = a->i;
117
- ca_size_t ib = b->i;
118
- int result;
119
- int i;
120
- for (i=0; i<n; i++) {
121
- int8_t data_type = ca[i]->data_type;
122
- char *ptr = ca[i]->ptr;
123
- boolean8_t *m = ( ca[i]->mask ) ? (boolean8_t *) ca[i]->mask->ptr : NULL;
124
- ca_size_t bytes = ca[i]->bytes;
125
- if ( ( ! m ) ||
126
- ( ( ! m[ia] ) && ( ! m[ib] ) ) ) {
127
- if ( data_type == CA_FIXLEN ) {
128
- result = ca_qsort_cmp[CA_FIXLEN](ptr + ia*bytes,
129
- ptr + ib*bytes, bytes);
130
- }
131
- else {
132
- result = ca_qsort_cmp[data_type](ptr + ia*bytes,
133
- ptr + ib*bytes);
134
- }
135
- }
136
- else if ( ( ! m[ia] ) && ( m[ib] ) ) {
137
- result = -1;
138
- }
139
- else if ( ( m[ia] ) && ( ! m[ib] ) ) {
140
- result = 1;
141
- }
142
- else {
143
- result = 0;
144
- }
145
- if ( result ) {
146
- return result;
147
- }
148
- }
149
- return ( ia > ib ) ? 1 : -1; /* for stable sort */
150
- }
151
-
152
- /* @overload sort_addr (*args)
153
-
154
- (Sort) Returns index table for index sort
155
-
156
- idx = CA.sort_addr(a, b, c) ### priority a > b > c
157
- a[idx]
158
- b[idx]
159
- c[idx]
160
- */
161
-
162
- static VALUE
163
- rb_ca_s_sort_addr (int argc, VALUE *argv, VALUE self)
164
- {
165
- volatile VALUE out;
166
- CArray *co;
167
- struct cmp_base *base;
168
- struct cmp_data *data;
169
- ca_size_t elements;
170
- ca_size_t *q;
171
- int j;
172
- ca_size_t i;
173
-
174
- if ( argc <= 0 ) {
175
- rb_raise(rb_eArgError, "no arg given");
176
- }
177
-
178
- rb_check_carray_object(argv[0]);
179
- elements = NUM2SIZE(rb_ca_elements(argv[0]));
180
-
181
- for (j=0; j<argc; j++) {
182
- rb_check_carray_object(argv[j]);
183
- if ( elements != NUM2SIZE(rb_ca_elements(argv[j])) ) {
184
- rb_raise(rb_eArgError, "elements mismatch");
185
- }
186
- }
187
-
188
- base = malloc_with_check(sizeof(struct cmp_base));
189
- base->n = argc;
190
- base->ca = malloc_with_check(sizeof(CArray *)*base->n);
191
-
192
- for (j=0; j<argc; j++) {
193
- CArray *ca;
194
- TypedData_Get_Struct(argv[j], CArray, &carray_data_type, ca);
195
- base->ca[j] = ca;
196
- ca_attach(ca);
197
- }
198
-
199
- data = malloc_with_check(sizeof(struct cmp_data)*elements);
200
- for (i=0; i<elements; i++) {
201
- data[i].i = i;
202
- data[i].base = base;
203
- }
204
-
205
- #ifdef HAVE_MERGESORT
206
- mergesort(data, elements, sizeof(struct cmp_data),
207
- (int (*)(const void*,const void*)) qcmp_func);
208
- #else
209
- qsort(data, elements, sizeof(struct cmp_data),
210
- (int (*)(const void*,const void*)) qcmp_func);
211
- #endif
212
-
213
- out = rb_ca_template_with_type(argv[0], INT2NUM(CA_SIZE), INT2NUM(0));
214
- TypedData_Get_Struct(out, CArray, &carray_data_type, co);
215
- q = (ca_size_t *) co->ptr;
216
-
217
- for (i=0; i<elements; i++) {
218
- *q = data[i].i;
219
- q++;
220
- }
221
-
222
- for (j=0; j<argc; j++) {
223
- ca_detach(base->ca[j]);
224
- }
225
-
226
- free(data);
227
- free(base->ca);
228
- free(base);
229
-
230
- return out;
231
- }
232
-
233
- /* @overload sort_addr (*args)
234
-
235
- (Sort) Returns index table for index sort
236
- This method same as,
237
-
238
- idx = CA.sort_addr(self, *args)
239
- */
240
-
241
- static VALUE
242
- rb_ca_sort_addr (int argc, VALUE *argv, VALUE self)
243
- {
244
- VALUE list = rb_ary_new4(argc, argv);
245
- rb_ary_unshift(list, self);
246
- return rb_apply(rb_mCA, rb_intern("sort_addr"), list);
247
- }
248
-
249
- void
250
- Init_carray_sort_addr ()
251
- {
252
- rb_define_singleton_method(rb_mCA, "sort_addr", rb_ca_s_sort_addr, -1);
253
- rb_define_method(rb_cCArray, "sort_addr", rb_ca_sort_addr, -1);
254
- }