
    Di/                        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                h    i | _         t               | _        d| _        i | _        d | _        d | _        y )N)trialssetunfinished_trial_idslast_finished_trial_idparam_distribution
directionsnameselfs    e/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/optuna/storages/_cached_storage.py__init__z_StudyInfo.__init__   s3    .0 /2e!+-#MO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 )Nr1   )__dict__copyr   states     r   __getstate__z_CachedStorage.__getstate__D   s     ""$'Nr    c                l    | j                   j                  |       t        j                         | _        y r*   )r4   updater/   r0   r1   r6   s     r   __setstate__z_CachedStorage.__setstate__I   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_studyr1   r   r   listr   r,   )r   r   r=   study_idstudys        r   r>   z_CachedStorage.create_new_studyM   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*   )r1   r,   r   r.   getr-   r+   delete_study)r   r@   trial_numbertrial_ids       r   rD   z_CachedStorage.delete_studyY   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   rH   z"_CachedStorage.set_study_user_attrf   s    ))(C?r    c                >    | j                   j                  |||       y r*   )r+   set_study_system_attrrI   s       r   rM   z$_CachedStorage.set_study_system_attri   s    ++Hc5Ar    c                8    | j                   j                  |      S r*   )r+   get_study_id_from_name)r   r=   s     r   rO   z%_CachedStorage.get_study_id_from_namel   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*   )r1   r,   r   r+   get_study_name_from_idr   )r   r@   r   s      r   rQ   z%_CachedStorage.get_study_name_from_ido   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*   )r1   r,   r   r+   get_study_directionsr   )r   r@   r   s      r   rT   z#_CachedStorage.get_study_directions}   s    ZZ 	&4==(!]]84??
)%		& 	& 	& ]]77A
ZZ 	<t}},*4,h'1;DMM(#.	< 	& 	&	< rR   c                8    | j                   j                  |      S r*   )r+   get_study_user_attrsr   r@   s     r   rV   z#_CachedStorage.get_study_user_attrs       }}11(;;r    c                8    | j                   j                  |      S r*   )r+   get_study_system_attrsrW   s     r   rZ   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_idr1   r,   r   _add_trials_to_cache)r   r@   template_trialfrozen_trialrF   s        r   create_new_trialz_CachedStorage.create_new_trial   sy    }}66xP))ZZ 	@t}},*4,h'%%h?	@ 		@ s   9A88Bc                4   | j                   5  | j                  |   \  }}| j                  |   j                  j	                  |      }| j
                  j                  |||||       ||| j                  |   j                  |<   d d d        y # 1 sw Y   y xY wr*   )r1   r-   r,   r   rC   r+   _set_trial_param)r   rF   
param_nameparam_value_internaldistributionr@   _cached_dists           r   set_trial_paramz_CachedStorage.set_trial_param   s     ZZ 	V??IKHa--1DDHHTKMM***&:L+ "IUh':::F	V 	V 	Vs   A8BB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*   )r1   r.   r+   'get_trial_id_from_study_id_trial_number)r   r@   rE   rJ   s       r   rm   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   )rT   lenRuntimeErrorr+   _get_best_trial_id	get_trial)r   r@   _directions	directionrF   s        r   get_best_trialz_CachedStorage.get_best_trial   s_    //9{aT   N	==33HiH~~h''r    c                >    | j                   j                  |||      S )N)r7   values)r+   set_trial_state_values)r   rF   r7   rx   s       r   ry   z%_CachedStorage.set_trial_state_values   s!     }}33HERX3YYr    c                >    | j                   j                  |||       y r*   )r+   set_trial_intermediate_value)r   rF   stepintermediate_values       r   r{   z+_CachedStorage.set_trial_intermediate_value   s     	228TCUVr    c                @    | j                   j                  |||       y N)rJ   rK   )r+   set_trial_user_attrr   rF   rJ   rK   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   r7   is_finished)r   rF   r@   numberrA   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*   )r1   r   r+   rs   )r   rF   r   s      r   rs   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    )rJ   ) _read_trials_from_remote_storager1   r,   r   itemsr7   r?   sortedrx   r5   deepcopy)r   r@   r   statesrA   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)r1   r,   r   r+   _get_trialsr   r   r`   r7   r   addr_   maxremove)r   r@   rA   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   rA   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   rF   s     r   r   z_CachedStorage.record_heartbeat  s    &&x0r    c                8    | j                   j                  |      S r*   )r+   _get_stale_trial_idsrW   s     r   r   z#_CachedStorage._get_stale_trial_ids  rX   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    )r2   r   r!   r"   )r!   dict[Any, Any])r7   r   r!   r"   r*   )r   zSequence[StudyDirection]r=   z
str | Noner!   int)r@   r   r!   r"   )r@   r   rJ   strrK   r   r!   r"   )r@   r   rJ   r   rK   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   ra   FrozenTrial | Noner!   r   )
rF   r   rf   r   rg   floatrh   zdistributions.BaseDistributionr!   r"   )r@   r   rE   r   r!   r   )r@   r   r!   r   )rF   r   r7   r   rx   zSequence[float] | Noner!   bool)rF   r   r|   r   r}   r   r!   r"   )rF   r   rJ   r   rK   r   r!   r"   )rF   r   rJ   r   rK   r	   r!   r"   )rF   r   r!   r   )rF   r   r!   r   )TN)r@   r   r   r   r   zContainer[TrialState] | Noner!   list[FrozenTrial])r@   r   r   r   r!   r"   )rF   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   r8   r;   r>   rD   rH   rM   rO   rQ   rT   rV   rZ   r\   rc   rk   rm   rv   ry   r{   r   r   r   rs   r   r   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   r5   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 $ #% %A9[- A9r    