public function edge(string $edge_id): Graph\EdgeInterface
  {
    if(isset($this->edge_cache[$edge_id]))
      return $this->edge_cache[$edge_id];
    $query = (string) $edge_id; // sprintf("edge:%s", (string) $edge_id);
    $edge = $this->database->get($query);
    if(is_null($edge)) {
      throw new Exceptions\EdgeDoesNotExistException($edge_id);
    }
    $edge = unserialize($edge);
    if(!$edge instanceof Graph\EdgeInterface) {
      throw new Exceptions\NotAnEdgeException($edge_id);
    }
    $edge->setup();
    $edge->init();
    $this->edge_cache[$edge_id] = $edge;
    return $edge;
  }