
    -ji<                    ,   S SK Jr  S SKJr  S SKJr  S SKrS SKJr  S SKrS SKJ	r	  S SK
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  \R8                  R;                  \5      r " S S\5      r  " S S5      r!g)    )annotations)	Container)SequenceN)datetime)Any)distributions)JSONSerializable)DuplicatedStudyError)BaseStorage)DEFAULT_STUDY_NAME_PREFIX)FrozenStudy)StudyDirection)FrozenTrial)
TrialStatec                     \ 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S0S jrS0S jrS1S jrS2S jrS(S3S jjr\S4S j5       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@S  jr"  SA       SBS! jjr#S*S" jr$SCS# jr%S$r&g)DInMemoryStorage   a  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                    0 U l         0 U l        0 U l        SU l        SU l        [
        R                  " 5       U l        0 U l        g )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    T/home/james-whalen/.local/lib/python3.13/site-packages/optuna/storages/_in_memory.py__init__InMemoryStorage.__init__1   s?    LN-13/1__&
:<'    c                @    U R                   R                  5       nUS	 U$ )Nr   )__dict__copyr   states     r    __getstate__InMemoryStorage.__getstate__<   s     ""$'Nr#   c                n    U R                   R                  U5        [        R                  " 5       U l        g N)r%   updater   r   r   r'   s     r    __setstate__InMemoryStorage.__setstate__A   s"    U#__&
r#   Nc                   U R                      U R                  S-   nU =R                  S-  sl        Ub  X R                  ;   a  [        eO'[	        [
        R                  " 5       5      n[        U-   n[        U[        U5      5      U R                  U'   X0R                  U'   SU R                  U'   [        R                  SU 35        UsS S S 5        $ ! , (       d  f       g = f)N   r   z)A new study created in memory with name: )r   r   r   r
   struuiduuid4r   
_StudyInfolistr   r   _loggerinfo)r   
directions
study_namestudy_id
study_uuids        r    create_new_study InMemoryStorage.create_new_studyE   s     ZZ))A-H!#%!7!77.. 8 !.
6C
&0T*=M&NDMM(#19"":.89D++H5LLDZLQR# ZZs   B=C
C"c                `   U R                      U R                  U5        U R                  U   R                   H  nU R                  UR
                  	 M     U R                  U   R                  nU R                  U	 U R                  U	 U R                  U	 S S S 5        g ! , (       d  f       g = fr,   )	r   _check_study_idr   trialsr   	_trial_idnamer   r   )r   r;   trialr:   s       r    delete_studyInMemoryStorage.delete_study[   s    ZZ  *x07799%//J 8x055J&&z2h'//9 ZZs   B	B
B-c                    U R                      U R                  U5        X0R                  U   R                  U'   S S S 5        g ! , (       d  f       g = fr,   r   r@   r   
user_attrsr   r;   keyvalues       r    set_study_user_attr#InMemoryStorage.set_study_user_attrf   s8    ZZ  *6;MM(#..s3 ZZ   -A
Ac                    U R                      U R                  U5        X0R                  U   R                  U'   S S S 5        g ! , (       d  f       g = fr,   r   r@   r   system_attrsrJ   s       r    set_study_system_attr%InMemoryStorage.set_study_system_attrl   s8    ZZ  *8=MM(#005 ZZrO   c                    U R                      XR                  ;  a  [        SU S35      eU R                  U   sS S S 5        $ ! , (       d  f       g = f)NzNo such study .)r   r   KeyError)r   r:   s     r    get_study_id_from_name&InMemoryStorage.get_study_id_from_namer   sA    ZZ!7!77
|1=>>))*5	 ZZs   -A
Ac                    U R                      U R                  U5        U R                  U   R                  sS S S 5        $ ! , (       d  f       g = fr,   )r   r@   r   rC   r   r;   s     r    get_study_name_from_id&InMemoryStorage.get_study_name_from_idy   s3    ZZ  *==*// ZZ   *A
Ac                    U R                      U R                  U5        U R                  U   R                  sS S S 5        $ ! , (       d  f       g = fr,   )r   r@   r   r9   r[   s     r    get_study_directions$InMemoryStorage.get_study_directions~   3    ZZ  *==*55 ZZr^   c                    U R                      U R                  U5        U R                  U   R                  sS S S 5        $ ! , (       d  f       g = fr,   rH   r[   s     r    get_study_user_attrs$InMemoryStorage.get_study_user_attrs   rb   r^   c                    U R                      U R                  U5        U R                  U   R                  sS S S 5        $ ! , (       d  f       g = fr,   rQ   r[   s     r    get_study_system_attrs&InMemoryStorage.get_study_system_attrs   s3    ZZ  *==*77 ZZr^   c                    U R                      U R                   Vs/ s H  oR                  U5      PM     snsS S S 5        $ s  snf ! , (       d  f       g = fr,   )r   r   _build_frozen_studyr[   s     r    get_all_studiesInMemoryStorage.get_all_studies   s:    ZZGK}}U}8,,X6}U ZU Zs   AAAA
Ac           	         U R                   U   n[        UR                  S UR                  [        R
                  " UR                  5      [        R
                  " UR                  5      US9$ )N)r:   	directionr9   rI   rR   r;   )r   r   rC   r9   r&   deepcopyrI   rR   )r   r;   studys      r    rj   #InMemoryStorage._build_frozen_study   sW    h'zz''}}U%5%56u'9'9:
 	
r#   c                   U R                      U R                  U5        Uc  U R                  5       nO[        R                  " U5      nU R
                  S-   nU =R
                  S-  sl        [        U R                  U   R                  5      Ul	        XCl
        XR                  4U R                  U'   U R                  U   R                  R                  U5        U R                  XA5        UsS S S 5        $ ! , (       d  f       g = fNr1   )r   r@   _create_running_trialr&   ro   r   lenr   rA   numberrB   r   append_update_cache)r   r;   template_trialrD   trial_ids        r    create_new_trial InMemoryStorage.create_new_trial   s    ZZ  *%224n5))A-H!#t}}X6==>EL&O?G>VD11(;MM(#**11%8x2 ZZs   C!C88
Dc                 j    [        SS[        R                  0 0 0 0 S 0 [        R                  " 5       S S9$ )Nr   )rz   rv   r(   paramsr   rI   rR   rL   intermediate_valuesdatetime_startdatetime_complete)r   r   RUNNINGr   now r#   r    rt   %InMemoryStorage._create_running_trial   s<    $$ "#<<>"
 	
r#   c                   U R                      U R                  U5      nU R                  XR                  5        U R                  U   S   nX R
                  U   R                  ;   a1  [        R                  " U R
                  U   R                  U   U5        X@R
                  U   R                  U'   [        R                  " U5      n[        R                  " UR                  5      Ul
        UR                  U5      UR                  U'   [        R                  " UR                  5      Ul        XER                  U'   U R                  X5        S S S 5        g ! , (       d  f       g = f)Nr   )r   
_get_trialcheck_trial_is_updatabler(   r   r   param_distributionr    check_distribution_compatibilityr&   r~   to_external_repr
_set_trial)r   rz   
param_nameparam_value_internaldistributionrD   r;   s          r    set_trial_paramInMemoryStorage.set_trial_param   s    ZZOOH-E))(KK@<<XFqIH]]84GGG>>MM(+>>zJL
 FRMM(#66zB IIe$E99U\\2EL'3'D'DEY'ZELL$"&))E,?,?"@E.:
+OOH,+ ZZs   EE
E(c                H   U R                      U R                  R                  U5      nUc  [        SU S35      eUR                  n[        U5      U::  a  [        SU SU S35      eXB   nUR                  U:X  d   eUR                  sS S S 5        $ ! , (       d  f       g = f)NNo study with study_id  exists.zNo trial with trial number z exists in study with study_id rV   )r   r   getrW   rA   ru   rv   rB   )r   r;   trial_numberrp   rA   rD   s         r    'get_trial_id_from_study_id_trial_number7InMemoryStorage.get_trial_id_from_study_id_trial_number   s    ZZMM%%h/E}!8
(KLL\\F6{l*1, @..6Zq: 
 (E<<<///?? ZZs   A<B
B!c                    U R                      U R                  U5        U R                  U   S   sS S S 5        $ ! , (       d  f       g = frs   )r   _check_trial_idr   r   rz   s     r    get_trial_number_from_id(InMemoryStorage.get_trial_number_from_id   s4    ZZ  *88B1E ZZs	   #:
Ac                D   U R                      U R                  U5        U R                  U   R                  nUc  [	        S5      e[        U R                  U   R                  5      S:  a  [        S5      eU R                  U5      sS S S 5        $ ! , (       d  f       g = f)NzNo trials are completed yet.r1   zBBest trial can be obtained only for single-objective optimization.)	r   r@   r   best_trial_id
ValueErrorru   r9   RuntimeError	get_trial)r   r;   r   s      r    get_best_trialInMemoryStorage.get_best_trial   s    ZZ  * MM(3AAM$ !?@@T]]8,7781<"X  >>-0 ZZs   A:B
Bc                    U R                      U R                  U5      nUR                  U   nUR                  UR                  U   5      sS S S 5        $ ! , (       d  f       g = fr,   )r   r   r   to_internal_reprr~   )r   rz   r   rD   r   s        r    get_trial_paramInMemoryStorage.get_trial_param  sH    ZZOOH-E ..z:L00j1IJ	 ZZs   >A
A#c                   U R                      [        R                  " U R                  U5      5      nU R                  XR                  5        U[
        R                  :X  a(  UR                  [
        R                  :w  a
   S S S 5        gX$l        Ub  X4l        U[
        R                  :X  a  [        R                  " 5       Ul        UR                  5       (       aO  [        R                  " 5       Ul        U R                  X5        U R                  U   S   nU R!                  X5        OU R                  X5         S S S 5        g! , (       d  f       g = f)NFr   T)r   r&   r   r   r(   r   r   WAITINGvaluesr   r   r   is_finishedr   r   r   rx   )r   rz   r(   r   rD   r;   s         r    set_trial_state_values&InMemoryStorage.set_trial_state_values	  s     ZZIIdooh78E))(KK@
***u{{j>P>P/P Z  K!%
***'/||~$  ""*2,,.'0@@J1M""860- ZZs   A4E
B3E
Ec                Z   U R                  U5      nUR                  [        R                  :w  a  g U R                  U   R
                  nUc  XR                  U   l        g U R                  U5      n[        U5      S:  a  g US   nU R                  U5      nUc   eUR                  c  XR                  U   l        g UR                  c   eUR                  nUR                  n	U[        R                  :X  a  X:  a  XR                  U   l        g g X:  a  XR                  U   l        g g )Nr1   r   )r   r(   r   COMPLETEr   r   r`   ru   rL   r   MAXIMIZE)
r   rz   r;   rD   r   _directionsrn   
best_trial
best_value	new_values
             r    rx   InMemoryStorage._update_cache$  s   );;*---h/== 4<MM(#1//9{aN	__]3
%%%#4<MM(#1{{&&&%%
KK	///%8@h'5 & %8@h'5 &r#   c                \   U R                      U R                  U5      nU R                  XR                  5        [        R                  " U5      n[        R                  " UR
                  5      Ul        X4R
                  U'   U R                  X5        S S S 5        g ! , (       d  f       g = fr,   )r   r   r   r(   r&   r   r   )r   rz   stepintermediate_valuerD   s        r    set_trial_intermediate_value,InMemoryStorage.set_trial_intermediate_valueE  st     ZZOOH-E))(KK@IIe$E(,		%2K2K(LE%.@%%d+OOH, ZZ   BB
B+c                ~   U R                      U R                  U5        U R                  U5      nU R                  XR                  5        [
        R
                  " U5      n[
        R
                  " UR                  5      Ul        X4R                  U'   U R                  X5        S S S 5        g ! , (       d  f       g = fr,   )r   r   r   r   r(   r&   rI   r   r   rz   rK   rL   rD   s        r    set_trial_user_attr#InMemoryStorage.set_trial_user_attrQ  s    ZZ  *OOH-E))(KK@IIe$E#yy)9)9:E$)S!OOH, ZZs   BB..
B<c                \   U R                      U R                  U5      nU R                  XR                  5        [        R                  " U5      n[        R                  " UR
                  5      Ul        X4R
                  U'   U R                  X5        S S S 5        g ! , (       d  f       g = fr,   )r   r   r   r(   r&   rR   r   r   s        r    set_trial_system_attr%InMemoryStorage.set_trial_system_attr\  sr    ZZOOH-E))(KK@IIe$E!%5+=+=!>E&+s#OOH, ZZr   c                r    U R                      U R                  U5      sS S S 5        $ ! , (       d  f       g = fr,   )r   r   r   s     r    r   InMemoryStorage.get_trialf  s    ZZ??8, ZZs   (
6c                ~    U R                  U5        U R                  U   u  p#U R                  U   R                  U   $ r,   )r   r   r   rA   )r   rz   r;   r   s       r    r   InMemoryStorage._get_trialj  s=    X&!%!F!Fx!P}}X&--l;;r#   c                \    U R                   U   u  p4X R                  U   R                  U'   g r,   )r   r   rA   )r   rz   rD   r;   r   s        r    r   InMemoryStorage._set_trialo  s,    !%!F!Fx!P7<h&&|4r#   c                   U R                      U R                  U5        U[        R                  4:X  a  / nU R                  U   R
                  U R                  U   S   HT  nUR                  [        R                  :X  d  M#  U(       d  UR                  U R                  U'   UR                  U5        MV     U(       d/  [        U R                  U   R
                  5      U R                  U'   O?U R                  U   R
                  nUb#  U Vs/ s H  ofR                  U;   d  M  UPM     nnU(       a  [        R                  " U5      nO[        R                  " U5      nS S S 5        U$ s  snf ! , (       d  f       W$ = fr,   )r   r@   r   r   r   rA   r   r(   rv   rw   ru   r&   ro   )r   r;   ro   statesrA   rD   ts          r    get_all_trialsInMemoryStorage.get_all_trialss  s=    ZZ  * *,,..,.!]]84;;33H=?E {{j&8&88%HMD;;HEe, @CDMMRZD[DbDb@cD33H= x077%)/EA77f3DaFEv. 6*5 8  F) Z8 s+   A1E0BE0E+%E++6E0+E00
E?c                @    XR                   ;  a  [        SU S35      eg )Nr   r   )r   rW   r[   s     r    r@   InMemoryStorage._check_study_id  s&    ==(4XJhGHH )r#   c                @    XR                   ;  a  [        SU S35      eg )NzNo trial with trial_id r   )r   rW   r   s     r    r   InMemoryStorage._check_trial_id  s)    @@@4XJhGHH Ar#   )r   r   r   r   r   r   r   )returnNone)r   dict[Any, Any])r(   r   r   r   r,   )r9   zSequence[StudyDirection]r:   z
str | Noner   int)r;   r   r   r   )r;   r   rK   r2   rL   r   r   r   )r;   r   rK   r2   rL   r	   r   r   )r:   r2   r   r   )r;   r   r   r2   )r;   r   r   list[StudyDirection])r;   r   r   zdict[str, Any])r   zlist[FrozenStudy])r;   r   r   r   )r;   r   ry   zFrozenTrial | Noner   r   )r   r   )
rz   r   r   r2   r   floatr   zdistributions.BaseDistributionr   r   )r;   r   r   r   r   r   )rz   r   r   r   )r;   r   r   r   )rz   r   r   r2   r   r   )rz   r   r(   r   r   zSequence[float] | Noner   bool)rz   r   r;   r   r   r   )rz   r   r   r   r   r   r   r   )rz   r   rK   r2   rL   r   r   r   )rz   r   rK   r2   rL   r	   r   r   )rz   r   r   r   )rz   r   rD   r   r   r   )TN)r;   r   ro   r   r   zContainer[TrialState] | Noner   zlist[FrozenTrial])rz   r   r   r   )'__name__
__module____qualname____firstlineno____doc__r!   r)   r.   r=   rE   rM   rS   rX   r\   r`   rd   rg   rk   rj   r{   staticmethodrt   r   r   r   r   r   r   rx   r   r   r   r   r   r   r   r@   r   __static_attributes__r   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IIr#   r   c                      \ rS rSrSS jrSrg)r5   i  c                b    / U l         0 U l        0 U l        0 U l        Xl        X l        S U l        g r,   )rA   r   rI   rR   rC   r9   r   )r   rC   r9   s      r    r!   _StudyInfo.__init__  s2    )+MO*,,.	0:)-r#   )r   r9   rC   r   rR   rA   rI   N)rC   r2   r9   r   r   r   )r   r   r   r   r!   r   r   r#   r    r5   r5     s    .r#   r5   )"
__future__r   collections.abcr   r   r&   r   r   typingr   r3   optunar   optuna._typingr	   optuna.exceptionsr
   optuna.storagesr   optuna.storages._baser   optuna.study._frozenr   optuna.study._study_directionr   optuna.trialr   r   logging
get_loggerr   r7   r   r5   r   r#   r    <module>r      sl    " % $         + 2 ' ; , 8 $ # ..
#
#H
-CIk CIL. .r#   