carray 1.5.1 → 1.5.6

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 (198) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +32 -0
  3. data/{LICENSES → LICENSE} +0 -0
  4. data/NEWS.md +83 -0
  5. data/README.md +34 -18
  6. data/Rakefile +1 -1
  7. data/TODO.md +17 -0
  8. data/carray.gemspec +10 -7
  9. data/ext/ca_iter_block.c +3 -5
  10. data/ext/ca_iter_dimension.c +4 -5
  11. data/ext/ca_iter_window.c +2 -4
  12. data/ext/ca_obj_array.c +394 -124
  13. data/ext/ca_obj_bitarray.c +6 -11
  14. data/ext/ca_obj_bitfield.c +5 -9
  15. data/ext/ca_obj_block.c +5 -12
  16. data/ext/ca_obj_fake.c +3 -5
  17. data/ext/ca_obj_farray.c +3 -5
  18. data/ext/ca_obj_field.c +15 -17
  19. data/ext/ca_obj_grid.c +5 -6
  20. data/ext/ca_obj_mapping.c +2 -4
  21. data/ext/ca_obj_object.c +3 -5
  22. data/ext/ca_obj_reduce.c +2 -4
  23. data/ext/ca_obj_refer.c +11 -15
  24. data/ext/ca_obj_repeat.c +2 -4
  25. data/ext/ca_obj_select.c +2 -4
  26. data/ext/ca_obj_shift.c +3 -5
  27. data/ext/ca_obj_transpose.c +3 -5
  28. data/ext/ca_obj_unbound_repeat.c +68 -122
  29. data/ext/ca_obj_window.c +7 -9
  30. data/ext/carray.h +17 -8
  31. data/ext/carray_access.c +183 -58
  32. data/ext/carray_attribute.c +151 -197
  33. data/ext/carray_call_cfunc.c +1 -3
  34. data/ext/carray_cast.c +345 -144
  35. data/ext/carray_cast_func.rb +1 -2
  36. data/ext/carray_class.c +28 -36
  37. data/ext/carray_conversion.c +56 -59
  38. data/ext/carray_copy.c +16 -32
  39. data/ext/carray_core.c +73 -60
  40. data/ext/carray_element.c +25 -44
  41. data/ext/carray_generate.c +74 -53
  42. data/ext/carray_iterator.c +13 -15
  43. data/ext/carray_loop.c +53 -82
  44. data/ext/carray_mask.c +99 -119
  45. data/ext/carray_math.rb +28 -12
  46. data/ext/carray_mathfunc.c +1 -3
  47. data/ext/carray_numeric.c +42 -45
  48. data/ext/carray_operator.c +45 -32
  49. data/ext/carray_order.c +231 -65
  50. data/ext/carray_sort_addr.c +14 -21
  51. data/ext/carray_stat.c +1 -3
  52. data/ext/carray_stat_proc.rb +2 -4
  53. data/ext/carray_test.c +41 -30
  54. data/ext/carray_undef.c +1 -11
  55. data/ext/carray_utils.c +138 -51
  56. data/ext/extconf.rb +14 -2
  57. data/ext/mkmath.rb +2 -2
  58. data/ext/ruby_carray.c +15 -7
  59. data/ext/ruby_ccomplex.c +2 -4
  60. data/ext/ruby_float_func.c +1 -3
  61. data/ext/version.h +5 -7
  62. data/lib/carray.rb +9 -9
  63. data/lib/carray/autoload.rb +0 -2
  64. data/lib/carray/autoload/autoload_gem_numo_narray.rb +6 -6
  65. data/lib/carray/basic.rb +1 -3
  66. data/lib/carray/broadcast.rb +101 -0
  67. data/lib/carray/compose.rb +34 -10
  68. data/lib/carray/construct.rb +57 -18
  69. data/lib/carray/info.rb +1 -3
  70. data/lib/carray/inspect.rb +3 -5
  71. data/lib/carray/io/imagemagick.rb +1 -3
  72. data/lib/carray/iterator.rb +3 -3
  73. data/lib/carray/mask.rb +18 -7
  74. data/lib/carray/math.rb +4 -6
  75. data/lib/carray/math/histogram.rb +1 -3
  76. data/lib/carray/math/recurrence.rb +1 -3
  77. data/lib/carray/mkmf.rb +1 -3
  78. data/lib/carray/object/ca_obj_iterator.rb +1 -3
  79. data/lib/carray/object/ca_obj_link.rb +1 -3
  80. data/lib/carray/object/ca_obj_pack.rb +1 -3
  81. data/lib/carray/obsolete.rb +1 -17
  82. data/lib/carray/ordering.rb +29 -5
  83. data/lib/carray/serialize.rb +34 -25
  84. data/lib/carray/string.rb +1 -3
  85. data/lib/carray/struct.rb +3 -5
  86. data/lib/carray/testing.rb +5 -10
  87. data/lib/carray/time.rb +1 -3
  88. data/lib/carray/transform.rb +12 -3
  89. data/misc/NOTE +16 -38
  90. data/spec/Classes/CABitfield_spec.rb +58 -0
  91. data/spec/Classes/CABlockIterator_spec.rb +114 -0
  92. data/spec/Classes/CABlock_spec.rb +205 -0
  93. data/spec/Classes/CAField_spec.rb +39 -0
  94. data/spec/Classes/CAGrid_spec.rb +75 -0
  95. data/spec/Classes/CAMap_spec.rb +0 -0
  96. data/{test/test_CAMapping.rb → spec/Classes/CAMapping_spec.rb} +35 -36
  97. data/spec/Classes/CAObject_attribute_spec.rb +33 -0
  98. data/spec/Classes/CAObject_spec.rb +33 -0
  99. data/spec/Classes/CARefer_spec.rb +93 -0
  100. data/spec/Classes/CARepeat_spec.rb +65 -0
  101. data/spec/Classes/CASelect_spec.rb +22 -0
  102. data/spec/Classes/CAShift_spec.rb +16 -0
  103. data/spec/Classes/CAStruct_spec.rb +71 -0
  104. data/{test/test_CATranspose.rb → spec/Classes/CATranspose_spec.rb} +20 -21
  105. data/spec/Classes/CAUnboudRepeat_spec.rb +102 -0
  106. data/spec/Classes/CAWindow_spec.rb +54 -0
  107. data/spec/Classes/CAWrap_spec.rb +8 -0
  108. data/{test/test_CArray.rb → spec/Classes/CArray_spec.rb} +48 -92
  109. data/spec/Classes/CScalar_spec.rb +55 -0
  110. data/spec/Features/feature_130_spec.rb +19 -0
  111. data/spec/Features/feature_attributes_spec.rb +280 -0
  112. data/spec/Features/feature_boolean_spec.rb +98 -0
  113. data/spec/Features/feature_broadcast.rb +116 -0
  114. data/spec/Features/feature_cast_function.rb +19 -0
  115. data/spec/Features/feature_cast_spec.rb +33 -0
  116. data/spec/Features/feature_class_spec.rb +84 -0
  117. data/spec/Features/feature_complex_spec.rb +42 -0
  118. data/{test/test_composite.rb → spec/Features/feature_composite_spec.rb} +17 -18
  119. data/spec/Features/feature_convert_spec.rb +46 -0
  120. data/spec/Features/feature_copy_spec.rb +123 -0
  121. data/spec/Features/feature_creation_spec.rb +84 -0
  122. data/spec/Features/feature_element_spec.rb +144 -0
  123. data/spec/Features/feature_extream_spec.rb +54 -0
  124. data/spec/Features/feature_generate_spec.rb +74 -0
  125. data/spec/Features/feature_index_spec.rb +69 -0
  126. data/spec/Features/feature_mask_spec.rb +580 -0
  127. data/spec/Features/feature_math_spec.rb +97 -0
  128. data/spec/Features/feature_order_spec.rb +146 -0
  129. data/spec/Features/feature_ref_store_spec.rb +209 -0
  130. data/spec/Features/feature_serialization_spec.rb +125 -0
  131. data/spec/Features/feature_stat_spec.rb +397 -0
  132. data/spec/Features/feature_virtual_spec.rb +48 -0
  133. data/spec/Features/method_eq_spec.rb +81 -0
  134. data/spec/Features/method_is_nan_spec.rb +12 -0
  135. data/spec/Features/method_map_spec.rb +54 -0
  136. data/spec/Features/method_max_with.rb +20 -0
  137. data/spec/Features/method_min_with.rb +19 -0
  138. data/spec/Features/method_ne_spec.rb +18 -0
  139. data/spec/Features/method_project_spec.rb +188 -0
  140. data/spec/Features/method_ref_spec.rb +27 -0
  141. data/spec/Features/method_round_spec.rb +11 -0
  142. data/spec/Features/method_s_linspace_spec.rb +48 -0
  143. data/spec/Features/method_s_span_spec.rb +14 -0
  144. data/spec/Features/method_seq_spec.rb +47 -0
  145. data/spec/Features/method_sort_with.rb +43 -0
  146. data/spec/Features/method_sorted_with.rb +29 -0
  147. data/spec/Features/method_span_spec.rb +42 -0
  148. data/spec/Features/method_wrap_readonly_spec.rb +43 -0
  149. data/{test → spec/UnitTest}/test_CAVirtual.rb +0 -0
  150. data/spec/spec_all.rb +0 -1
  151. data/utils/convert_test.rb +73 -0
  152. data/utils/{extract_rdoc.rb → extract_yard.rb} +7 -12
  153. metadata +74 -58
  154. data/spec/CABlockIterator/CABlockIterator_spec.rb +0 -113
  155. data/spec/CArray/bug/store_spec.rb +0 -27
  156. data/spec/CArray/index/repeat_spec.rb +0 -10
  157. data/spec/CArray/method/eq_spec.rb +0 -80
  158. data/spec/CArray/method/is_nan_spec.rb +0 -12
  159. data/spec/CArray/method/ne_spec.rb +0 -18
  160. data/spec/CArray/method/round_spec.rb +0 -11
  161. data/spec/CArray/object/_attribute_spec.rb +0 -32
  162. data/spec/CArray/object/s_new_spec.rb +0 -31
  163. data/spec/CArray/serialize/Serialization_spec.rb +0 -89
  164. data/test/test_130.rb +0 -23
  165. data/test/test_ALL.rb +0 -49
  166. data/test/test_CABitfield.rb +0 -59
  167. data/test/test_CABlock.rb +0 -208
  168. data/test/test_CAField.rb +0 -40
  169. data/test/test_CAGrid.rb +0 -76
  170. data/test/test_CAMmap.rb +0 -11
  171. data/test/test_CARefer.rb +0 -94
  172. data/test/test_CARepeat.rb +0 -66
  173. data/test/test_CASelect.rb +0 -23
  174. data/test/test_CAShift.rb +0 -17
  175. data/test/test_CAWindow.rb +0 -55
  176. data/test/test_CAWrap.rb +0 -9
  177. data/test/test_CComplex.rb +0 -83
  178. data/test/test_CScalar.rb +0 -91
  179. data/test/test_attribute.rb +0 -281
  180. data/test/test_block_iterator.rb +0 -17
  181. data/test/test_boolean.rb +0 -99
  182. data/test/test_cast.rb +0 -33
  183. data/test/test_class.rb +0 -85
  184. data/test/test_complex.rb +0 -43
  185. data/test/test_convert.rb +0 -79
  186. data/test/test_copy.rb +0 -141
  187. data/test/test_creation.rb +0 -85
  188. data/test/test_element.rb +0 -146
  189. data/test/test_extream.rb +0 -55
  190. data/test/test_generate.rb +0 -75
  191. data/test/test_index.rb +0 -71
  192. data/test/test_mask.rb +0 -578
  193. data/test/test_math.rb +0 -98
  194. data/test/test_order.rb +0 -147
  195. data/test/test_ref_store.rb +0 -211
  196. data/test/test_stat.rb +0 -406
  197. data/test/test_struct.rb +0 -72
  198. data/test/test_virtual.rb +0 -49
