red_amber 0.3.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +56 -22
  3. data/.yardopts +2 -0
  4. data/CHANGELOG.md +178 -0
  5. data/Gemfile +1 -1
  6. data/LICENSE +1 -1
  7. data/README.md +29 -30
  8. data/benchmark/basic.yml +7 -7
  9. data/benchmark/combine.yml +3 -3
  10. data/benchmark/dataframe.yml +15 -9
  11. data/benchmark/group.yml +6 -6
  12. data/benchmark/reshape.yml +6 -6
  13. data/benchmark/vector.yml +6 -3
  14. data/doc/DataFrame.md +32 -12
  15. data/doc/DataFrame_Comparison.md +65 -0
  16. data/doc/SubFrames.md +11 -0
  17. data/doc/Vector.md +207 -1
  18. data/doc/yard-templates/default/fulldoc/html/css/common.css +6 -0
  19. data/lib/red_amber/data_frame.rb +454 -85
  20. data/lib/red_amber/data_frame_combinable.rb +609 -115
  21. data/lib/red_amber/data_frame_displayable.rb +313 -34
  22. data/lib/red_amber/data_frame_indexable.rb +122 -19
  23. data/lib/red_amber/data_frame_loadsave.rb +78 -10
  24. data/lib/red_amber/data_frame_reshaping.rb +184 -14
  25. data/lib/red_amber/data_frame_selectable.rb +623 -70
  26. data/lib/red_amber/data_frame_variable_operation.rb +452 -35
  27. data/lib/red_amber/group.rb +186 -22
  28. data/lib/red_amber/helper.rb +74 -14
  29. data/lib/red_amber/refinements.rb +26 -6
  30. data/lib/red_amber/subframes.rb +1101 -0
  31. data/lib/red_amber/vector.rb +362 -11
  32. data/lib/red_amber/vector_aggregation.rb +312 -0
  33. data/lib/red_amber/vector_binary_element_wise.rb +506 -0
  34. data/lib/red_amber/vector_selectable.rb +265 -23
  35. data/lib/red_amber/vector_unary_element_wise.rb +529 -0
  36. data/lib/red_amber/vector_updatable.rb +278 -34
  37. data/lib/red_amber/version.rb +2 -1
  38. data/lib/red_amber.rb +13 -1
  39. data/red_amber.gemspec +2 -2
  40. metadata +13 -8
  41. data/doc/image/dataframe/reshaping_DataFrames.png +0 -0
  42. data/lib/red_amber/vector_functions.rb +0 -242
@@ -4,17 +4,114 @@
4
4
  # reference: https://arrow.apache.org/docs/cpp/compute.html
5
5
 
6
6
  module RedAmber
7
- # mix-in for class Vector
7
+ # Mix-in for class Vector
8
8
  # Functions to make up some data (especially missing) for new data.
9
9
  module VectorUpdatable
10
10
  # Add properties to Arrow::Array and Arrow::ChunkedArray
11
11
  using RefineArrayLike
12
12
 
