
    (^i=                    ,   d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dlZd dlm	Z	 d dl
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 ej8                  j;                  e      Z G d de      Z  G d d      Z!y)    )annotations)	Container)SequenceN)datetime)Any)distributions)JSONSerializable)DuplicatedStudyError)BaseStorage)DEFAULT_STUDY_NAME_PREFIX)FrozenStudy)StudyDirection)FrozenTrial)
TrialStatec                  t   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d0dZd&d1dZed2d       Z	 	 	 	 	 	 	 	 	 	 d3dZd4dZd5dZd6dZd7dZ	 d&	 	 	 	 	 	 	 d8dZd9d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#dAd"Z$y)BInMemoryStoragea  Storage class that stores data in memory of the Python process.

    Example:

        Create an :class:`~optuna.storages.InMemoryStorage` instance.

        .. testcode::

            import optuna


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


            storage = optuna.storages.InMemoryStorage()

            study = optuna.create_study(storage=storage)
            study.optimize(objective, n_trials=10)
    c                    i | _         i | _        i | _        d| _        d| _        t        j                         | _        i | _        y )N)	 _trial_id_to_study_id_and_number_study_name_to_id_studies_max_study_id_max_trial_id	threadingRLock_lock_prev_waiting_trial_number)selfs    [/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/storages/_in_memory.py__init__zInMemoryStorage.__init__1   s?    LN-13/1__&
:<'    c                @    | j                   j                         }|d= |S )Nr   )__dict__copyr   states     r   __getstate__zInMemoryStorage.__getstate__<   s     ""$'Nr!   c                l    | j                   j                  |       t        j                         | _        y N)r#   updater   r   r   r%   s     r   __setstate__zInMemoryStorage.__setstate__A   s"    U#__&
r!   Nc                   | j                   5  | j                  dz   }| xj                  dz  c_        ||| j                  v r,t        t	        t        j                               }t        |z   }t        |t        |            | j                  |<   || j                  |<   d| j                  |<   t        j                  dj                  |             |cd d d        S # 1 sw Y   y xY w)N   r   z+A new study created in memory with name: {})r   r   r   r
   struuiduuid4r   
_StudyInfolistr   r   _loggerinfoformat)r   
directions
study_namestudy_id
study_uuids        r   create_new_studyz InMemoryStorage.create_new_studyE   s     ZZ 	))A-H!#%!7!77.. .
6C
&0T*=M&NDMM(#19D"":.89D++H5LLFMMjYZ#	 	 	s   CCC&c                R   | j                   5  | j                  |       | j                  |   j                  D ]  }| j                  |j
                  =  | j                  |   j                  }| j                  |= | j                  |= | j                  |= d d d        y # 1 sw Y   y xY wr)   )	r   _check_study_idr   trialsr   	_trial_idnamer   r   )r   r8   trialr7   s       r   delete_studyzInMemoryStorage.delete_study[   s    ZZ 	:  *x077 K99%//JKx055J&&z2h'//9	: 	: 	:s   BBB&c                    | j                   5  | j                  |       || j                  |   j                  |<   d d d        y # 1 sw Y   y xY wr)   r   r<   r   
user_attrsr   r8   keyvalues       r   set_study_user_attrz#InMemoryStorage.set_study_user_attrf   sE    ZZ 	<  *6;DMM(#..s3	< 	< 	<   .AAc                    | j                   5  | j                  |       || j                  |   j                  |<   d d d        y # 1 sw Y   y xY wr)   r   r<   r   system_attrsrE   s       r   set_study_system_attrz%InMemoryStorage.set_study_system_attrl   sE    ZZ 	>  *8=DMM(#005	> 	> 	>rI   c                    | j                   5  || j                  vrt        dj                  |            | j                  |   cd d d        S # 1 sw Y   y xY w)NzNo such study {}.)r   r   KeyErrorr5   )r   r7   s     r   get_study_id_from_namez&InMemoryStorage.get_study_id_from_namer   sQ    ZZ 	6!7!77299*EFF))*5		6 	6 	6s   7AAc                    | j                   5  | j                  |       | j                  |   j                  cd d d        S # 1 sw Y   y xY wr)   )r   r<   r   r?   r   r8   s     r   get_study_name_from_idz&InMemoryStorage.get_study_name_from_idy   s>    ZZ 	0  *==*//	0 	0 	0   *AA
c                    | j                   5  | j                  |       | j                  |   j                  cd d d        S # 1 sw Y   y xY wr)   )r   r<   r   r6   rR   s     r   get_study_directionsz$InMemoryStorage.get_study_directions~   >    ZZ 	6  *==*55	6 	6 	6rT   c                    | j                   5  | j                  |       | j                  |   j                  cd d d        S # 1 sw Y   y xY wr)   rC   rR   s     r   get_study_user_attrsz$InMemoryStorage.get_study_user_attrs   rW   rT   c                    | j                   5  | j                  |       | j                  |   j                  cd d d        S # 1 sw Y   y xY wr)   rK   rR   s     r   get_study_system_attrsz&InMemoryStorage.get_study_system_attrs   s>    ZZ 	8  *==*77	8 	8 	8rT   c                    | j                   5  | j                  D cg c]  }| j                  |       c}cd d d        S c c}w # 1 sw Y   y xY wr)   )r   r   _build_frozen_studyrR   s     r   get_all_studieszInMemoryStorage.get_all_studies   sH    ZZ 	VGK}}U8D,,X6U	V 	VU	V 	Vs   AA A AAc           	         | j                   |   }t        |j                  d |j                  t	        j
                  |j                        t	        j
                  |j                        |      S )N)r7   	directionr6   rD   rL   r8   )r   r   r?   r6   r$   deepcopyrD   rL   )r   r8   studys      r   r]   z#InMemoryStorage._build_frozen_study   sW    h'zz''}}U%5%56u'9'9:
 	
