carray 1.5.1 → 1.5.6

Sign up to get free protection for your applications and to get access to all the features.
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