code: def reverse(self):
          
          assert self.DIRECTED, "Undirected graph types such as %s cannot be reversed" % self.__class__.__name__
          
          N = self.__class__()
      
          #- Add the nodes
          N.add_nodes( n for n in self.nodes() )
      
          #- Add the reversed edges
          for (u, v) in self.edges():
              wt = self.edge_weight((u, v))
              label = self.edge_label((u, v))
              attributes = self.edge_attributes((u, v))
              N.add_edge((v, u), wt, label, attributes)
          return N
docs: Generate the reverse of a directed graph, returns an identical graph if not directed.
          Attributes & weights are preserved.
          
          @rtype: digraph
          @return: The directed graph that should be reversed.