class TestFactorGraphCreation(unittest.TestCase): def setUp(self): self.graph = FactorGraph() def test_class_init_without_data(self): self.assertIsInstance(self.graph, FactorGraph) def test_class_init_data_string(self): self.graph = FactorGraph([('a', 'phi1'), ('b', 'phi1')]) self.assertListEqual(sorted(self.graph.nodes()), ['a', 'b', 'phi1']) self.assertListEqual(hf.recursive_sorted(self.graph.edges()), [['a', 'phi1'], ['b', 'phi1']]) def test_add_single_node(self): self.graph.add_node('phi1') self.assertEqual(self.graph.nodes(), ['phi1']) def test_add_multiple_nodes(self): self.graph.add_nodes_from(['a', 'b', 'phi1']) self.assertListEqual(sorted(self.graph.nodes()), ['a', 'b', 'phi1']) def test_add_single_edge(self): self.graph.add_edge('a', 'phi1') self.assertListEqual(sorted(self.graph.nodes()), ['a', 'phi1']) self.assertListEqual(hf.recursive_sorted(self.graph.edges()), [['a', 'phi1']]) def test_add_multiple_edges(self): self.graph.add_edges_from([('a', 'phi1'), ('b', 'phi1')]) self.assertListEqual(sorted(self.graph.nodes()), ['a', 'b', 'phi1']) self.assertListEqual(hf.recursive_sorted(self.graph.edges()), [['a', 'phi1'], ['b', 'phi1']]) def test_add_self_loop_raises_error(self): self.assertRaises(ValueError, self.graph.add_edge, 'a', 'a') def test_add_edge_between_variable_nodes_raises_error(self): self.graph.add_edges_from([('a', 'phi1'), ('b', 'phi1')]) self.assertRaises(ValueError, self.graph.add_edge, 'a', 'b') def tearDown(self): del self.graph
class TestFactorGraphCreation(unittest.TestCase): def setUp(self): self.graph = FactorGraph() def test_class_init_without_data(self): self.assertIsInstance(self.graph, FactorGraph) def test_class_init_data_string(self): self.graph = FactorGraph([("a", "phi1"), ("b", "phi1")]) self.assertListEqual(sorted(self.graph.nodes()), ["a", "b", "phi1"]) self.assertListEqual( hf.recursive_sorted(self.graph.edges()), [["a", "phi1"], ["b", "phi1"]] ) def test_add_single_node(self): self.graph.add_node("phi1") self.assertEqual(list(self.graph.nodes()), ["phi1"]) def test_add_multiple_nodes(self): self.graph.add_nodes_from(["a", "b", "phi1"]) self.assertListEqual(sorted(self.graph.nodes()), ["a", "b", "phi1"]) def test_add_single_edge(self): self.graph.add_edge("a", "phi1") self.assertListEqual(sorted(self.graph.nodes()), ["a", "phi1"]) self.assertListEqual(hf.recursive_sorted(self.graph.edges()), [["a", "phi1"]]) def test_add_multiple_edges(self): self.graph.add_edges_from([("a", "phi1"), ("b", "phi1")]) self.assertListEqual(sorted(self.graph.nodes()), ["a", "b", "phi1"]) self.assertListEqual( hf.recursive_sorted(self.graph.edges()), [["a", "phi1"], ["b", "phi1"]] ) def test_add_self_loop_raises_error(self): self.assertRaises(ValueError, self.graph.add_edge, "a", "a") def tearDown(self): del self.graph
def compute_pk(self, type_list, fid): assert len(type_list) == 5, print("ComputePk Error: number of type_list should be 5") constraint_name = ['m', 'r', 's', 'd', 'v'] ''' m, r, s, d, v = type_list p_m, p_r, p_s, p_d, p_v = self.p_observation p_ktox, p_xtok = self.p_implication p_ktom, p_ktor, p_ktos, p_ktod, p_ktov = p_ktox p_mtok, p_rtok, p_stok, p_dtok, p_vtok = p_xtok ''' fg = FactorGraph() fg.add_node('k') for i in range(len(type_list)): if type_list[i] == 0: fg = self.add_constraints_k2x_x2k(fg, self.p_observation[fid][i], self.p_implication[fid][0][i], self.p_implication[fid][1][i], constraint_name[i]) elif type_list[i] == 1: fg = self.add_constraints_k2x(fg, self.p_observation[fid][i], self.p_implication[fid][0][i], constraint_name[i]) elif type_list[i] == 2: fg = self.add_constraints_x2k(fg, self.p_observation[fid][i], self.p_implication[fid][1][i], constraint_name[i]) ''' if m == 0: fg = add_constraints_kv_vk(fg, p_m, p_ktom, p_mtok, 'm') elif m == 1: fg = add_constraints_kv(fg, p_m, p_mtok, 'm') elif m == 2: fg = add_constraints_vk(fg, p_m, p_mtok, 'm') if r == 0: fg = add_constraints_kv_vk(fg, p_r, p_ktor, p_rtok, 'r') elif r == 1: fg = add_constraints_kv(fg, p_r, p_ktor, 'r') elif r == 2: fg = add_constraints_vk(fg, p_r, p_rtok, 'r') if s == 0: fg = add_constraints_kv_vk(fg, p_s, p_ktos, p_stok, 's') elif s == 1: fg = add_constraints_kv(fg, p_s, p_ktos, 's') elif s == 2: fg = add_constraints_vk(fg, p_s, p_stok, 's') if d == 0: fg = add_constraints_kv_vk(fg, p_d, p_ktod, p_dtok, 'd') elif d == 1: fg = add_constraints_kv(fg, p_d, p_ktod, 'd') elif d == 2: fg = add_constraints_vk(fg, p_d, p_dtok, 'd') if v == 0: fg = add_constraints_kv_vk(fg, p_v, p_ktov, p_vtok, 'v') elif v == 1: fg = add_constraints_kv(fg, p_v, p_ktov, 'v') elif v == 2: fg = add_constraints_vk(fg, p_v, p_vtok, 'v') ''' bp = BeliefPropagation(fg) #result = bp.query(variables=['k'])['k'] #result = bp.query(variables=['k'], joint=False)['k'] result = bp.query(variables=['k']) result.normalize() #print(result) return result.values[1]
import numpy as np from pgmpy.models import FactorGraph from pgmpy.factors.discrete import DiscreteFactor from pgmpy.inference import BeliefPropagation G = FactorGraph() G.add_node(0) G.add_node(1) G.add_node(2) f01 = DiscreteFactor([0, 1], [2, 2], np.random.rand(4)) f02 = DiscreteFactor([0, 2], [2, 2], np.random.rand(4)) f12 = DiscreteFactor([1, 2], [2, 2], np.random.rand(4)) G.add_factors(f01) G.add_factors(f02) G.add_factors(f12) G.add_edges_from([(0, f01), (1, f01), (0, f02), (2, f02), (1, f12), (2, f12)]) bp = BeliefPropagation(G) bp.calibrate()