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,229 +1,28 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/constructor.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
- #
14
- # CArray.span(data_type, range[, step])
15
- # CArray.span(range[, step]) -> data_type guessed by range.first type
16
- #
17
-
18
- def self.span (*argv)
19
- if argv.first.is_a?(Range)
20
- type = nil
21
- else
22
- type, = *CArray.guess_type_and_bytes(argv.shift, nil)
23
- end
24
- range, step = argv[0], argv[1]
25
- start, stop = range.begin, range.end
26
- if step == 0
27
- raise "step should not be 0"
28
- end
29
- if not type
30
- case start
31
- when Integer
32
- type = CA_INT32
33
- when Float
34
- type = CA_FLOAT64
35
- else
36
- type = CA_OBJECT
37
- end
38
- end
39
- if type == CA_OBJECT and not step
40
- return CA_OBJECT(range.to_a)
41
- else
42
- step ||= 1
43
- if range.exclude_end?
44
- n = ((stop - start).abs/step).floor
45
- else
46
- n = ((stop - start).abs/step).floor + 1
47
- end
48
- if start <= stop
49
- return CArray.new(type, [n]).seq(start, step)
50
- else
51
- return CArray.new(type, [n]).seq(start, -step.abs)
52
- end
53
- end
54
- end
55
-
56
- def span! (range)
57
- first = range.begin.to_r
58
- last = range.end.to_r
59
- if integer?
60
- if range.exclude_end?
61
- step = ((last-1)-first+1)/elements
62
- else
63
- step = (last-first+1)/elements
64
- end
65
- else
66
- if range.exclude_end?
67
- step = (last-first)/elements
68
- else
69
- step = (last-first)/(elements-1)
70
- end
71
- end
72
- if integer? && step.denominator != 1
73
- self[] = (first + seq * step).floor
74
- else
75
- seq!(first, step)
76
- end
77
- return self
78
- end
79
-
80
- def span (range)
81
- return template.span!(range)
82
- end
83
-
84
- #
85
- #
86
- #
87
-
88
- def scale! (xa, xb)
89
- xa = xa.to_f
90
- xb = xb.to_f
91
- seq!(xa, (xb-xa)/(elements-1))
92
- end
93
-
94
- def scale (xa, xb)
95
- template.scale!(xa, xb)
96
- end
97
-
98
- # @private
99
- # Create new CArray object from the return value of the block
100
- # with data type +type+. The dimensional size and the initialization value
101
- # are guessed from the return value of the block.
102
- # The block should return one of the following objects.
103
- #
104
- # * Numeric
105
- # * Array
106
- # * CArray
107
- # * an object that has either method +to_ca+ or +to_a+ or +map+
108
- #
109
- # When the return value of the block is a Numeric or CScalar object,
110
- # CScalar object is returned.
111
- #
112
- def self.__new__ (type, *args) # :nodoc:
113
- case v = args.first
114
- when CArray
115
- return ( v.data_type == type ) ? v.to_ca : v.to_type(type)
116
- when Array
117
- return CArray.new(type, CArray.guess_array_shape(v)) { v }
118
- when Range
119
- return CArray.span(type, *args)
120
- when String
121
- if type == CA_OBJECT
122
- return CScalar.new(CA_OBJECT) { v }
123
- elsif type == CA_BOOLEAN
124
- v = v.dup
125
- v.tr!('^01',"1")
126
- v.tr!('01',"\x0\x1")
127
- return CArray.boolean(v.length).load_binary(v)
128
- else
129
- case v
130
- when /;/
131
- v = v.strip.split(/\s*;\s*/).
132
- map{|s| s.split(/\s+|\s*,\s*/).map{|x| x=='_' ? UNDEF : x} }
133
- else
134
- v = v.strip.split(/\s+|\s*,\s*/).map{|x| x=='_' ? UNDEF : x}
135
- end
136
- return CArray.new(type, CArray.guess_array_shape(v)) { v }
137
- end
138
- when NilClass
139
- return CArray.new(type, [0])
140
- else
141
- if v.respond_to?(:to_ca)
142
- ca = v.to_ca
143
- return ( ca.data_type == type ) ? ca : ca.to_type(type)
144
- else
145
- return CScalar.new(type) { v }
146
- end
147
- end
148
- end
149
-
150
- # @private
151
- def self.__new_fixlen__ (bytes, v) # :nodoc:
152
- case v
153
- when CArray
154
- return ( v.data_type == :fixlen ) ? v.to_ca : v.to_type(:fixlen, :bytes=>bytes)
155
- when Array
156
- unless bytes
157
- bytes = v.map{|s| s.length}.max
158
- end
159
- return CArray.new(:fixlen, CArray.guess_array_shape(v), :bytes=>bytes) { v }
160
- when NilClass
161
- return CArray.new(type, [0])
162
- else
163
- if v.respond_to?(:to_ca)
164
- ca = v.to_ca
165
- return ( ca.data_type == :fixlen ) ? ca : ca.to_type(:fixlen, :bytes=>bytes)
166
- else
167
- return CScalar.new(:fixlen, :bytes=>bytes) { v }
168
- end
169
- end
170
- end
171
-
172
- end
173
-
174
1
  #
