carray 1.4.0 → 1.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +32 -0
  3. data/LICENSE +22 -0
  4. data/NEWS.md +83 -0
  5. data/README.md +38 -18
  6. data/Rakefile +2 -2
  7. data/TODO.md +17 -0
  8. data/carray.gemspec +13 -18
  9. data/{ca_iter_block.c → ext/ca_iter_block.c} +16 -18
  10. data/{ca_iter_dimension.c → ext/ca_iter_dimension.c} +20 -21
  11. data/{ca_iter_window.c → ext/ca_iter_window.c} +12 -14
  12. data/{ca_obj_array.c → ext/ca_obj_array.c} +451 -176
  13. data/{ca_obj_bitarray.c → ext/ca_obj_bitarray.c} +18 -23
  14. data/{ca_obj_bitfield.c → ext/ca_obj_bitfield.c} +12 -16
  15. data/{ca_obj_block.c → ext/ca_obj_block.c} +47 -54
  16. data/{ca_obj_fake.c → ext/ca_obj_fake.c} +10 -12
  17. data/{ca_obj_farray.c → ext/ca_obj_farray.c} +21 -23
  18. data/{ca_obj_field.c → ext/ca_obj_field.c} +30 -32
  19. data/{ca_obj_grid.c → ext/ca_obj_grid.c} +32 -33
  20. data/{ca_obj_mapping.c → ext/ca_obj_mapping.c} +11 -13
  21. data/{ca_obj_object.c → ext/ca_obj_object.c} +40 -42
  22. data/{ca_obj_reduce.c → ext/ca_obj_reduce.c} +3 -5
  23. data/{ca_obj_refer.c → ext/ca_obj_refer.c} +44 -48
  24. data/{ca_obj_repeat.c → ext/ca_obj_repeat.c} +45 -47
  25. data/{ca_obj_select.c → ext/ca_obj_select.c} +4 -6
  26. data/{ca_obj_shift.c → ext/ca_obj_shift.c} +26 -28
  27. data/{ca_obj_transpose.c → ext/ca_obj_transpose.c} +26 -28
  28. data/{ca_obj_unbound_repeat.c → ext/ca_obj_unbound_repeat.c} +106 -160
  29. data/{ca_obj_window.c → ext/ca_obj_window.c} +33 -35
  30. data/{carray.h → ext/carray.h} +86 -59
  31. data/{carray_access.c → ext/carray_access.c} +194 -101
  32. data/{carray_attribute.c → ext/carray_attribute.c} +161 -207
  33. data/{carray_call_cfunc.c → ext/carray_call_cfunc.c} +1 -3
  34. data/{carray_cast.c → ext/carray_cast.c} +351 -150
  35. data/{carray_cast_func.rb → ext/carray_cast_func.rb} +1 -2
  36. data/{carray_class.c → ext/carray_class.c} +28 -36
  37. data/{carray_conversion.c → ext/carray_conversion.c} +63 -68
  38. data/{carray_copy.c → ext/carray_copy.c} +34 -50
  39. data/{carray_core.c → ext/carray_core.c} +75 -62
  40. data/ext/carray_data_type.c +66 -0
  41. data/{carray_element.c → ext/carray_element.c} +34 -53
  42. data/{carray_generate.c → ext/carray_generate.c} +71 -50
  43. data/{carray_iterator.c → ext/carray_iterator.c} +53 -53
  44. data/{carray_loop.c → ext/carray_loop.c} +77 -106
  45. data/{carray_mask.c → ext/carray_mask.c} +105 -114
  46. data/{carray_math.rb → ext/carray_math.rb} +29 -13
  47. data/ext/{mathfunc/carray_mathfunc.c → carray_mathfunc.c} +1 -3
  48. data/{carray_numeric.c → ext/carray_numeric.c} +43 -46
  49. data/{carray_operator.c → ext/carray_operator.c} +49 -36
  50. data/{carray_order.c → ext/carray_order.c} +232 -217
  51. data/{carray_sort_addr.c → ext/carray_sort_addr.c} +14 -21
  52. data/{carray_stat.c → ext/carray_stat.c} +6 -8
  53. data/{carray_stat_proc.rb → ext/carray_stat_proc.rb} +25 -27
  54. data/{carray_test.c → ext/carray_test.c} +63 -51
  55. data/{carray_undef.c → ext/carray_undef.c} +1 -11
  56. data/{carray_utils.c → ext/carray_utils.c} +12 -4
  57. data/{extconf.rb → ext/extconf.rb} +10 -7
  58. data/{mkmath.rb → ext/mkmath.rb} +2 -2
  59. data/{ruby_carray.c → ext/ruby_carray.c} +20 -8
  60. data/{ruby_ccomplex.c → ext/ruby_ccomplex.c} +2 -4
  61. data/{ruby_float_func.c → ext/ruby_float_func.c} +1 -3
  62. data/ext/version.h +16 -0
  63. data/{version.rb → ext/version.rb} +0 -0
  64. data/lib/carray.rb +51 -40
  65. data/lib/carray/{base/autoload.rb → autoload.rb} +1 -3
  66. data/lib/carray/autoload/autoload_base.rb +1 -1
  67. data/lib/carray/autoload/autoload_gem_numo_narray.rb +7 -6
  68. data/lib/carray/autoload/autoload_gem_random.rb +8 -0
  69. data/lib/carray/basic.rb +191 -0
  70. data/lib/carray/broadcast.rb +101 -0
  71. data/lib/carray/compose.rb +315 -0
  72. data/lib/carray/construct.rb +484 -0
  73. data/lib/carray/convert.rb +115 -0
  74. data/lib/carray/info.rb +1 -3
  75. data/lib/carray/{base/inspect.rb → inspect.rb} +9 -11
  76. data/lib/carray/io/imagemagick.rb +2 -4
  77. data/lib/carray/{base/iterator.rb → iterator.rb} +6 -6
  78. data/lib/carray/mask.rb +102 -0
  79. data/lib/carray/{base/math.rb → math.rb} +20 -52
  80. data/lib/carray/math/histogram.rb +8 -10
  81. data/lib/carray/math/recurrence.rb +1 -3
  82. data/lib/carray/mkmf.rb +9 -3
  83. data/lib/carray/object/ca_obj_iterator.rb +1 -3
  84. data/lib/carray/object/ca_obj_link.rb +1 -3
  85. data/lib/carray/object/ca_obj_pack.rb +9 -11
  86. data/lib/carray/obsolete.rb +256 -0
  87. data/lib/carray/ordering.rb +181 -0
  88. data/lib/carray/{base/serialize.rb → serialize.rb} +60 -76
  89. data/lib/carray/{base/string.rb → string.rb} +10 -64
  90. data/lib/carray/{base/struct.rb → struct.rb} +19 -21
  91. data/lib/carray/{io/table.rb → table.rb} +1 -10
  92. data/lib/carray/testing.rb +51 -0
  93. data/lib/carray/time.rb +76 -0
  94. data/lib/carray/transform.rb +109 -0
  95. data/misc/Methods.ja.md +182 -0
  96. data/{NOTE → misc/NOTE} +16 -38
  97. data/spec/Classes/CABitfield_spec.rb +58 -0
  98. data/spec/Classes/CABlockIterator_spec.rb +114 -0
  99. data/spec/Classes/CABlock_spec.rb +205 -0
  100. data/spec/Classes/CAField_spec.rb +39 -0
  101. data/spec/Classes/CAGrid_spec.rb +75 -0
  102. data/spec/Classes/CAMap_spec.rb +0 -0
  103. data/{test/test_CAMapping.rb → spec/Classes/CAMapping_spec.rb} +35 -36
  104. data/spec/Classes/CAObject_attribute_spec.rb +33 -0
  105. data/spec/Classes/CAObject_spec.rb +33 -0
  106. data/spec/Classes/CARefer_spec.rb +93 -0
  107. data/spec/Classes/CARepeat_spec.rb +65 -0
  108. data/spec/Classes/CASelect_spec.rb +22 -0
  109. data/spec/Classes/CAShift_spec.rb +16 -0
  110. data/spec/Classes/CAStruct_spec.rb +71 -0
  111. data/{test/test_CATranspose.rb → spec/Classes/CATranspose_spec.rb} +20 -21
  112. data/spec/Classes/CAUnboudRepeat_spec.rb +102 -0
  113. data/spec/Classes/CAWindow_spec.rb +54 -0
  114. data/spec/Classes/CAWrap_spec.rb +8 -0
  115. data/{test/test_CArray.rb → spec/Classes/CArray_spec.rb} +48 -92
  116. data/spec/Classes/CScalar_spec.rb +55 -0
  117. data/spec/Features/feature_130_spec.rb +19 -0
  118. data/spec/Features/feature_attributes_spec.rb +280 -0
  119. data/spec/Features/feature_boolean_spec.rb +98 -0
  120. data/spec/Features/feature_broadcast.rb +116 -0
  121. data/spec/Features/feature_cast_function.rb +19 -0
  122. data/spec/Features/feature_cast_spec.rb +33 -0
  123. data/spec/Features/feature_class_spec.rb +84 -0
  124. data/spec/Features/feature_complex_spec.rb +42 -0
  125. data/{test/test_composite.rb → spec/Features/feature_composite_spec.rb} +17 -18
  126. data/spec/Features/feature_convert_spec.rb +46 -0
  127. data/spec/Features/feature_copy_spec.rb +123 -0
  128. data/spec/Features/feature_creation_spec.rb +84 -0
  129. data/spec/Features/feature_element_spec.rb +144 -0
  130. data/spec/Features/feature_extream_spec.rb +54 -0
  131. data/spec/Features/feature_generate_spec.rb +74 -0
  132. data/spec/Features/feature_index_spec.rb +69 -0
  133. data/spec/Features/feature_mask_spec.rb +580 -0
  134. data/spec/Features/feature_math_spec.rb +97 -0
  135. data/spec/Features/feature_order_spec.rb +146 -0
  136. data/spec/Features/feature_ref_store_spec.rb +209 -0
  137. data/spec/Features/feature_serialization_spec.rb +125 -0
  138. data/spec/Features/feature_stat_spec.rb +397 -0
  139. data/spec/Features/feature_virtual_spec.rb +48 -0
  140. data/spec/Features/method_eq_spec.rb +81 -0
  141. data/spec/Features/method_is_nan_spec.rb +12 -0
  142. data/spec/Features/method_map_spec.rb +54 -0
  143. data/spec/Features/method_max_with.rb +20 -0
  144. data/spec/Features/method_min_with.rb +19 -0
  145. data/spec/Features/method_ne_spec.rb +18 -0
  146. data/spec/Features/method_project_spec.rb +188 -0
  147. data/spec/Features/method_ref_spec.rb +27 -0
  148. data/spec/Features/method_round_spec.rb +11 -0
  149. data/spec/Features/method_s_linspace_spec.rb +48 -0
  150. data/spec/Features/method_s_span_spec.rb +14 -0
  151. data/spec/Features/method_seq_spec.rb +47 -0
  152. data/spec/Features/method_sort_with.rb +43 -0
  153. data/spec/Features/method_sorted_with.rb +29 -0
  154. data/spec/Features/method_span_spec.rb +42 -0
  155. data/spec/Features/method_wrap_readonly_spec.rb +43 -0
  156. data/{test → spec/UnitTest}/test_CAVirtual.rb +0 -0
  157. data/spec/spec_all.rb +0 -1
  158. data/utils/convert_test.rb +73 -0
  159. data/utils/{extract_rdoc.rb → extract_yard.rb} +7 -12
  160. data/{devel → utils}/guess_shape.rb +0 -0
  161. data/utils/{diff_method.rb → monkey_patch_methods.rb} +17 -7
  162. metadata +159 -206
  163. data/COPYING +0 -56
  164. data/GPL +0 -340
  165. data/LEGAL +0 -50
  166. data/TODO +0 -5
  167. data/carray_random.c +0 -531
  168. data/devel/im2col.rb +0 -17
  169. data/ext/calculus/carray_calculus.c +0 -931
  170. data/ext/calculus/carray_interp.c +0 -358
  171. data/ext/calculus/extconf.rb +0 -12
  172. data/ext/calculus/lib/math/calculus.rb +0 -119
  173. data/ext/calculus/lib/math/interp/adapter_interp1d.rb +0 -31
  174. data/ext/mathfunc/extconf.rb +0 -18
  175. data/ext/mathfunc/test/test_hypot.rb +0 -5
  176. data/ext/mathfunc/test/test_j0.rb +0 -22
  177. data/ext/mathfunc/test/test_jn.rb +0 -8
  178. data/ext/mathfunc/test/test_sph.rb +0 -9
  179. data/lib/carray/autoload/autoload_io_table.rb +0 -1
  180. data/lib/carray/autoload/autoload_math_interp.rb +0 -4
  181. data/lib/carray/base/basic.rb +0 -1146
  182. data/lib/carray/base/obsolete.rb +0 -131
  183. data/lib/carray/math/interp.rb +0 -57
  184. data/lib/carray/math/interp/adapter_gsl_spline.rb +0 -47
  185. data/mt19937ar.c +0 -182
  186. data/mt19937ar.h +0 -86
  187. data/rdoc_main.rb +0 -27
  188. data/rdoc_math.rb +0 -5
  189. data/rdoc_stat.rb +0 -31
  190. data/spec/CABlockIterator/CABlockIterator_spec.rb +0 -113
  191. data/spec/CArray/bug/store_spec.rb +0 -27
  192. data/spec/CArray/index/repeat_spec.rb +0 -10
  193. data/spec/CArray/method/eq_spec.rb +0 -80
  194. data/spec/CArray/method/is_nan_spec.rb +0 -12
  195. data/spec/CArray/method/ne_spec.rb +0 -18
  196. data/spec/CArray/method/round_spec.rb +0 -11
  197. data/spec/CArray/object/_attribute_spec.rb +0 -32
  198. data/spec/CArray/object/s_new_spec.rb +0 -31
  199. data/spec/CArray/serialize/Serialization_spec.rb +0 -89
  200. data/test/test_130.rb +0 -23
  201. data/test/test_ALL.rb +0 -51
  202. data/test/test_CABitfield.rb +0 -59
  203. data/test/test_CABlock.rb +0 -208
  204. data/test/test_CAField.rb +0 -40
  205. data/test/test_CAGrid.rb +0 -76
  206. data/test/test_CAMmap.rb +0 -11
  207. data/test/test_CARefer.rb +0 -94
  208. data/test/test_CARepeat.rb +0 -66
  209. data/test/test_CASelect.rb +0 -23
  210. data/test/test_CAShift.rb +0 -17
  211. data/test/test_CAWindow.rb +0 -55
  212. data/test/test_CAWrap.rb +0 -9
  213. data/test/test_CComplex.rb +0 -83
  214. data/test/test_CScalar.rb +0 -91
  215. data/test/test_attribute.rb +0 -281
  216. data/test/test_block_iterator.rb +0 -17
  217. data/test/test_boolean.rb +0 -99
  218. data/test/test_cast.rb +0 -33
  219. data/test/test_class.rb +0 -85
  220. data/test/test_complex.rb +0 -43
  221. data/test/test_convert.rb +0 -79
  222. data/test/test_copy.rb +0 -141
  223. data/test/test_creation.rb +0 -85
  224. data/test/test_element.rb +0 -146
  225. data/test/test_extream.rb +0 -55
  226. data/test/test_generate.rb +0 -75
  227. data/test/test_index.rb +0 -71
  228. data/test/test_mask.rb +0 -578
  229. data/test/test_math.rb +0 -98
  230. data/test/test_narray.rb +0 -64
  231. data/test/test_order.rb +0 -147
  232. data/test/test_random.rb +0 -15
  233. data/test/test_ref_store.rb +0 -211
  234. data/test/test_stat.rb +0 -414
  235. data/test/test_struct.rb +0 -72
  236. data/test/test_virtual.rb +0 -49
  237. data/utils/create_rdoc.sh +0 -9
  238. data/utils/make_tgz.sh +0 -3
  239. data/version.h +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19670c9fa370952b777655dbbfc938a93deecbbe62452559f572951d8a083078
