def nodes_iter(self): """Return an iterator over all the nodes in the graph.""" nh=gv.agfstnode(self.handle) while nh is not None: yield Node(self,nh=nh) nh=gv.agnxtnode(self.handle,nh) raise StopIteration
def out_edges_iter(self, nbunch=None, keys=False): """Return iterator over out edges in the graph. If the optional nbunch (container of nodes) only out edges adjacent to nodes in nbunch will be returned. """ if nbunch is None: # all nodes nh=gv.agfstnode(self.handle) while nh is not None: eh=gv.agfstout(self.handle,nh) while eh is not None: e=Edge(self,eh=eh) if keys: yield (e[0],e[1],e.name) else: yield e eh=gv.agnxtout(self.handle,eh) nh=gv.agnxtnode(self.handle,nh) elif nbunch in self: # if nbunch is a single node n=Node(self,nbunch) nh=n.handle eh=gv.agfstout(self.handle,nh) while eh is not None: e=Edge(self,eh=eh) if keys: yield (e[0],e[1],e.name) else: yield e eh=gv.agnxtout(self.handle,eh) else: # if nbunch is a sequence of nodes try: bunch=[n for n in nbunch if n in self] except TypeError: raise TypeError("nbunch is not a node or a sequence of nodes.") for n in nbunch: try: nh=Node(self,n).handle except KeyError: continue eh=gv.agfstout(self.handle,nh) while eh is not None: e=Edge(self,eh=eh) if keys: yield (e[0],e[1],e.name) else: yield e eh=gv.agnxtout(self.handle,eh) raise StopIteration