docs: def full_subgraph(self, vertices):
          """
          Return the subgraph of this graph whose vertices
          are the given ones and whose edges are all the edges
          of the original graph between those vertices.
  
          """
          subgraph_vertices = {v for v in vertices}
          subgraph_edges = {edge
                            for v in subgraph_vertices
                            for edge in self._out_edges[v]
                            if self._heads[edge] in subgraph_vertices}
          subgraph_heads = {edge: self._heads[edge]
                            for edge in subgraph_edges}
          subgraph_tails = {edge: self._tails[edge]
                            for edge in subgraph_edges}
          return DirectedGraph._raw(
              vertices=subgraph_vertices,
              edges=subgraph_edges,
              heads=subgraph_heads,
              tails=subgraph_tails,
          )