def test_simple_serde(): """ Tests join tree serde with only 1 clique. :return: None. """ a = BbnNode(Variable(0, 'a', ['t', 'f']), [0.2, 0.8]) b = BbnNode(Variable(1, 'b', ['t', 'f']), [0.1, 0.9, 0.9, 0.1]) bbn = Bbn().add_node(a).add_node(b) \ .add_edge(Edge(a, b, EdgeType.DIRECTED)) lhs = InferenceController.apply(bbn) d = JoinTree.to_dict(lhs) rhs = JoinTree.from_dict(d) rhs = InferenceController.apply_from_serde(rhs) lhs_pot = [lhs.get_bbn_potential(n) for n in lhs.get_bbn_nodes()] rhs_pot = [rhs.get_bbn_potential(n) for n in rhs.get_bbn_nodes()] lhs_pot = Potential.to_dict(lhs_pot) rhs_pot = Potential.to_dict(rhs_pot) assert len(lhs_pot) == len(rhs_pot)
import json from pybbn.graph.dag import Bbn from pybbn.graph.edge import EdgeType, Edge from pybbn.graph.jointree import JoinTree from pybbn.graph.node import BbnNode from pybbn.graph.variable import Variable from pybbn.pptc.inferencecontroller import InferenceController a = BbnNode(Variable(0, 'a', ['t', 'f']), [0.2, 0.8]) b = BbnNode(Variable(1, 'b', ['t', 'f']), [0.1, 0.9, 0.9, 0.1]) bbn = Bbn().add_node(a).add_node(b) \ .add_edge(Edge(a, b, EdgeType.DIRECTED)) jt = InferenceController.apply(bbn) with open('simple-join-tree.json', 'w') as f: d = JoinTree.to_dict(jt) j = json.dumps(d, sort_keys=True, indent=2) f.write(j)
def test_to_dict(): """ Tests serializing join tree to dictionary. :return: None. """ n0 = BbnNode(Variable(0, 'n0', ['t', 'f']), [0.2, 0.8]) n1 = BbnNode(Variable(1, 'n1', ['t', 'f']), [0.9, 0.1, 0.9, 0.1]) n2 = BbnNode(Variable(2, 'n2', ['t', 'f']), [0.6, 0.4, 0.4, 0.6]) bbn = Bbn().add_node(n0).add_node(n1).add_node(n2) \ .add_edge(Edge(n0, n1, EdgeType.DIRECTED)) \ .add_edge(Edge(n1, n2, EdgeType.DIRECTED)) jt = InferenceController.apply(bbn) d = JoinTree.to_dict(jt) lhs = json.dumps(d, sort_keys=True, indent=2) rhs = """{ "bbn_nodes": { "0": { "probs": [ 0.2, 0.8 ], "variable": { "id": 0, "name": "n0", "values": [ "t", "f" ] } }, "1": { "probs": [ 0.9, 0.1, 0.9, 0.1 ], "variable": { "id": 1, "name": "n1", "values": [ "t", "f" ] } }, "2": { "probs": [ 0.6, 0.4, 0.4, 0.6 ], "variable": { "id": 2, "name": "n2", "values": [ "t", "f" ] } } }, "jt": { "edges": [ "0-1-1-1-2" ], "nodes": { "0-1": { "node_ids": [ 0, 1 ], "type": "clique" }, "0-1-1-1-2": { "left": "0-1", "right": "1-2", "type": "sepset" }, "1-2": { "node_ids": [ 1, 2 ], "type": "clique" } }, "parent_info": { "0": [], "1": [ 0 ], "2": [ 1 ] } } }""" assert lhs == rhs