
    -ji/                        S SK Jr  S SKJr  S SKJr  S SKJr  S SKrS SK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 S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr   " S S5      r " S S\\5      rg)    )annotations)Callable)	Container)SequenceN)Any)distributions)JSONSerializable)BaseStorage)BaseHeartbeat)
RDBStorage)FrozenStudy)StudyDirection)FrozenTrial)
TrialStatec                      \ rS rSrSS jrSrg)
_StudyInfo   c                h    0 U l         [        5       U l        SU l        0 U l        S U l        S U l        g )N)trialssetunfinished_trial_idslast_finished_trial_idparam_distribution
directionsnameselfs    Y/home/james-whalen/.local/lib/python3.13/site-packages/optuna/storages/_cached_storage.py__init___StudyInfo.__init__   s3    .0 /2e!+-#MO7; $	    )r   r   r   r   r   r   N)returnNone)__name__
__module____qualname____firstlineno__r    __static_attributes__ r"   r   r   r      s    
%r"   r   c                     \ rS rSrSrS#S jrS$S jrS%S jr S&     S'S jjrS(S jr	S)S	 jr
S*S
 jrS+S jrS,S jrS-S jrS.S jrS.S jrS/S jrS&S0S jjr          S1S jrS2S jrS3S jr S&       S4S jjr        S5S jrS6S jrS7S jrS8S jrS9S jr  S:       S;S jjrS(S jrS<S jrS=S jrS>S jr S?S  jr!S@S! jr"S"r#g)A_CachedStorage$   a  A wrapper class of storage backends.

This class is used in :func:`~optuna.get_storage` function and automatically
wraps :class:`~optuna.storages.RDBStorage` class.

:class:`~optuna.storages._CachedStorage` meets the following **Data persistence** requirements.

**Data persistence**

:class:`~optuna.storages._CachedStorage` does not guarantee that write operations are logged
into a persistent storage, even when write methods succeed.
Thus, when process failure occurs, some writes might be lost.
As exceptions, when a persistent storage is available, any writes on any attributes
of `Study` and writes on `state` of `Trial` are guaranteed to be persistent.
Additionally, any preceding writes on any attributes of `Trial` are guaranteed to
be written into a persistent storage before writes on `state` of `Trial` succeed.
The same applies for `param`, `user_attrs', 'system_attrs' and 'intermediate_values`
attributes.

Args:
    backend:
        :class:`~optuna.storages.RDBStorage` class instance to wrap.
c                n    Xl         0 U l        0 U l        0 U l        [        R
                  " 5       U l        g N)_backend_studies _trial_id_to_study_id_and_number _study_id_and_number_to_trial_id	threadingLock_lock)r   backends     r   r    _CachedStorage.__init__=   s,    /1LN-LN-^^%
r"   c                @    U R                   R                  5       nUS	 U$ )Nr6   )__dict__copyr   states     r   __getstate___CachedStorage.__getstate__D   s     ""$'Nr"   c                n    U R                   R                  U5        [        R                  " 5       U l        g r/   )r:   updater4   r5   r6   r<   s     r   __setstate___CachedStorage.__setstate__I   s"    U#^^%
r"   Nc                    U R                   R                  XS9nU R                     [        5       nX$l        [        U5      Ul        X@R                  U'   S S S 5        U$ ! , (       d  f       U$ = f)N)r   
study_name)r0   create_new_studyr6   r   r   listr   r1   )r   r   rE   study_idstudys        r   rF   _CachedStorage.create_new_studyM   sb     ==11Z1_ZZLE#J#J/E&+MM(#	   Z s   /A
A.c                   U R                      XR                  ;   a  U R                  U   R                   H\  nU R                  R	                  X45      nX0R
                  ;   a  U R
                  U	 X4U R                  ;   d  MN  U R                  X4	 M^     U R                  U	 S S S 5        U R                  R                  U5        g ! , (       d  f       N*= fr/   )r6   r1   r   r3   getr2   r0   delete_study)r   rH   trial_numbertrial_ids       r   rM   _CachedStorage.delete_studyY   s    ZZ==($(MM($;$B$BL#DDHH(IabH#H#HH AA(K /43X3XX AA8BZ[ %C MM(+  	""8, Zs   A3CC
Cc                <    U R                   R                  XU5        g r/   )r0   set_study_user_attrr   rH   keyvalues       r   rR   "_CachedStorage.set_study_user_attrf   s    ))(?r"   c                <    U R                   R                  XU5        g r/   )r0   set_study_system_attrrS   s       r   rX   $_CachedStorage.set_study_system_attri   s    ++H5Ar"   c                8    U R                   R                  U5      $ r/   )r0   get_study_id_from_name)r   rE   s     r   r[   %_CachedStorage.get_study_id_from_namel   s    }}33J??r"   c                   U R                      XR                  ;   a'  U R                  U   R                  nUb  UsS S S 5        $ S S S 5        U R                  R	                  U5      nU R                      XR                  ;  a  [        5       U R                  U'   X R                  U   l        S S S 5        U$ ! , (       d  f       Ny= f! , (       d  f       U$ = fr/   )r6   r1   r   r0   get_study_name_from_idr   )r   rH   r   s      r   r^   %_CachedStorage.get_study_name_from_ido   s    ZZ==(}}X.33#	 ZZ }}33H=ZZ}},*4,h'+/MM(#(   Z Z    -B73:C7
C
Cc                   U R                      XR                  ;   a'  U R                  U   R                  nUb  UsS S S 5        $ S S S 5        U R                  R	                  U5      nU R                      XR                  ;  a  [        5       U R                  U'   X R                  U   l        S S S 5        U$ ! , (       d  f       Ny= f! , (       d  f       U$ = fr/   )r6   r1   r   r0   get_study_directionsr   )r   rH   r   s      r   rb   #_CachedStorage.get_study_directions}   s    ZZ==(!]]84??
)%	 ZZ ]]77A
ZZ}},*4,h'1;MM(#.   Z Z r`   c                8    U R                   R                  U5      $ r/   )r0   get_study_user_attrsr   rH   s     r   re   #_CachedStorage.get_study_user_attrs       }}11(;;r"   c                8    U R                   R                  U5      $ r/   )r0   get_study_system_attrsrf   s     r   rj   %_CachedStorage.get_study_system_attrs   s    }}33H==r"   c                6    U R                   R                  5       $ r/   )r0   get_all_studiesr   s    r   rm   _CachedStorage.get_all_studies   s    }},,..r"   c                   U R                   R                  X5      nUR                  nU R                     XR                  ;  a  [        5       U R                  U'   U R                  X/5        S S S 5        U$ ! , (       d  f       U$ = fr/   )r0   _create_new_trial	_trial_idr6   r1   r   _add_trials_to_cache)r   rH   template_trialfrozen_trialrO   s        r   create_new_trial_CachedStorage.create_new_trial   sm    }}66xP))ZZ}},*4,h'%%h?  	 Z s   9A77
Bc                8   U R                      U R                  U   u  pVU R                  U   R                  R	                  U5      nU R
                  R                  XX4U5        Uc  X@R                  U   R                  U'   S S S 5        g ! , (       d  f       g = fr/   )r6   r2   r1   r   rL   r0   _set_trial_param)r   rO   
