Class: ObjectTable::BasicGrid

Inherits:
Hash
  • Object
show all
Defined in:
lib/object_table/basic_grid.rb

Constant Summary collapse

ARRAY_LIKE =
[Array, Range]

Instance Method Summary collapse

Instance Method Details

#_ensure_uniform_columns!(rows = nil) ⇒ Object

def self.[](*args)

  grid = super
  grid._ensure_uniform_columns!
end


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/object_table/basic_grid.rb', line 11

def _ensure_uniform_columns!(rows = nil)
  arrays, scalars = partition{|k, v| ARRAY_LIKE.any?{|cls| v.is_a?(cls)} }
  narrays, scalars = scalars.partition{|k, v| v.is_a?(NArray) }

  unique_rows = arrays.map{|k, v| v.count}
  unique_rows += narrays.map{|k, v| v.shape.last or 0}
  unique_rows = unique_rows.uniq

  if rows
    raise "Differing number of rows: #{unique_rows}" unless unique_rows.empty? or unique_rows == [rows]
  else
    raise "Differing number of rows: #{unique_rows}" if unique_rows.length > 1
    rows = (unique_rows[0] or 1)
  end

  scalars.each do |k, v|
    self[k] = [v] * rows
  end

  self
end