code: def get_successors(self, tail):
          
          frozen_tail = frozenset(tail)
          # If this node set isn't any tail in the hypergraph, then it has
          # no successors; thus, return an empty list
          if frozen_tail not in self._successors:
              return set()
  
          return set(self._successors[frozen_tail].values())
docs: Given a tail set of nodes, get a list of edges of which the node
          set is the tail of each edge.
  
          :param tail: set of nodes that correspond to the tails of some
                          (possibly empty) set of edges.
          :returns: set -- hyperedge_ids of the hyperedges that have tail
                  in the tail.