o
    }oi<                     @  s   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jeZG dd deZ G dd dZ!dS )    )annotations)	Container)SequenceN)datetime)Any)distributions)JSONSerializable)DuplicatedStudyError)BaseStorage)DEFAULT_STUDY_NAME_PREFIX)FrozenStudy)StudyDirection)FrozenTrial)
TrialStatec                   @  sd  e Zd ZdZdlddZdmddZdnd
dZ	dodpddZdqddZdrddZ	dsddZ
dtd d!Zdud"d#Zdvd%d&Zdwd(d)Zdwd*d+Zdxd-d.Zdyd0d1Zdodzd4d5Zed{d7d8Zd|d?d@Zd}dBdCZd~dDdEZddFdGZddHdIZ	doddNdOZddPdQZddTdUZddVdWZddXdYZddZd[Zdd\d]Z dd_d`Z!	a	dddfdgZ"dqdhdiZ#ddjdkZ$dS )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)
    returnNonec                 C  s2   i | _ i | _i | _d| _d| _t | _i | _d S )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self r   N/home/ubuntu/.local/lib/python3.10/site-packages/optuna/storages/_in_memory.py__init__1   s   

zInMemoryStorage.__init__dict[Any, Any]c                 C  s   | j  }|d= |S )Nr   )__dict__copyr   stater   r   r    __getstate__<   s   
zInMemoryStorage.__getstate__r&   c                 C  s   | j | t | _d S N)r#   updater   r   r   r%   r   r   r    __setstate__A   s   zInMemoryStorage.__setstate__N
directionsSequence[StudyDirection]
study_name
str | Noneintc                 C  s   | j H | jd }|  jd7  _|d ur|| jv rtn
tt }t| }t|t	|| j
|< || j|< d| j|< td|  |W  d    S 1 sNw   Y  d S )N   r   z)A new study created in memory with name: )r   r   r   r	   struuiduuid4r   
_StudyInfolistr   r   _loggerinfo)r   r+   r-   study_id
study_uuidr   r   r    create_new_studyE   s   



$z InMemoryStorage.create_new_studyr8   c                 C  sv   | j . | | | j| jD ]}| j|j= q| j| j}| j|= | j|= | j|= W d    d S 1 s4w   Y  d S r(   )	r   _check_study_idr   trialsr   	_trial_idnamer   r   )r   r8   trialr-   r   r   r    delete_study[   s   

"zInMemoryStorage.delete_studykeyr1   valuer   c                 C  F   | j  | | || j| j|< W d    d S 1 sw   Y  d S r(   r   r;   r   
user_attrsr   r8   rA   rB   r   r   r    set_study_user_attrf      
"z#InMemoryStorage.set_study_user_attrr   c                 C  rC   r(   r   r;   r   system_attrsrF   r   r   r    set_study_system_attrl   rH   z%InMemoryStorage.set_study_system_attrc                 C  sN   | j  || jvrtd| d| j| W  d    S 1 s w   Y  d S )NzNo such study .)r   r   KeyError)r   r-   r   r   r    get_study_id_from_namer   s
   
$z&InMemoryStorage.get_study_id_from_namec                 C  @   | j  | | | j| jW  d    S 1 sw   Y  d S r(   )r   r;   r   r>   r   r8   r   r   r    get_study_name_from_idy      

$z&InMemoryStorage.get_study_name_from_idlist[StudyDirection]c                 C  rO   r(   )r   r;   r   r+   rP   r   r   r    get_study_directions~   rR   z$InMemoryStorage.get_study_directionsdict[str, Any]c                 C  rO   r(   rD   rP   r   r   r    get_study_user_attrs   rR   z$InMemoryStorage.get_study_user_attrsc                 C  rO   r(   rI   rP   r   r   r    get_study_system_attrs   rR   z&InMemoryStorage.get_study_system_attrslist[FrozenStudy]c                   s>    j   fdd jD W  d    S 1 sw   Y  d S )Nc                   s   g | ]}  |qS r   )_build_frozen_study).0r8   r   r   r    
<listcomp>   s    z3InMemoryStorage.get_all_studies.<locals>.<listcomp>)r   r   r   r   r   r    get_all_studies   s   $zInMemoryStorage.get_all_studiesr   c                 C  s2   | j | }t|jd |jt|jt|j|dS )N)r-   	directionr+   rE   rJ   r8   )r   r   r>   r+   r$   deepcopyrE   rJ   )r   r8   studyr   r   r    rY      s   


