lib/bayesnet/node.rb in bayesnet-0.0.3 vs lib/bayesnet/node.rb in bayesnet-0.1.0

- old
+ new

@@ -22,22 +22,34 @@ end end when Array raise Error, "DSL error, #values requires a &block when first argument is an Array" unless block @values = hash_or_array + @factor = block + end + end + + def resolve_factor(parent_nodes) + @parent_nodes = parent_nodes + if @factor.is_a?(Proc) + proc = @factor node = self @factor = Factor.build do scope node.name => node.values node.parent_nodes.each do |parent_node_name, parent_node| scope parent_node_name => parent_node.values end end - instance_eval(&block) + instance_eval(&proc) end end def distributions(&block) instance_eval(&block) + end + + def parameters + (values.size - 1) * parent_nodes.values.reduce(1) { |mul, n| mul * n.values.size } end def as(distribution, given:) @values.zip(distribution).each do |value, probability| @factor.val [value] + given + [probability]