param_nameparam_value_internaldistributionrH   _cached_dists           r   set_trial_param_CachedStorage.set_trial_param   s     ZZ??IKH--1DDHHTKMM**&:+ "IUh':::F ZZs   A5B
Bc                    X4nU R                      X0R                  ;   a  U R                  U   sS S S 5        $  S S S 5        U R                  R                  X5      $ ! , (       d  f       N)= fr/   )r6   r3   r0   'get_trial_id_from_study_id_trial_number)r   rH   rN   rT   s       r   r   6_CachedStorage.get_trial_id_from_study_id_trial_number   sY    &ZZ;;;<<SA Z;  }}DDX\\	 Zs   A
A*c                    U R                  U5      n[        U5      S:  a  [        S5      eUS   nU R                  R	                  X5      nU R                  U5      $ )N   zBBest trial can be obtained only for single-objective optimization.r   )rb   lenRuntimeErrorr0   _get_best_trial_id	get_trial)r   rH   _directions	directionrO   s        r   get_best_trial_CachedStorage.get_best_trial   s]    //9{aT   N	==33HH~~h''r"   c                6    U R                   R                  XUS9$ )N)r=   values)r0   set_trial_state_values)r   rO   r=   r   s       r   r   %_CachedStorage.set_trial_state_values   s     }}33HRX3YYr"   c                <    U R                   R                  XU5        g r/   )r0   set_trial_intermediate_value)r   rO   stepintermediate_values       r   r   +_CachedStorage.set_trial_intermediate_value   s     	228CUVr"   c                8    U R                   R                  XUS9  g N)rT   rU   )r0   set_trial_user_attrr   rO   rT   rU   s       r   r   "_CachedStorage.set_trial_user_attr   s    ))(5)Ir"   c                8    U R                   R                  XUS9  g r   )r0   set_trial_system_attrr   s       r   r   $_CachedStorage.set_trial_system_attr   s    ++HU+Kr"   c                    XR                   ;  a  g U R                   U   u  p#U R                  U   nUR                  U   nUR                  R	                  5       (       d  g U$ r/   )r2   r1   r   r=   is_finished)r   rO   rH   numberrI   trials         r   _get_cached_trial _CachedStorage._get_cached_trial   s[    @@@@@Jh'V${{&&((r"   c                    U R                      U R                  U5      nUb  UsS S S 5        $  S S S 5        U R                  R                  U5      $ ! , (       d  f       N)= fr/   )r6   r   r0   r   )r   rO   r   s      r   r   _CachedStorage.get_trial   sP    ZZ**84E  Z  
 }}&&x00 Zs   A
