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,315 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/composition.rb
4
- #
5
- # This file is part of Ruby/CArray extension library.
6
- #
7
- # Copyright (C) 2005-2020 Hiroki Motoyoshi
8
- #
9
- # ----------------------------------------------------------------------------
10
-
11
- class CArray
12
-
13
- # Returns the array resized to the dimension given as `newdim`.
14
- # The new area is filled by the value returned by the block.
15
- def resize (*newdim, &block)
16
- if newdim.size != ndim
17
- raise "ndim mismatch"
18
- end
19
- offset = Array.new(ndim){0}
20
- ndim.times do |i|
21
- d = newdim[i]
22
- case d
23
- when nil
24
- newdim[i] = dim[i]
25
- when Integer
26
- if d < 0
27
- newdim[i] *= -1
28
- offset[i] = newdim[i] - dim[i]
29
- end
30
- else
31
- raise "invalid dimension size"
32
- end
33
- end
34
- out = CArray.new(data_type, newdim, &block)
35
- out.data_class = data_class if has_data_class?
36
- if out.has_mask?
37
- out.mask.paste(offset, self.false)
38
- end
39
- out.paste(offset, self)
40
- return out
41
- end
42
-
43
- # insert
44
- def insert_block (offset, bsize, &block)
45
- if offset.size != ndim or
46
- bsize.size != ndim
47
- raise "ndim mismatch"
48
- end
49
- newdim = dim
50
- grids = dim.map{|d| CArray.int32(d) }
51
- ndim.times do |i|
52
- if offset[i] < 0
53
- offset[i] += dim[i]
54
- end
55
- if offset[i] < 0 or offset[i] >= dim[i] or bsize[i] < 0
56
- raise "invalid offset or size"
57
- end
58
- if bsize[i] > 0
59
- newdim[i] += bsize[i]
60
- end
61
- grids[i][0...offset[i]].seq!
62
- grids[i][offset[i]..-1].seq!(offset[i]+bsize[i])
63
- end
64
- out = CArray.new(data_type, newdim)
65
- out.data_class = data_class if has_data_class?
66
- if block_given?
67
- sel = out.true
68
- sel[*grids] = 0
69
- out[sel] = block.call
70
- end
71
- out[*grids] = self
72
- return out
73
- end
74
-
75
- def delete_block (offset, bsize)
76
- if offset.size != ndim or
77
- bsize.size != ndim
78
- raise "ndim mismatch"
79
- end
80
- newdim = dim
81
- grids = []
82
- ndim.times do |i|
83
- if offset[i] < 0
84
- offset[i] += dim[i]
85
- end
86
- if bsize[i] >= 0
87
- if offset[i] < 0 or offset[i] >= dim[i]
88
- raise "invalid offset or size"
89
- end
90
- newdim[i] -= bsize[i]
91
- else
92
- if offset[i] + bsize[i] + 1 < 0 or offset[i] + bsize[i] > dim[i]
93
- raise "invalid offset or size"
94
- end
95
- newdim[i] += bsize[i]
96
- end
97
- grids[i] = CArray.int32(newdim[i])
98
- if bsize[i] >= 0
99
- if offset[i] > 0
100
- grids[i][0...offset[i]].seq!
101
- end
102
- if offset[i] + bsize[i] < dim[i]
103
- grids[i][offset[i]..-1].seq!(offset[i]+bsize[i])
104
- end
105
- else
106
- if offset[i]+bsize[i] > 0
107
- grids[i][0..offset[i]+bsize[i]].seq!
108
- end
109
- if offset[i]+bsize[i]+1 < dim[i]-1
110
- grids[i][offset[i]+bsize[i]+1..-1].seq!(offset[i]+1)
111
- end
112
- end
113
- end
114
- return self[*grids].to_ca
115
- end
116
-
117
- def self.combine (data_type, tdim, list, at = 0, bytes: nil)
118
- if CArray.data_class?(data_type)
119
- data_class = data_type
120
- data_type = :fixlen
121
- bytes = data_class::DATA_SIZE
122
- else
123
- data_class = nil
124
- end
125
- has_fill_value = false
126
- if block_given?
127
- fill_value = yield
128
- has_fill_value = true
129
- end
130
- if not tdim.is_a?(Array) or tdim.size == 0
131
- raise "invalid binding dimension"
132
- end
133
- if not list.is_a?(Array) or list.size == 0
134
- raise "invalid list"
135
- end
136
- list = list.map{|x| CArray.wrap_readonly(x, data_type) }
137
- ref = list.detect{|x| x.is_a?(CArray) or not x.scalar? }
138
- unless ref
139
- raise "at least one element in list should be a carray"
140
- end
141
- dim = ref.dim
142
- ndim = ref.ndim
143
- tndim = tdim.size
144
- if at < 0
145
- at += ndim - tndim + 1
146
- end
147
- unless at.between?(0, ndim - tndim)
148
- raise "concatnating position out of range"
149
- end
150
- list.map! do |x|
151
- if x.scalar?
152
- rdim = dim.clone
153
- rdim[at] = :%
154
- x = x[*rdim] # convert CScalar to CARepeat
155
- end
156
- x
157
- end
158
- block = CArray.object(*tdim){ list }
159
- edim = tdim.clone
160
- idx = Array.new(tdim)
161
- offset = Array.new(tdim.size) { [] }
162
- tdim.each_with_index do |td, i|
163
- edim[i] = 0
164
- idx.map!{0}
165
- idx[i] = nil
166
- block[*idx].each do |e|
167
- offset[i] << edim[i]
168
- edim[i] += e.dim[at+i] # extended dimension size
169
- end
170
- end
171
- newdim = dim.clone
172
- newdim[at,tndim] = edim # extended dimension size
173
- if has_fill_value
174
- obj = CArray.new(data_type, newdim) { fill_value }
175
- else
176
- obj = CArray.new(data_type, newdim)
177
- end
178
- out.data_class = data_class if data_class
179
- idx = newdim.map{0}
180
- block.each_with_index do |item, tidx|
181
- (at...at+tndim).each_with_index do |d,i|
182
- idx[d] = offset[i][tidx[i]]
183
- end
184
- obj.paste(idx, item)
185
- end
186
- obj
187
- end
188
-
189
- def self.bind (data_type, list, at = 0, bytes: nil)
190
- return CArray.combine(data_type, [list.size], list, at, bytes: bytes)
191
- end
192
-
193
- def self.composite (data_type, tdim, list, at = 0, bytes: nil)
194
- if CArray.data_class?(data_type)
195
- data_class = data_type
196
- data_type = :fixlen
197
- bytes = data_class::DATA_SIZE
198
- else
199
- data_class = nil
200
- end
201
- if not tdim.is_a?(Array) or tdim.size == 0
202
- raise "invalid tiling dimension"
203
- end
204
- if not list.is_a?(Array) or list.size == 0
205
- raise "invalid carray list"
206
- end
207
- list = list.map{|x| CArray.wrap_readonly(x, data_type) }
208
- ref = list.detect{|x| x.is_a?(CArray) or not x.scalar? }
209
- unless ref
210
- raise "at least one element in list should be a carray"
211
- end
212
- dim = ref.dim
213
- ndim = ref.ndim
214
- if at < 0
215
- at += ndim + 1 # "+ 1" is needed here
216
- end
217
- unless at.between?(0,ndim)
218
- raise "tiling position is out of range"
219
- end
220
- tndim = tdim.size
221
- list.map! do |x|
222
- if x.scalar?
223
- rdim = dim.clone
224
- rdim[at] = :%
225
- x = x[*rdim] # convert CScalar to CARepeat
226
- end
227
- x
228
- end
229
- newdim = dim.clone
230
- newdim[at,0] = tdim
231
- obj = CArray.new(data_type, newdim, bytes: bytes)
232
- out.data_class = data_class if data_class
233
- idx = Array.new(ndim+tndim) { nil }
234
- CArray.each_index(*tdim) do |*tidx|
235
- idx[at,tndim] = tidx
236
- obj[*idx] = list.shift
237
- end
238
- obj
239
- end
240
-
241
- def self.merge (data_type, list, at = -1, bytes: nil)
242
- return CArray.composite(data_type, [list.size], list, at, bytes: bytes)
243
- end
244
-
245
- def self.join (*argv)
246
- # get options
247
- case argv.first
248
- when Class
249
- if CArray.data_class?(argv.first)
250
- data_class = argv.shift
251
- data_type = "fixlen"
252
- bytes = data_class::DATA_SIZE
253
- else
254
- raise "#{argv.first} can not to be a data_class for CArray"
255
- end
256
- when Integer, Symbol, String
257
- type, = *CArray.guess_type_and_bytes(argv.shift, 0)
258
- else
259
- type = argv.flatten.first.data_type
260
- end
261
- # process
262
- conc = argv.map do |list|
263
- case list
264
- when CArray
265
- if list.ndim == 1
266
- list[:%,1]
267
- else
268
- list
269
- end
270
- when Array
271
- x0 = list.first
272
- if list.size == 1 and
273
- x0.is_a?(CArray) and
274
- x0.ndim == 1
275
- list = [x0[:%,1]]
276
- else
277
- list = list.map { |x|
278
- case x
279
- when CArray
280
- if x.ndim == 1
281
- x[:%,1]
282
- else
283
- x
284
- end
285
- when Array
286
- y = x.first
287
- if x.size == 1 and
288
- y.is_a?(CArray) and
289
- y.ndim == 1
290
- y[1,:%]
291
- else
292
- CArray.join(*x)
293
- end
294
- else
295
- x
296
- end
297
- }
298
- end
299
- if block_given?
300
- CArray.bind(type, list, 1, &block)
301
- else
302
- CArray.bind(type, list, 1)
303
- end
304
- else
305
- list
306
- end
307
- end
308
- if conc.size > 1
309
- return CArray.bind(type, conc)
310
- else
311
- return conc.first
312
- end
313
- end
314
-
315
- end
@@ -1,115 +0,0 @@
1
-
2
-
3
-
4
- class CArray
5
-
6
- #
7
- # Returns the 8-bit integer CArray object filled with 0 which
8
- # dimension size is same as +self+. The resulted array represents
9
- # the logical array which has +false+ for its all elements.
10
- #
11
- def false ()
12
- return template(:boolean)
13
- end
14
-
15
- #
16
- # Returns the 8-bit integer CArray object filled with 1 which
17
- # dimension size is same as +self+. The resulted array represents
18
- # the logical array which has +true+ for its all elements.
19
- #
20
- def true ()
21
- return template(:boolean) { 1 }
22
- end
23
-
24
- # Returns map
25
- def map (&block)
26
- return self.convert(CA_OBJECT, &block).to_a
27
- end
28
-
29
- #
30
- # ref = CA_INT([[0,1,2],[1,2,0],[2,0,1]])
31
- # a = CArray.int(3,3).seq(1)
32
- # b = CArray.int(3,3).seq(11)
33
- # c = CArray.int(3,3).seq(21)
34
- #
35
- # CArray.pickup(CA_OBJECT, ref, [a,b,c])
36
- # => <CArray.object(3,3): elem=9 mem=72b
37
- # [ [ 1, 12, 23 ],
38
- # [ 14, 25, 6 ],
39
- # [ 27, 8, 19 ] ]>
40
- #
41
- # CArray.pickup(CA_OBJECT, ref, ["a","b","c"])
42
- # => <CArray.object(3,3): elem=9 mem=36b
43
- # [ [ "a", "b", "c" ],
44
- # [ "b", "c", "a" ],
45
- # [ "c", "a", "b" ] ]>
46
- #
47
- def self.pickup (data_type, ref, args)
48
- out = ref.template(data_type)
49
- args.each_with_index do |v, i|
50
- s = ref.eq(i)
51
- case v
52
- when CArray
53
- out[s] = v[s]
54
- else
55
- out[s] = v
56
- end
57
- end
58
- return out
59
- end
60
-
61
- # Array#join like method
62
- #
63
- # > a = CArray.object(3,3).seq("a",:succ)
64
- # => <CArray.object(3,3): elem=9 mem=72b
65
- # [ [ "a", "b", "c" ],
66
- # [ "d", "e", "f" ],
67
- # [ "g", "h", "i" ] ]>
68
- #
69
- # > a.join("\n",",")
70
- # => "a,b,c\nd,e,f\ng,h,i"
71
- #
72
-
73
- def join (*argv)
74
- case argv.size
75
- when 0
76
- return to_a.join()
77
- when 1
78
- sep = argv.shift
79
- return to_a.join(sep)
80
- else
81
- sep = argv.shift
82
- return self[:i, false].map { |s|
83
- s[0, false].join(*argv)
84
- }.join(sep)
85
- end
86
- end
87
-
88
- #
89
- def to_bit_string (nb)
90
- hex = CArray.uint8(((nb*elements)/8.0).ceil)
91
- hex.bits[nil].paste([0], self.bits[false,[(nb-1)..0]].flatten)
92
- hex.bits[] = hex.bits[nil,[-1..0]]
93
- return hex.to_s
94
- end
95
-
96
- def from_bit_string (bstr, nb)
97
- hex = CArray.uint8(bstr.length).load_binary(bstr)
98
- hex.bits[] = hex.bits[nil,[-1..0]]
99
- bits = hex.bits.flatten
100
- self.bits[false,[(nb-1)..0]][nil].paste([0], bits)
101
- return self
102
- end
103
-
104
- def self.from_bit_string (bstr, nb, data_type=CA_INT32, dim=nil)
105
- if dim
106
- obj = CArray.new(data_type, dim)
107
- else
108
- dim0 = ((bstr.length*8)/nb.to_f).floor
109
- obj = CArray.new(data_type, [dim0])
110
- end
111
- obj.from_bit_string(bstr, nb)
112
- return obj
113
- end
114
-
115
- end
data/lib/carray/info.rb DELETED
@@ -1,110 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/info.rb
4
- #
5
- # This file is part of Ruby/CArray extension library.
6
- #
7
- # Copyright (C) 2005-2020 Hiroki Motoyoshi
8
- #
9
- # ----------------------------------------------------------------------------
10
-
11
-
12
- require "carray"
13
-
14
- printf "\n"
15
- printf "CArray Environment Information\n"
16
- printf "==============================\n"
17
- printf "\n"
18
- printf "# version\n"
19
- printf " CArray::VERSION -> %s\n", CArray::VERSION
20
- printf " CArray::VERSION_DATE -> %s\n", CArray::VERSION_DATE
21
- printf "\n"
22
- printf "# supports\n"
23
- printf " CArray::HAVE_COMPLEX -> %s\n", CArray::HAVE_COMPLEX
24
- printf " CArray::HAVE_NARRAY -> %s\n", CArray::HAVE_NARRAY
25
- printf "\n"
26
- printf "# limitations\n"
27
- printf " CA_RANK_MAX -> %2i\n", CA_RANK_MAX
28
- printf "\n"
29
- printf "# data types\n"
30
- [
31
- "CA_FIXLEN",
32
- "CA_INT8",
33
- "CA_UINT8",
34
- "CA_INT16",
35
- "CA_UINT16",
36
- "CA_INT32",
37
- "CA_UINT32",
38
- "CA_INT64",
39
- "CA_UINT64",
40
- "CA_FLOAT32",
41
- "CA_FLOAT64",
42
- "CA_FLOAT128",
43
- "CA_CMPLX64",
44
- "CA_CMPLX128",
45
- "CA_CMPLX256",
46
- "CA_OBJECT",
47
- "CA_BYTE",
48
- "CA_SHORT",
49
- "CA_INT",
50
- "CA_FLOAT",
51
- "CA_DOUBLE",
52
- "CA_COMPLEX",
53
- "CA_DCOMPLEX",
54
- ].each do |name|
55
- data_type = eval(name)
56
- if CArray.data_type?(data_type)
57
- # printf(" %-12s -> %2i [bytes -> %2i]\n",
58
- # name, data_type, CArray.sizeof(data_type))
59
- else
60
- printf(" %-12s -> not available\n", name)
61
- end
62
- end
63
-
64
- printf "\n"
65
- printf "# default CArray classes\n"
66
- carrays = []
67
- cavirtuals = []
68
- ObjectSpace.each_object(Class) do |c|
69
- if c <= CAVirtual
70
- cavirtuals.push c
71
- elsif c <= CArray
72
- carrays.push c
73
- end
74
- end
75
- printf " entity -> %2i [%s]\n", carrays.size, carrays.join(", ")
76
- printf " virtual -> %2i\n", cavirtuals.size
77
-
78
- printf "\n"
79
- printf "# default CArray methods\n"
80
- o = Object.new
81
- a = CArray.int(3)
82
- list = a.methods - o.methods
83
- printf " methods -> %2i\n", list.size
84
-
85
- def which (cmd)
86
- return ENV["PATH"].split(":").detect do |dir|
87
- filename = File.join(dir, cmd)
88
- File.executable?(filename)
89
- end
90
- end
91
-
92
- printf "\n"
93
- printf "# helper commands\n"
94
-
95
- [
96
- ["gnuplot", ["carray/graphics/gnuplot.rb"]],
97
- ["convert", ["carray/io/imagemagick.rb"]],
98
- ["display", ["carray/io/imagemagick.rb"]],
99
- ["identify", ["carray/io/imagemagick.rb"]],
100
- ["stream", ["carray/io/imagemagick.rb"]],
101
- ].each do |cmd, libs|
102
- path = which(cmd)
103
- if path
104
- printf(" %s -> installed, required by %s\n", cmd, libs.join(","))
105
- else
106
- printf(" %s -> not installed, required by %s\n", cmd, libs.join(","))
107
- end
108
- end
109
-
110
- printf "\n"