@@ -3,10 +3,8 @@
3
3
  # carray/constructor.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
 
@@ -58,10 +56,23 @@ class CArray
58
56
  def span! (range)
59
57
  first = range.begin.to_r
60
58
  last = range.end.to_r
61
- if range.exclude_end?
62
- seq!(first, (last-first)/elements)
59
+ if integer?
60
+ if range.exclude_end?
61
+ step = ((last-1)-first+1)/elements
62
+ else
63
+ step = (last-first+1)/elements
64
+ end
63
65
  else
64
- seq!(first, (last-first)/(elements-1))
66
+ if range.exclude_end?
67
+ step = (last-first)/elements
68
+ else
69
+ step = (last-first)/(elements-1)
70
+ end
71
+ end
72
+ if integer? && step.denominator != 1
73
+ self[] = (first + seq * step).floor
74
+ else
75
+ seq!(first, step)
65
76
  end
66
77
  return self
67
78
  end
@@ -384,7 +395,7 @@ class CArray
384
395
  def eye (n, m = nil, k = 0)
385
396
  m ||= n
386
397
  mat = CArray.new(self::DataType || CA_FLOAT64, [n, m])
387
- start = k > 0 ? k : m - k - 1
398
+ start = ( k == 0 ) ? k : ( k > 0 ? k : m - k - 1 )
388
399
  mat[[start..-1,m+1]] = 1