13
- # Replace data
14
- # @param specifier [Array, Vector, Arrow::Array] index or booleans.
15
- # @param replacer [Scalar, Array, Vector, Arrow::Array] new data to replace for.
16
- # @return [Vector] Replaced new Vector.
17
- # If specifier has no true, return self.
13
+ # Replace data in self by position specifier and replacer.
14
+ #
15
+ # - Scalar value may be broadcasted.
16
+ # - Returned value type may be automatically up-casted by replacer.
17
+ #
18
+ # @overload replace(booleans, replacer_by_scalar)
19
+ # Replace the value where true in boolean specifier to scalar replacer.
20
+ #
21
+ # @param booleans [Array, Vector, Arrow::Array]
22
+ # boolean position specifier to specify the position to be replaced by true.
23
+ # @param replacer_by_scalar [Scalar]
24
+ # new data to replace for.
25
+ # @return [Vector]
26
+ # a new replaced Vector.
27
+ # If specifier has no true, returns self.
28
+ # @example Replace with boolean specifier and scalar replacer
29
+ # Vector.new([1, 2, 3]).replace([true, false, true], 0)
30
+ #
31
+ # # =>
32
+ # #<RedAmber::Vector(:uint8, size=3):0x000000000001ee10>
33
+ # [0, 2, 0]
34
+ #
35
+ # @example Type of result is up-casted by replacer.
36
+ # ector.new([1, 2, 3]).replace([true, false, true], -1.0)
37
+ #
38
+ # # =>
39
+ # #<RedAmber::Vector(:double, size=3):0x0000000000025d78>
40
+ # [-1.0, 2.0, -1.0]
41
+ #
42
+ # @example Position of nil in booleans is replaced with nil
43
+ # Vector.new([1, 2, 3]).replace([true, false, nil], -1)
44
+ #
45
+ # # =>
46
+ # #<RedAmber::Vector(:int8, size=3):0x00000000000304d0>
47
+ # [-1, 2, nil]
48
+ #
49
+ # @example Replace 'NA' to nil
50
+ # vector = Vector.new(['A', 'B', 'NA'])
51
+ # vector.replace(vector == 'NA', nil)
52
+ #
53
+ # # =>
54
+ # #<RedAmber::Vector(:string, size=3):0x000000000000f8ac>
55
+ # ["A", "B", nil]
56
+ #
57
+ # @overload replace(indices, replacer_by_scalar)
58
+ # Replace the value at the index specifier to scalar replacer.
59
+ #
60
+ # @param indices [Array, Vector, Arrow::Array]
61
+ # index specifier to specify the position to be replaced.
62
+ # @param replacer_by_scalar [Scalar]
63
+ # new data to replace for.
64
+ # @return [Vector]
65
+ # a new replaced Vector.
66
+ # If specifier is empty, returns self.
67
+ # @example Replace with index specifier and scalar replacer
68
+ # Vector.new([1, 2, 3]).replace([0, 2], 0)
69
+ #
70
+ # # =>
71
+ # #<RedAmber::Vector(:uint8, size=3):0x000000000000c15c>
72
+ # [0, 2, 0]
73
+ #
74
+ # @overload replace(booleans, replacer_array)
75
+ # Replace the value where true in boolean specifier to replacer array.
76
+ #
77
+ # @param booleans [Array, Vector, Arrow::Array]
78
+ # boolean position specifier to specify the position to be replaced by true.
79
+ # @param replacer_array [Vector, Array, Arrow::Array]
80
+ # new data to replace for.
81
+ # The number of true in booleans must be equal to the length of replacer array.
82
+ # @return [Vector]
83
+ # a new replaced Vector.
84
+ # If specifier has no true, returns self.
85
+ # @example Replace with boolean specifier and replacer array
86
+ # vector = Vector.new([1, 2, 3])
87
+ # booleans = [true, false, true]
88
+ # replacer = [4, 5]
89
+ # vector.replace(booleans, replacer)
90
+ #
91
+ # # =>
92
+ # #<RedAmber::Vector(:uint8, size=3):0x000000000001ee10>
93
+ # [4, 2, 5]
94
+ #
95
+ # @overload replace(indices, replacer_array)
96
+ # Replace the value at the index specifier to replacer array.
97
+ #
98
+ # @param indices [Array, Vector, Arrow::Array]
99
+ # index specifier to specify the position to be replaced.
100
+ # @param replacer_array [Vector, Array, Arrow::Array]
101
+ # new data to replace for.
102
+ # The length of index specifier must be equal to the length of replacer array.
103
+ # @return [Vector]
104
+ # a new replaced Vector.
105
+ # If specifier is empty, returns self.
106
+ # @example Replace with index specifier and replacer array
107
+ # vector = Vector.new([1, 2, 3])
108
+ # indices = [0, 2]
109
+ # replacer = [4, 5]
110
+ # vector.replace(indices, replacer)
111
+ #
112
+ # # =>
113
+ # #<RedAmber::Vector(:uint8, size=3):0x000000000001ee10>
114
+ # [4, 2, 5]
18
115
  #
19
116
  def replace(specifier, replacer)
20
117
  vector = Vector.new(parse_args(Array(specifier), size))
@@ -37,7 +134,7 @@ module RedAmber
37
134
  in nil | [nil]
38
135
  return replace_to_nil(booleans.data)
39
136
  in Arrow::Array
40
- # nop
137
+ replacer
41
138
  in Vector
42
139
  replacer.data
43
140
  in Array