z#InMemoryStorage._build_frozen_studytemplate_trialFrozenTrial | Nonec                 C  s   | j L | | |d u r|  }nt|}| jd }|  jd7  _t| j| j|_	||_
||j	f| j|< | j| j| | || |W  d    S 1 sRw   Y  d S Nr0   )r   r;   _create_running_trialr$   r^   r   lenr   r<   numberr=   r   append_update_cache)r   r8   r`   r?   trial_idr   r   r    create_new_trial   s   



$z InMemoryStorage.create_new_trialr   c                   C  s$   t ddtji i i i d i t d dS )Nr   )rh   re   r&   paramsr   rE   rJ   rB   intermediate_valuesdatetime_startdatetime_complete)r   r   RUNNINGr   nowr   r   r   r    rc      s   z%InMemoryStorage._create_running_trialrh   
param_nameparam_value_internalfloatdistributiondistributions.BaseDistributionc                 C  s   | j ^ | |}| ||j | j| d }|| j| jv r+t| j| j| | || j| j|< t		|}t		|j
|_
|||j
|< t		|j|_||j|< | || W d    d S 1 sdw   Y  d S )Nr   )r   
_get_trialcheck_trial_is_updatabler&   r   r   param_distributionr    check_distribution_compatibilityr$   rj   to_external_repr
_set_trial)r   rh   rp   rq   rs   r?   r8   r   r   r    set_trial_param   s    


"zInMemoryStorage.set_trial_paramtrial_numberc                 C  s   | j < | j|}|d u rtd| d|j}t||kr*td| d| d|| }|j|ks5J |jW  d    S 1 sBw   Y  d S )NNo study with study_id  exists.zNo trial with trial number z exists in study with study_id rL   )r   r   getrM   r<   rd   re   r=   )r   r8   r|   r_   r<   r?   r   r   r    'get_trial_id_from_study_id_trial_number   s   $z7InMemoryStorage.get_trial_id_from_study_id_trial_numberc                 C  sB   | j  | | | j| d W  d    S 1 sw   Y  d S rb   )r   _check_trial_idr   r   rh   r   r   r    get_trial_number_from_id   s   
$z(InMemoryStorage.get_trial_number_from_idc                 C  sv   | j . | | | j| j}|d u rtdt| j| jdkr%td| |W  d    S 1 s4w   Y  d S )NzNo trials are completed yet.r0   zBBest trial can be obtained only for single-objective optimization.)	r   r;   r   best_trial_id
ValueErrorrd   r+   RuntimeError	get_trial)r   r8   r   r   r   r    get_best_trial   s   
$zInMemoryStorage.get_best_trialc                 C  sN   | j  | |}|j| }||j| W  d    S 1 s w   Y  d S r(   )r   ru   r   to_internal_reprrj   )r   rh   rp   r?   rs   r   r   r    get_trial_param  s
   

$zInMemoryStorage.get_trial_paramr   valuesSequence[float] | Noneboolc                 C  s   | j d t| |}| ||j |tjkr'|jtjkr'	 W d    dS ||_|d ur1||_|tjkr;t	
 |_| rXt	
 |_| || | j| d }| || n| || 	 W d    dS 1 sjw   Y  d S )NFr   T)r   r$   ru   rv   r&   r   rn   WAITINGr   r   ro   rl   is_finishedrm   rz   r   rg   )r   rh   r&   r   r?   r8   r   r   r    set_trial_state_values	  s&   


$z&InMemoryStorage.set_trial_state_valuesc           
      C  s   |  |}|jtjkrd S | j| j}|d u r|| j| _d S | |}t|dkr,d S |d }|  |}|d us;J |jd u rH|| j| _d S |jd usOJ |j}|j}	|t	j
krh||	k rf|| j| _d S d S ||	krt|| j| _d S d S )Nr0   r   )ru   r&   r   COMPLETEr   r   rT   rd   rB   r   MAXIMIZE)
r   rh   r8   r?   r   _directionsr]   
best_trial
best_value	new_valuer   r   r    rg   $  s4   




zInMemoryStorage._update_cachestepintermediate_valuec                 C  r   | j , | |}| ||j t|}t|j|_||j|< | || W d    d S 1 s2w   Y  d S r(   )r   ru   rv   r&   r$   rk   rz   )r   rh   r   r   r?   r   r   r    set_trial_intermediate_valueE  s   


"z,InMemoryStorage.set_trial_intermediate_valuec                 C  s|   | j 1 | | | |}| ||j t|}t|j|_||j|< | || W d    d S 1 s7w   Y  d S r(   )r   r   ru   rv   r&   r$   rE   rz   r   rh   rA   rB   r?   r   r   r    set_trial_user_attrQ  s   



"z#InMemoryStorage.set_trial_user_attrc                 C  r   r(   )r   ru   rv   r&   r$   rJ   rz   r   r   r   r    set_trial_system_attr\  s   


"z%InMemoryStorage.set_trial_system_attrc                 C  s4   | j  | |W  d    S 1 sw   Y  d S r(   )r   ru   r   r   r   r    r   f  s   $zInMemoryStorage.get_trialc                 C  s(   |  | | j| \}}| j| j| S r(   )r   r   r   r<   )r   rh   r8   r|   r   r   r    ru   j  s   
zInMemoryStorage._get_trialr?   c                 C  s"   | j | \}}|| j| j|< d S r(   )r   r   r<   )r   rh   r?   r8   r|   r   r   r    rz   o  s   zInMemoryStorage._set_trialTr^   statesContainer[TrialState] | Nonelist[FrozenTrial]c                   s   | j o | |  tjfkrBg }| j| j| j| d  D ]}|jtjkr3|s.|j| j|< |	| q|sAt
| j| j| j|< n| j| j} d urU fdd|D }|r]t|}nt|}W d    |S W d    |S 1 suw   Y  |S )Nc                   s   g | ]	}|j  v r|qS r   )r&   )rZ   tr   r   r    r[     s    z2InMemoryStorage.get_all_trials.<locals>.<listcomp>)r   r;   r   r   r   r<   r   r&   re   rf   rd   r$   r^   )r   r8   r^   r   r<   r?   r   r   r    get_all_trialss  s8   




zInMemoryStorage.get_all_trialsc                 C     || j vrtd| dd S )Nr}   r~   )r   rM   rP   r   r   r    r;        
zInMemoryStorage._check_study_idc                 C  r   )NzNo trial with trial_id r~   )r   rM   r   r   r   r    r     r   zInMemoryStorage._check_trial_id)r   r   )r   r"   )r&   r"   r   r   r(   )r+   r,   r-   r.   r   r/   )r8   r/   r   r   )r8   r/   rA   r1   rB   r   r   r   )r8   r/   rA   r1   rB   r   r   r   )r-   r1   r   r/   )r8   r/   r   r1   )r8   r/   r   rS   )r8   r/   r   rU   )r   rX   )r8   r/   r   r   )r8   r/   r`   ra   r   r/   )r   r   )
rh   r/   rp   r1   rq   rr   rs   rt   r   r   )r8   r/   r|   r/   r   r/   )rh   r/   r   r/   )r8   r/   r   r   )rh   r/   rp   r1   r   rr   )rh   r/   r&   r   r   r   r   r   )rh   r/   r8   r/   r   r   )rh   r/   r   r/   r   rr   r   r   )rh   r/   rA   r1   rB   r   r   r   )rh   r/   rA   r1   rB   r   r   r   )rh   r/   r   r   )rh   r/   r?   r   r   r   )TN)r8   r/   r^   r   r   r   r   r   )rh   r/   r   r   )%__name__
__module____qualname____doc__r!   r'   r*   r:   r@   rG   rK   rN   rQ   rT   rV   rW   r\   rY   ri   staticmethodrc   r{   r   r   r   r   r   rg   r   r   r   r   ru   rz   r   r;   r   r   r   r   r    r      sN    



















!






$r   c                   @  s   e Zd Zd
ddZd	S )r4   r>   r1   r+   rS   r   r   c                 C  s.   g | _ i | _i | _i | _|| _|| _d | _d S r(   )r<   rw   rE   rJ   r>   r+   r   )r   r>   r+   r   r   r    r!     s   
z_StudyInfo.__init__N)r>   r1   r+   rS   r   r   )r   r   r   r!   r   r   r   r    r4     s    r4   )"
__future__r   collections.abcr   r   r$   r   r   typingr   r2   optunar   optuna._typingr   optuna.exceptionsr	   optuna.storagesr
   optuna.storages._baser   optuna.study._frozenr   optuna.study._study_directionr   optuna.trialr   r   logging
get_loggerr   r6   r   r4   r   r   r   r    <module>   s0       	