# it shows how to build a tree with probabilities


from bayesnet.jayes import BayesNode,BayesNet
from bayesnet.jayes.inference.jtree import JunctionTreeAlgorithm
from  java.util import *

net = BayesNet();
a = net.createNode("a");
a.addOutcomes("true", "false");
a.setProbabilities(0.2, 0.8);

b = net.createNode("b");
b.addOutcomes("one", "two", "three");
b.setParents(Arrays.asList(a));

b.setProbabilities(
  0.1, 0.4, 0.5, # a == true
  0.3, 0.4, 0.3, # a == false
);


c=net.createNode("c");
c.addOutcomes("true", "false");
c.setParents(Arrays.asList(a, b));
c.setProbabilities(
  #  a == true
  0.1, 0.9,  # b == one
  0.0, 1.0,  # b == two
  0.5, 0.5,  # b == three
  # a == false
  0.2, 0.8,  # b == one
  0.0, 1.0,  # b == two
  0.7, 0.3,  # b == three
)


inferer=JunctionTreeAlgorithm()
inferer.setNetwork(net)

evidence = HashMap()
evidence.put(a, "false");
evidence.put(b, "three");
inferer.setEvidence(evidence);
beliefsC = inferer.getBeliefs(c);
print "P(c | a = false, b =three)=",beliefsC.tolist()
