o
    }oi                     @  s^   d dl mZ d dlmZ d dlmZ er&d dlmZ d dlm	Z	 d dlm
Z
 G dd dZd	S )
    )annotations)TYPE_CHECKING)
TrialState)	Container)Study)FrozenTrialc                   @  s,   e Zd ZdZejffddd	ZdddZdS )MaxTrialsCallbacka"  Set a maximum number of trials before ending the study.

    While the ``n_trials`` argument of :meth:`optuna.study.Study.optimize` sets the number of
    trials that will be run, you may want to continue running until you have a certain number of
    successfully completed trials or stop the study when you have a certain number of trials that
    fail. This ``MaxTrialsCallback`` class allows you to set a maximum number of trials for a
    particular :class:`~optuna.trial.TrialState` before stopping the study.

    Example:

        .. testcode::

            import optuna
            from optuna.study import MaxTrialsCallback
            from optuna.trial import TrialState


            def objective(trial):
                x = trial.suggest_float("x", -1, 1)
                return x**2


            study = optuna.create_study()
            study.optimize(
                objective,
                callbacks=[MaxTrialsCallback(10, states=(TrialState.COMPLETE,))],
            )

    Args:
        n_trials:
            The max number of trials. Must be set to an integer.
        states:
            Tuple of the :class:`~optuna.trial.TrialState` to be counted
            towards the max trials limit. Default value is ``(TrialState.COMPLETE,)``.
            If :obj:`None`, count all states.
    n_trialsintstatesContainer[TrialState] | NonereturnNonec                 C  s   || _ || _d S )N)	_n_trials_states)selfr	   r    r   E/home/ubuntu/.local/lib/python3.10/site-packages/optuna/_callbacks.py__init__5   s   
zMaxTrialsCallback.__init__studyr   trialr   c                 C  s2   |j d| jd}t|}|| jkr|  d S d S )NF)deepcopyr   )
get_trialsr   lenr   stop)r   r   r   trials
n_completer   r   r   __call__;   s
   
zMaxTrialsCallback.__call__N)r	   r
   r   r   r   r   )r   r   r   r   r   r   )__name__
__module____qualname____doc__r   COMPLETEr   r   r   r   r   r   r      s
    &r   N)
__future__r   typingr   optuna.trialr   collections.abcr   optuna.studyr   r   r   r   r   r   r   <module>   s    