carray 1.4.0 → 1.5.5

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 (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
@@ -3,10 +3,8 @@
3
3
  # carray/math/histogram.rb
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
 
@@ -49,7 +47,7 @@ class CAHistogram < CArray
49
47
  raise "scales should be an array of scales"
50
48
  end
51
49
 
52
- rank = scales.size
50
+ ndim = scales.size
53
51
  @scales = scales.clone
54
52
  @scales.map! { |s| CArray.wrap_readonly(s, CA_DOUBLE) }
55
53
 
@@ -60,10 +58,10 @@ class CAHistogram < CArray
60
58
  raise "invalid length of offset in option"
61
59
  end
62
60
  else
63
- @offsets = Array.new(rank) { 0 }
61
+ @offsets = Array.new(ndim) { 0 }
64
62
  end
65
63
 
66
- dim = Array.new(rank) { |i|
64
+ dim = Array.new(ndim) { |i|
67
65
  case @offsets[i]
68
66
  when 0
69
67
  @scales[i].size
@@ -76,12 +74,12 @@ class CAHistogram < CArray
76
74
 
77
75
  super(data_type, dim, &block)
78
76
 
79
- @mid_points = Array.new(rank) { |i|
77
+ @mid_points = Array.new(ndim) { |i|
80
78
  x = (@scales[i] + @scales[i].shifted(-1))/2
81
79
  x[0..-2].to_ca
82
80
  }
83
81
 
84
- @inner = self[*Array.new(rank) { |i| @offsets[i]..-2 }]
82
+ @inner = self[*Array.new(ndim) { |i| @offsets[i]..-2 }]
85
83
 
86
84
  end
87
85
 
@@ -91,7 +89,7 @@ class CAHistogram < CArray
91
89
  alias midpoints mid_points
92
90
 
93
91
  def increment (*values)
94
- idx = Array.new(rank) {|i|
92
+ idx = Array.new(ndim) {|i|
95
93
  vi = CArray.wrap_readonly(values[i], CA_DOUBLE)
96
94
  @scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca
97
95
  }
@@ -103,7 +101,7 @@ class CAHistogram < CArray
103
101
  val = CArray.wrap_readonly(values.pop, self.data_type)
104
102
  sel = val.ne(0)
105
103
  val = val[sel].to_ca
106
- idx = Array.new(rank) {|i|
104
+ idx = Array.new(ndim) {|i|
107
105
  vi = CArray.wrap_readonly(values[i], CA_DOUBLE)[sel]
108
106
  @scales[i].bin(vi, @include_upper, @include_lowest, @offsets[i]).to_ca
109
107
  }
@@ -3,10 +3,8 @@
3
3
  # carray/math/recurrence.rb
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
 
data/lib/carray/mkmf.rb CHANGED
@@ -3,10 +3,8 @@
3
3
  # carray/mkmf.rb
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
 
@@ -18,6 +16,13 @@ def have_carray
18
16
  rescue LoadError
19
17
  abort "Ruby/CArray is not installed"
20
18
  end
19
+ $LOAD_PATH.each do |path|
20
+ if File.exist? File.join(path, 'carray.h')
21
+ dir_config("carray", path, path)
22
+ break
23
+ end
24
+ end
25
+ =begin
21
26
  dir_config("carray", $sitearchdir, $sitearchdir)
22
27
  if defined? Gem
23
28
  if Gem::VERSION >= "1.7.0"
@@ -34,6 +39,7 @@ def have_carray
34
39
  end
35
40
  end
36
41
  end
42
+ =end
37
43
  status = true
38
44
  status &= have_header("carray.h")
39
45
  if /cygwin|mingw/ =~ RUBY_PLATFORM
@@ -3,10 +3,8 @@
3
3
  # carray/object/ca_obj_iterator.rb
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
 
@@ -3,10 +3,8 @@
3
3
  # carray/object/ca_obj_link.rb
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
 
@@ -3,10 +3,8 @@
3
3
  # carray/object/ca_obj_pack.rb
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
 
@@ -22,9 +20,9 @@ class CAPack < CAObject # :nodoc:
22
20
 
23
21
  def initialize (list, options={})
24
22
  @list = list
25
- @rank = options[:rank]
26
- unless @rank
27
- @rank = list.map{|m| m.rank}.min
23
+ @ndim = options[:ndim]
24
+ unless @ndim
25
+ @ndim = list.map{|m| m.ndim}.min
28
26
  end
29
27
  @names = options[:names] || [nil]*@list.size
30
28
  @dim = guess_dim(list)
@@ -55,10 +53,10 @@ class CAPack < CAObject # :nodoc:
55
53
  list.each do |mem|
56
54
  case mem
57
55
  when CArray
58
- if mem.rank < @rank
59
- raise "mem.rank < @rank"
56
+ if mem.ndim < @ndim
57
+ raise "mem.ndim < @ndim"
60
58
  else
61
- newdim = mem.dim[0, @rank]
59
+ newdim = mem.dim[0, @ndim]
62
60
  end
63
61
  if dim
64
62
  unless dim == newdim
@@ -78,10 +76,10 @@ class CAPack < CAObject # :nodoc:
78
76
  name = @names[i]
79
77
  case mem
80
78
  when CArray
81
- if mem.rank == @rank
79
+ if mem.ndim == @ndim
82
80
  s.member mem.data_type, name, :bytes=>mem.bytes ### anonymous member
83
81
  else
84
- dummy = Array.new(@rank){0} + [false]
82
+ dummy = Array.new(@ndim){0} + [false]
85
83
  s.member mem[*dummy].to_ca, name ### anonymous member
86
84
  end
87
85
  else
@@ -0,0 +1,256 @@
1
+ # ----------------------------------------------------------------------------
2
+ #
3
+ # carray/obsolete.rb
4
+ #
5
+ # This file is part of Ruby/CArray extension library.
6
+ #
7
+ # Copyright (C) 2005-2020 Hiroki Motoyoshi
8
+ #
9
+ # ----------------------------------------------------------------------------
10
+
11
+ module CA
12
+ TableMethods = CArray::TableMethods
13
+ end
14
+
15
+ class CArray
16
+
17
+ ### obsolete methods
18
+
19
+ def extend_as_table (column_names)
20
+ warn "CArray#extend_as_table will be obsolete"
21
+ self.extend CArray::TableMethods
22
+ self.column_names = column_names
23
+ self
24
+ end
25
+
26
+ # Returns the array eliminated all the duplicated elements.
27
+ def duplicated_values
28
+ warn "CArray#duplicated_values will be obsolete"
29
+ if uniq.size == size
30
+ return []
31
+ else
32
+ hash = {}
33
+ list = []
34
+ each_with_addr do |v, addr|
35
+ if v == UNDEF
36
+ next
37
+ elsif hash[v]
38
+ list << [v, addr, hash[v]]
39
+ hash[v] += 1
40
+ else
41
+ hash[v] = 0
42
+ end
43
+ end
44
+ return list
45
+ end
46
+ end
47
+
48
+ def self.summation (*dim)
49
+ warn "CArray.summation will be obsolete"
50
+ out = nil
51
+ first = true
52
+ CArray.each_index(*dim) { |*idx|
53
+ if first
54
+ out = yield(*idx)
55
+ first = false
56
+ else
57
+ out += yield(*idx)
58
+ end
59
+ }
60
+ return out
61
+ end
62
+
63
+ def by (other)
64
+ warn "CArray#by will be obsolete"
65
+ case other
66
+ when CArray
67
+ return (self[nil][nil,:*]*other[nil][:*,nil]).reshape(*(dim+other.dim))
68
+ else
69
+ return self * other
70
+ end
71
+ end
72
+
73
+ def save_binary (filename, opt={}) # :nodoc:
74
+ warn "CArray#save_binary will be obsolete, use CArray.save"
75
+ open(filename, "w") { |io|
76
+ return Serializer.new(io).save(self, opt)
77
+ }
78
+ end
79
+
80
+ def self.load_binary (filename, opt={}) # :nodoc:
81
+ warn "CArray.load_binary will be obsolete, use CArray.load"
82
+ open(filename) { |io|
83
+ return Serializer.new(io).load(opt)
84
+ }
85
+ end
86
+
87
+ def save_binary_io (io, opt={}) # :nodoc:
88
+ warn "CArray#save_binary_io will be obsolete, use CArray.save"
89
+ return Serializer.new(io).save(self, opt)
90
+ end
91
+
92
+ def self.load_binary_io (io, opt={}) # :nodoc:
93
+ warn "CArray#load_binary_io will be obsolete, use CArray.load"
94
+ return Serializer.new(io).load(opt)
95
+ end
96
+
97
+ def to_binary (io="", opt={}) # :nodoc:
98
+ warn "CArray#to_binary will be obsolete, use CArray.dump"
99
+ Serializer.new(io).save(self, opt)
100
+ return io
101
+ end
102
+
103
+ def self.from_binary (io, opt={}) # :nodoc:
104
+ warn "CArray.from_binary will be obsolete, use CArray.load"
105
+ return Serializer.new(io).load(opt)
106
+ end
107
+
108
+ def replace_value (from, to)
109
+ warn "CArray#replace_value will be obsolete"
110
+ self[:eq, from] = to
111
+ return self
112
+ end
113
+
114
+ def asign (*idx)
115
+ warn "CArray#asign will be obsolete"
116
+ self[*idx] = yield
117
+ return self
118
+ end
119
+
120
+ def fa # :nodoc:
121
+ warn "CArray#fa will be obsolete, use CArray#t"
122
+ return self.t
123
+ end
124
+
125
+ def block_iterator (*argv) # :nodoc:
126
+ warn "CArray#block_iterator will be obsolete, use CArray#blocks"
127
+ return blocks(*argv)
128
+ end
129
+
130
+ def window_iterator (*argv) # :nodoc:
131
+ warn "CArray#window_iterator will be obsolete, use CArray#windows"
132
+ return windows(*argv)
133
+ end
134
+
135
+ def rotated (*argv) # :nodoc:
136
+ warn "CArray#rotated will be obsolete, use CArray#rolled"
137
+ argv.push({:roll => Array.new(ndim){1} })
138
+ return shifted(*argv)
139
+ end
140
+
141
+ def rotate! (*argv) # :nodoc:
142
+ warn "CArray#rotate! will be obsolete, use CArray#roll!"
143
+ self[] = self.rolled(*argv)
144
+ return self
145
+ end
146
+
147
+ def rotate (*argv) # :nodoc:
148
+ warn "CArray#rotate will be obsolete, use CArray#roll"
149
+ return self.rolled(*argv).to_ca
150
+ end
151
+
152
+ def select (&block) # :nodoc:
153
+ warn "CArray#select will be obsolete"
154
+ case block.arity
155
+ when 1
156
+ return self[*yield(self)]
157
+ when -1, 0
158
+ return self[*instance_exec(&block)]
159
+ else
160
+ raise
161
+ end
162
+ end
163
+
164
+ def transform (type, dim, opt = {}) # :nodoc:
165
+ warn("CArray#transform will be obsolete")
166
+ return refer(type, dim, opt).to_ca
167
+ end
168
+
169
+ def classify (klass, outlier = nil) # :nodoc:
170
+ warn "CArray#classify will be obsolete"
171
+ b = CArray.int32(*dim)
172
+ f = CArray.boolean(*dim) { 1 }
173
+ attach {
174
+ (klass.elements-1).times do |i|
175
+ r = f.and(self < klass[i+1])
176
+ b[r] = i
177
+ f[r] = 0
178
+ end
179
+ if outlier
180
+ b[self < klass[0]] = outlier
181
+ b[f] = outlier
182
+ else
183
+ b[self < klass[0]] = -1
184
+ b[f] = klass.elements-1
185
+ end
186
+ }
187
+ return b
188
+ end
189
+
190
+
191
+
192
+ end
193
+
194
+ =begin
195
+
196
+ class Numeric
197
+
198
+ [
199
+ :boolean,
200
+ :int8,
201
+ :uint8,
202
+ :int16,
203
+ :uint16,
204
+ :int32,
205
+ :uint32,
206
+ :int64,
207
+ :uint64,
208
+ :float32,
209
+ :float64,
210
+ :float128,
211
+ :cmplx64,
212
+ :cmplx128,
213
+ :cmplx256,
214
+ :byte,
215
+ :short,
216
+ :int,
217
+ :float,
218
+ :double,
219
+ :complex,
220
+ :dcomplex,
221
+ :object
222
+ ].each do |name|
223
+ class_eval %{
224
+ def #{name} ()
225
+ warn "Numeric##{name} will be obsolete"
226
+ CScalar.new(#{name.inspect}) {self}
227
+ end
228
+ }
229
+ end
230
+
231
+ end
232
+
233
+ class CArray
234
+ def histogram (klass)
235
+ c = CArray.int32(klass.elements-1)
236
+ f = CArray.boolean(*dim) { 1 }
237
+ attach {
238
+ k = 0
239
+ r = f.and(self < klass[0])
240
+ f[r] = 0
241
+ (klass.elements-1).times do |i|
242
+ r = f.and(self < klass[i+1])
243
+ c[k] = r.count_true
244
+ f[r] = 0
245
+ k+=1
246
+ end
247
+ }
248
+ return c
249
+ end
250
+
251
+ def self.load_from_file (filename, data_type, dim, opt={}) # :nodoc:
252
+ raise "Sorry, CArray.load_from_file is depleted"
253
+ end
254
+
255
+ end
256
+ =end
@@ -0,0 +1,181 @@
1
+ # ----------------------------------------------------------------------------
2
+ #
3
+ # carray/ordering.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
+ # reversed
14
+ def reversed
15
+ return self[*([-1..0]*ndim)]
16
+ end
17
+
18
+ # roll / shift
19
+
20
+ def shift! (*argv, &block)
21
+ self[] = self.shifted(*argv, &block)
22
+ return self
23
+ end
24
+
25
+ def shift (*argv, &block)
26
+ return self.shifted(*argv, &block).to_ca
27
+ end
28
+
29
+ def rolled (*argv)
30
+ argv.push({:roll => Array.new(ndim){1} })
31
+ return shifted(*argv)
32
+ end
33
+
34
+ def roll! (*argv)
35
+ self[] = self.rolled(*argv)
36
+ return self
37
+ end
38
+
39
+ def roll (*argv)
40
+ return self.rolled(*argv).to_ca
41
+ end
42
+
43
+ # Returns the reference which elements are sorted by the comparison method
44
+ # given as block
45
+ def sorted_by (type=nil, opt={}, &block)
46
+ type, bytes =
47
+ CArray.guess_type_and_bytes(type||data_type, opt[:bytes]||bytes)
48
+ cmpary = convert(type, :bytes=>bytes, &block)
49
+ return self[cmpary.sort_addr]
50
+ end
51
+
52
+ # Returns the array which elements are sorted by the comparison method
53
+ # given as block
54
+ def sort_by (type=nil, opt={}, &block)
55
+ type, bytes =
56
+ CArray.guess_type_and_bytes(type||data_type, opt[:bytes]||bytes)
57
+ cmpary = convert(type, :bytes=>bytes, &block)
58
+ return self[cmpary.sort_addr].to_ca
59
+ end
60
+
61
+ def sorted_with (*others)
62
+ addr = sort_addr
63
+ ([self] + others).map { |x| x[addr] }
64
+ end
65
+
66
+ def sort_with (*others)
67
+ addr = sort_addr
68
+ ([self] + others).map { |x| x[addr].to_ca }
69
+ end
70
+
71
+ def max_by (&block)
72
+ if empty?
73
+ return UNDEF
74
+ else
75
+ addr = convert(:object, &block).max_addr
76
+ return self[addr]
77
+ end
78
+ end
79
+
80
+ def max_with (*others)
81
+ if empty?
82
+ return ([self] + others).map { |x| UNDEF }
83
+ else
84
+ addr = max_addr
85
+ return ([self] + others).map { |x| x[addr] }
86
+ end
87
+ end
88
+
89
+ def min_by (&block)
90
+ if empty?
91
+ return UNDEF
92
+ else
93
+ addr = convert(:object, &block).min_addr
94
+ return self[addr]
95
+ end
96
+ end
97
+
98
+ def min_with (*others)
99
+ if empty?
100
+ return ([self] + others).map { |x| UNDEF }
101
+ else
102
+ addr = min_addr
103
+ return ([self] + others).map { |x| x[addr] }
104
+ end
105
+ end
106
+
107
+ def range
108
+ return (self.min)..(self.max)
109
+ end
110
+
111
+ def nlargest (n)
112
+ obj = self.to_ca
113
+ list = []
114
+ n.times do |i|
115
+ k = obj.max_addr
116
+ list << obj[k]
117
+ obj[k] = UNDEF
118
+ end
119
+ list.to_ca.to_type(data_type)
120
+ end
121
+
122
+ def nlargest_addr (n)
123
+ obj = self.to_ca
124
+ list = []
125
+ n.times do |i|
126
+ k = obj.max_addr
127
+ list << k
128
+ obj[k] = UNDEF
129
+ end
130
+ CA_INT64(list)
131
+ end
132
+
133
+ def nsmallest (n)
134
+ obj = self.to_ca
135
+ list = []
136
+ n.times do |i|
137
+ k = obj.min_addr
138
+ list << obj[k]
139
+ obj[k] = UNDEF
140
+ end
141
+ list.to_ca.to_type(data_type)
142
+ end
143
+
144
+ def nsmallest_addr (n)
145
+ obj = self.to_ca
146
+ list = []
147
+ n.times do |i|
148
+ k = obj.min_addr
149
+ list << k
150
+ obj[k] = UNDEF
151
+ end
152
+ CA_INT64(list)
153
+ end
154
+
155
+ def order (dir = 1)
156
+ if dir >= 0 ### ascending order
157
+ if has_mask?
158
+ obj = template(:int32) { UNDEF }
159
+ sel = is_not_masked
160
+ obj[sel][self[sel].sort_addr].seq!
161
+ return obj
162
+ else
163
+ obj = template(:int32)
164
+ obj[sort_addr].seq!
165
+ return obj
166
+ end
167
+ else ### descending order
168
+ if has_mask?
169
+ obj = template(:int32) { UNDEF}
170
+ sel = is_not_masked
171
+ obj[sel][self[sel].sort_addr.reversed].seq!
172
+ return obj
173
+ else
174
+ obj = template(:int32)
175
+ obj[sort_addr.reversed].seq!
176
+ return obj
177
+ end
178
+ end
179
+ end
180
+
181
+ end