Ac                   U R                  U5        U R                     U R                  U   nUbA  UR                  R	                  5        VVs0 s H  u  pVUR
                  U;   d  M  XV_M     nnnOUR                  n[        [        UR                  5       S S95      nU(       a  [        R                  " U5      OUsS S S 5        $ s  snnf ! , (       d  f       g = f)Nc                    U R                   $ r/   )r   )ts    r   <lambda>/_CachedStorage.get_all_trials.<locals>.<lambda>   s    r"   )rT   ) _read_trials_from_remote_storager6   r1   r   itemsr=   rG   sortedr   r;   deepcopy)r   rH   r   statesrI   r   r   r   s           r   get_all_trials_CachedStorage.get_all_trials   s     	--h7ZZMM(+E !5:\\5G5G5I_5I	QWWX^M^)&)5I_&6HIJF,44==(& Z ` Zs$   0CC(C.ACC
Cc                   U R                      XR                  ;  a  [        5       U R                  U'   U R                  U   nU R                  R	                  US UR
                  UR                  S9nU(       d
   S S S 5        g U R                  X5        U H  nUR                  R                  5       (       d'  UR
                  R                  UR                  5        MI  [        UR                  UR                  5      Ul        UR                  UR
                  ;   d  M  UR
                  R                  UR                  5        M     S S S 5        g ! , (       d  f       g = f)N)r   included_trial_idstrial_id_greater_than)r6   r1   r   r0   _get_trialsr   r   rr   r=   r   addrq   maxremove)r   rH   rI   r   r   s        r   r   /_CachedStorage._read_trials_from_remote_storage   s   ZZ}},*4,h'MM(+E]]..#(#=#=&+&B&B	 / F  Z %%h7{{..00..225??C 0353O3OQVQ`Q`/a,??e&@&@@..55eooF   ZZs   A.EBE!)E
E!c                    U R                   U   nU Hd  nUUR                  4U R                  UR                  '   UR                  U R                  XR                  4'   XCR
                  UR                  '   Mf     g r/   )r1   r   r2   rq   r3   r   )r   rH   r   rI   r   s        r   rr   #_CachedStorage._add_trials_to_cache  sj    h'EFD11%//B OTooD118\\2JK).LL& r"   c                :    U R                   R                  U5        g r/   )r0   record_heartbeat)r   rO   s     r   r   _CachedStorage.record_heartbeat  s    &&x0r"   c                8    U R                   R                  U5      $ r/   )r0   _get_stale_trial_idsrf   s     r   r   #_CachedStorage._get_stale_trial_ids  rh   r"   c                6    U R                   R                  5       $ r/   )r0   get_heartbeat_intervalr   s    r   r   %_CachedStorage.get_heartbeat_interval!  s    }}3355r"   c                6    U R                   R                  5       $ r/   )r0   get_failed_trial_callbackr   s    r   r   (_CachedStorage.get_failed_trial_callback$  s    }}6688r"   )r0   r6   r1   r3   r2   )r7   r   r#   r$   )r#   dict[Any, Any])r=   r   r#   r$   r/   )r   zSequence[StudyDirection]rE   z
str | Noner#   int)rH   r   r#   r$   )rH   r   rT   strrU   r   r#   r$   )rH   r   rT   r   rU   r	   r#   r$   )rE   r   r#   r   )rH   r   r#   r   )rH   r   r#   zlist[StudyDirection])rH   r   r#   zdict[str, Any])r#   zlist[FrozenStudy])rH   r   rs   FrozenTrial | Noner#   r   )
rO   r   ry   r   rz   floatr{   zdistributions.BaseDistributionr#   r$   )rH   r   rN   r   r#   r   )rH   r   r#   r   )rO   r   r=   r   r   zSequence[float] | Noner#   bool)rO   r   r   r   r   r   r#   r$   )rO   r   rT   r   rU   r   r#   r$   )rO   r   rT   r   rU   r	   r#   r$   )rO   r   r#   r   )rO   r   r#   r   )TN)rH   r   r   r   r   zContainer[TrialState] | Noner#   list[FrozenTrial])rH   r   r   r   r#   r$   )rO   r   r#   r$   )rH   r   r#   z	list[int])r#   z
int | None)r#   z4Callable[['optuna.Study', FrozenTrial], None] | None)$r%   r&   r'   r(   __doc__r    r>   rB   rF   rM   rR   rX   r[   r^   rb   re   rj   rm   ru   r~   r   r   r   r   r   r   r   r   r   r   rr   r   r   r   r   r)   r*   r"   r   r,   r,   $   s}   0&
&
 NR
2
@J
	
-@B@<>/VV V $	V
 5V 
V ]( RVZZ$.Z8NZ	Z
WW#&W<AW	W
JL1 /3	AA A -	A
 
A,G4/1<69r"   r,   )
__future__r   collections.abcr   r   r   r;   r4   typingr   optunar   optuna._typingr	   optuna.storagesr
   optuna.storages._heartbeatr   optuna.storages._rdb.storager   optuna.study._frozenr   optuna.study._study_directionr   optuna.trialr   r   r   r,   r*   r"   r   <module>r      sR    " $ % $       + ' 4 3 , 8 $ #% %A9[- A9r"   