@@ -52,10 +149,59 @@ module RedAmber
52
149
  replace_with(booleans.data, replacer_array)
53
150
  end
54
151
 
55
- # (related functions)
56
- # fill_null_backward, fill_null_forward
57
-
58
- # [Ternary element-wise]: boolean_vector.func(if_true, else) => vector
152
+ # Choose values based on self.
153
+ #
154
+ # [Ternary element-wise function] Returns a Vector.
155
+ # - Self must be a boolean Vector.
156
+ # - `true_choice`, `false_choice` must be of the same type scalar / array / Vector.
157
+ # - `nil` values in self will be promoted to the output.
158
+ #
159
+ # @overload if_else(true_choise, false_choise)
160
+ # replace with a scalar.
161
+ #
162
+ # @param true_choice [scalar]
163
+ # a value to be replaced with true.
164
+ # @param false_choice [scalar]
165
+ # a value to be replaced with false.
166
+ # @return [Vector]
167
+ # replaced result.
168
+ # @example Replace with scalar choices
169
+ # Vector.new(true, true, false, nil, false).if_else(1, 2)
170
+ #
171
+ # # =>
172
+ # #<RedAmber::Vector(:uint8, size=5):0x000000000000c198>
173
+ # [1, 1, 2, nil, 2]
174
+ #
175
+ # @overload if_else(true_choise, false_choise)
176
+ # replace with a scalar.
177
+ #
178
+ # @param true_choice [Vector, Array, Arrow::Array]
179
+ # values to be replaced with true.
180
+ # The size of true_choice must be same as self.
181
+ # @param false_choice [Vector, Array, Arrow::Array]
182
+ # values to be replaced with false.
183
+ # The size of false_choice must be same as self.
184
+ # @return [Vector]
185
+ # replaced result.
186
+ # @example Replace with Array choices
187
+ # boolean_vector = Vector.new(true, true, false, nil, false)
188
+ # true_choise = Vector.new([1.1, 2.2, 3.3, 4.4, 5.5])
189
+ # false_choise = -true_choise
190
+ # boolean_vector.if_else(true_choise, false_choise)
191
+ #
192
+ # # =>
193
+ # #<RedAmber::Vector(:double, size=5):0x000000000000cd28>
194
+ # [1.1, 2.2, -3.3, nil, -5.5]
195
+ #
196
+ # @example Normalize negative indices to positive ones
197
+ # indices = Vector.new([1, -1, 3, -4])
198
+ # array_size = 10
199
+ # normalized_indices = (indices < 0).if_else(indices + array_size, indices)
200
+ #
201
+ # # =>
202
+ # #<RedAmber::Vector(:int16, size=4):0x000000000000f85c>
203
+ # [1, 9, 3, 6]
204
+ #
59
205
  def if_else(true_choice, false_choice)
60
206
  true_choice = true_choice.data if true_choice.is_a? Vector
61
207
  false_choice = false_choice.data if false_choice.is_a? Vector
@@ -65,21 +211,58 @@ module RedAmber
65
211
  Vector.create(datum.value)
66
212
  end
67
213
 
68
- # same behavior as Ruby's invert
214
+ # Another #invert which is same behavior as Ruby's invert.
215
+ #
69
216
  # ![true, false, nil] #=> [false, true, true]
217
+ # @return [Vector]
218
+ # follows Ruby's BasicObject#!'s behavior.
219
+ # @example
220
+ # vector = Vector.new([true, true, false, nil])
221
+ #
222
+ # # =>
223
+ # #<RedAmber::Vector(:boolean, size=4):0x000000000000fa8c>
224
+ # [true, true, false, nil]
225
+ #
226
+ # # nil is converted to nil by Vector#invert.
227
+ # vector.invert
228
+ # # or
229
+ # !vector
230
+ #
231
+ # #<RedAmber::Vector(:boolean, size=4):0x000000000000faa0>
232
+ # [false, false, true, nil]
233
+ #
234
+ # # On the other hand,
235
+ # # Vector#primitive_invert follows Ruby's BasicObject#!'s behavior.
236
+ # vector.primitive_invert
237
+ #
238
+ # # =>
239
+ # #<RedAmber::Vector(:boolean, size=4):0x000000000000fab4>
240
+ # [false, false, true, true]
241
+ #
70
242
  def primitive_invert
