def _set_value(self, new_value):
        if self.min_value is not None and new_value < self.min_value:
            raise SettingOutOfBounds(
                "Trying to set parameter {0} = {1}, which is less than the minimum allowed {2}".format(
                    self.name, new_value, self.min_value))
        if self.max_value is not None and new_value > self.max_value:
            raise SettingOutOfBounds(
                "Trying to set parameter {0} = {1}, which is more than the maximum allowed {2}".format(
                    self.name, new_value, self.max_value))
        if self.has_auxiliary_variable():
            with warnings.catch_warnings():
                warnings.simplefilter("always", RuntimeWarning)
                warnings.warn("You are trying to assign to a parameter which is either linked or "
                              "has auxiliary variables. The assignment has no effect.", RuntimeWarning)
        if self._transformation is None:
            new_internal_value = new_value
        else:
            new_internal_value = self._transformation.forward(new_value)
        if new_internal_value != self._internal_value:
            self._internal_value = new_internal_value
            for callback in self._callbacks:
                try:
                    callback(self)
                except:
                    raise NotCallableOrErrorInCall("Could not call callback for parameter %s" % self.name)