Ejemplo n.º 1
0
    def testMR3(self):
        # should orient X->Y
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z', 'W'])
        edgePairs = [('X', 'Y'), ('Y', 'X'), ('X', 'Z'), ('Z', 'X'), ('X', 'W'), ('W', 'X'), ('Z', 'Y'), ('W', 'Y')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyMR3(partiallyDirectedGraph)
        self.assertTrue(didOrient)
        self.assertEqual(7, len(partiallyDirectedGraph.edges()))

        # should orient no edges
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z', 'W'])
        edgePairs = [('X', 'Y'), ('Y', 'X'), ('X', 'Z'), ('Z', 'X'), ('Y', 'Z'), ('Y', 'W'), ('Z', 'W'),
                     ('X', 'W'), ('W', 'X')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyMR3(partiallyDirectedGraph)
        self.assertFalse(didOrient)
        self.assertEqual(9, len(partiallyDirectedGraph.edges()))

        # should orient no edges
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z', 'W', 'V'])
        edgePairs = [('X', 'Y'), ('Y', 'X'), ('X', 'Z'), ('Z', 'X'), ('Y', 'Z'), ('Y', 'W'), ('Z', 'W'), ('V', 'W'),
                     ('X', 'W'), ('W', 'X')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyMR3(partiallyDirectedGraph)
        self.assertFalse(didOrient)
        self.assertEqual(10, len(partiallyDirectedGraph.edges()))

        # should orient no edges because already oriented X->Y
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z', 'W'])
        edgePairs = [('X', 'Y'), ('X', 'Z'), ('Z', 'X'), ('X', 'W'), ('W', 'X'), ('Z', 'Y'), ('W', 'Y')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyMR3(partiallyDirectedGraph)
        self.assertFalse(didOrient)
        self.assertEqual(7, len(partiallyDirectedGraph.edges()))

        # should not orient because X-Z is not undirected
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z', 'W'])
        edgePairs = [('X', 'Y'), ('Y', 'X'), ('X', 'Z'), ('X', 'W'), ('W', 'X'), ('Z', 'Y'), ('W', 'Y')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyMR3(partiallyDirectedGraph)
        self.assertFalse(didOrient)
        self.assertEqual(7, len(partiallyDirectedGraph.edges()))

        # should not orient because X-W is not undirected
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z', 'W'])
        edgePairs = [('X', 'Y'), ('Y', 'X'), ('X', 'Z'), ('Z', 'X'), ('W', 'X'), ('Z', 'Y'), ('W', 'Y')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyMR3(partiallyDirectedGraph)
        self.assertFalse(didOrient)
        self.assertEqual(7, len(partiallyDirectedGraph.edges()))

        # should not orient because both X-Z and X-W are not undirected
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z', 'W'])
        edgePairs = [('X', 'Y'), ('Y', 'X'), ('Z', 'X'), ('W', 'X'), ('Z', 'Y'), ('W', 'Y')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyMR3(partiallyDirectedGraph)
        self.assertFalse(didOrient)
        self.assertEqual(6, len(partiallyDirectedGraph.edges()))