4
- data.tar.gz: bc7dae442eee84400725a45c804332426f72a0405299d785ecccb3cae27f1d2b
3
+ metadata.gz: 4c7a72221863bbee2085dc603cd57a4970c34dc5236640e47819f3fa503d2b00
4
+ data.tar.gz: e09709eedecd9679ddf8cfa13d047cfa60014728a07d864fa6c29a372f49ea08
5
5
  SHA512:
6
- metadata.gz: d1f76a7cdc3448844557c05c0375b01221a2d7a6d9d48ed36223cbc3a39b379e3dab966a48c8a6aaa57d0d6521e4222f2849dca8749e7137e693ec9379d12b9f
7
- data.tar.gz: 82b3ff4f50775df6f6699533826e8494a29a34f15256d2874b271dc6cd64f1c24878d4639185c4837a66ee15daf33fa25c1ec3f0bf80c487b80553c353939cbd
6
+ metadata.gz: 7c096ade9e0141172eec06ed71660c6930929231b94b57c3a659e30ffe90c323117a5fb4f5c533517c4460355549586b193e134e4a456876fbab9deea78a4360
7
+ data.tar.gz: 04e3c2e157f3a5a088d008cccdb1307549cbb0105538f1495e728e61f9c824b5034315d07faae0498795671d055c892ee8f596a5ad8b4700ecc79c0a6fd993a1
data/.yardopts ADDED
@@ -0,0 +1,32 @@
1
+ --markup markdown
2
+ --markup-provider redcarpet
3
+ --no-private
4
+ --exclude lib/carray/obsolete.rb
5
+ --exclude lib/carray/autoload.rb
6
+ --exclude 'lib/carray/autoload/'
7
+ --readme README.md
8
+ --files NEWS.md,TODO.md
9
+ lib/carray.rb
10
+ ext/ruby_carray.c
11
+ ext/ca_obj_array.c
12
+ ext/ca_obj_bitarray.c
13
+ ext/ca_obj_bitfield.c
14
+ ext/ca_obj_block.c
15
+ ext/carray_attribute.c
16
+ ext/carray_call_cfunc.c
17
+ ext/carray_cast.c
18
+ ext/carray_class.c
19
+ ext/carray_conversion.c
20
+ ext/carray_copy.c
21
+ ext/carray_core.c
22
+ ext/carray_data_type.c
23
+ ext/carray_element.c
24
+ ext/carray_generate.c
25
+ ext/carray_loop.c
26
+ ext/carray_mask.c
27
+ ext/carray_operator.c
28
+ ext/carray_order.c
29
+ ext/carray_sort_addr.c
30
+ ext/carray_test.c
31
+ ext/carray_utils.c
32
+
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2020 Hiroki Motoyoshi.
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
data/NEWS.md ADDED
@@ -0,0 +1,83 @@
1
+ ChangeLog of Ruby/CArray
2
+ ========================
3
+
4
+ 1.5.4 -> 1.5.5
5
+
6
+ * [Fix] Fix recognition of "atan2", ... in "math.h"
7
+ * [Fix] Fix serialize.rb of keyword parameters for Ruby2.7
8
+
9
+ 1.5.3 -> 1.5.4
10
+ --------------
11
+
12
+ * [New] Import method 'CArray#section' from gem 'carray-calculus'
13
+ * [New] Add new method 'CArray#pull', 'CArray#pulled'
14
+ * [New] Add new option 'expand_scalar' to 'CArray.broadcast'
15
+ * [Mod] Modify the method 'CArray.broadcast' to accept block.
16
+ * [Mod] Modify the method 'CArray.meshgrid' to accept block.
17
+ * [Mod] Modify 'CScalar#broadcast_to' to return CArray
18
+ * [Mod] Modify 'CScalar#is_masked' and 'CScalar#is_masked' to return CScalar
19
+ * [Fix] Fix order of repetitive dimensions in 'CArray#meshgrid'
20
+ * [Fix] Fix errors in installing on MinGW+msys2
21
+
22
+ 1.5.2 -> 1.5.3
23
+ --------------
24
+
25
+ * [New] Add new method 'CArray#exp2'
26
+ * [New] Add new method 'CArray#log2'
27
+ * [New] Add new method 'CArray#logb'
28
+ * [New] Add new method 'CArray#remainder'
29
+ * [New] Add new method 'CArray.guard_undef'
30
+ * [New] Add new method 'CArray#data_class='
31
+ * [New] Add new method 'CArray.data_class?'
32
+ * [Mod] Modify 'CArray#pmax' to use 'fmax' for float type
33
+ * [Mod] Modify 'CArray#pmin' to use 'fmin' for float type
34
+ * [Mod] Remove method 'Object#undef?'
35
+ * [Mod] Remove method '::nan', '::inf'
36
+ * [Mod] Remove method 'TrueClass#*', 'FalseClass#*' (unknown origin)
37
+ * [Fix] Fix invalid access for CAUnboundRepeat using index
38
+ * [Fix] Fix treatment of extra :* in operation between CAUnboundRepeat objects
39
+ * [Fix] Fix to accept Symbol for the name of data_class member
40
+ * [Fix] Fix 'CArray#uniq' to accept the array with the dimension more than 2.
41
+ * [Fix] Fix for CArray serialization to include data_class
42
+ * [Fix] Fix data_class inheritance in some methods in which new CArray is created.
43
+ * [Fix] Fix 'CArray#broadcast_to' to accept the case of dimension extension.
44
+
45
+ 1.5.1 -> 1.5.2
46
+ --------------
47
+
48
+ * [New] Add new method 'CArray#sorted_with'
49
+ * [New] Add new method 'CArray#sort_with'
50
+ * [New] Add new method 'CArray#max_with'
51
+ * [New] Add new method 'CArray#min_with'
52
+ * [New] Add new method 'CArray.broadcast'
53
+ * [New] Add new method 'CArray#broadcast_to', 'CScalar#broadcast_to'
54
+ * [New] Add new API function `rb_ca_wrap_new`
55
+ * [Mod] Modify 'CArray#linspace' to return float64 array for integer arguments
56
+ * [Mod] Modify CAUnboundRepeat to have `ndim` same as the bounded array (before `ndim` same as parent array)
57
+ * [Mod] Remove the obsolete mothod 'CArray#dump'.
58
+ * [Mod] Remove the obsolete mothod 'CArray#load'.
59
+ * [Mod] Modify CArray.wrap_readonly to wrap string as array.
60
+ * [Fix] Add support for Integer (same as for Fixnum, Bignum)
61
+
62
+ 1.5.0 -> 1.5.1
63
+ --------------
64
+
65
+ * [New] Add data type classes like 'Float64' ... to provide the methods like 'CArray::Float64.linspace'
66
+ * [Mod] Modify 'CArray.float64' ... without aruguments to return the corresponding data type class
67
+ * [Mod] Set obsolete flag to 'CAIterator#sort_with'
68
+ * [Fix] Move C extension files into 'ext/'
69
+ * [Fix] Rename member 'rank' to 'ndim' in struct CArray in C extension
70
+ * [Fix] Remove 'CArray#shuffle' (gone to 'carray-random' gem)
71
+ * [Fix] Remove dependencies on 'rb_secure()' and 'rb_safe_level()'
72
+ * [Fix] Modify 'CArray#span' to handle fractional step for integer array
73
+
74
+ 1.4.0 -> 1.5.0
75
+ --------------
76
+
77
+ * [Mod] Remove 'Carray#random!' (gone to 'carray-random' gem)
78
+ * [Mod] Relocate file 'lib/carray/io/table.rb' to 'lib/carray/table.rb'
79
+ * [Mod] Rename class 'CA::TableMethods' to 'CArray::TableMethods'
80
+ * [Mod] Rename method 'CArray#cast_other' to 'CArray#cast_with'
81
+ * [Mod] Change license from "Ruby's" to "MIT"
82
+ * [Mod] Remove files 'COPYING', 'LEGAL'(for MT), 'GPL'
83
+ * [Fix] Fix bug lib/carray/struct.rb
data/README.md CHANGED
@@ -3,34 +3,54 @@ Ruby/CArray
3
3
 
