<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_hyperedge_attributes(self, hyperedge_id):
 """Given a hyperedge ID, get a dictionary of copies of that hyperedge's attributes. :param hyperedge_id: ID of the hyperedge to retrieve the attributes of. :returns: dict -- copy of each attribute of the specified hyperedge_id (except the private __frozen_nodes entry). :raises: ValueError -- No such hyperedge exists. """

        if not self.has_hyperedge_id(hyperedge_id):
            raise ValueError("No such hyperedge exists.")
        dict_to_copy = self._hyperedge_attributes[hyperedge_id].items()
        attributes = {}
        for attr_name, attr_value in dict_to_copy:
            if attr_name != "__frozen_nodes":
                attributes[attr_name] = copy.copy(attr_value)
        return attributes