r!   c                
   | j                   5  | j                  |       || j                         }nt        j                  |      }| j
                  dz   }| xj
                  dz  c_        t        | j                  |   j                        |_	        ||_
        ||j                  f| j                  |<   | j                  |   j                  j                  |       | j                  ||       |cd d d        S # 1 sw Y   y xY wNr-   )r   r<   _create_running_trialr$   ra   r   lenr   r=   numberr>   r   append_update_cache)r   r8   template_trialr@   trial_ids        r   create_new_trialz InMemoryStorage.create_new_trial   s    ZZ 	  *%224n5))A-H!#t}}X6==>EL&EO?G>VD11(;MM(#**11%8x2	 	 	s   C"C99Dc                 n    t        ddt        j                  i i i i d i t        j                         d       S )Nr   )rk   rg   r&   paramsr   rD   rL   rG   intermediate_valuesdatetime_startdatetime_complete)r   r   RUNNINGr   now r!   r   re   z%InMemoryStorage._create_running_trial   s<    $$ "#<<>"
 	
r!   c                   | j                   5  | j                  |      }| j                  ||j                         | j                  |   d   }|| j
                  |   j                  v r0t        j                  | j
                  |   j                  |   |       || j
                  |   j                  |<   t        j                  |      }t        j                  |j                        |_
        |j                  |      |j                  |<   t        j                  |j                        |_        ||j                  |<   | j                  ||       d d d        y # 1 sw Y   y xY w)Nr   )r   
