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()))