module Cauldron::DynamicOperatorModule

Public Instance Methods

clone_statement() click to toggle source
# File lib/cauldron/dynamic_operator_module.rb, line 18
def clone_statement
  # TODO Need to clone the sexp methods
  # o = DynamicOperator.new(@information, @sexp_methods)
  # o.instance_eval(Sorcerer.source(@sexp_methods, indent: true))
  # o
  self.class.new(@indexes.clone)
end
close() click to toggle source
# File lib/cauldron/dynamic_operator_module.rb, line 14
def close
  @closed = true
end
context_realizable?(context) click to toggle source

def extend_actualized_composite(x, container, examples, point)

cloned_container = container.clone_solution
cloned_container.add_statement_at(x, point)
cloned_container
Cauldron::ActualizedComposite.new(cloned_container, examples)

end

# File lib/cauldron/dynamic_operator_module.rb, line 43
def context_realizable?(context)
  
  vars = context.keys.select {|x| x.match(/var\d/) }
  var_names = vars.collect(&:to_s)

  first_variable = 'var'+@indexes[0].to_s
  
  # a = %Q{
  # def function(var0)
  #   #{Sorcerer.source(to_sexp(var_names), indent: true)}
  # end
  # }
  # a = %Q{
  # def function(var0)
  #   #{Sorcerer.source(to_sexp(Cauldron::Scope.new(var_names), []), indent: true)}
  # end
  # }
  a = %Q{
  def function(#{first_variable})
    #{Sorcerer.source(to_sexp(Cauldron::Scope.new(var_names), []), indent: true)}
  end
  }        

  o = Object.new
  o.instance_eval(a)

  begin
    #o.function(*vars.collect {|x| context[x] })
    o.function context[first_variable.to_sym]
  rescue NoMethodError => e
    return false
  rescue StandardError => e
    puts e
    return false
  end
  return true
  


  #o.function(*params.values)

  # a = %Q{
  # def function(var0)
  #   #{Sorcerer.source(to_sexp(Cauldron::Scope.new(['var0'])), indent: true)}
  # end
  # }
end
indexes=(value) click to toggle source
# File lib/cauldron/dynamic_operator_module.rb, line 9
def indexes=(value)
  raise StandardError.new('') if @closed
  @indexes = value
end
realizable?(histories, point) click to toggle source

def to_tracking_sexp(operators, scope, caret)

raise StandardError.new('statement has been instance closed') unless @closed
to_sexp(scope)

end

# File lib/cauldron/dynamic_operator_module.rb, line 114
def realizable?(histories, point)
  parameters = histories.variable_permutations(@indexes.length)
  parameters.each do |params|
    begin
      realize(params)
    rescue => e
      puts e
      failed_uses.push(histories)
      return false
    end
  end
  true          
rescue => e
  puts e
  puts e.backtrace
  # TODO GENERATE RSPEC TEST with arguments
end
realize(params) click to toggle source
# File lib/cauldron/dynamic_operator_module.rb, line 132
def realize(params)
  o = Object.new
  o.instance_eval(rip2)
  o.function(*params.values)
end
rip(composite,examples) click to toggle source
# File lib/cauldron/dynamic_operator_module.rb, line 100
def rip(composite,examples)
  Ripper::SexpBuilder.new(
    %Q{
    def function(var0)
      #{composite.to_ruby(examples.scope)}
    end
  }).parse      
end
uses_constants?() click to toggle source
# File lib/cauldron/dynamic_operator_module.rb, line 5
def uses_constants?
  @information[:constants]
end
write_to_file(filename) click to toggle source
# File lib/cauldron/dynamic_operator_module.rb, line 91
def write_to_file(filename)
  File.open( File.join('tmp',filename), 'w+') do |file|
    file << "class DynamicOperator"+"\n"
    file << Sorcerer.source(@sexp_methods, indent: true)
    file << "\n"
    file << "end"
  end
end