_get_trialcheck_trial_is_updatabler&   r   r   param_distributionr    check_distribution_compatibilityr$   rn   to_external_repr
_set_trial)r   rk   
param_nameparam_value_internaldistributionr@   r8   s          r   set_trial_paramzInMemoryStorage.set_trial_param   s%    ZZ 	-OOH-E))(EKK@<<XFqIHT]]84GGG>>MM(+>>zJL
 FRDMM(#66zB IIe$E99U\\2EL'3'D'DEY'ZELL$"&))E,?,?"@E.:E
+OOHe,+	- 	- 	-s   EEE"c                b   | j                   5  | j                  j                  |      }|t        dj	                  |            |j
                  }t        |      |k  rt        dj	                  ||            ||   }|j                  |k(  sJ |j                  cd d d        S # 1 sw Y   y xY w)N!No study with study_id {} exists.z?No trial with trial number {} exists in study with study_id {}.)	r   r   getrO   r5   r=   rf   rg   r>   )r   r8   trial_numberrb   r=   r@   s         r   'get_trial_id_from_study_id_trial_numberz7InMemoryStorage.get_trial_id_from_study_id_trial_number   s    ZZ 	#MM%%h/E}BII(STT\\F6{l*U\\$h  <(E<<<///??!	# 	# 	#s   BB%%B.c                    | j                   5  | j                  |       | j                  |   d   cd d d        S # 1 sw Y   y xY wrd   )r   _check_trial_idr   r   rk   s     r   get_trial_number_from_idz(InMemoryStorage.get_trial_number_from_id   sC    ZZ 	F  *88B1E	F 	F 	Fs	   #:Ac                6   | j                   5  | j                  |       | j                  |   j                  }|t	        d      t        | j                  |   j                        dkD  rt        d      | j                  |      cd d d        S # 1 sw Y   y xY w)NzNo trials are completed yet.r-   zBBest trial can be obtained only for single-objective optimization.)	r   r<   r   best_trial_id
ValueErrorrf   r6   RuntimeError	get_trial)r   r8   r   s      r   get_best_trialzInMemoryStorage.get_best_trial   s    ZZ 	1  * MM(3AAM$ !?@@T]]8,7781<"X  >>-0	1 	1 	1s   A8BBc                    | j                   5  | j                  |      }|j                  |   }|j                  |j                  |         cd d d        S # 1 sw Y   y xY wr)   )r   rv   r   to_internal_reprrn   )r   rk   r|   r@   r~   s        r   get_trial_paramzInMemoryStorage.get_trial_param  sW    ZZ 	KOOH-E ..z:L00j1IJ		K 	K 	Ks   >AAc                   | j                   5  t        j                  | j                  |            }| j                  ||j                         |t
        j                  k(  r'|j                  t
        j                  k7  r
	 d d d        y||_        |||_        |t
        j                  k(  rt        j                         |_        |j                         rPt        j                         |_        | j                  ||       | j                  |   d   }| j!                  ||       n| j                  ||       	 d d d        y# 1 sw Y   y xY w)NFr   T)r   r$   rv   rw   r&   r   rr   WAITINGvaluesr   rs   rp   is_finishedrq   r{   r   ri   )r   rk   r&   r   r@   r8   s         r   set_trial_state_valuesz&InMemoryStorage.set_trial_state_values
  s    ZZ 	IIdooh78E))(EKK@
***u{{j>P>P/P	 	  EK!%
***'/||~$  "*2,,.'%0@@J1M""8X6%0-	 	 	s   A2E B/E  E	c                T   | j                  |      }|j                  t        j                  k7  ry | j                  |   j
                  }||| j                  |   _        y | j                  |      }t        |      dkD  ry |d   }| j                  |      }|J |j                  || j                  |   _        y |j                  J |j                  }|j                  }	|t        j                  k(  r||	k  r|| j                  |   _        y y ||	kD  r|| j                  |   _        y y )Nr-   r   )rv   r&   r   COMPLETEr   r   rV   rf   rG   r   MAXIMIZE)
r   rk   r8   r@   r   _directionsr`   
best_trial
best_value	new_values
             r   ri   zInMemoryStorage._update_cache%  s&   );;*---h/== 4<DMM(#1//9{aN	__]3
%%%#4<DMM(#1{{&&&%%
KK	///I%8@h'5 & I%8@h'5 &r!   c                T   | j                   5  | j                  |      }| j                  ||j                         t	        j                  |      }t	        j                  |j
                        |_        ||j
                  |<   | j                  ||       d d d        y # 1 sw Y   y xY wr)   )r   rv   rw   r&   r$   ro   r{   )r   rk   stepintermediate_valuer@   s        r   set_trial_intermediate_valuez,InMemoryStorage.set_trial_intermediate_valueF  s     ZZ 	-OOH-E))(EKK@IIe$E(,		%2K2K(LE%.@E%%d+OOHe,	- 	- 	-   BBB'c                v   | j                   5  | j                  |       | j                  |      }| j                  ||j                         t        j
                  |      }t        j
                  |j                        |_        ||j                  |<   | j                  ||       d d d        y # 1 sw Y   y xY wr)   )r   r   rv   rw   r&   r$   rD   r{   r   rk   rF   rG   r@   s        r   set_trial_user_attrz#InMemoryStorage.set_trial_user_attrR  s    ZZ 	-  *OOH-E))(EKK@IIe$E#yy)9)9:E$)ES!OOHe,	- 	- 	-s   BB//B8c                T   | j                   5  | j                  |      }| j                  ||j                         t	        j                  |      }t	        j                  |j
                        |_        ||j
                  |<   | j                  ||       d d d        y # 1 sw Y   y xY wr)   )r   rv   rw   r&   r$   rL   r{   r   s        r   set_trial_system_attrz%InMemoryStorage.set_trial_system_attr]  s    ZZ 	-OOH-E))(EKK@IIe$E!%5+=+=!>E&+Es#OOHe,	- 	- 	-r   c                h    | j                   5  | j                  |      cd d d        S # 1 sw Y   y xY wr)   )r   rv   r   s     r   r   zInMemoryStorage.get_trialg  s*    ZZ 	-??8,	- 	- 	-s   (1c                    | j                  |       | j                  |   \  }}| j                  |   j                  |   S r)   )r   r   r   r=   )r   rk   r8   r   s       r   rv   zInMemoryStorage._get_trialk  s?    X&!%!F!Fx!P,}}X&--l;;r!   c                `    | j                   |   \  }}|| j                  |   j                  |<   y r)   )r   r   r=   )r   rk   r@   r8   r   s        r   r{   zInMemoryStorage._set_trialp  s0    !%!F!Fx!P,7<h&&|4r!   c                   | j                   5  | j                  |       |t        j                  fk(  rg }| j                  |   j
                  | j                  |   d  D ]L  }|j                  t        j                  k(  s!|s|j                  | j                  |<   |j                  |       N |sit        | j                  |   j
                        | j                  |<   n9| j                  |   j
                  }||D cg c]  }|j                  |v s| }}|rt        j                  |      }nt        j                  |      }d d d        |S c c}w # 1 sw Y   S xY wr)   )r   r<   r   r   r   r=   r   r&   rg   rh   rf   r$   ra   )r   r8   ra   statesr=   r@   ts          r   get_all_trialszInMemoryStorage.get_all_trialst  sE    ZZ 	+  * *,,..,.!]]84;;33H=? -E {{j&8&88%HMD;;HEe,- @CDMMRZD[DbDb@cD33H= x077%)/EA177f3DaEFEv. 6*5	+8  F)	+8 s+   A1E?A?E>EE/EEEc                T    || j                   vrt        dj                  |            y )Nr   )r   rO   r5   rR   s     r   r<   zInMemoryStorage._check_study_id  s*    4==(>EEhOPP )r!   c                T    || j                   vrt        dj                  |            y )Nz!No trial with trial_id {} exists.)r   rO   r5   r   s     r   r   zInMemoryStorage._check_trial_id  s-    4@@@>EEhOPP Ar!   )returnNone)r   dict[Any, Any])r&   r   r   r   r)   )r6   zSequence[StudyDirection]r7   z
