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,188 +0,0 @@
1
- require "carray"
2
- require 'rspec-power_assert'
3
-
4
- describe "CArray#project" do
5
-
6
- example "basic" do
7
- a = CA_DOUBLE([[11,22,33],
8
- [44,55,66],
9
- [77,88,99]])
10
-
11
- # CA_SIZE
12
- idxsz = CA_SIZE([[1,2,3],
13
- [4,5,6],
14
- [7,8,0]])
15
-
16
-
17
- is_asserted_by { a.project(idxsz).class == CArray } ### entity array
18
- is_asserted_by { a.project(idxsz).data_type == a.data_type } ### data_type is inherited from base array
19
- is_asserted_by { a.project(idxsz).shape == idxsz.shape } ### shape is inherieted from index array
20
-
21
- is_asserted_by {
22
- a.project(idxsz) == CA_DOUBLE([[22,33,44],
23
- [55,66,77],
24
- [88,99,11]])
25
- }
26
-
27
- end
28
-
29
- example "permits integer array for index arugument" do
30
-
31
- a = CA_DOUBLE([[11,22,33],
32
- [44,55,66],
33
- [77,88,99]])
34
-
35
-
36
- is_asserted_by {
37
- # CA_INT8
38
- idx8 = CA_INT8([[1,2,3],
39
- [4,5,6],
40
- [7,8,0]])
41
-
42
- a.project(idx8) == CA_DOUBLE([[22,33,44],
43
- [55,66,77],
44
- [88,99,11]])
45
- }
46
-
47
- is_asserted_by {
48
- # CA_INT32
49
- idx32 = CA_INT32([[1,2,3],
50
- [4,5,6],
51
- [7,8,0]])
52
-
53
- a.project(idx32) == CA_DOUBLE([[22,33,44],
54
- [55,66,77],
55
- [88,99,11]])
56
- }
57
-
58
- is_asserted_by {
59
- # CA_INT64
60
- idx64 = CA_INT64([[1,2,3],
61
- [4,5,6],
62
- [7,8,0]])
63
-
64
- a.project(idx64) == CA_DOUBLE([[22,33,44],
65
- [55,66,77],
66
- [88,99,11]])
67
- }
68
-
69
- end
70
-
71
- example "returns array which has the shape of index argument" do
72
- # 3x4
73
- a = CA_DOUBLE([[0, 1, 2, 3],
74
- [4, 5, 6, 7],
75
- [8, 9, 10,11]]) + 100
76
-
77
- is_asserted_by {
78
- # 1x12
79
- idx = CA_INT64([0,1,2,3,4,5,6,7,8,9,10,11])
80
-
81
- a.project(idx).shape == idx.shape
82
- }
83
-
84
- is_asserted_by {
85
- # 2x6
86
- idx = CA_INT64([[0,1,2,3,4,5],
87
- [6,7,8,9,10,11]])
88
-
89
- a.project(idx).shape == idx.shape
90
- }
91
-
92
- is_asserted_by {
93
- # 4x3
94
- idx = CA_INT64([[0,1,2],
95
- [3,4,5],
96
- [6,7,8],
97
- [9,10,11]])
98
-
99
- a.project(idx).shape == idx.shape
100
- }
101
-
102
- is_asserted_by {
103
- # 2x3
104
- idx = CA_INT64([[0,1,2],
105
- [3,4,5]])
106
-
107
- a.project(idx).shape == idx.shape
108
- }
109
-
110
- end
111
-
112
- example "masked array" do
113
-
114
- # masked base array
115
-
116
- _ = UNDEF
117
-
118
- a = CA_DOUBLE([[11,_ ,33],
119
- [44,55,66],
120
- [77,88,99]])
121
-
122
- is_asserted_by {
123
- # idx without mask
124
- idx = CA_INT64([[1,2,3],
125
- [4,5,6],
126
- [7,8,0]])
127
-
128
- a.project(idx) == CA_DOUBLE([[_ ,33,44],
129
- [55,66,77],
130
- [88,99,11]])
131
- }
132
-
133
- is_asserted_by {
134
- # index with mask
135
- idx = CA_SIZE([[1,2,3],
136
- [4,_,6],
137
- [7,8,0]])
138
-
139
- a.project(idx) == CA_DOUBLE([[_ ,33,44],
140
- [55,_ ,77],
141
- [88,99,11]])
142
- }
143
-
144
- # Related: Comparing the behavior of CArray#[idx] with idx has mask
145
- #
146
-
147
- is_asserted_by {
148
- # For CArray#[idx], nothing is raised even if base array has masked element.
149
-
150
- # idx without mask
151
- idx = CA_SIZE([[1,2,3],
152
- [4,5,6],
153
- [7,8,0]])
154
-
155
-
156
- a[idx] == CA_DOUBLE([[_ ,33,44],
157
- [55,66,77],
158
- [88,99,11]])
159
- }
160
-
161
- # For CArray#[idx], ArgumentError is raised if idx has masked element.
162
- expect {
163
- # idx with mask
164
- idx = CA_SIZE([[1,2,3],
165
- [4,_,6],
166
- [7,8,0]])
167
- a[idx]
168
- }.to raise_error(ArgumentError)
169
-
170
- end
171
-
172
- example "edge cases" do
173
- _ = UNDEF
174
- a = CA_DOUBLE([[11,22,33],
175
- [44,55,66],
176
- [77,88,99]])
177
- is_asserted_by { a.project(CA_SIZE([])) == CA_DOUBLE([]) }
178
- is_asserted_by { a.project(CA_SIZE([9])) == CA_DOUBLE([_]) }
179
- is_asserted_by { a.project(CA_SIZE([-1])) == CA_DOUBLE([_]) }
180
- is_asserted_by { a.project(CA_SIZE([-1]), 999) == CA_DOUBLE([999]) }
181
- is_asserted_by { a.project(CA_SIZE([9]), 999) == CA_DOUBLE([999]) }
182
- is_asserted_by { a.project(CA_SIZE([-1]), -999) == CA_DOUBLE([-999]) }
183
- is_asserted_by { a.project(CA_SIZE([9]), -999, 999) == CA_DOUBLE([999]) }
184
-
185
- end
186
-
187
-
188
- end
@@ -1,27 +0,0 @@
1
- require "carray"
2
- require 'rspec-power_assert'
3
-
4
- describe "CArray#[]" do
5
-
6
- example "should return one element array with [nil,-1]" do
7
- ca = CArray.int(4,4).seq!
8
- is_asserted_by { ca[[nil,-1]].elements == 1 }
9
- is_asserted_by { ca[[nil,-1]] == ca[[0]] }
10
- end
11
-
12
- example "should return self[[0],nil] with [nil,-1], nil" do
13
- ca = CArray.int(4,4).seq!
14
- is_asserted_by { ca[[nil,-1],nil] == ca[[0],nil] }
15
- end
16
-
17
- example "should return self[[0],nil] with nil, [nil,-1]" do
18
- ca = CArray.int(4,4).seq!
19
- is_asserted_by { ca[nil,[nil,-1]] == ca[nil,[0]] }
20
- end
21
-
22
- example "should return self[[0],nil] with [nil,-1], [nil,-1]" do
23
- ca = CArray.int(4,4).seq!
24
- is_asserted_by { ca[[nil,-1],[nil,-1]] == ca[[0],[0]] }
25
- end
26
-
27
- end
@@ -1,11 +0,0 @@
1
- require "carray"
2
- require 'rspec-power_assert'
3
-
4
- describe "CArray#round" do
5
- example "returns the nearest Integer" do
6
- is_asserted_by { CA_DOUBLE(5.5).round[0] == 6 }
7
- is_asserted_by { CA_DOUBLE(0.4).round[0] == 0 }
8
- is_asserted_by { CA_DOUBLE(-2.8).round[0] == -3 }
9
- is_asserted_by { CA_DOUBLE(0.0).round[0] == 0 }
10
- end
11
- end
@@ -1,48 +0,0 @@
1
- require "carray"
2
- require 'rspec-power_assert'
3
-
4
- describe "CArray.linspace" do
5
-
6
- # 2020-07-10
7
- example "float range" do
8
-
9
- a = CArray.linspace(0.0,1.0)
10
- b = CArray.double(100).span(0.0..1.0)
11
-
12
- is_asserted_by { a == b }
13
-
14
- end
15
-
16
- # 2020-07-10
17
- example "integer range -> float array" do
18
-
19
- a = CArray.linspace(0,1)
20
- b = CArray.double(100).span(0.0..1.0)
21
-
22
- is_asserted_by { a == b }
23
-
24
- end
25
-
26
- # 2020-07-10
27
- example "specify number" do
28
-
29
- a = CArray.linspace(0.0,1.0,5)
30
- b = CArray.double(5).span(0.0..1.0)
31
-
32
- is_asserted_by { a == b }
33
-
34
- end
35
-
36
- # 2020-07-10
37
- example "integer array" do
38
-
39
- a = CArray::Int32.linspace(0.0,1.0)
40
- b = CArray.int32(100).span(0.0..1.0)
41
-
42
- is_asserted_by { a == b }
43
-
44
- end
45
-
46
-
47
- end
48
-
@@ -1,14 +0,0 @@
1
- require 'carray'
2
- require "rspec-power_assert"
3
-
4
- describe "CArray.span" do
5
-
6
- # 2020-07-22
7
- example "s_span" do
8
- a = CArray.span(CA_FLOAT32, 0..2, 0.5)
9
- is_asserted_by { a == CA_FLOAT32([0, 0.5, 1, 1.5, 2]) }
10
- a = CArray.span(CA_FLOAT32, 0...2, 0.5)
11
- is_asserted_by { a == CA_FLOAT32([0, 0.5, 1, 1.5]) }
12
- end
13
-
14
- end
@@ -1,47 +0,0 @@
1
- require "carray"
2
- require 'rspec-power_assert'
3
-
4
- describe "CArray#seq" do
5
-
6
- example "basic" do
7
- res = CA_INT32([[0, 1, 2],
8
- [3, 4, 5],
9
- [6, 7, 8]])
10
- a = CArray.int32(3, 3)
11
- is_asserted_by { a.seq(0,1) == res }
12
- is_asserted_by { a.seq(0) == res }
13
- is_asserted_by { a.seq() == res }
14
- end
15
-
16
- example "offset" do
17
- res = CA_INT32([[3, 4, 5],
18
- [6, 7, 8],
19
- [9, 10, 11]])
20
- a = CArray.int32(3, 3)
21
- is_asserted_by { a.seq(3,1) == res }
22
- is_asserted_by { a.seq(3) == res }
23
- end
24
-
25
- example "step" do
26
- res = CA_INT32([[0, 3, 6],
27
- [9, 12, 15],
28
- [18, 21, 24]])
29
- a = CArray.int32(3, 3)
30
- is_asserted_by { a.seq(0,3) == res }
31
- end
32
-
33
- example "fractional step for integer" do
34
- res = CA_INT32([0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5])
35
- a = CArray.int32(11)
36
- is_asserted_by { a.seq(0,0.5) == res }
37
-
38
- res = CA_INT32([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2])
39
- a = CArray.int32(11)
40
- is_asserted_by { a.seq(0,0.2) == res }
41
-
42
- res = CA_INT32([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
43
- a = CArray.int32(11)
44
- is_asserted_by { a.seq(0,0.1) == res }
45
- end
46
-
47
- end
@@ -1,43 +0,0 @@
1
- require "carray"
2
- require 'rspec-power_assert'
3
-
4
- describe "CArray#sort_with" do
5
-
6
- # 2020-07-09
7
- example "basic" do
8
-
9
- a1 = CA_INT([3,2,4,1])
10
- b1 = CA_INT([13,12,14,11])
11
- c1 = CA_INT([23,22,24,21])
12
-
13
- a2,b2,c2 = a1.sort_with(b1,c1)
14
-
15
- is_asserted_by { a2 == CA_INT([1,2,3,4]) }
16
- is_asserted_by { b2 == CA_INT([11,12,13,14]) }
17
- is_asserted_by { c2 == CA_INT([21,22,23,24]) }
18
-
19
- a2[0] = -999
20
- b2[0] = -999
21
- c2[0] = -999
22
- is_asserted_by { a1[3] != -999 }
23
- is_asserted_by { b1[3] != -999 }
24
- is_asserted_by { c1[3] != -999 }
25
-
26
- end
27
-
28
- example "technique: reverse sort" do
29
-
30
- a1 = CA_INT([3,2,4,1])
31
- b1 = CA_INT([13,12,14,11])
32
- c1 = CA_INT([23,22,24,21])
33
-
34
- _,a2,b2,c2 = (-a1).sort_with(a1,b1,c1)
35
-
36
- is_asserted_by { a2 == CA_INT([1,2,3,4]).reverse }
37
- is_asserted_by { b2 == CA_INT([11,12,13,14]).reverse }
38
- is_asserted_by { c2 == CA_INT([21,22,23,24]).reverse }
39
-
40
- end
41
-
42
- end
43
-
@@ -1,29 +0,0 @@
1
- require "carray"
2
- require 'rspec-power_assert'
3
-
4
- describe "CArray#sorted_with" do
5
-
6
- # 2020-07-09
7
- example "basic" do
8
-
9
- a1 = CA_INT([3,2,4,1])
10
- b1 = CA_INT([13,12,14,11])
11
- c1 = CA_INT([23,22,24,21])
12
-
13
- a2,b2,c2 = a1.sorted_with(b1,c1)
14
-
15
- is_asserted_by { a2 == CA_INT([1,2,3,4]) }
16
- is_asserted_by { b2 == CA_INT([11,12,13,14]) }
17
- is_asserted_by { c2 == CA_INT([21,22,23,24]) }
18
-
19
- a2[0] = -999
20
- b2[0] = -999
21
- c2[0] = -999
22
- is_asserted_by { a1[3] == -999 }
23
- is_asserted_by { b1[3] == -999 }
24
- is_asserted_by { c1[3] == -999 }
25
-
26
- end
27
-
28
- end
29
-
@@ -1,42 +0,0 @@
1
- require "carray"
2
- require 'rspec-power_assert'
3
-
4
- describe "CArray#span" do
5
-
6
- # 2020-07-10
7
- example "integer range (integer steps)" do
8
-
9
- a = CArray.int(10).span(1..10)
10
-
11
- is_asserted_by { a == CA_INT([1,2,3,4,5,6,7,8,9,10]) }
12
-
13
- b = CArray.int(10).span(1...11)
14
-
15
- is_asserted_by { b == CA_INT([1,2,3,4,5,6,7,8,9,10]) }
16
-
17
- end
18
-
19
- # 2020-07-10
20
- example "integer range (fraction steps)" do
21
-
22
- a = CArray.int(10).span(1..5)
23
-
24
- is_asserted_by { a == CA_INT([1,1,2,2,3,3,4,4,5,5]) }
25
-
26
- b = CArray.int(10).span(1...6)
27
-
28
- is_asserted_by { b == CA_INT([1,1,2,2,3,3,4,4,5,5]) }
29
-
30
- end
31
-
32
- # 2020-07-10
33
- example "float range" do
34
-
35
- a = CArray.double(11).span(0..5)
36
-
37
- is_asserted_by { a == CA_DOUBLE([0.0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0]) }
38
-
39
- end
40
-
41
- end
42
-
@@ -1,43 +0,0 @@
1
- require 'carray'
2
- require "rspec-power_assert"
3
-
4
- describe "CArray#wrap_readonly" do
5
-
6
- # 2020-07-22
7
- example "array" do
8
- ary = [[1,2,3],
9
- [4,5,6],
10
- [7,8,9]]
11
- a = CArray.wrap_readonly(ary, CA_INT32)
12
- is_asserted_by { a.class == CAFake }
13
- is_asserted_by { a.entity? == false }
14
- is_asserted_by { a.data_type == CA_INT32 }
15
- is_asserted_by { a.shape == [3,3] }
16
- is_asserted_by { a == CA_INT32(ary) }
17
- end
18
-
19
- # 2020-07-22
20
- example "string" do
21
- a = CA_UINT8([0,1,2,3,4,5,6,7])
22
- b = CArray.wrap_readonly(a.to_s, CA_UINT8)
23
- is_asserted_by { b == a }
24
-
25
- c = CArray.wrap_readonly(a.to_s, CA_OBJECT)
26
- is_asserted_by { c == CA_OBJECT(a.to_s) }
27
- end
28
-
29
- # 2020-07-22
30
- example "nil" do
31
- a = CA_INT(0)
32
- b = CArray.wrap_readonly(nil, CA_INT)
33
- is_asserted_by { b == a }
34
- end
35
-
36
- # 2020-07-22
37
- example "object" do
38
- a = CA_FLOAT64(1.5)
39
- b = CArray.wrap_readonly(1.5, CA_FLOAT64)
40
- is_asserted_by { b == a }
41
- end
42
-
43
- end
@@ -1,214 +0,0 @@
1
- $:.unshift("../lib", "..")
2
-
3
- require 'test/unit'
4
- require 'carray'
5
-
6
- module TestCAVirtualMixin
7
-
8
- def test_fetch_index
9
- 10.times do
10
- idx = @ref.dim.map{|x| rand(x)}
11
- assert_equal(@ref[*idx], @obj[*idx])
12
- end
13
- end
14
-
15
- def test_fetch_addr
16
- 10.times do
17
- addr = rand(@ref.elements)
18
- assert_equal(@ref[addr], @obj[addr])
19
- end
20
- end
21
-
22
- def test_store_index
23
- unless @obj.read_only?
24
- 10.times do
25
- idx = @ref.dim.map{|x| rand(x)}
26
- v = rand(10)
27
- @ref[*idx] = v
28
- @obj[*idx] = v
29
- assert_equal(@ref[*idx], @obj[*idx])
30
- end
31
- assert_equal(@ref, @obj)
32
- end
33
- end
34
-
35
- def test_store_addr
36
- unless @obj.read_only?
37
- 10.times do
38
- addr = rand(@ref.elements)
39
- @ref[addr] = @obj[addr] = rand(10)
40
- assert_equal(@ref[addr], @obj[addr])
41
- end
42
- assert_equal(@ref, @obj)
43
- end
44
- end
45
-
46
- def test_attach
47
- assert_equal(@ref, @obj)
48
- end
49
-
50
- def test_sync
51
- unless @obj.read_only?
52
- assert_equal(@ref.seq!, @obj.seq!)
53
- end
54
- end
55
-
56
- def test_copy_data
57
- assert_equal(@ref, @obj.to_ca)
58
- end
59
-
60
- def test_sync_data
61
- unless @obj.read_only?
62
- val = @ref.reverse
63
- @ref[] = val
64
- @obj[] = val
65
- assert_equal(@ref, @obj)
66
- end
67
- end
68
-
69
- def test_fill_data
70
- unless @obj.read_only?
71
- @obj[] = 1
72
- assert_equal(@ref.template{1}, @obj)
73
- end
74
- end
75
-
76
- def test_create_mask
77
- unless @obj.read_only?
78
- 5.times do
79
- addr = rand(@ref.elements)
80
- @ref[addr] = UNDEF
81
- @obj[addr] = UNDEF
82
- end
83
- assert_equal(@ref, @obj)
84
- end
85
- end
86
-
87
- end
88
-
89
- class TestCARefer < Test::Unit::TestCase
90
-
91
- include TestCAVirtualMixin
92
-
93
- def setup
94
- @ref = CArray.int32(10, 10).seq!
95
- orig = CArray.int32(10, 10).seq!
96
- @obj = orig[]
97
- end
98
-
99
- end
100
-
101
- class TestCABlock < Test::Unit::TestCase
102
-
103
- include TestCAVirtualMixin
104
-
105
- def setup
106
- @ref = CArray.int32(10, 10).seq!
107
- orig = CArray.int32(10, 10).seq!
108
- @obj = orig[0..-1, 0..-1]
109
- end
110
-
111
- end
112
-
113
- class TestCASelect < Test::Unit::TestCase
114
-
115
- include TestCAVirtualMixin
116
-
117
- def setup
118
- @ref = CArray.int32(10, 10).seq!.flatten
119
- orig = CArray.int32(10, 10).seq!
120
- @obj = orig[orig.true]
121
- end
122
-
123
- end
124
-
125
- class TestCAMapping < Test::Unit::TestCase
126
-
127
- include TestCAVirtualMixin
128
-
129
- def setup
130
- @ref = CArray.int32(10, 10).seq!
131
- orig = CArray.int32(10, 10).seq!
132
- @obj = orig[orig]
133
- end
134
-
135
- end
136
-
137
- class TestCAGrid < Test::Unit::TestCase
138
-
139
- include TestCAVirtualMixin
140
-
141
- def setup
142
- @ref = CArray.int32(10, 10).seq!
143
- orig = CArray.int32(10, 10).seq!
144
- idx = CArray.int32(10).seq!
145
- @obj = @ref[idx,idx]
146
- end
147
-
148
- end
149
-
150
- class TestCARepeat < Test::Unit::TestCase
151
-
152
- include TestCAVirtualMixin
153
-
154
- def setup
155
- orig = CArray.int32(10).seq!
156
- @ref = CArray.int32(10, 10)
157
- 10.times do |i|
158
- @ref[nil,i] = orig
159
- end
160
- @obj = orig[:%, 10]
161
- end
162
-
163
- end
164
-
165
- class TestCAFake < Test::Unit::TestCase
166
-
167
- include TestCAVirtualMixin
168
-
169
- def setup
170
- @ref = CArray.int16(10, 10).seq!
171
- orig = CArray.int32(10,10).seq!
172
- @obj = orig.as_int16
173
- end
174
-
175
- end
176
-
177
- class TestCAFarray < Test::Unit::TestCase
178
-
179
- include TestCAVirtualMixin
180
-
181
- def setup
182
- @ref = CArray.int32(10,10).seq!
183
- @ref[] = @ref.to_a.transpose
184
- orig = CArray.int32(10,10).seq!
185
- @obj = orig.t
186
- end
187
-
188
- end
189
-
190
- class TestCATranspose < Test::Unit::TestCase
191
-
192
- include TestCAVirtualMixin
193
-
194
- def setup
195
- @ref = CArray.int32(10,10).seq!
196
- @ref[] = @ref.to_a.transpose
197
- orig = CArray.int32(10,10).seq!
198
- @obj = orig.transposed
199
- end
200
-
201
- end
202
-
203
- class TestCAWindow < Test::Unit::TestCase
204
-
205
- include TestCAVirtualMixin
206
-
207
- def setup
208
- @ref = CArray.int32(15,15).seq![0..9, 0..9].to_ca
209
- orig = CArray.int32(15,15).seq!
210
- @obj = orig.window(0..9, 0..9)
211
- end
212
-
213
- end
214
-