docs: def edge_by_id(self, edge):
          """
          Returns the edge that connects the head_id and tail_id nodes
          """
          try:
              head, tail, data =  self.edges[edge]
          except KeyError:
              head, tail = None, None
              raise GraphError('Invalid edge %s' % edge)
  
          return (head, tail)