Adds an edge to the ``DictGraph``. An edge is just a pair of **node 
        objects**. If the **node objects** are not in the graph they are 
        created.
        
        Arguments:
        
          - edge(iterable) An ordered pair of **node objects**. The edge is 
            assumed to have a direction from the first to the second **node 
            object**.
          - double(``bool``) [default: ``False```] If ``True`` the the reverse 
            edge is also added.

def add_edge(self, edge, double=False):
        """
        Adds an edge to the ``DictGraph``. An edge is just a pair of **node 
        objects**. If the **node objects** are not in the graph they are 
        created.
        
        Arguments:
        
          - edge(iterable) An ordered pair of **node objects**. The edge is 
            assumed to have a direction from the first to the second **node 
            object**.
          - double(``bool``) [default: ``False```] If ``True`` the the reverse 
            edge is also added.
        
        """
        (left_entity, right_entity) = edge
        self.add_node(left_entity)
        self.add_node(right_entity)
        self[left_entity].update({right_entity:self[right_entity]})
        if double:
            self.add_edge((edge[1], edge[0]))