<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set_preferred_prefix_for_namespace(self, ns_uri, prefix, add_if_not_exist=False):
 """Sets the preferred prefix for ns_uri. If add_if_not_exist is True, the prefix is added if it's not already registered. Otherwise, setting an unknown prefix as preferred is an error. The default is False. Setting to None always works, and indicates a preference to use the namespace as a default. The given namespace must already be in this set. Args: ns_uri (str):
 the namespace URI whose prefix is to be set prefix (str):
 the preferred prefix to set add_if_not_exist (bool):
 Whether to add the prefix if it is not already set as a prefix of ``ns_uri``. Raises: NamespaceNotFoundError: If namespace ``ns_uri`` isn't in this set. DuplicatePrefixError: If ``prefix`` already maps to a different namespace. """

        ni = self.__lookup_uri(ns_uri)

        if not prefix:
            ni.preferred_prefix = None
        elif prefix in ni.prefixes:
            ni.preferred_prefix = prefix
        elif add_if_not_exist:
            self.add_prefix(ns_uri, prefix, set_as_preferred=True)
        else:
            raise PrefixNotFoundError(prefix)