code: def full_subgraph(self, objects):
          
          vertices = ElementTransformSet(transform=id)
          out_edges = KeyTransformDict(transform=id)
          in_edges = KeyTransformDict(transform=id)
          for obj in objects:
              vertices.add(obj)
              out_edges[obj] = []
              in_edges[obj] = []
  
          edges = set()
          head = {}
          tail = {}
  
          for referrer in vertices:
              for edge in self._out_edges[referrer]:
                  referent = self._head[edge]
                  if referent not in vertices:
                      continue
                  edges.add(edge)
                  tail[edge] = referrer
                  head[edge] = referent
                  out_edges[referrer].append(edge)
                  in_edges[referent].append(edge)
  
          return ObjectGraph._raw(
              vertices=vertices,
              edges=edges,
              out_edges=out_edges,
              in_edges=in_edges,
              head=head,
              tail=tail,
          )
docs: Return the subgraph of this graph whose vertices
          are the given ones and whose edges are the edges
          of the original graph between those vertices.