71
243
  raise VectorTypeError, "Not a boolean Vector: #{self}" unless boolean?
72
244
 
73
245
  is_nil.if_else(false, self).invert
74
246
  end
75
247
 
248
+ # Shift elements in self.
249
+ #
250
+ # @param amount [Integer]
251
+ # amount of shift. Positive value will shift right, negative will shift left.
252
+ # @param fill [Object]
253
+ # complementary element to fill the new seat.
254
+ # @return [Vector]
255
+ # shifted Vector.
256
+ #
76
257
  def shift(amount = 1, fill: nil)
77
- raise VectorArgumentError, 'Shift amount is too large' if amount.abs > size
258
+ raise VectorArgumentError, 'Shift amount is too large' if amount.abs >= size
78
259
 
79
260
  if amount.positive?
80
- replace(amount..-1, self[0...-amount]).replace(0...amount, fill)
261
+ filler = [fill] * amount
262
+ Vector.new(filler.concat(Array(self[0...-amount])))
81
263
  elsif amount.negative?
82
- replace(0...amount, self[-amount..]).replace(amount..-1, fill)
264
+ filler = [fill] * -amount
265
+ Vector.new(Array(self[-amount...]).concat(filler))
83
266
  else # amount == 0
84
267
  self
85
268
  end
@@ -87,13 +270,18 @@ module RedAmber
87
270
 
88
271
  # Split string Vector and returns Array of columns.
89
272
  #
90
- # @param sep [nil, String, Regexp] separater.
91
- # If separator is nil (or no argeument given), the column will be splitted by
92
- # Arrow's split function using any ASCII whitespace.
93
- # Otherwise sep will passed to String#split.
94
- # @param limit [Integer] maximum number to limit separation. Passed to String#split.
95
- # @return [Array<Vector>] an Array of Vectors.
96
- # @note nil will separated as nil's at same row. ex) `nil => [nil, nil]`
273
+ # @param sep [nil, String, Regexp]
274
+ # separator.
275
+ # If separator is nil (or no argeument given),
276
+ # the column will be splitted by Arrow's split function
277
+ # using any ASCII whitespace.
278
+ # Otherwise, sep will passed to String#split.
279
+ # @param limit [Integer]
280
+ # maximum number to limit separation. Passed to String#split.
281
+ # @return [Array<Vector>]
282
+ # an Array of Vectors.
283
+ # @note nil will separated as nil's at same row.
284
+ # ex) `nil => [nil, nil]`
97
285
  #
98
286
  def split_to_columns(sep = nil, limit = 0)
99
287
  l = split(sep, limit)
@@ -102,20 +290,25 @@ module RedAmber
102
290
 
103
291
  # Split string Vector and flatten into rows.
104
292
  #
105
- # @param sep [nil, String, Regexp] separater.
106
- # If separator is nil (or no argeument given), the column will be splitted by
107
- # Arrow's split function using any ASCII whitespace.
108
- # Otherwise sep will passed to String#split.
109
- # @param limit [Integer] maximum number to limit separation. Passed to String#split.
110
- # @return [Vector] a flatten Vector.
111
- # @note nil will separated as nil's at same row. ex) `nil => [nil, nil]`
293
+ # @param sep [nil, String, Regexp]
294
+ # separater.
295
+ # If separator is nil (or no argeument given),
296
+ # the column will be splitted by Arrow's split function
297
+ # using any ASCII whitespace.
298
+ # Otherwise, sep will passed to String#split.
299
+ # @param limit [Integer]
300
+ # maximum number to limit separation. Passed to String#split.
301
+ # @return [Vector]
302
+ # a flatten Vector.
303
+ # @note nil will separated as nil's at same row.
304
+ # ex) `nil => [nil, nil]`
112
305
  #
113
306
  def split_to_rows(sep = nil, limit = 0)
114
307
  l = split(sep, limit)
115
308
  l.list_flatten
116
309
  end
117
310
 
118
- # return element size Array for list Vector.
311
+ # Return element size Array for list Vector.
119
312
  #
120
313
  # @api private
121
314
  #
@@ -179,8 +372,10 @@ module RedAmber
179
372
  #
180
373
  # @param other [String, Vector]
181
374
  # merger from right. It will be broadcasted if it is a scalar String.