4
4
  Ruby/CArray is an extension library for the multi-dimensional array class.
5
5
 
6
+ Features
7
+ --------
8
+
9
+ * Collection class for multidimensional array storing the value with uniform data type
10
+ * Element-wise mathematical operations and functions
11
+ * Statistical operation for the elements
12
+ * Various methods for referencing data elements
13
+ * Internally included element-wise mask to handle missing values
14
+ * Indirect data manipulation to referent by virtual array
15
+ * Special iterators (dimension, block, window, categorical)
16
+ * User-defined array class with same multi-dimensional interfaces as CArray
17
+ * Accessing the partial data in fixed length data via data_class interface
18
+ * Wrapping the memory block owned by the other object (such as NArray).
19
+
6
20
  Requirements
7
21
  ------------
8
22
 
9
- * Ruby 2.2.0 or later
23
+ * Ruby 2.4.0 or later
10
24
  * C compiler
11
25
  + IEEE754 floating point number
12
26
  + C99 complex number
13
- * Optional command
14
- + ImageMagick (stream, convert, display, identify)
15
27
 
16
- Directories
17
- -----------
28
+ What is Ruby/CArray
29
+ ------------------
30
+
31
+ Ruby/CArray is an extension library for the multi-dimensional numerical array class. The name "CArray" comes from a wrapper's meaning to a numerical array handled by the C language. CArray stores integers or floating-point numbers in memory block and treats them collectively to ensure efficient performance. Therefore, Ruby/CArray is suitable for numerical computation and data analysis.
32
+
33
+ #### Multi-dimensional uniform array ####
34
+
35
+ CArray is a collection class that can store the array of values with a uniform data type of one of fixed-width integer (8,16,32,64bits), floating-point number (32,64bits), complex number (64,128bits), fixed-length string, ruby object. These values are stored in memory block as binary data. CArray has multi-dimensional interfaces for the array to access their values. The multi-dimensional array has the attributes of the dimension size (1,2,3,...) and the shape of dimension ([dim0], [dim0,dim1], [dim0,dim1,dim2],...) which define the size of array.
36
+
37
+ #### Collective mathematical operations ####
38
+
39
+ CArray supports the collective calculation for the element-wise arithmetic operations and elementary mathematical functions. Additionally, some basic statistical summarization along specific dimensions are also provided.
40
+
41
+ #### Referencing data and virtual arrays ####
42
+
43
+ CArray provides various methods for referencing data, such as addressing, slicing, selection by condition, address mapping, grid reference, transposing, shifting, rolling, data type conversion, reshaping, and so on. These data referencing are realized by the creation of virtual arrays, so-called 'view'. The virtual array doesn't have its data and retrieves the data from the referent only on-demand, including dereferencing, copying, or calculation. Since virtual array classes are sub-class of CArray, it has the same interfaces to access data as CArray. The changes in a virtual array by storing data are also reflected in the referent (if not a read_only array). Multiple heterogeneous chains of reference are also allowed, although the trade-offs with performance must be carefully considered.
44
+
45
+ #### Built-in element-wise mask handling ####
18
46
 
