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
@@ -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-2025 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-2025 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"