
    -ji                    r    S SK Jr  S SKJr  S SKrS SKJr  S SKJr  S SKJ	r	  \" S5       " S S	5      5       r
g)
    )annotations)AnyN)experimental_class)experimental_func)FrozenTrial2.8.0c                      \ rS rSrSr S     SS jjrSS jr\\" S5      SS j5       5       r	\\" S5      SS	 j5       5       r
S
rg)RetryFailedTrialCallback   a  Retry a failed trial up to a maximum number of times.

When a trial fails, this callback can be used with a class in :mod:`optuna.storages` to
recreate the trial in ``TrialState.WAITING`` to queue up the trial to be run again.

The failed trial can be identified by the
:func:`~optuna.storages.RetryFailedTrialCallback.retried_trial_number` function.
Even if repetitive failure occurs (a retried trial fails again),
this method returns the number of the original trial.
To get a full list including the numbers of the retried trials as well as their original trial,
call the :func:`~optuna.storages.RetryFailedTrialCallback.retry_history` function.

This callback is helpful in environments where trials may fail due to external conditions,
such as being preempted by other processes.

Usage:

    .. testcode::

        import optuna
        from optuna.storages import RetryFailedTrialCallback

        storage = optuna.storages.RDBStorage(
            url="sqlite:///:memory:",
            heartbeat_interval=60,
            grace_period=120,
            failed_trial_callback=RetryFailedTrialCallback(max_retry=3),
        )

        study = optuna.create_study(
            storage=storage,
        )

.. seealso::
    See :class:`~optuna.storages.RDBStorage`.

Args:
    max_retry:
        The max number of times a trial can be retried. Must be set to :obj:`None` or an
        integer. If set to the default value of :obj:`None` will retry indefinitely.
        If set to an integer, will only retry that many times.
    inherit_intermediate_values:
        Option to inherit `trial.intermediate_values` reported by
        :func:`optuna.trial.Trial.report` from the failed trial. Default is :obj:`False`.
Nc                    Xl         X l        g )N)
_max_retry_inherit_intermediate_values)self	max_retryinherit_intermediate_valuess      T/home/james-whalen/.local/lib/python3.13/site-packages/optuna/storages/_callbacks.py__init__!RetryFailedTrialCallback.__init__;   s     $,G)    c                   UR                   / S.UR                  EnUS   R                  UR                   5        U R                  b  U R                  [	        US   5      :  a  g UR                  [        R                  " [        R                  R                  R                  UR                  UR                  UR                  UU R                  (       a  UR                  OS S95        g )N)failed_trialretry_historyr   )stateparamsdistributions
user_attrssystem_attrsintermediate_values)numberr   appendr   len	add_trialoptunacreate_trialtrial
TrialStateWAITINGr   r   r   r   r   )r   studyr%   r   s       r   __call__!RetryFailedTrialCallback.__call__A   s    !LL(
   (

 	_%,,U\\:??&\/%B!CCll--55||#11 ++)151R1RE--X\		
r   r   c                :    U R                   R                  SS5      $ )zReturn the number of the original trial being retried.

Args:
    trial:
        The trial object.

Returns:
    The number of the first failed trial. If not retry of a previous trial,
    returns :obj:`None`.
r   Nr   getr%   s    r   retried_trial_number-RetryFailedTrialCallback.retried_trial_numberY   s     !!%%nd;;r   z3.0.0c                :    U R                   R                  S/ 5      $ )a  Return the list of retried trial numbers with respect to the specified trial.

Args:
    trial:
        The trial object.

Returns:
    A list of trial numbers in ascending order of the series of retried trials.
    The first item of the list indicates the original trial which is identical
    to the :func:`~optuna.storages.RetryFailedTrialCallback.retried_trial_number`,
    and the last item is the one right before the specified trial in the retry series.
    If the specified trial is not a retry of any trial, returns an empty list.
r   r,   r.   s    r   r   &RetryFailedTrialCallback.retry_historyi   s      !!%%or::r   )r   r   )NF)r   
int | Noner   boolreturnNone)r(   z'optuna.study.Study'r%   r   r5   r6   )r%   r   r5   r3   )r%   r   r5   z	list[int])__name__
__module____qualname____firstlineno____doc__r   r)   staticmethodr   r/   r   __static_attributes__ r   r   r
   r
      sw    ,^ QVH#HIMH	H
0 w<   < w;   ;r   r
   )
__future__r   typingr   r#   optuna._experimentalr   r   optuna.trialr   r
   r>   r   r   <module>rC      s8    "   3 2 $ Gm; m; m;r   