Module: ObjectTable::Stacker::ClassMethods
- Defined in:
- lib/object_table/stacker.rb
Instance Method Summary collapse
- #_process_stackable_grid(grid, keys) ⇒ Object
- #_stack_segments(segments) ⇒ Object
- #stack(*grids) ⇒ Object
Instance Method Details
#_process_stackable_grid(grid, keys) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/object_table/stacker.rb', line 42 def _process_stackable_grid(grid, keys) case grid when ObjectTable::TableMethods grid = grid.columns when ObjectTable::BasicGrid grid._ensure_uniform_columns! end raise "Don't know how to join a #{grid.class}" unless grid.is_a?(ObjectTable::BasicGrid) return if grid.empty? raise 'Mismatch in column names' unless !keys or ( (keys - grid.keys).empty? and (grid.keys - keys).empty? ) return grid end |
#_stack_segments(segments) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/object_table/stacker.rb', line 27 def _stack_segments(segments) if segments.all?{|seg| seg.is_a? Array} column = NArray.to_na(segments.flatten(1)) elsif segments.all?{|seg| seg.is_a? NArray} and segments.map{|seg| seg.shape}.uniq.length == 1 column = NArray.to_na(segments) column = column.reshape(*column.shape[0...-2], column.shape[-2] * column.shape[-1]) else segments.map!{|seg| NArray.to_na seg} column = ObjectTable::Column.stack(*segments) end end |
#stack(*grids) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/object_table/stacker.rb', line 9 def stack(*grids) keys = nil grids = grids.map do |grid| grid = _process_stackable_grid(grid, keys) keys ||= grid.keys if grid grid end.compact return self.new if grids.empty? result = keys.map do |k| segments = grids.map{|grid| grid[k]} [k, _stack_segments(segments)] end self.new(ObjectTable::BasicGrid[result]) end |