175
2
  # CA_INT8(data)
176
3
  # :
177
- # CA_CMPLX256(data)
4
+ # CA_OBJECT(data)
178
5
  #
179
- # Create new CArray object from +data+ with data type
180
- # which is guessed from the method name. +data+ should be one of the following
181
- # objects.
6
+ # Cast +data+ to a CArray of the data_type indicated by the method name.
7
+ # This is a polymorphic cast (not a fresh allocator): the source +data+
8
+ # is coerced into a CArray of the target data_type, dispatching on its
9
+ # Ruby class. +data+ should be one of the following objects:
182
10
  #
183
- # * Numeric
184
- # * Array
185
- # * CArray
186
- # * an object that has either method +to_ca+ or +to_a+ or +map+
11
+ # * Numeric -> CScalar (0-d CArray)
12
+ # * Array -> shape-guessed CArray, element-wise cast
13
+ # * CArray -> data_type cast (copy if same data_type, +to_type+ otherwise)
14
+ # * Range -> arange-like sequence (start..stop with step 1)
15
+ # * String -> parsed (per-data_type parser)
16
+ # * nil -> empty CArray
17
+ # * any object responding to +to_ca+ or +to_a+ -> coerced then cast
187
18
  #
188
19
  # When the block returns a Numeric or CScalar object,
189
20
  # the resulted array is a CScalar object.
190
21
 
