def get_hyperedge_id(self, nodes):
        """From a set of nodes, returns the ID of the hyperedge that this
        set comprises.

        :param nodes: iterable container of references to nodes in the
                    the hyperedge to be added
        :returns: str -- ID of the hyperedge that has that the specified
                node set comprises.
        :raises: ValueError -- No such hyperedge exists.

        Examples:
        ::

            >>> H = UndirectedHypergraph()
            >>> hyperedge_list = (["A", "B", "C"],
                                  ("A", "D"),
                                  set(["B", "D"]))
            >>> hyperedge_ids = H.add_hyperedges(hyperedge_list)
            >>> x = H.get_hyperedge_id(["A", "B", "C"])

        """
        frozen_nodes = frozenset(nodes)

        if not self.has_hyperedge(frozen_nodes):
            raise ValueError("No such hyperedge exists.")

        return self._node_set_to_hyperedge[frozen_nodes]