<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def bind(self, prefix: str, namespace: str, override=True, replace=False):
 """ bind a given namespace to the prefix, forbids same prefix with different namespace :param prefix: :param namespace: :param override: if override, rebind, even if the given namespace is already bound to another prefix. :param replace: if replace, replace any existing prefix with the new namespace """

        namespace = URIRef(str(namespace))
        # When documenting explain that override only applies in what cases
        if prefix is None:
            prefix = ''
        bound_namespace = self.store.namespace(prefix)
        # Check if the bound_namespace contains a URI and if so convert it into a URIRef for
        # comparison. This is to prevent duplicate namespaces with the same URI.
        if bound_namespace:
            bound_namespace = URIRef(bound_namespace)
        if bound_namespace and bound_namespace != namespace:

            if replace:
                self.store.bind(prefix, namespace)
            # prefix already in use for different namespace
            raise PrefixAlreadyUsedException("Prefix (%s, %s) already used, instead of (%s, %s).",
                                             prefix, self.store.namespace(prefix).toPython(),
                                             prefix, namespace.toPython())
        else:
            bound_prefix = self.store.prefix(namespace)
            if bound_prefix is None:
                self.store.bind(prefix, namespace)
            elif bound_prefix == prefix:
                pass  # already bound
            else:
                if override or bound_prefix.startswith("_"):
                    self.store.bind(prefix, namespace)