182
- # @param sep [String] separator.
183
- # @return [Vector] merged Vector
375
+ # @param sep [String]
376
+ # separator.
377
+ # @return [Vector]
378
+ # merged Vector
184
379
  #
185
380
  def merge(other, sep: ' ')
186
381
  if empty? || !string?
@@ -207,6 +402,53 @@ module RedAmber
207
402
  Vector.create(datum.value)
208
403
  end
209
404
 
405
+ # Concatenate other array-like to self.
406
+ #
407
+ # @param other [Vector, Array, Arrow::Array, Arrow::ChunkedArray]
408
+ # other array-like to concatenate.
409
+ # @return [Vector]
410
+ # concatenated Vector.
411
+ # @example Concatenate to string
412
+ # string_vector
413
+ #
414
+ # # =>
415
+ # #<RedAmber::Vector(:string, size=2):0x00000000000037b4>
416
+ # ["A", "B"]
417
+ #
418
+ # string_vector.concatenate([1, 2])
419
+ #
420
+ # # =>
421
+ # #<RedAmber::Vector(:string, size=4):0x0000000000003818>
422
+ # ["A", "B", "1", "2"]
423
+ #
424
+ # @example Concatenate to integer
425
+ # integer_vector
426
+ #
427
+ # # =>
428
+ # #<RedAmber::Vector(:uint8, size=2):0x000000000000382c>
429
+ # [1, 2]
430
+ #
431
+ # integer_vector.concatenate(["A", "B"])
432
+ # # =>
433
+ # #<RedAmber::Vector(:uint8, size=4):0x0000000000003840>
434
+ # [1, 2, 65, 66]
435
+ #
436
+ # @since 0.4.0
437
+ #
438
+ def concatenate(other)
439
+ concatenated_array =
440
+ case other
441
+ when Vector
442
+ data + other.data
443
+ when Arrow::ChunkedArray
444
+ data + other.pack
445
+ else
446
+ data + other
447
+ end
448
+ Vector.create(concatenated_array)
449
+ end
450
+ alias_method :concat, :concatenate
451
+
210
452
  private
211
453
 
212
454
  # Replace elements selected with a boolean mask
@@ -222,7 +464,8 @@ module RedAmber
222
464
  # - `replacer.size` must be equal to `mask.count(true)`.
223
465
  # - Types of self and replacer must be same
224
466
  #
225
- # @return [Vector] Replaced vector.
467
+ # @return [Vector]
468
+ # replaced vector.
226
469
  # Type of returned Vector is upcasted if needed.
227
470
  #
228
471
  def replace_with(boolean_mask, replacer)
@@ -241,7 +484,8 @@ module RedAmber
241
484
  # Boolean mask which indicates the position to be replaced.
242
485
  # - Position with true will be replaced by nil
243
486
  # - Position with nil will remain as nil.
244
- # @return [Vector] Replaced vector.
487
+ # @return [Vector]
488
+ # replaced vector.
245
489
  #
246
490
  def replace_to_nil(boolean_mask)
247
491
  nil_array = data.class.new([nil] * size) # Casted nil Array
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RedAmber
4
- VERSION = '0.3.0'
4
+ # Library version
5
+ VERSION = '0.4.1'
5
6
  end
data/lib/red_amber.rb CHANGED
@@ -14,20 +14,32 @@ require_relative 'red_amber/data_frame_selectable'
14
14
  require_relative 'red_amber/data_frame_variable_operation'
15
15
  require_relative 'red_amber/data_frame'
16
16
  require_relative 'red_amber/group'
17
- require_relative 'red_amber/vector_functions'
17
+ require_relative 'red_amber/subframes'
18
+ require_relative 'red_amber/vector_aggregation'
19
+ require_relative 'red_amber/vector_binary_element_wise'
20
+ require_relative 'red_amber/vector_unary_element_wise'
18
21
  require_relative 'red_amber/vector_updatable'
19
22
  require_relative 'red_amber/vector_selectable'
20
23
  require_relative 'red_amber/vector'
21
24
  require_relative 'red_amber/version'
22
25
 
23
26
  module RedAmber
27
+ # Generic error
24
28
  class Error < StandardError; end
25
29
 