19
- . - Ruby/CArray extension source codes
20
- lib - Ruby/CArray standard library in Ruby
21
- ext - optional extension libraries for Ruby/CArray
22
- examples - some examples
23
- test - some unit tests (incomplete)
24
- spec - some rspec (incomplete)
25
- utils - support tools for development.
47
+ CArray possesses masked states about each element (so-called "element-wise mask"). By referring the element-wise mask, CArray can perform mathematical and statistical calculations on the data with missing values by appropriate handling of masked elements. , which include the propagation of mask state to result in element-wise arithmetics and ignoring the masked elements in a statistical calculation, and so on.
26
48
 
27
- Author
28
- ------
49
+ #### User-defined array ####
29
50
 
30
- Hiroki Motoyoshi
51
+ Users can define a new virtual array class in Ruby level or C-extension level with TemplateMethod pattern. They are defined as a subclass of CAObject in Ruby level and as a subclass of CAVirtual in C-extension level. In particular, at the Ruby level, you can easily define a CArray-like class by implementing just a few template methods.
31
52
 
32
- Copying
53
+ License
33
54
  -------
34
55
 
35
- You can redistribute this library package and/or modify it under the terms of
36
- the Ruby Licence. See the file 'COPYING' in this directory.
56
+ MIT (after version 1.5.0)
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ GEMSPEC = "carray.gemspec"
6
6
 
