import abc
from optuna.type_checking import TYPE_CHECKING
if TYPE_CHECKING:
    from optuna.study import Study  # NOQA
    from optuna.trial import FrozenTrial  # NOQA
[文档]class BasePruner(object, metaclass=abc.ABCMeta):
    """Base class for pruners."""
[文档]    @abc.abstractmethod
    def prune(self, study, trial):
        # type: (Study, FrozenTrial) -> bool
        """Judge whether the trial should be pruned based on the reported values.
        Note that this method is not supposed to be called by library users. Instead,
        :func:`optuna.trial.Trial.report` and :func:`optuna.trial.Trial.should_prune` provide
        user interfaces to implement pruning mechanism in an objective function.
        Args:
            study:
                Study object of the target study.
            trial:
                FrozenTrial object of the target trial.
                Take a copy before modifying this object.
        Returns:
            A boolean value representing whether the trial should be pruned.
        """
        raise NotImplementedError