class Malge::MultiVariableFunction

Constants

TOLERANCE

Attributes

data[R]

Public Class Methods

new(data) click to toggle source

data example:

[
  {x => 0.0, y => 0.1, z => 0.0},
  {x => 1.0, y => 1.1, z => 1.0},
  {x => 2.0, y => 2.1, z => 3.0},
]
# File lib/malge/multivariablefunction.rb, line 19
def initialize(data)
  @data = data
end

Public Instance Methods

abstract(conditions) click to toggle source
# File lib/malge/multivariablefunction.rb, line 31
def abstract(conditions)
  result = Marshal.load(Marshal.dump(self))
  result.abstract!(conditions)
  result
end
abstract!(conditions) click to toggle source

Return array of data which matches the hash.

# File lib/malge/multivariablefunction.rb, line 24
def abstract!(conditions)
  results = @data.select do |coords|
    match_condition?(coords, conditions)
  end
  @data = results
end
data_pairs(key0, key1) click to toggle source

return 2-dimensional array. [

[x0, y0],
[x1, y1],
:

]

# File lib/malge/multivariablefunction.rb, line 79
def data_pairs(key0, key1)
  results = []
  @data.each do |datum|
    results << [datum[key0], datum[key1]]
  end
  results
end
delete_axis(axis) click to toggle source
# File lib/malge/multivariablefunction.rb, line 67
def delete_axis(axis)
  result = Marshal.load(Marshal.dump(self))
  result.delete_axis!(axis)
  result
end
delete_axis!(axis) click to toggle source
# File lib/malge/multivariablefunction.rb, line 61
def delete_axis!(axis)
  @data.each do |datum|
    datum.delete axis
  end
end
unite_axes(keys, new_key = nil) click to toggle source
# File lib/malge/multivariablefunction.rb, line 55
def unite_axes(keys, new_key = nil)
  result = Marshal.load(Marshal.dump(self))
  result.unite_axes!(keys, new_key)
  result
end
unite_axes!(keys, new_key = nil) click to toggle source

unite axes with the same value. keys : [:a, :b] new_key : default is keys

# File lib/malge/multivariablefunction.rb, line 40
def unite_axes!(keys, new_key = nil)
  new_key ||= keys[0]
  results = []
  @data.each do |datum|
    new_datum = Marshal.load(Marshal.dump(datum))
    if same?(new_datum, keys)
      val = new_datum[keys[0]]
      keys.each {|key| new_datum.delete(key) }
      new_datum[new_key] = val
      results << new_datum
    end
  end
  @data = results
end

Private Instance Methods

match_condition?(datum, conditions) click to toggle source
# File lib/malge/multivariablefunction.rb, line 99
def match_condition?(datum, conditions)
  conditions.each do |key, val|
    return false unless datum[key] == val
  end
end
same?(datum, keys, tolerance = TOLERANCE) click to toggle source

if when the same value among keys, return true. if not, return false.

# File lib/malge/multivariablefunction.rb, line 91
def same?(datum, keys, tolerance = TOLERANCE)
  ref = datum[keys[0]]
  keys.each do |key|
    return false unless ref.to_f.equal_in_delta?(datum[key].to_f, tolerance)
  end
  return true
end