
    (^i-                        d dl mZ d dlmZ d dlmZ d dlmZ d dlZd dlZd dlm	Z	 d dl
Z
d dl
mZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  G d d      Z G d dee      Zy)    )annotations)Callable)	Container)SequenceN)Any)distributions)JSONSerializable)BaseStorage)BaseHeartbeat)
RDBStorage)FrozenStudy)StudyDirection)FrozenTrial)
TrialStatec                      e Zd ZddZy)
_StudyInfoc                Z    i | _         t               | _        d| _        d | _        d | _        y )N)trialssetunfinished_trial_idslast_finished_trial_id
directionsnameselfs    `/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/storages/_cached_storage.py__init__z_StudyInfo.__init__   s+    .0 /2e!+-#7; $	    N)returnNone)__name__
__module____qualname__r    r   r   r   r      s    %r   r   c                  Z   e Zd ZdZd!dZd"dZd#dZ	 d$	 	 	 	 	 d%dZd&dZd'dZ	d(d	Z
d)d
Zd*dZd+dZd,dZd,dZd-dZd$d.dZ	 	 	 	 	 	 	 	 	 	 d/dZd0dZd1dZ	 d$	 	 	 	 	 	 	 d2dZ	 	 	 	 	 	 	 	 d3dZd4dZd5dZd6dZd7dZ	 	 d8	 	 	 	 	 	 	 d9dZd&dZd:dZd;dZd<dZd=dZ d>d Z!y)?_CachedStoragea7  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    || _         i | _        i | _        i | _        t	        j
                         | _        y N)_backend_studies _trial_id_to_study_id_and_number _study_id_and_number_to_trial_id	threadingLock_lock)r   backends     r   r   z_CachedStorage.__init__;   s.    /1LN-LN-^^%
r   c                @    | j                   j                         }|d= |S )Nr0   )__dict__copyr   states     r   __getstate__z_CachedStorage.__getstate__B   s     ""$'Nr   c                l    | j                   j                  |       t        j                         | _        y r)   )r3   updater.   r/   r0   r5   s     r   __setstate__z_CachedStorage.__setstate__G   s"    U#^^%
r   Nc                    | j                   j                  ||      }| j                  5  t               }||_        t        |      |_        || j                  |<   d d d        |S # 1 sw Y   |S xY w)N)r   
study_name)r*   create_new_studyr0   r   r   listr   r+   )r   r   r<   study_idstudys        r   r=   z_CachedStorage.create_new_studyK   sl     ==11ZT^1_ZZ 	,LE#EJ#J/E&+DMM(#		, 	, s   1A%%A/c                   | j                   5  || j                  v r| j                  |   j                  D ]Z  }| j                  j	                  ||f      }|| j
                  v r| j
                  |= ||f| j                  v sL| j                  ||f= \ | j                  |= d d d        | j                  j                  |       y # 1 sw Y   %xY wr)   )r0   r+   r   r-   getr,   r*   delete_study)r   r?   trial_numbertrial_ids       r   rC   z_CachedStorage.delete_studyW   s    ZZ 	,4==($(MM($;$B$B \L#DDHH(T`IabH4#H#HH AA(K ,/43X3XX AA8\BZ[\ MM(+	, 	""8,	, 	,s   A3CCCc                >    | j                   j                  |||       y r)   )r*   set_study_user_attrr   r?   keyvalues       r   rG   z"_CachedStorage.set_study_user_attrd   s    ))(C?r   c                >    | j                   j                  |||       y r)   )r*   set_study_system_attrrH   s       r   rL   z$_CachedStorage.set_study_system_attrg   s    ++Hc5Ar   c                8    | j                   j                  |      S r)   )r*   get_study_id_from_name)r   r<   s     r   rN   z%_CachedStorage.get_study_id_from_namej   s    }}33J??r   c                   | j                   5  || j                  v r&| j                  |   j                  }||cd d d        S d d d        | j                  j	                  |      }| j                   5  || j                  vrt               | j                  |<   || j                  |   _        d d d        |S # 1 sw Y   txY w# 1 sw Y   |S xY wr)   )r0   r+   r   r*   get_study_name_from_idr   )r   r?   r   s      r   rP   z%_CachedStorage.get_study_name_from_idm   s    ZZ 	 4==(}}X.33#		  	  	  }}33H=ZZ 	0t}},*4,h'+/DMM(#(	0 	  	 	0    +B51:C5B>Cc                   | j                   5  || j                  v r&| j                  |   j                  }||cd d d        S d d d        | j                  j	                  |      }| j                   5  || j                  vrt               | j                  |<   || j                  |   _        d d d        |S # 1 sw Y   txY w# 1 sw Y   |S xY wr)   )r0   r+   r   r*   get_study_directionsr   )r   r?   r   s      r   rS   z#_CachedStorage.get_study_directions{   s    ZZ 	&4==(!]]84??
)%		& 	& 	& ]]77A
ZZ 	<t}},*4,h'1;DMM(#.	< 	& 	&	< rQ   c                8    | j                   j                  |      S r)   )r*   get_study_user_attrsr   r?   s     r   rU   z#_CachedStorage.get_study_user_attrs       }}11(;;r   c                8    | j                   j                  |      S r)   )r*   get_study_system_attrsrV   s     r   rY   z%_CachedStorage.get_study_system_attrs   s    }}33H==r   c                6    | j                   j                         S r)   )r*   get_all_studiesr   s    r   r[   z_CachedStorage.get_all_studies   s    }},,..r   c                
   | j                   j                  ||      }|j                  }| j                  5  || j                  vrt               | j                  |<   | j                  ||g       d d d        |S # 1 sw Y   |S xY wr)   )r*   _create_new_trial	_trial_idr0   r+   r   _add_trials_to_cache)r   r?   template_trialfrozen_trialrE   s        r   create_new_trialz_CachedStorage.create_new_trial   sy    }}66xP))ZZ 	@t}},*4,h'%%h?	@ 		@ s   9A88Bc                @    | j                   j                  ||||       y r)   )r*   set_trial_param)r   rE   
