lib/bayesnet/node.rb in bayesnet-0.1.0 vs lib/bayesnet/node.rb in bayesnet-0.6.0
- old
+ new
@@ -4,12 +4,14 @@
def initialize(name, parent_nodes)
@name = name
@parent_nodes = parent_nodes
@values = []
+ @factor = Factor.new
end
+ # +++ Node DSL +++
def values(hash_or_array = nil, &block)
case hash_or_array
when NilClass
@values
when Hash
@@ -26,10 +28,25 @@
@values = hash_or_array
@factor = block
end
end
+ def distributions(&block)
+ instance_eval(&block)
+ end
+ # --- Node DSL ---
+
+ 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]
+ end
+ end
+
def resolve_factor(parent_nodes)
@parent_nodes = parent_nodes
if @factor.is_a?(Proc)
proc = @factor
node = self
@@ -41,20 +58,7 @@
end
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]
- end
- end
end
end