389
400
  mat
390
401
  end
@@ -397,7 +408,11 @@ class CArray
397
408
 
398
409
  def linspace (x1, x2, n = 100)
399
410
  data_type = self::DataType
400
- data_type ||= guess_data_type_from_values(x1, x2)
411
+ unless data_type
412
+ guess = guess_data_type_from_values(x1, x2)
413
+ guess = CA_FLOAT64 if guess == CA_INT64
414
+ data_type = guess
415
+ end
401
416
  CArray.new(data_type, [n]).span(x1..x2)
402
417
  end
403
418
 
@@ -415,7 +430,7 @@ class CArray
415
430
  end
416
431
  data_type = self::DataType
417
432
  data_type ||= guess_data_type_from_values(start, stop, step)
418
- CArray.__new__(data_type, start..stop, step)
433
+ CArray.__new__(data_type, start..stop-step, step)
419
434
  end
420
435
 
421
436
  def full (shape, fill_value)
@@ -430,16 +445,40 @@ class CArray
430
445
  end
431
446
 
432
447
  class CArray
433
-
434
- def self.meshgrid (*args)
435
- dim = args.map(&:size)
436
- out = []
437
- args.each_with_index do |arg, i|
438
- newdim = dim.dup
439
- newdim[i] = :%
440
- out[i] = arg[*newdim].to_ca
448
+
449
+ def self.meshgrid (*axes, indexing: "xy", copy: true, sparse: false, &block)
450
+ case indexing
451
+ when "xy"
452
+ ### no operation
453
+ when "ij"
454
+ axes = axes.map{|axis| axis.seq }
455
+ else
456
+ raise ArgumentError, %{indexing option should be one of "xy" and "ij"}
457
+ end
458
+ shape = axes.map(&:size).reverse
459
+ if sparse ### => CAUnboundRepeat
460
+ list = axes.map.with_index do |axis, k|
461
+ extended_shape = (shape.size-1).downto(0).map { |i| ( i == k ) ? nil : :* }
462
+ if copy
463
+ axis[*extended_shape].to_ca
464
+ else
465
+ axis[*extended_shape]
466
+ end
467
+ end
468
+ else ### => CARepeat
469
+ naxes = shape.size
470
+ list = axes.map.with_index do |axis, k|
471
+ extended_shape = shape.dup
472
+ extended_shape[naxes - k - 1] = :%
473
+ if copy
474
+ axis[*extended_shape].to_ca
475
+ else
476
+ axis[*extended_shape]
477
+ end
478
+ end
441
479
  end