7
7
  task :install do
8
8
  spec = eval File.read(GEMSPEC)
9
- version_h = `ruby version.rb`.chomp
9
+ version_h = `ruby ext/version.rb`.chomp
10
10
  if spec.version.to_s != version_h
11
11
  STDERR.puts "Mismatch in version between carray.gemspec and version.h"
12
12
  STDERR.puts " carray.gemspec - #{spec.version.to_s }"
@@ -15,7 +15,7 @@ task :install do
15
15
  exit(1)
16
16
  end
17
17
  system %{
18
- gem build #{GEMSPEC}; gem install #{spec.full_name}.gem
18
+ gem build #{GEMSPEC}; gem install #{spec.full_name}.gem --no-document
19
19
  }
20
20
  end
21
21
 
data/TODO.md ADDED
@@ -0,0 +1,17 @@
1
+ ToDo List
2
+ =========
3
+
4
+ ToDo
5
+ -------
6
+ * Implement CArray.broadcast in C
7
+ * Implement Integer#{|,&,^,<<,>>} with Refinement (remove monkey patch)
8
+ * Remove RSTRUCT hack in carray_access.c for handling of Range object.
9
+ * Solve abs probrems
10
+ * Create spec
11
+ - str_format (cyclic format)
12
+ - CA_SIZE
13
+ - serialization of carray which has data_class
14
+
15
+ Done
16
+ -------
17
+
data/carray.gemspec CHANGED
@@ -1,39 +1,34 @@
1
1
  Gem::Specification::new do |s|
