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,235 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/io/imagemagick.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
- # carray/imagemagick.rb
13
- #
14
- # This library adds image loading/saving functions to CArray class.
15
- # These method uses the command line tools in ImageMagick internally.
16
- # ImageMagick package is required to use this library, but RMagick
17
- # library is not required.
18
- #
19
- # --- CArray.load_by_magick(filename[, map="rgb", data_type=nil])
20
- #
21
- # Creates a CArray object from the image file _filename_.
22
- # The argument _map_ should be the combination of [r|g|b|a|o|i|c|m|y|b|p].
23
- # The dimension of new array is determined from map's contents.
24
- # The data_type of array is determined automatically by the depth of image,
25
- # unless the data_type is not given.
26
- #
27
- # --- CArray#save_by_magick(filename[, image_type="rgb", options=""])
28
- #
29
- # Saves a CArray object to the image file _filename_.
30
- # The argument _image_type_ should be the one of
31
- # * gray, rgb, rgba, cmyk, cmyka
32
- # The _options_ are passed to "convert"
33
- #
34
- # --- CArray#display_by_magick([image_type="rgb", options=""])
35
- #
36
-
37
- require 'yaml'
38
- require 'carray'
39
-
40
- class CArray
41
-
42
- private
43
- @@magick_tempfile_count = 0
44
-
45
- public
46
- def self.load_by_magick (filename, imap = "rgb", data_type = nil)
47
- if not File.exist?(filename)
48
- raise "can't find image file '#{filename}'"
49
- end
50
- identify_command = [
51
- "identify",
52
- "-format " + "'" + [
53
- "---",
54
- "height: %h",
55
- "width: %w",
56
- "depth: %z",
57
- ].join("\n") + "'",
58
- filename,
59
- "2>/dev/null"
60
- ].join(" ")
61
- ident = YAML.load(`#{identify_command}`)
62
- if ident.empty?
63
- raise "ImageMagick's identify command failed to read image file '#{filename}'"
64
- end
65
- height, width, depth = ident.values_at('height', 'width', 'depth')
66
- unless data_type
67
- case depth
68
- when 8
69
- data_type = CA_UINT8
70
- when 16
71
- data_type = CA_UINT16
72
- when 32
73
- data_type = CA_UINT32
74
- end
75
- end
76
- storage_type = case data_type
77
- when CA_UINT8, CA_INT8
78
- "char"
79
- when CA_UINT16, CA_INT16
80
- "short"
81
- when CA_UINT32, CA_INT32
82
- "integer"
83
- when CA_FLOAT32
84
- "float"
85
- when CA_FLOAT64
86
- "double"
87
- else
88
- raise "invalid data_type"
89
- end
90
- # tempfile = "CA_Magick_#{$$}_#{@@magick_tempfile_count}.dat"
91
- # @@magick_tempfile_count += 1
92
- stream_command = [
93
- "stream",
94
- "-storage-type #{storage_type}",
95
- "-map #{imap}",
96
- filename,
97
- "-",
98
- "2>/dev/null"
99
- ].join(" ")
100
- begin
101
- return IO.popen(stream_command) { |io|
102
- if imap.size == 1
103
- CArray.new(data_type, [height, width]).load_binary(io)
104
- else
105
- CArray.new(data_type, [height, width, imap.size]).load_binary(io)
106
- end
107
- }
108
- rescue
109
- raise "ImageMagick's stream command failed to read image file '#{filename}'"
110
- ensure
111
- # if File.exist?(tempfile)
112
- # File.unlink(tempfile)
113
- # end
114
- end
115
- end
116
-
117
- private
118
-
119
- def magick_guess_image_type
120
- image_type = nil
121
- case ndim
122
- when 2
123
- if fixlen?
124
- case bytes
125
- when 1
126
- image_type = "gray"
127
- when 3
128
- image_type = "rgb"
129
- when 4
130
- image_type = "rgba"
131
- end
132
- else
133
- image_type = "gray"
134
- end
135
- when 3
136
- case dim2
137
- when 1
138
- image_type = "gray"
139
- when 3
140
- image_type = "rgb"
141
- when 4
142
- image_type = "rgba"
143
- end
144
- end
145
- return image_type
146
- end
147
-
148
- public
149
-
150
- def save_by_magick (filename, image_type = nil, options = "")
151
- unless image_type
152
- image_type = magick_guess_image_type()
153
- end
154
- unless image_type
155
- raise "please specify image_type"
156
- end
157
- quantum_format = self.float? ? "-define quantum:format=floating-point" : ""
158
- case self.data_type
159
- when CA_INT8, CA_UINT8
160
- depth = "-depth 8"
161
- when CA_INT16, CA_UINT16
162
- depth = "-depth 16"
163
- when CA_FLOAT32
164
- depth = "-depth 32"
165
- when CA_FLOAT64
166
- depth = "-depth 64"
167
- when CA_FIXLEN
168
- depth = "-depth #{8*bytes}"
169
- else
170
- depth = "-depth 8"
171
- end
172
- convert_command = [
173
- "magick convert",
174
- depth,
175
- "-size " + [dim1, dim0].join("x"),
176
- quantum_format,
177
- options,
178
- "#{image_type}:-",
179
- filename
180
- ].join(" ")
181
- begin
182
- IO.popen(convert_command, "w") { |io|
183
- if data_type != CA_FIXLEN and data_type != CA_OBJECT
184
- if bytes > 1 and CArray.endian == CA_LITTLE_ENDIAN
185
- self.dump_binary(io)
186
- # swap_bytes.dump_binary(io)
187
- else
188
- self.dump_binary(io)
189
- end
190
- else
191
- self.dump_binary(io)
192
- end
193
- }
194
- rescue
195
- raise "ImageMagick's convert command failed to write image file '#{filename}'"
196
- end
197
- end
198
-
199
- def display_by_magick (image_type = nil, options = "")
200
- unless image_type
201
- image_type = magick_guess_image_type()
202
- end
203
- unless image_type
204
- raise "please specify image_type"
205
- end
206
- quantum_format = self.float? ? "-define quantum:format=floating-point" : ""
207
- depth = fixlen? ? "-depth 8" : "-depth #{8*bytes}"
208
- display_command = [
209
- "display",
210
- depth,
211
- "-size " + [dim1, dim0].join("x"),
212
- quantum_format,
213
- options,
214
- "#{image_type}:-",
215
- ].join(" ")
216
- begin
217
- IO.popen(display_command, "w") { |io|
218
- if bytes > 1 and CArray.endian == CA_LITTLE_ENDIAN
219
- swap_bytes.dump_binary(io)
220
- else
221
- self.dump_binary(io)
222
- end
223
- }
224
- rescue
225
- raise "ImageMagick's display command failed to display image"
226
- end
227
- end
228
-
229
- end
230
-
231
-
232
-
233
-
234
-
235
-
data/lib/carray/mask.rb DELETED
@@ -1,102 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/mask.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
- # Guard methods for handling variables that can be UNDEF values.
14
- # Provide different processing depending on whether
15
- # the given value is UNDEF or not.
16
- #
17
- # @param value [Object] target object
18
- # @param fill_value [Object] alternative value if the given value is UNDEF
19
- #
20
- # @return fill_value if the given value is UNDEF, block return value if block
21
- # is given, or value itself
22
- #
23
- def self.guard_undef (*values, fill_value: UNDEF, &block)
24
- return fill_value if values.any?{|v| v == UNDEF }
25
- return block.(*values)
26
- end
27
-
28
- # mask
29
- #
30
- # Returns the number of masked elements.
31
- #
32
- def count_masked (*axis)
33
- if has_mask?
34
- return mask.int64.accumulate(*axis)
35
- else
36
- if axis.empty?
37
- return 0
38
- else
39
- spec = shape.map{:i}
40
- axis.each do |k|
41
- spec[k] = nil
42
- end
43
- return self[*spec].ca.template(:int64) { 0 }
44
- end
45
- end
46
- end
47
-
48
- #
49
- # Returns the number of not-masked elements.
50
- #
51
- def count_not_masked (*axis)
52
- if has_mask?
53
- return mask.not.int64.accumulate(*axis)
54
- else
55
- if axis.empty?
56
- return elements
57
- else
58
- spec = shape.map {:i}
59
- axis.each do |k|
60
- spec[k] = nil
61
- end
62
- it = self[*spec].ca
63
- count = self.elements/it.elements
64
- return it.template(:int64) { count }
65
- end
66
- end
67
- end
68
-
69
- def maskout! (*argv)
70
- case argv.size
71
- when 1
72
- val = argv.first
73
- case val
74
- when CArray, Symbol
75
- self[val] = UNDEF
76
- else
77
- self[:eq, val] = UNDEF
78
- end
79
- else
80
- self[*argv] = UNDEF
81
- end
82
- return self
83
- end
84
-
85
- def maskout (*argv)
86
- obj = self.to_ca
87
- case argv.size
88
- when 1
89
- val = argv.first
90
- case val
91
- when CArray, Symbol
92
- obj[val] = UNDEF
93
- else
94
- obj[:eq, val] = UNDEF
95
- end
96
- else
97
- obj[*argv] = UNDEF
98
- end
99
- return obj
100
- end
101
-
102
- end
@@ -1,177 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/math/histogram.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
- # N-dimensional histogram class
13
- #
14
-
15
- #
16
- # c0 : b0 <= x < b1
17
- # c1 : b1 <= x < b2
18
- # c2 : b2 <= x < b3
19
- #
20
-
21
- require 'carray'
22
-
23
- class CAHistogram < CArray
24
-
25
- def initialize (*argv, &block)
26
-
27
- case argv.first
28
- when Integer, String, Symbol
29
- data_type = argv.shift
30
- else
31
- data_type = CA_INT32
32
- end
33
-
34
- scales = argv.shift
35
- opt = argv.shift || {}
36
-
37
- option = {
38
- :include_upper => false,
39
- :include_lowest => true,
40
- :offsets => nil,
41
- }.update( opt )
42
-
43
- @include_upper = option[:include_upper]
44
- @include_lowest = option[:include_lowest]
45
-
46
- unless scales.kind_of?(Array)
47
- raise "scales should be an array of scales"
48
- end
49
-
50
- ndim = scales.size
51
- @scales = scales.clone
52
- @scales.map! { |s| CArray.wrap_readonly(s, CA_DOUBLE) }
53
-
54
- if option[:offsets]
55
- if option[:offsets].size == scales.size
56
- @offsets = option[:offsets]
57
- else
58
- raise "invalid length of offset in option"
59
- end
60
- else
61
- @offsets = Array.new(ndim) { 0 }
62
- end
63
-
64
- dim = Array.new(ndim) { |i|
65
- case @offsets[i]
66
- when 0
67
- @scales[i].size
68
- when 1
69
- @scales[i].size + 1
70
- else
71
- raise "invalid offset value"
72
- end
73
- }
74
-
75
- super(data_type, dim, &block)
76
-
77
- @mid_points = Array.new(ndim) { |i|
78
- x = (@scales[i] + @scales[i].shifted(-1))/2
79
- x[0..-2].to_ca
80
- }
81
-
82
- @inner = self[*Array.new(ndim) { |i| @offsets[i]..-2 }]
83
-
84
- end
85
-
86
- attr_reader :scales, :include_lowest, :include_upper, :offsets
87
- attr_reader :mid_points, :inner
88
-
89
- alias midpoints mid_points
90
-
91
- def increment (*values)
92
- idx = Array.new(ndim) {|i|
93
- vi = CArray.wrap_readonly(values[i], CA_DOUBLE)
94
- @scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca
95
- }
96
- incr_addr(index2addr(*idx))
97
- self
98
- end
99
-
100
- def add (*values)
101
- val = CArray.wrap_readonly(values.pop, self.data_type)
102
- sel = val.ne(0)
103
- val = val[sel].to_ca
104
- idx = Array.new(ndim) {|i|
105
- vi = CArray.wrap_readonly(values[i], CA_DOUBLE)[sel]
106
- @scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca
107
- }
108
- index2addr(*idx).each_with_addr do |addr, i|
109
- self[addr] += val[i]
110
- end
111
- self
112
- end
113
-
114
- end
115
-
116
- class CArray
117
-
118
- def bin (val, include_upper, include_lowest, offset=0)
119
-
120
- scales = CArray.wrap_readonly(self, CA_DOUBLE)
121
-
122
- x = scales.section(val)
123
- # x.inherit_mask(val)
124
- unless x.is_a?(CArray)
125
- x = CA_DOUBLE(x)
126
- end
127
-
128
- if include_upper
129
- if include_lowest
130
- x[:eq, 0] = 0.5
131
- end
132
- xi = x.ceil.int32 - 1
133
- else
134
- xi = x.floor.int32
135
- end
136
-
137
- case offset
138
- when 0
139
- xi[:gt, elements-1] = elements - 1
140
- xi[:lt, 0] = UNDEF
141
- when 1
142
- xi.add!(1)
143
- xi[:gt, elements] = elements
144
- xi[:lt, 1] = 0
145
- else
146
- raise "invalid offset value"
147
- end
148
-
149
- return xi
150
- end
151
-
152
- end
153
-
154
- if __FILE__ == $0
155
-
156
- scale = CArray.float(50).span(0..10)
157
- hist = CAHistogram.new([scale, scale])
158
-
159
- x = CArray.float(1000000).randomn!.mul!(3).abs!
160
- y = CArray.float(1000000).randomn!.mul!(3).abs!
161
-
162
- hist.increment(x, y)
163
-
164
- # p scale
165
- # p hist
166
- # p hist.out_of_table
167
- # p hist[:i,nil].sum
168
-
169
- CA.gnuplot { |g|
170
- # g.image(hist, :title => "2D histogram test")
171
- g.grid3d(
172
- [scale, scale, hist],
173
- :with => "dots",
174
- :title => "2D histogram test")
175
- }
176
-
177
- end
@@ -1,93 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/math/recurrence.rb
4
- #
5
- # This file is part of Ruby/CArray extension library.
6
- #
7
- # Copyright (C) 2005-2020 Hiroki Motoyoshi
8
- #
9
- # ----------------------------------------------------------------------------
10
-
11
- require 'carray'
12
-
13
- class CARecurrence < CAObject # :nodoc:
14
-
15
- #
16
- # init should be a hash like,
17
- # * [0] => 1, [1] => 1 ...
18
- # * [0,0] => 1, [0,1] => 2 ...
19
- #
20
-
21
- def initialize (data, init = {}, &block)
22
- @value = data
23
- @flag = CArray.boolean(*data.dim)
24
- @block = block
25
- init.each do |idx, val|
26
- @value[*idx] = val
27
- @flag[*idx] = 1
28
- end
29
- super(data.data_type, data.dim, :bytes => data.bytes, :read_only => true)
30
- end
31
-
32
- def reset (init = {})
33
- @flag[] = 0
34
- init.each do |idx, val|
35
- @value[*idx] = val
36
- @flag[*idx] = 1
37
- end
38
- end
39
-
40
- private
41
-
42
- def fetch_addr (addr)
43
- if @flag[addr] == 1
44
- return @value[addr]
45
- else
46
- idx = addr2index(addr)
47
- val = @block[@value, *idx]
48
- @value[addr] = val
49
- @flag[idx] = 1
50
- return val
51
- end
52
- end
53
-
54
- def copy_data (data)
55
- each_addr do |addr|
56
- fetch_addr(addr)
57
- end
58
- data[] = @value
59
- end
60
-
61
- end
62
-
63
- class CArray
64
-
65
- def recurrence! (init = {}, &block)
66
- lazy = CARecurrence.new(self, init, &block)
67
- CArray.attach(lazy) {}
68
- return self
69
- end
70
-
71
- def recurrence (*argv, &block)
72
- return self.template.recurrence!(*argv, &block)
73
- end
74
-
75
- end
76
-
77
- if __FILE__ == $0
78
-
79
- x = 0.5
80
- leg = CArray.float(24).recurrence!([0]=>1, [1]=>x) { |a, i|
81
- w = x * a[i-1]
82
- wy = w - a[i-2]
83
- wy+w-wy/i
84
- }
85
-
86
- p leg
87
-
88
- CA.gnuplot { |g|
89
- g.plot2d([leg.address, leg, nil, "linespoints"])
90
- }
91
-
92
- end
93
-
@@ -1,50 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/object/ca_obj_iterator.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 CAIteratorArray < CAObject # :nodoc:
12
-
13
- def initialize (it)
14
- @it = it
15
- super(CA_OBJECT, @it.dim)
16
- end
17
-
18
- private
19
-
20
- def fetch_index (idx)
21
- return @it.kernel_at_index(idx)
22
- end
23
-
24
- def store_index (idx, val)
25
- @it.kernel_at_index(idx)[] = val
26
- end
27
-
28
- def copy_data (data)
29
- data.each_index do |*idx|
30
- data[*idx] = @it.kernel_at_index(idx)
31
- end
32
- end
33
-
34
- def sync_data (data)
35
- tmpl = @it.reference.template
36
- data.each_index do |*idx|
37
- @it.kernel_at_index(idx, tmpl)[] = data[*idx]
38
- end
39
- @it.reference[] = tmpl
40
- end
41
-
42
- def fill_data (data)
43
- tmpl = @it.reference.template
44
- CArray.each_index(*@it.dim) do |*idx|
45
- @it.kernel_at_index(idx, tmpl)[] = data
46
- end
47
- @it.reference[] = tmpl
48
- end
49
-
50
- end
@@ -1,50 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/object/ca_obj_link.rb
4
- #
5
- # This file is part of Ruby/CArray extension library.
6
- #
7
- # Copyright (C) 2005-2020 Hiroki Motoyoshi
8
- #
9
- # ----------------------------------------------------------------------------
10
-
11
- require "carray"
12
-
13
- class CALink < CAObject # :nodoc:
14
-
15
- def initialize (*argv, &block)
16
- @evaluator = block
17
- @argv = argv
18
- @args = argv.map{|v| CScalar.new(v.data_type) }
19
- val = @evaluator.call(*argv)
20
- unless val.is_a?(CArray)
21
- val = CA_OBJECT(val)
22
- end
23
- super(val.data_type, val.dim, :bytes=>val.bytes, :read_only=>true)
24
- end
25
-
26
- private
27
-
28
- def fetch_addr (addr)
29
- @argv.each_with_index do |v, i|
30
- case v
31
- when CScalar
32
- @args[i][] = v[]
33
- when CArray
34
- @args[i][] = v[addr]
35
- else
36
- @args[i][] = v
37
- end
38
- end
39
- return @evaluator.call(*@args)[0]
40
- end
41
-
42
- def copy_data (data)
43
- data[] = @evaluator.call(*@argv)
44
- end
45
-
46
- def create_mask
47
- end
48
-
49
- end
50
-