442
- return *out
480
+ return block.call(*list) if block
481
+ return list
443
482
  end
444
483
 
445
484
  end
data/lib/carray/info.rb CHANGED
@@ -3,10 +3,8 @@
3
3
  # carray/info.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/inspect.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
 
@@ -159,7 +157,7 @@ class CArray::Inspector # :nodoc:
159
157
  dim[level].times do |i|
160
158
  idx[level] = i
161
159
  v = @carray[*idx]
162
- if v.undef?
160
+ if v == UNDEF
163
161
  io << '_'
164
162
  else
165
163
  io << formatter[v]
@@ -178,7 +176,7 @@ class CArray::Inspector # :nodoc:
178
176
  if over
179
177
  idx[level] = dim[level] - 1
180
178
  v = @carray[*idx]
181
- if v.undef?
179
+ if v == UNDEF
182
180
  io << ", _"
183
181
  else
184
182
  io << ", " + formatter[v]
@@ -3,10 +3,8 @@
3
3
  # carray/io/imagemagick.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/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
 
@@ -280,6 +278,7 @@ class CAIterator
280
278
  end
281
279
 
282
280
  def sort_with (&block)
281
+ warn "CAIterator#sort_with will be obsolete"
283
282
  out = reference.template
284
283
  idx = CA.sort_addr(*yield(self))
285
284
  ca[idx].each_with_addr do |blk, i|
