using Stochy, Stochy.GadflySupport, Gadfly, DataStructures @pp function rainprior() flip(0.3) end @pp function sprinklerprior() flip(0.2) end @pp function wetgrassprior(rain, sprinkler) flip( !rain && !sprinkler ? 0.05 : !rain && sprinkler ? 0.9 : rain && !sprinkler ? 0.9 : rain && sprinkler ? 0.95 : :unreachable) end @pp function model() local r = rainprior(), s = sprinklerprior(), w = wetgrassprior(r,s) tuple(r,s,w) end @pp model() # Generate a sample from the model. joint = @pp enum() do model() end bar(joint) prior = @pp enum() do local triple = model() triple[1] # rain end bar(prior) d1 = @pp enum() do local triple = model() factor(triple[3] ? 0 : -Inf) # Observe the grass is wet. triple[1] end bar(d1) d2 = @pp enum() do local triple = model() factor(triple[3] && triple[2] ? 0 : -Inf) # Also observe that the sprinkler is on. triple[1] end bar(d2)