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

        # should orient no edges because X and Y have an undirected edge
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z'])
        edgePairs = [('X', 'Y'), ('Y', 'X'), ('Y', 'Z'), ('Z', 'Y')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyKnownNonColliders(partiallyDirectedGraph)
        self.assertFalse(didOrient)
        self.assertEqual(4, len(partiallyDirectedGraph.edges()))

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

        # should orient no edges because X <- Z
        partiallyDirectedGraph = nx.DiGraph()
        partiallyDirectedGraph.add_nodes_from(['X', 'Y', 'Z'])
        edgePairs = [('X', 'Y'), ('Y', 'Z'), ('Z', 'Y'), ('Z', 'X')]
        partiallyDirectedGraph.add_edges_from(edgePairs)
        didOrient = EdgeOrientation.applyKnownNonColliders(partiallyDirectedGraph)
        self.assertFalse(didOrient)
        self.assertEqual(4, len(partiallyDirectedGraph.edges()))

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

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