@@ -317,6 +316,7 @@ class CAClassIterator < CAIterator # :nodoc:
317
316
  @reference = reference
318
317
  @classifier = classifier || @reference.uniq.sort
319
318
  @null = CArray.new(@reference.data_type,[0])
319
+ @null.data_class = @reference.data_class if @reference.has_data_class?
320
320
  @table = {}
321
321
  @ndim = 1
322
322
  @dim = [0]
data/lib/carray/mask.rb CHANGED
@@ -3,21 +3,32 @@
3
3
  # carray/mask.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
 
13
11
  class CArray
14
-
15
- # mask
16
-
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.
17
16
  #
18
- # Returns the number of masked elements.
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
19
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
20
27
 
28
+ # mask
29
+ #
30
+ # Returns the number of masked elements.
31
+ #
21
32
  def count_masked (*axis)
22
33
  if has_mask?
23
34
  return mask.int64.accumulate(*axis)
data/lib/carray/math.rb CHANGED
@@ -3,10 +3,8 @@
3
3
  # carray/math.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
 
@@ -318,7 +316,7 @@ class CArray
318
316
  count = x.count_not_masked
319
317
  xm = x.mean(:min_count => min_count)
320
318
  ym = y.mean(:min_count => min_count)
321
- if ( xm.undef? or ym.undef? )
319
+ if ( xm == UNDEF or ym == UNDEF )
322
320
  return fill_value || UNDEF
323
321
  else
324
322
  return (x-xm).wsum(y-ym)/count
@@ -337,7 +335,7 @@ class CArray
337
335
  count = x.count_not_masked
338
336
  xm = x.mean(:min_count=>min_count)
339
337
  ym = y.mean(:min_count=>min_count)
340
- if ( xm.undef? or ym.undef? )
338
+ if ( xm == UNDEF or ym == UNDEF )
341
339
  return fill_value || UNDEF
342
340
  else
343
341
  return (x-xm).wsum(y-ym)/(count-1)
@@ -355,7 +353,7 @@ class CArray
355
353
  y.inherit_mask(x)
356
354
  xm = x.mean(:min_count=>min_count)
357
355
  ym = y.mean(:min_count=>min_count)
358
- if ( xm.undef? or ym.undef? )
356
+ if ( xm == UNDEF or ym == UNDEF )
359
357
  return fill_value || UNDEF
360
358
  else
361
359
  xd, yd = x-xm, y-ym
@@ -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
 
@@ -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
 
@@ -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
 
@@ -3,10 +3,8 @@
3
3
  # carray/obsolete.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
 
@@ -25,20 +23,6 @@ class CArray
25
23
  self
26
24
  end
27
25
 
28
- # pulled
29
-
30
- def pulled (*args)
31
- warn "CArray#pulled will be obsolete"
32
- idx = args.map{|s| s.nil? ? :% : s}
33
- return self[*idx]
34
- end
35
-
36
- def pull (*args)
37
- warn "CArray#pull will be obsolete"
38
- idx = args.map{|s| s.nil? ? :% : s}
39
- return self[*idx].to_ca
40
- end
41
-
42
26
  # Returns the array eliminated all the duplicated elements.
43
27
  def duplicated_values
44
28
  warn "CArray#duplicated_values will be obsolete"
@@ -3,17 +3,14 @@
3
3
  # carray/ordering.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
 
13
11
  class CArray
14
12
 
15
13
  # reversed
16
-
17
14
  def reversed
18
15
  return self[*([-1..0]*ndim)]
19
16
  end
@@ -42,7 +39,6 @@ class CArray
42
39
  def roll (*argv)
43
40
  return self.rolled(*argv).to_ca
44
41
  end
45
-
46
42
 
47
43
  # Returns the reference which elements are sorted by the comparison method
48
44
  # given as block
@@ -61,6 +57,16 @@ class CArray
61
57
  cmpary = convert(type, :bytes=>bytes, &block)
62
58
  return self[cmpary.sort_addr].to_ca
63
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
64
70
 
65
71
  def max_by (&block)
66
72
  if empty?
@@ -71,6 +77,15 @@ class CArray
71
77
  end
72
78
  end
73
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
+
74
89
  def min_by (&block)
75
90
  if empty?
76
91
  return UNDEF
@@ -80,6 +95,15 @@ class CArray
80
95
  end
81
96
  end
82
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
+
83
107
  def range
84
108
  return (self.min)..(self.max)
85
109
  end