param_nameparam_value_internaldistributions        r   rd   z_CachedStorage.set_trial_param   s     	%%h
<PR^_r   c                    ||f}| j                   5  || j                  v r| j                  |   cd d d        S 	 d d d        | j                  j                  ||      S # 1 sw Y   %xY wr)   )r0   r-   r*   'get_trial_id_from_study_id_trial_number)r   r?   rD   rI   s       r   ri   z6_CachedStorage.get_trial_id_from_study_id_trial_number   sp    &ZZ 	Bd;;;<<SA	B 	B;	B }}DDX|\\		B 	Bs   AA&c                    | j                  |      }t        |      dkD  rt        d      |d   }| j                  j	                  ||      }| j                  |      S )N   zBBest trial can be obtained only for single-objective optimization.r   )rS   lenRuntimeErrorr*   _get_best_trial_id	get_trial)r   r?   _directions	directionrE   s        r   get_best_trialz_CachedStorage.get_best_trial   s_    //9{aT   N	==33HiH~~h''r   c                >    | j                   j                  |||      S )N)r6   values)r*   set_trial_state_values)r   rE   r6   rt   s       r   ru   z%_CachedStorage.set_trial_state_values   s!     }}33HERX3YYr   c                >    | j                   j                  |||       y r)   )r*   set_trial_intermediate_value)r   rE   stepintermediate_values       r   rw   z+_CachedStorage.set_trial_intermediate_value   s     	228TCUVr   c                @    | j                   j                  |||       y N)rI   rJ   )r*   set_trial_user_attrr   rE   rI   rJ   s       r   r|   z"_CachedStorage.set_trial_user_attr   s    ))(5)Ir   c                @    | j                   j                  |||       y r{   )r*   set_trial_system_attrr}   s       r   r   z$_CachedStorage.set_trial_system_attr   s    ++H#U+Kr   c                    || j                   vry | j                   |   \  }}| j                  |   }|j                  |   }|j                  j	                         sy |S r)   )r,   r+   r   r6   is_finished)r   rE   r?   numberr@   trials         r   _get_cached_trialz _CachedStorage._get_cached_trial   s\    4@@@@@J&h'V${{&&(r   c                    | j                   5  | j                  |      }||cd d d        S 	 d d d        | j                  j                  |      S # 1 sw Y   $xY wr)   )r0   r   r*   ro   )r   rE   r   s      r   ro   z_CachedStorage.get_trial   s[    ZZ 	**84E 	 	 	
 }}&&x00	 	s   AAc                   | j                  |       | j                  5  | j                  |   }|=|j                  j	                         D ci c]  \  }}|j
                  |v s|| }}}n|j                  }t        t        |j                         d             }|rt        j                  |      n|cd d d        S c c}}w # 1 sw Y   y xY w)Nc                    | j                   S r)   )r   )ts    r   <lambda>z/_CachedStorage.get_all_trials.<locals>.<lambda>   s
     r   )rI   ) _read_trials_from_remote_storager0   r+   r   itemsr6   r>   sortedrt   r4   deepcopy)r   r?   r   statesr@   r   r   r   s           r   get_all_trialsz_CachedStorage.get_all_trials   s     	--h7ZZ 	AMM(+E !5:\\5G5G5I_	QWWX^M^&!)__&6HIJF,44==(&	A 	A `	A 	As$   /CC $C )AC CCc                   | j                   5  || j                  vrt               | j                  |<   | j                  |   }| j                  j	                  |d |j
                  |j                        }|s
	 d d d        y | j                  ||       |D ]  }|j                  j                         s&|j
                  j                  |j                         Ct        |j                  |j                        |_        |j                  |j
                  v s|j
                  j                  |j                          	 d d d        y # 1 sw Y   y xY w)N)r   included_trial_idstrial_id_greater_than)r0   r+   r   r*   _get_trialsr   r   r_   r6   r   addr^   maxremove)r   r?   r@   r   r   s        r   r   z/_CachedStorage._read_trials_from_remote_storage   s'   ZZ 	Gt}},*4,h'MM(+E]]..#(#=#=&+&B&B	 / F 	G 	G %%h7 	G{{..0..225??C 0353O3OQVQ`Q`/a,??e&@&@@..55eooF	G	G 	G 	Gs   A+EBE'EEc                    | j                   |   }|D ]e  }||j                  f| j                  |j                  <   |j                  | j                  ||j                  f<   ||j
                  |j                  <   g y r)   )r+   r   r,   r^   r-   r   )r   r?   r   r@   r   s        r   r_   z#_CachedStorage._add_trials_to_cache  ss    h' 	/EFD11%//B OTooD118U\\2JK).ELL&	/r   c                :    | j                   j                  |       y r)   )r*   record_heartbeat)r   rE   s     r   r   z_CachedStorage.record_heartbeat  s    &&x0r   c                8    | j                   j                  |      S r)   )r*   _get_stale_trial_idsrV   s     r   r   z#_CachedStorage._get_stale_trial_ids  rW   r   c                6    | j                   j                         S r)   )r*   get_heartbeat_intervalr   s    r   r   z%_CachedStorage.get_heartbeat_interval  s    }}3355r   c                6    | j                   j                         S r)   )r*   get_failed_trial_callbackr   s    r   r   z(_CachedStorage.get_failed_trial_callback  s    }}6688r   )r1   r   r    r!   )r    dict[Any, Any])r6   r   r    r!   r)   )r   zSequence[StudyDirection]r<   z
str | Noner    int)r?   r   r    r!   )r?   r   rI   strrJ   r   r    r!   )r?   r   rI   r   rJ   r	   r    r!   )r<   r   r    r   )r?   r   r    r   )r?   r   r    zlist[StudyDirection])r?   r   r    zdict[str, Any])r    zlist[FrozenStudy])r?   r   r`   FrozenTrial | Noner    r   )
rE   r   re   r   rf   floatrg   zdistributions.BaseDistributionr    r!   )r?   r   rD   r   r    r   )r?   r   r    r   )rE   r   r6   r   rt   zSequence[float] | Noner    bool)rE   r   rx   r   ry   r   r    r!   )rE   r   rI   r   rJ   r   r    r!   )rE   r   rI   r   rJ   r	   r    r!   )rE   r   r    r   )rE   r   r    r   )TN)r?   r   r   r   r   zContainer[TrialState] | Noner    list[FrozenTrial])r?   r   r   r   r    r!   )rE   r   r    r!   )r?   r   r    z	list[int])r    z
int | None)r    z4Callable[['optuna.Study', FrozenTrial], None] | None)"r"   r#   r$   __doc__r   r7   r:   r=   rC   rG   rL   rN   rP   rS   rU   rY   r[   rb   rd   ri   rr   ru   rw   r|   r   r   ro   r   r   r_   r   r   r   r   r%   r   r   r'   r'   "   s}   0&
&
 NR
2
@J
	
-@B@<>/`` ` $	`
 5` 
`]( 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   r4   r.   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 $ #	% 	%z9[- z9r   