2
2
 
3
- version = "1.4.0"
3
+ version = "1.5.5"
4
4
 
5
- files = Dir.glob("**/*") - [
5
+ files = Dir.glob("**/*") + [".yardopts"] -
6
+ [
6
7
  Dir.glob("carray-*.gem"),
7
8
  Dir.glob("ext/**/{Makefile,mkmf.log}"),
8
9
  Dir.glob("**/*.{o,so,bundle}"),
9
10
  Dir.glob("**/*~"),
10
11
  Dir.glob("doc/**/*"),
12
+ Dir.glob("test/**/*"),
11
13
  ].flatten
12
14
 
13
15
  s.platform = Gem::Platform::RUBY
14
16
  s.name = "carray"
15
- s.summary = "Multi-dimesional array class"
17
+ s.summary = "Multi-dimesional array class for Ruby"
16
18
  s.description = <<-HERE
17
- CArray is a uniform multi-dimensional rectangular array class.
18
- It provides the various types of sub-arrays and references
19
- pointing the data elements of original array (slice, grid, selection ...).
20
- Element-wise masking and mathematical operations are natively supported.
19
+ Ruby/CArray is an extension library for the multi-dimensional numerical array
20
+ class. The name "CArray" comes from the meaning of a wrapper to a numerical array
21
+ handled by the C language. CArray stores integers or floating-point numbers in
22
+ memory block and treats them collectively to ensure efficient performance.
23
+ Therefore, Ruby/CArray is suitable for numerical computation and data analysis.
21
24
  HERE
22
25
  s.version = version
23
26
  s.author = "Hiroki Motoyoshi"
24
27
  s.email = ""
28
+ s.license = 'MIT'
25
29
  s.homepage = 'https://github.com/himotoyoshi/carray'
26
30
  s.files = files
27
- s.extensions = [ "extconf.rb" ] +
28
- Dir["ext/*/extconf.rb"].select{|f| File.exist?(f) }
29
- s.rdoc_options = [
30
- "-m rdoc_main.rb",
31
- "rdoc_main.rb",
32
- "rdoc_ext.rb",
33
- "rdoc_math.rb",
34
- "rdoc_stat.rb",
35
- Dir.glob("lib/carray/**/*.rb"),
36
- ].flatten
37
- s.required_ruby_version = ">= 1.8.1"
31
+ s.extensions = [ "ext/extconf.rb" ]
32
+ s.required_ruby_version = ">= 2.4.0"
38
33
  end
39
34
 
@@ -3,16 +3,14 @@
3
3
  ca_iter_block.c
4
4
 
5
5
  This file is part of Ruby/CArray extension library.
6
- You can redistribute it and/or modify it under the terms of
7
- the Ruby Licence.
8
6
 
9
- Copyright (C) 2005 Hiroki Motoyoshi
7
+ Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
 
11
9
  ---------------------------------------------------------------------------- */
12
10
 
13
11
  #include "carray.h"
14
12
 
15
- /* rdoc:
13
+ /* yard:
16
14
  class CABlockIterator < CAIterator # :nodoc:
17
15
  end
18
16
  */
@@ -23,7 +21,7 @@ VALUE rb_cCABlockIterator;
23
21
  typedef struct {
24
22
  int16_t obj_type;
25
23
  int8_t data_type;
26
- int8_t rank;
24
+ int8_t ndim;
27
25
  int32_t flags;
28
26
  ca_size_t bytes;
29
27
  ca_size_t elements;
@@ -42,11 +40,11 @@ typedef struct {
42
40
  ca_size_t *step;
43
41
  ca_size_t *count;
44
42
  ca_size_t *size0;
45
- } CABlock; // 68 + 20*(rank) (bytes)
43
+ } CABlock; // 68 + 20*(ndim) (bytes)
46
44
  */
47
45
 
48
46
  typedef struct {
49
- int8_t rank;
47
+ int8_t ndim;
50
48
  ca_size_t dim[CA_RANK_MAX];
51
49
  CArray *reference;
52
50
  CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
@@ -73,14 +71,14 @@ ca_bi_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
73
71
  else {
74
72
  CABlock *ck = (CABlock *)bit->kernel;
75
73
  kernel = ca_block_new(ref,
76
- ck->rank, ck->size0,
74
+ ck->ndim, ck->size0,
77
75
  ck->start, ck->step, ck->count,
78
76
  ck->offset);
79
77
  }
80
78
 
81
79
  ca_update_mask(kernel);
82
80
 
83
- for (i=0; i<kernel->rank; i++) {
81
+ for (i=0; i<kernel->ndim; i++) {
84
82
  j = idx[i];
85
83
  CA_CHECK_INDEX(j, bit->dim[i]);
86
84
  kernel->start[i] += j * kernel->dim[i];
@@ -99,7 +97,7 @@ ca_bi_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
99
97
  ca_size_t *dim = bit->dim;
100
98
  ca_size_t idx[CA_RANK_MAX];
101
99
  int8_t i;
102
- for (i=bit->rank-1; i>=0; i--) {
100
+ for (i=bit->ndim-1; i>=0; i--) {
103
101
  idx[i] = addr % dim[i];
104
102
  addr /= dim[i];
105
103
  }
@@ -117,7 +115,7 @@ ca_bi_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
117
115
 
118
116
  ca_update_mask(kernel);
119
117
 
120
- for (i=0; i<kernel->rank; i++) {
118
+ for (i=0; i<kernel->ndim; i++) {
121
119
  j = idx[i];
122
120
  CA_CHECK_INDEX(j, bit->dim[i]);
123
121
  kernel->start[i] = j * kernel->dim[i];
@@ -136,7 +134,7 @@ ca_bi_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
136
134
  ca_size_t *dim = bit->dim;
137
135
  ca_size_t idx[CA_RANK_MAX];
138
136
  int8_t i;
139
- for (i=bit->rank-1; i>=0; i--) {
137
+ for (i=bit->ndim-1; i>=0; i--) {
140
138
  idx[i] = addr % dim[i];
141
139
  addr /= dim[i];
142
140
  }
@@ -158,11 +156,11 @@ ca_bi_setup (VALUE self, VALUE rref, VALUE rker)
158
156
  Data_Get_Struct(rref, CArray, ref);
159
157
  Data_Get_Struct(rker, CABlock, ker);
160
158
 
161
- if ( ref->rank != ker->rank ) {
162
- rb_raise(rb_eRuntimeError, "rank mismatch between reference and kernel");
159
+ if ( ref->ndim != ker->ndim ) {
160
+ rb_raise(rb_eRuntimeError, "ndim mismatch between reference and kernel");
163
161
  }
164
162
 
165
- for (i=0; i<ref->rank; i++) {
163
+ for (i=0; i<ref->ndim; i++) {
166
164
  if ( ker->step[i] != 1 ) {
167
165
  rb_raise(rb_eRuntimeError, "block should be contiguous");
168
166
  }
@@ -174,8 +172,8 @@ ca_bi_setup (VALUE self, VALUE rref, VALUE rker)
174
172
  */
175
173
  }
176
174
 
177
- it->rank = ref->rank;
178
- memcpy(it->dim, dim, it->rank * sizeof(ca_size_t));
175
+ it->ndim = ref->ndim;
176
+ memcpy(it->dim, dim, it->ndim * sizeof(ca_size_t));
179
177
  it->reference = ref;
180
178
  it->kernel = ker;
181
179
  it->kernel_at_addr = ca_bi_kernel_at_addr;
@@ -202,7 +200,7 @@ rb_bi_initialize_copy (VALUE self, VALUE other)
202
200
  return self;
203
201
  }
204
202
 
205
- /* rdoc:
203
+ /* yard:
206
204
  class CArray
207
205
  # Create block iterator.
208
206
  def blocks (*args)
@@ -3,10 +3,8 @@
3
3
  ca_iter_dimension.c
4
4
 
5
5
  This file is part of Ruby/CArray extension library.
6
- You can redistribute it and/or modify it under the terms of
7
- the Ruby Licence.
8
6
 
9
- Copyright (C) 2005 Hiroki Motoyoshi
7
+ Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
 
11
9
  ---------------------------------------------------------------------------- */
12
10
 
@@ -15,13 +13,13 @@
15
13
 
16
14
  VALUE rb_cCADimIterator;
17
15
 
18
- /* rdoc:
16
+ /* yard:
19
17
  class CADimensionIterator < CAIterator # :nodoc:
20
18
  end
21
19
  */
22
20
 
23
21
  typedef struct {
24
- int8_t rank;
22
+ int8_t ndim;
25
23
  ca_size_t dim[CA_RANK_MAX];
26
24
  CArray *reference;
27
25
  CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
@@ -50,14 +48,14 @@ ca_di_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
50
48
  else {
51
49
  CABlock *ck = (CABlock *)dit->kernel;
52
50
  kernel = ca_block_new(ref,
53
- ck->rank, ck->size0,
51
+ ck->ndim, ck->size0,
54
52
  ck->start, ck->step, ck->count,
55
53
  ck->offset);
56
54
  }
57
55
 
58
56
  ca_update_mask(kernel);
59
57
 
60
- for (i=0; i<dit->rank; i++) {
58
+ for (i=0; i<dit->ndim; i++) {
61
59
  val = idx[i];
62
60
  CA_CHECK_INDEX(val, dit->dim[i]);
63
61
  kernel->start[dit->symindex[i]] = val * kernel->step[dit->symindex[i]];
@@ -77,7 +75,7 @@ ca_di_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
77
75
  ca_size_t *dim = dit->dim;
78
76
  ca_size_t idx[CA_RANK_MAX];
79
77
  int8_t i;
80
- for (i=dit->rank-1; i>=0; i--) {
78
+ for (i=dit->ndim-1; i>=0; i--) {
81
79
  idx[i] = addr % dim[i];
82
80
  addr /= dim[i];
83
81
  }
@@ -94,7 +92,7 @@ ca_di_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
94
92
 
95
93
  ca_update_mask(kernel);
96
94
 
97
- for (i=0; i<dit->rank; i++) {
95
+ for (i=0; i<dit->ndim; i++) {
98
96
  val = idx[i];
99
97
  CA_CHECK_INDEX(val, dit->dim[i]);
100
98
  kernel->start[dit->symindex[i]] = val * kernel->step[dit->symindex[i]];
@@ -114,7 +112,7 @@ ca_di_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
114
112
  ca_size_t *dim = dit->dim;
115
113
  ca_size_t idx[CA_RANK_MAX];
116
114
  int8_t i;
117
- for (i=dit->rank-1; i>=0; i--) {
115
+ for (i=dit->ndim-1; i>=0; i--) {
118
116
  idx[i] = addr % dim[i];
119
117
  addr /= dim[i];
120
118
  }
@@ -129,7 +127,7 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
129
127
  volatile VALUE rindex, rker, rsymtbl;
130
128
  CADimIterator *it;
131
129
  CAIndexInfo blk_spec;
132
- int8_t rank;
130
+ int8_t ndim;
133
131
  int i, j, k;
134
132
 
135
133
  Data_Get_Struct(self, CADimIterator, it);
@@ -142,7 +140,7 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
142
140
 
143
141
  blk_spec = *info;
144
142
  blk_spec.type = CA_REG_BLOCK;
145
- for (i=0; i<info->rank; i++) {
143
+ for (i=0; i<info->ndim; i++) {
146
144
  if ( info->index_type[i] == CA_IDX_SYMBOL ) {
147
145
  blk_spec.index_type[i] = CA_IDX_ALL;
148
146
  rb_hash_aset(rsymtbl, ID2SYM(blk_spec.index[i].symbol.id), INT2NUM(i));
@@ -151,13 +149,13 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
151
149
 
152
150
  rref = rb_ca_ref_block(rref, &blk_spec);
153
151
 
154
- rindex = rb_ary_new2(info->rank);
155
- rank = 0;
152
+ rindex = rb_ary_new2(info->ndim);
153
+ ndim = 0;
156
154
 
157
155
  j = 0;
158
156
  k = 0;
159
157
 
160
- for (i=0; i<info->rank; i++) {
158
+ for (i=0; i<info->ndim; i++) {
161
159
  if ( info->index_type[i] == CA_IDX_SCALAR ) {
162
160
  rb_ary_store(rindex, i, SIZE2NUM(info->index[i].scalar));
163
161
  continue; /* escape from j++ */
@@ -165,8 +163,8 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
165
163
  else if ( info->index_type[i] == CA_IDX_SYMBOL ) {
166
164
  rb_ary_store(rindex, i, rb_ary_new3(1, SIZE2NUM(0)));
167
165
  it->symflag[j] = 1;
168
- it->symindex[rank] = j;
169
- rank++;
166
+ it->symindex[ndim] = j;
167
+ ndim++;
170
168
  }
171
169
  else if ( info->index_type[i] == CA_IDX_ALL ) {
172
170
  rb_ary_store(rindex, i, Qnil);
@@ -184,7 +182,7 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
184
182
 
185
183
  rker = rb_apply(rref, rb_intern("[]"), rindex);
186
184
 
187
- it->rank = rank;
185
+ it->ndim = ndim;
188
186
  Data_Get_Struct(rref, CArray, it->reference);
189
187
  Data_Get_Struct(rker, CArray, it->kernel);
190
188
  it->kernel_at_addr = ca_di_kernel_at_addr;
@@ -192,7 +190,7 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
192
190
  it->kernel_move_to_addr = ca_di_kernel_move_to_addr;
193
191
  it->kernel_move_to_index = ca_di_kernel_move_to_index;
194
192
 
195
- for (i=0; i<it->rank; i++) {
193
+ for (i=0; i<it->ndim; i++) {
196
194
  it->dim[i] = it->reference->dim[it->symindex[i]];
197
195
  }
198
196
 
@@ -239,7 +237,8 @@ rb_ca_dim_iterator (int argc, VALUE *argv, VALUE self)
239
237
 
240
238
  Data_Get_Struct(self, CArray, ca);
241
239
 
242
- rb_ca_scan_index(ca->rank, ca->dim, ca->elements, argc, argv, &info);
240
+ info.range_check = 1;
241
+ rb_ca_scan_index(ca->ndim, ca->dim, ca->elements, argc, argv, &info);
243
242
 
244
243
  obj = rb_di_s_allocate(rb_cCADimIterator);
245
244
  ca_di_setup(obj, self, &info);
@@ -258,7 +257,7 @@ rb_dim_iter_new (VALUE rref, CAIndexInfo *info)
258
257
  return obj;
259
258
  }
260
259
 
261
- /* rdoc:
260
+ /* yard:
262
261
  class CADimensionIterator
263
262
  def sym2dim (sym)
264
263
  end