'Add an edge from node *src* to node *dest*, with optional
per-edge *data*.
If such an edge already exists, it is replaced (duplicate edges
are not possible).'

def add_edge(self, src, dest, data=None):

    assert (src in self._nodes)
    assert (dest in self._nodes)
    self._add_edge(src, dest, data)