191
- [
192
- "CA_BOOLEAN",
193
- "CA_INT8",
194
- "CA_UINT8",
195
- "CA_INT16",
196
- "CA_UINT16",
197
- "CA_INT32",
198
- "CA_UINT32",
199
- "CA_INT64",
200
- "CA_UINT64",
201
- "CA_FLOAT32",
202
- "CA_FLOAT64",
203
- "CA_FLOAT128",
204
- "CA_CMPLX64",
205
- "CA_CMPLX128",
206
- "CA_CMPLX256",
207
- "CA_OBJECT",
208
- "CA_BYTE",
209
- "CA_SHORT",
210
- "CA_INT",
211
- "CA_FLOAT",
212
- "CA_DOUBLE",
213
- "CA_COMPLEX",
214
- "CA_DCOMPLEX",
215
- "CA_SIZE",
216
- ].each do |name|
217
- eval %{
218
- def #{name} (*val)
219
- CArray.__new__(#{name}, *val)
220
- end
221
- }
222
- end
223
-
224
- def CA_FIXLEN (val, options = {})
225
- CArray.__new_fixlen__(options[:bytes], val)
226
- end
22
+ # CA_BOOLEAN / CA_INT8 / ... / CA_OBJECT (+ type-name aliases CA_BYTE /
23
+ # CA_SHORT / CA_INT / CA_FLOAT / CA_DOUBLE / CA_COMPLEX / CA_DCOMPLEX /
24
+ # CA_SIZE) and CA_FIXLEN are defined as global functions in C
25
+ # (ext/carray_cast.c).
227
26
 
228
27
  class CArray
229
28
 
@@ -233,118 +32,218 @@ class CArray
233
32
  module DataTypeExtension
234
33
  end
235
34
 
35
+ # CArray whose elements are `boolean`. Naming the element type as a
36
+ # class lets a constructor be spelled `CArray::Boolean.new(...)`; see
37
+ # {DataTypeNewConstructor} for what that form adds.
38
+ # @private
236
39
  class Boolean
237
40
  extend DataTypeNewConstructor
238
41
  extend DataTypeExtension
42
+ # @!visibility private
239
43
  TypeSymbol = :boolean
44
+ # @!visibility private
240
45
  DataType = CA_BOOLEAN
241
46
  end
242
47
 
48
+ # CArray whose elements are `uint8`. Naming the element type as a
49
+ # class lets a constructor be spelled `CArray::UInt8.new(...)`; see
50
+ # {DataTypeNewConstructor} for what that form adds.
51
+ # @private
243
52
  class UInt8
244
53
  extend DataTypeNewConstructor
245
54
  extend DataTypeExtension
55
+ # @!visibility private
246
56
  TypeSymbol = :uint8
57
+ # @!visibility private
247
58
  DataType = CA_UINT8
248
59
  end
249
60
 
61
+ # CArray whose elements are `uint16`. Naming the element type as a
62
+ # class lets a constructor be spelled `CArray::UInt16.new(...)`; see
63
+ # {DataTypeNewConstructor} for what that form adds.
64
+ # @private
250
65
  class UInt16
251
66
  extend DataTypeNewConstructor
252
67
  extend DataTypeExtension
68
+ # @!visibility private
253
69
  TypeSymbol = :uint16
70
+ # @!visibility private
254
71
  DataType = CA_UINT16
255
72
  end
256
73
 
74
+ # CArray whose elements are `uint32`. Naming the element type as a
75
+ # class lets a constructor be spelled `CArray::UInt32.new(...)`; see
76
+ # {DataTypeNewConstructor} for what that form adds.
77
+ # @private
257
78
  class UInt32
258
79
  extend DataTypeNewConstructor
259
80
  extend DataTypeExtension
81
+ # @!visibility private
260
82
  TypeSymbol = :uint32
83
+ # @!visibility private
261
84
  DataType = CA_UINT32
262
85
  end
263
86
 
87
+ # CArray whose elements are `uint64`. Naming the element type as a
88
+ # class lets a constructor be spelled `CArray::UInt64.new(...)`; see
89
+ # {DataTypeNewConstructor} for what that form adds.
90
+ # @private
264
91
  class UInt64
265
92
  extend DataTypeNewConstructor
266
93
  extend DataTypeExtension
94
+ # @!visibility private
267
95
  TypeSymbol = :uint64
96
+ # @!visibility private
268
97
  DataType = CA_UINT64
269
98
  end
270
99
 
100
+ # CArray whose elements are `int8`. Naming the element type as a
101
+ # class lets a constructor be spelled `CArray::Int8.new(...)`; see
102
+ # {DataTypeNewConstructor} for what that form adds.
103
+ # @private
271
104
  class Int8
272
105
  extend DataTypeNewConstructor
273
106
  extend DataTypeExtension
107
+ # @!visibility private
274
108
  TypeSymbol = :int8
109
+ # @!visibility private
275
110
  DataType = CA_INT8
276
111
  end
277
112
 
113
+ # CArray whose elements are `int16`. Naming the element type as a
114
+ # class lets a constructor be spelled `CArray::Int16.new(...)`; see
115
+ # {DataTypeNewConstructor} for what that form adds.
116
+ # @private
278
117
  class Int16
279
118
  extend DataTypeNewConstructor
280
119
  extend DataTypeExtension
120
+ # @!visibility private
281
121
  TypeSymbol = :int16
122
+ # @!visibility private
282
123
  DataType = CA_INT16
283
124
  end
284
125
 
126
+ # CArray whose elements are `int32`. Naming the element type as a
127
+ # class lets a constructor be spelled `CArray::Int32.new(...)`; see
128
+ # {DataTypeNewConstructor} for what that form adds.
129
+ # @private
285
130
  class Int32
286
131
  extend DataTypeNewConstructor
287
132
  extend DataTypeExtension
133
+ # @!visibility private
288
134
  TypeSymbol = :int32
135
+ # @!visibility private
289
136
  DataType = CA_INT32
290
137
  end
291
138
 
139
+ # CArray whose elements are `int64`. Naming the element type as a
140
+ # class lets a constructor be spelled `CArray::Int64.new(...)`; see
141
+ # {DataTypeNewConstructor} for what that form adds.
142
+ # @private
292
143
  class Int64
293
144
  extend DataTypeNewConstructor
294
145
  extend DataTypeExtension
146
+ # @!visibility private
295
147
  TypeSymbol = :int64
148
+ # @!visibility private
296
149
  DataType = CA_INT64
297
150
  end
298
151
 
152
+ # CArray whose elements are `float32`. Naming the element type as a
153
+ # class lets a constructor be spelled `CArray::Float32.new(...)`; see
154
+ # {DataTypeNewConstructor} for what that form adds.
155
+ # @private
299
156
  class Float32
300
157
  extend DataTypeNewConstructor
301
158
  extend DataTypeExtension
159
+ # @!visibility private
302
160
  TypeSymbol = :float32
161
+ # @!visibility private
303
162
  DataType = CA_FLOAT32
304
163
  end
305
164
 
165
+ # Numo-compatible alias of {Float32}.
166
+ # @private
306
167
  SFloat = Float32
307
168
 
169
+ # CArray whose elements are `float64`. Naming the element type as a
170
+ # class lets a constructor be spelled `CArray::Float64.new(...)`; see
171
+ # {DataTypeNewConstructor} for what that form adds.
172
+ # @private
308
173
  class Float64
309
174
  extend DataTypeNewConstructor
310
175
  extend DataTypeExtension
176
+ # @!visibility private
311
177
  TypeSymbol = :float64
178
+ # @!visibility private
312
179
  DataType = CA_FLOAT64
313
180
  end
314
181
 
182
+ # Numo-compatible alias of {Float64}.
183
+ # @private
315
184
  DFloat = Float64
316
185
 
186
+ # CArray whose elements are `complex64`. Naming the element type as a
187
+ # class lets a constructor be spelled `CArray::Complex64.new(...)`; see
188
+ # {DataTypeNewConstructor} for what that form adds.
189
+ # @private
317
190
  class Complex64
318
191
  extend DataTypeNewConstructor
319
192
  extend DataTypeExtension
193
+ # @!visibility private
320
194
  TypeSymbol = :complex64
195
+ # @!visibility private
321
196
  DataType = CA_CMPLX64
322
197
  end
323
198
 
199
+ # Numo-compatible alias of {Complex64}.
200
+ # @private
324
201
  SComplex = Complex64
325
202
 
203
+ # CArray whose elements are `complex128`. Naming the element type as a
204
+ # class lets a constructor be spelled `CArray::Complex128.new(...)`; see
205
+ # {DataTypeNewConstructor} for what that form adds.
206
+ # @private
326
207
  class Complex128
327
208
  extend DataTypeNewConstructor
328
209
  extend DataTypeExtension
210
+ # @!visibility private
329
211
  TypeSymbol = :complex128
212
+ # @!visibility private
330
213
  DataType = CA_CMPLX128
331
214
  end
332
215
 
216
+ # Numo-compatible alias of {Complex128}.
217
+ # @private
333
218
  DComplex = Complex128
334
219
 
220
+ # CArray whose elements are `object`. Naming the element type as a
221
+ # class lets a constructor be spelled `CArray::Object.new(...)`; see
222
+ # {DataTypeNewConstructor} for what that form adds.
223
+ # @private
335
224
  class Object
336
225
  extend DataTypeNewConstructor
337
226
  extend DataTypeExtension
227
+ # @!visibility private
338
228
  TypeSymbol = :object
229
+ # @!visibility private
339
230
  DataType = CA_OBJECT
340
231
  end
341
232
 
233
+ # Numo-compatible alias of {Object}.
234
+ # @private
342
235
  RObject = Object
343
236
 
237
+ # CArray whose elements are `fixlen`. Naming the element type as a
238
+ # class lets a constructor be spelled `CArray::Fixlen.new(...)`; see
239
+ # {DataTypeNewConstructor} for what that form adds.
240
+ # @private
344
241
  class Fixlen
345
242
  extend DataTypeNewConstructor
346
243
  extend DataTypeExtension
244
+ # @!visibility private
347
245
  TypeSymbol = :fixlen
246
+ # @!visibility private
348
247
  DataType = CA_FIXLEN
349
248
  end
350
249
 
@@ -352,133 +251,66 @@ end
352
251
 
353
252
  class CArray
354
253
  extend DataTypeExtension
254
+ # @!visibility private
255
+ # @private
355
256
  TypeSymbol = nil
257
+ # @!visibility private
356
258
  DataType = nil
357
259
  end
358
260
 
359
261
  class CArray
360
262
 
263
+ # Constructors added to every typed class ({Float64}, {Int32}, ...) so the
264
+ # class itself names the element type. Each forwards to the `CArray`
265
+ # equivalent with `data_type:` filled in.
361
266
  module DataTypeNewConstructor
362
-
267
+
268
+ # @overload new(*shape)
269
+ # Allocates a new CArray of this typed subclass with the given
270
+ # shape.
271
+ # @param shape [Array<Integer>] shape of the new CArray.
272
+ # @return [CArray]
363
273
  def new (*shape)
364
274
  CArray.new(self::DataType, shape)
365
275
  end
366
-
367
- end
368
-
369
- module DataTypeExtension
370
276
 
371
- def guess_data_type_from_values (*values)
372
- if values.all? {|v| v == true || v == false }
373
- CA_BOOLEAN
374
- elsif values.all? { |v| v.is_a?(Integer) }
375
- CA_INT64
376
- elsif values.all? { |v| v.is_a?(Float) }
377
- CA_FLOAT64
378
- elsif values.all? { |v| v.is_a?(Complex) }
379
- CA_CMPLX128
380
- else
381
- CA_OBJECT
382
- end
277
+ # @overload from_memory_view(obj)
278
+ # Returns a fresh CArray interpreted as this typed subclass's
279
+ # `data_type`, imported by copy from a MemoryView producer.
280
+ # Forwards to
281
+ # `CArray.from_memory_view(obj, data_type: self::DataType)`; the
282
+ # result is always 1-D (chain `.reshape` for higher rank).
283
+ # @param obj [Object] MemoryView producer.
284
+ # @return [CArray]
285
+ def from_memory_view (obj)
286
+ CArray.from_memory_view(obj, data_type: self::DataType)
383
287
  end
384
-
385
- private :guess_data_type_from_values
386
288
 
387
- def zeros (*shape)
388
- CArray.new(self::DataType || CA_FLOAT64, shape).zero
289
+ # @overload wrap_memory_view(obj)
290
+ # Returns a zero-copy CAWrap over `obj`'s MemoryView interpreted
291
+ # as this typed subclass's `data_type`. Forwards to
292
+ # `CArray.wrap_memory_view(obj, data_type: self::DataType)`; the
293
+ # result is always 1-D (chain `.reshape` for higher rank).
294
+ #
295
+ # Here the receiver names the element type, not the class of the
296
+ # result: the call forwards with `CArray` as the receiver, so a
297
+ # `CAWrap` comes back. Choosing the class is the other reading of
298
+ # the receiver, and it lives on `CArray.wrap_memory_view` itself.
299
+ # @param obj [Object] MemoryView producer.
300
+ # @return [CAWrap]
301
+ def wrap_memory_view (obj)
302
+ CArray.wrap_memory_view(obj, data_type: self::DataType)
389
303
  end
390
304
 
391
- def ones (*shape)
392
- CArray.new(self::DataType || CA_FLOAT64 , shape).one
393
- end
394
-
395
- def eye (n, m = nil, k = 0)
396
- m ||= n
397
- mat = CArray.new(self::DataType || CA_FLOAT64, [n, m])
398
- start = ( k == 0 ) ? k : ( k > 0 ? k : m - k - 1 )
399
- mat[[start..-1,m+1]] = 1
400
- mat
401
- end
402
-
403
- def identity (n)
404
- mat = CArray.new(self::DataType || CA_FLOAT64, [n, n])
405
- mat[[nil,n+1]] = 1
406
- mat
407
- end
408
-
409
- def linspace (x1, x2, n = 100)
410
- data_type = self::DataType
411
- unless data_type
412
- guess = guess_data_type_from_values(x1, x2)
413
- guess = CA_FLOAT64 if guess == CA_INT64
414
- data_type = guess
415
- end
416
- CArray.new(data_type, [n]).span(x1..x2)
417
- end
418
-
419
- def arange (*args)
420
- case args.size
421
- when 3
422
- start, stop, step = *args
423
- when 2
424
- start, stop = *args
425
- step = 1
426
- when 1
427
- start = 0
428
- stop, = *args
429
- step = 1
430
- end
431
- data_type = self::DataType
432
- data_type ||= guess_data_type_from_values(start, stop, step)
433
- CArray.__new__(data_type, start..stop-step, step)
434
- end
435
-
436
- def full (shape, fill_value)
437
- data_type = self::DataType
438
- data_type ||= guess_data_type_from_values(fill_value)
439
- shape = [shape] unless shape.is_a?(Array)
440
- CArray.new(data_type, shape).fill(fill_value)
441
- end
442
-
443
305
  end
444
306
 
445
- end
446
-
447
- class CArray
448
-
449
- def self.meshgrid (*axes, indexing: "xy", copy: true, sparse: false, &block)
450
- case indexing
451
- when "xy"
452
- ### no operation
453
- when "ij"
454
- axes = axes.map{|axis| axis.seq }
455
- else
456
- raise ArgumentError, %{indexing option should be one of "xy" and "ij"}
457
- end
458
- shape = axes.map(&:size).reverse
459
- if sparse ### => CAUnboundRepeat
460
- list = axes.map.with_index do |axis, k|
461
- extended_shape = (shape.size-1).downto(0).map { |i| ( i == k ) ? nil : :* }
462
- if copy
463
- axis[*extended_shape].to_ca
464
- else
465
- axis[*extended_shape]
466
- end
467
- end
468
- else ### => CARepeat
469
- naxes = shape.size
470
- list = axes.map.with_index do |axis, k|
471
- extended_shape = shape.dup
472
- extended_shape[naxes - k - 1] = :%
473
- if copy
474
- axis[*extended_shape].to_ca
475
- else
476
- axis[*extended_shape]
477
- end
478
- end
479
- end
480
- return block.call(*list) if block
481
- return list
307
+ # DataTypeExtension is the carrier module for Numo / NumPy-style
308
+ # factory methods that are extended onto CArray and every typed
309
+ # CArray::Int32 / Float64 / ... class below. Its body is defined
310
+ # in lib/carray/data_type_extension.rb (required after this file),
311
+ # keeping the soft-compatibility surface separate from carray's
312
+ # native constructor API.
313
+ module DataTypeExtension
482
314
  end
483
-
315
+
484
316
  end