Ejemplo n.º 1
0
    def test_copy_with_factors(self):
        self.graph.add_edges_from([[('a', 'b'), ('b', 'c')]])
        phi1 = DiscreteFactor(['a', 'b'], [2, 2], np.random.rand(4))
        phi2 = DiscreteFactor(['b', 'c'], [2, 2], np.random.rand(4))
        self.graph.add_factors(phi1, phi2)
        graph_copy = self.graph.copy()

        self.assertIsInstance(graph_copy, JunctionTree)
        self.assertIsNot(self.graph, graph_copy)
        self.assertEqual(hf.recursive_sorted(self.graph.nodes()),
                         hf.recursive_sorted(graph_copy.nodes()))
        self.assertEqual(hf.recursive_sorted(self.graph.edges()),
                         hf.recursive_sorted(graph_copy.edges()))
        self.assertTrue(graph_copy.check_model())
        self.assertEqual(self.graph.get_factors(), graph_copy.get_factors())

        self.graph.remove_factors(phi1, phi2)
        self.assertTrue(phi1 not in self.graph.factors
                        and phi2 not in self.graph.factors)
        self.assertTrue(phi1 in graph_copy.factors
                        and phi2 in graph_copy.factors)

        self.graph.add_factors(phi1, phi2)
        self.graph.factors[0] = DiscreteFactor(['a', 'b'], [2, 2],
                                               np.random.rand(4))
        self.assertNotEqual(self.graph.get_factors()[0],
                            graph_copy.get_factors()[0])
        self.assertNotEqual(self.graph.factors, graph_copy.factors)
Ejemplo n.º 2
0
 def test_add_edge_string(self):
     self.graph.add_edge('d', 'e')
     self.assertListEqual(sorted(self.graph.nodes()), ['d', 'e'])
     self.assertListEqual(hf.recursive_sorted(self.graph.edges()),
                          [['d', 'e']])
     self.graph.add_nodes_from(['a', 'b', 'c'])
     self.graph.add_edge('a', 'b')
     self.assertListEqual(hf.recursive_sorted(self.graph.edges()),
                          [['a', 'b'], ['d', 'e']])
Ejemplo n.º 3
0
 def test_add_edges_from_string(self):
     self.G.add_edges_from([('a', 'b'), ('b', 'c')])
     self.assertListEqual(sorted(self.G.nodes()), ['a', 'b', 'c'])
     self.assertListEqual(hf.recursive_sorted(self.G.edges()),
                          [['a', 'b'], ['b', 'c']])
     self.G.add_nodes_from(['d', 'e', 'f'])
     self.G.add_edges_from([('d', 'e'), ('e', 'f')])
     self.assertListEqual(sorted(self.G.nodes()),
                          ['a', 'b', 'c', 'd', 'e', 'f'])
     self.assertListEqual(
         hf.recursive_sorted(self.G.edges()),
         hf.recursive_sorted([('a', 'b'), ('b', 'c'), ('d', 'e'),
                              ('e', 'f')]))
Ejemplo n.º 4
0
 def test_add_single_edge(self):
     self.graph.add_edge(('a', 'b'), ('b', 'c'))
     self.assertListEqual(hf.recursive_sorted(self.graph.nodes()),
                          [['a', 'b'], ['b', 'c']])
     self.assertListEqual(
         sorted([node for edge in self.graph.edges() for node in edge]),
         [('a', 'b'), ('b', 'c')])
Ejemplo n.º 5
0
 def test_moralize(self):
     self.network.add_edges_from(([(('D', 0), ('G', 0)),
                                   (('I', 0), ('G', 0))]))
     moral_graph = self.network.moralize()
     self.assertListEqual(hf.recursive_sorted(moral_graph.edges()),
                          [[('D', 0),
                            ('G', 0)], [('D', 0),
                                        ('I', 0)], [('D', 1), ('G', 1)],
                           [('D', 1),
                            ('I', 1)], [('G', 0),
                                        ('I', 0)], [('G', 1), ('I', 1)]])
Ejemplo n.º 6
0
 def test_triangulation_h6_create_new(self):
     self.graph.add_edges_from([('a', 'b'), ('b', 'c'), ('c', 'd'),
                                ('d', 'a')])
     phi1 = DiscreteFactor(['a', 'b'], [2, 3], np.random.rand(6))
     phi2 = DiscreteFactor(['b', 'c'], [3, 4], np.random.rand(12))
     phi3 = DiscreteFactor(['c', 'd'], [4, 5], np.random.rand(20))
     phi4 = DiscreteFactor(['d', 'a'], [5, 2], np.random.random(10))
     self.graph.add_factors(phi1, phi2, phi3, phi4)
     H = self.graph.triangulate(heuristic='H6', inplace=True)
     self.assertListEqual(
         hf.recursive_sorted(H.edges()),
         [['a', 'b'], ['a', 'd'], ['b', 'c'], ['b', 'd'], ['c', 'd']])
Ejemplo n.º 7
0
    def test_to_junction_tree(self):
        phi1 = DiscreteFactor(['a', 'b'], [2, 2], np.random.rand(4))
        phi2 = DiscreteFactor(['b', 'c'], [2, 2], np.random.rand(4))
        self.graph.add_edges_from([('a', phi1), ('b', phi1), ('b', phi2),
                                   ('c', phi2)])

        self.graph.add_factors(phi1, phi2)
        jt = self.graph.to_junction_tree()
        self.assertIsInstance(jt, JunctionTree)
        self.assertListEqual(hf.recursive_sorted(jt.nodes()),
                             [['a', 'b'], ['b', 'c']])
        self.assertEqual(len(jt.edges()), 1)
