Returns a ``tuple`` of all edges in the ``DictGraph`` an edge is a pair
        of **node objects**.
        
        Arguments:
        
          - nodes(iterable) [default: ``None``] iterable of **node objects** if 
            specified the edges will be limited to those outgoing from one of 
            the specified nodes.

def edges(self, nodes=None):
        """
        Returns a ``tuple`` of all edges in the ``DictGraph`` an edge is a pair
        of **node objects**.
        
        Arguments:
        
          - nodes(iterable) [default: ``None``] iterable of **node objects** if 
            specified the edges will be limited to those outgoing from one of 
            the specified nodes.
            
        """
        # If a Node has been directly updated (__not__ recommended)
        # then the Graph will not know the added nodes and therefore will
        # miss half of their edges.
        edges = set()
        for node in (nodes or self.iterkeys()):
            ends = self[node].nodes()
            edges.update([(node, end) for end in ends])
        return tuple(edges)