30
+ # Argument error in DataFrame
26
31
  class DataFrameArgumentError < ArgumentError; end
32
+ # Data type error in DataFrame
27
33
  class DataFrameTypeError < TypeError; end
28
34
 
35
+ # Argument error in Vector
29
36
  class VectorArgumentError < ArgumentError; end
37
+ # Data type error in DataFrame
30
38
  class VectorTypeError < TypeError; end
31
39
 
40
+ # Argument error in Group
32
41
  class GroupArgumentError < ArgumentError; end
42
+
43
+ # Argument error in SubFrames
44
+ class SubFramesArgumentError < ArgumentError; end
33
45
  end
data/red_amber.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ['heronshoes877@gmail.com']
10
10
 
11
11
  spec.summary = 'Simple dataframe library for Ruby'
12
- spec.description = 'RedAmber is a simple dataframe library' \
12
+ spec.description = 'RedAmber is a simple dataframe library ' \
13
13
  'inspired by Rover-df and powered by Red Arrow.'
14
14
  spec.homepage = 'https://github.com/heronshoes/red_amber'
15
15
  spec.license = 'MIT'
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_dependency 'red-arrow', '~> 10.0.0'
34
+ spec.add_dependency 'red-arrow', '~> 11.0.0'
35
35
 
36
36
  # Development dependency has gone to the Gemfile (rubygems/bundler#7237)
37
37
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red_amber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hirokazu SUZUKI (heronshoes)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-17 00:00:00.000000000 Z
11
+ date: 2023-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: red-arrow
@@ -16,15 +16,15 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 10.0.0
19
+ version: 11.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 10.0.0
27
- description: RedAmber is a simple dataframe libraryinspired by Rover-df and powered
26
+ version: 11.0.0
27
+ description: RedAmber is a simple dataframe library inspired by Rover-df and powered
28
28
  by Red Arrow.
29
29
  email:
30
30
  - heronshoes877@gmail.com
@@ -54,6 +54,8 @@ files:
54
54
  - benchmark/vector.yml
55
55
  - doc/CODE_OF_CONDUCT.md
56
56
  - doc/DataFrame.md
57
+ - doc/DataFrame_Comparison.md
58
+ - doc/SubFrames.md
57
59
  - doc/Vector.md
58
60
  - doc/image/arrow_table_new.png
59
61
  - doc/image/basic_verbs.png
@@ -66,7 +68,6 @@ files:
66
68
  - doc/image/dataframe/remove.png
67
69
  - doc/image/dataframe/rename.png
68
70
  - doc/image/dataframe/rename_operation.png
69
- - doc/image/dataframe/reshaping_DataFrames.png
70
71
  - doc/image/dataframe/set_and_bind.png
71
72
  - doc/image/dataframe/slice.png
72
73
  - doc/image/dataframe/slice_operation.png
@@ -85,6 +86,7 @@ files:
85
86
  - doc/image/vector/unary_element_wise.png
86
87
  - doc/tdr.md
87
88
  - doc/tdr_ja.md
89
+ - doc/yard-templates/default/fulldoc/html/css/common.css
88
90
  - lib/red-amber.rb
89
91
  - lib/red_amber.rb
90
92
  - lib/red_amber/data_frame.rb
@@ -98,9 +100,12 @@ files:
98
100
  - lib/red_amber/group.rb
99
101
  - lib/red_amber/helper.rb
100
102
  - lib/red_amber/refinements.rb
103
+ - lib/red_amber/subframes.rb
101
104
  - lib/red_amber/vector.rb
102
- - lib/red_amber/vector_functions.rb
105
+ - lib/red_amber/vector_aggregation.rb
106
+ - lib/red_amber/vector_binary_element_wise.rb
103
107
  - lib/red_amber/vector_selectable.rb
108
+ - lib/red_amber/vector_unary_element_wise.rb
104
109
  - lib/red_amber/vector_updatable.rb
105
110
  - lib/red_amber/version.rb
106
111
  - red_amber.gemspec
@@ -128,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
133
  - !ruby/object:Gem::Version
129
134
  version: '0'
130
135
  requirements: []
131
- rubygems_version: 3.3.26
136
+ rubygems_version: 3.4.1
132
137
  signing_key:
133
138
  specification_version: 4
134
139
  summary: Simple dataframe library for Ruby