str | Noner   int)r8   r   r   r   )r8   r   rF   r.   rG   r   r   r   )r8   r   rF   r.   rG   r	   r   r   )r7   r.   r   r   )r8   r   r   r.   )r8   r   r   list[StudyDirection])r8   r   r   zdict[str, Any])r   zlist[FrozenStudy])r8   r   r   r   )r8   r   rj   zFrozenTrial | Noner   r   )r   r   )
rk   r   r|   r.   r}   floatr~   zdistributions.BaseDistributionr   r   )r8   r   r   r   r   r   )rk   r   r   r   )r8   r   r   r   )rk   r   r|   r.   r   r   )rk   r   r&   r   r   zSequence[float] | Noner   bool)rk   r   r8   r   r   r   )rk   r   r   r   r   r   r   r   )rk   r   rF   r.   rG   r   r   r   )rk   r   rF   r.   rG   r	   r   r   )rk   r   r   r   )rk   r   r@   r   r   r   )TN)r8   r   ra   r   r   zContainer[TrialState] | Noner   zlist[FrozenTrial])rk   r   r   r   )%__name__
__module____qualname____doc__r    r'   r+   r:   rA   rH   rM   rP   rS   rV   rY   r[   r^   r]   rl   staticmethodre   r   r   r   r   r   r   ri   r   r   r   r   rv   r{   r   r<   r   rt   r!   r   r   r      s   ,	=
'
 NR2@J	,	:<>60
6
6
8
V	
$ 
 
-- - $	-
 5- 
-<#&F1K RV$.8N	6AB
-
-#&
-<A
-	
-	---<
= /3	"" " -	"
 
"HQQr!   r   c                      e Zd ZddZy)r1   c                f    g | _         i | _        i | _        i | _        || _        || _        d | _        y r)   )r=   rx   rD   rL   r?   r6   r   )r   r?   r6   s      r   r    z_StudyInfo.__init__  s6    )+MO*,,.	0:)-r!   N)r?   r.   r6   r   r   r   )r   r   r   r    rt   r!   r   r1   r1     s    .r!   r1   )"
__future__r   collections.abcr   r   r$   r   r   typingr   r/   optunar   optuna._typingr	   optuna.exceptionsr
   optuna.storagesr   optuna.storages._baser   optuna.study._frozenr   optuna.study._study_directionr   optuna.trialr   r   logging
get_loggerr   r3   r   r1   rt   r!   r   <module>r      sl    " % $         + 2 ' ; , 8 $ # ..
#
#H
-DQk DQN. .r!   