Ejemplo n.º 8
0
 def test_to_markov_model(self):
     phi1 = DiscreteFactor(['a', 'b'], [2, 2], np.random.rand(4))
     phi2 = DiscreteFactor(['b', 'c'], [2, 2], np.random.rand(4))
     self.graph.add_edges_from([('a', phi1), ('b', phi1), ('b', phi2),
                                ('c', phi2)])
     self.graph.add_factors(phi1, phi2)
     mm = self.graph.to_markov_model()
     self.assertIsInstance(mm, MarkovModel)
     self.assertListEqual(sorted(mm.nodes()), ['a', 'b', 'c'])
     self.assertListEqual(hf.recursive_sorted(mm.edges()),
                          [['a', 'b'], ['b', 'c']])
     self.assertListEqual(sorted(mm.get_factors(), key=lambda x: x.scope()),
                          [phi1, phi2])
Ejemplo n.º 9
0
    def test_junction_tree(self):
        self.graph.add_edges_from([('a', 'b'), ('b', 'c'), ('c', 'd'),
                                   ('d', 'a')])
        phi1 = DiscreteFactor(['a', 'b'], [2, 3], np.random.rand(6))
        phi2 = DiscreteFactor(['b', 'c'], [3, 4], np.random.rand(12))
        phi3 = DiscreteFactor(['c', 'd'], [4, 5], np.random.rand(20))
        phi4 = DiscreteFactor(['d', 'a'], [5, 2], np.random.random(10))
        self.graph.add_factors(phi1, phi2, phi3, phi4)

        junction_tree = self.graph.to_junction_tree()
        self.assertListEqual(hf.recursive_sorted(junction_tree.nodes()),
                             [['a', 'b', 'd'], ['b', 'c', 'd']])
        self.assertEqual(len(junction_tree.edges()), 1)
Ejemplo n.º 10
0
    def test_junction_tree_single_clique(self):

        self.graph.add_edges_from([('x1', 'x2'), ('x2', 'x3'), ('x1', 'x3')])
        phi = [
            DiscreteFactor(edge, [2, 2], np.random.rand(4))
            for edge in self.graph.edges()
        ]
        self.graph.add_factors(*phi)

        junction_tree = self.graph.to_junction_tree()
        self.assertListEqual(hf.recursive_sorted(junction_tree.nodes()),
                             [['x1', 'x2', 'x3']])
        factors = junction_tree.get_factors()
        self.assertEqual(factors[0], factor_product(*phi))
Ejemplo n.º 11
0
    def test_factor_graph(self):
        phi1 = DiscreteFactor(['Alice', 'Bob'], [3, 2], np.random.rand(6))
        phi2 = DiscreteFactor(['Bob', 'Charles'], [2, 2], np.random.rand(4))
        self.graph.add_edges_from([('Alice', 'Bob'), ('Bob', 'Charles')])
        self.graph.add_factors(phi1, phi2)

        factor_graph = self.graph.to_factor_graph()
        self.assertIsInstance(factor_graph, FactorGraph)
        self.assertListEqual(
            sorted(factor_graph.nodes()),
            ['Alice', 'Bob', 'Charles', 'phi_Alice_Bob', 'phi_Bob_Charles'])
        self.assertListEqual(
            hf.recursive_sorted(factor_graph.edges()),
            [['Alice', 'phi_Alice_Bob'], ['Bob', 'phi_Alice_Bob'],
             ['Bob', 'phi_Bob_Charles'], ['Charles', 'phi_Bob_Charles']])
        self.assertListEqual(factor_graph.get_factors(), [phi1, phi2])
Ejemplo n.º 12
0
 def test_class_init_with_data_string(self):
     self.g = MarkovModel([('a', 'b'), ('b', 'c')])
     self.assertListEqual(sorted(self.g.nodes()), ['a', 'b', 'c'])
     self.assertListEqual(hf.recursive_sorted(self.g.edges()),
                          [['a', 'b'], ['b', 'c']])
Ejemplo n.º 13
0
 def test_add_multiple_nodes(self):
     self.graph.add_nodes_from([('a', 'b'), ('b', 'c')])
     self.assertListEqual(hf.recursive_sorted(self.graph.nodes()),
                          [['a', 'b'], ['b', 'c']])
Ejemplo n.º 14
0
 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']])
Ejemplo n.º 15
0
 def test_moralize(self):
     self.graph.add_edges_from([('diff', 'grade'), ('intel', 'grade')])
     moral_graph = self.graph.moralize()
     self.assertListEqual(
         hf.recursive_sorted(moral_graph.edges()),
         [['diff', 'grade'], ['diff', 'intel'], ['grade', 'intel']])
Ejemplo n.º 16
0
 def test_class_init_with_data_string(self):
     self.graph = DirectedGraph([('a', 'b'), ('b', 'c')])
     self.assertListEqual(sorted(self.graph.nodes()), ['a', 'b', 'c'])
     self.assertListEqual(hf.recursive_sorted(self.graph.edges()),
                          [['a', 'b'], ['b', 'c']])
Ejemplo n.º 17
0
 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']])