1 from obitools.graph import DiGraph,Node
2
4 - def __init__(self,label='G',indexer=None,nodes=None,edges=None):
5 '''
6 Directed Graph constructor.
7
8 @param label: Graph name, set to 'G' by default
9 @type label: str
10 @param indexer: node label indexer
11 @type indexer: Indexer instance
12 @param nodes: set of nodes to add to the graph
13 @type nodes: iterable value
14 @param edges: set of edges to add to the graph
15 @type edges: iterable value
16 '''
17
18 self._parents={}
19 DiGraph.__init__(self, label, indexer, nodes, edges)
20
21 - def getNode(self,node=None,index=None):
25
26 - def addEdge(self,parent=None,node=None,indexp=None,index=None,**data):
27 indexp=self.addNode(parent, indexp)
28 index =self.addNode(node , index)
29
30 pindex = set(n.index
31 for n in self.getNode(index=indexp).ancestorIterator())
32
33 assert index not in pindex,'Child node cannot be a parent node'
34
35 DiGraph.addEdge(self,index1=indexp,index2=index,**data)
36
37 if index in self._parents:
38 self._parents[index].add(indexp)
39 else:
40 self._parents[index]=set([indexp])
41
42
43 return (indexp,index)
44
45
46
48
50 if self.index in self.graph._parents:
51 for p in self.graph._parents[self.index]:
52 parent = DAGNode(p,self.graph)
53 yield parent
54 for pnode in parent.ancestorIterator():
55 yield pnode
56