o
    }oi                  
   @  s  U 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Zd dlZd dlm	Z	 d dl
mZ d dl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  d dlm!Z! ej"dDddZ#G dd dZ$e%e!Z&dddddgddZ'de(d< d ej)ej*j+ej*j+ ej*j,ej*j, e-de-d e-dd 	Z.dEd%d&Z/dFd(d)Z0dFd*d+Z1dFd,d-Z2dFd.d/Z3dFd0d1Z4dFd2d3Z5dFd4d5Z6	dGdHd=d>Z7dIdBdCZ8dS )J    )annotationsN)datetime)sleep)Any)JSONSerializable)CategoricalDistribution)FloatDistribution)UpdateFinishedTrialError)BaseStorage)DEFAULT_STUDY_NAME_PREFIX)FrozenStudy)StudyDirection)FrozenTrial)
TrialStatereturnr
   c                   C  s   t N)NotImplementedError r   r   R/home/ubuntu/.local/lib/python3.10/site-packages/optuna/testing/pytest_storages.pystorage   s   r   c                   @  sj  e Zd ZdqddZdqddZdqd	d
ZdqddZdqddZdqddZdqddZ	dqddZ
dqddZdqddZdqddZdqddZdqddZejde e fed d!d"ed d!d#fgdrd'd(Zdqd)d*Zdqd+d,Zdqd-d.Zdqd/d0Zdqd1d2Zdqd3d4Zdqd5d6Zdqd7d8Zdqd9d:Zdqd;d<Zdqd=d>Z dqd?d@Z!dqdAdBZ"dqdCdDZ#dqdEdFZ$dqdGdHZ%dqdIdJZ&dqdKdLZ'ejdMdNdOgdOdNggdsdQdRZ(dqdSdTZ)dqdUdVZ*dqdWdXZ+dqdYdZZ,dqd[d\Z-ejd]e.j/e.j0gejd^g d_d`e1dadbgd`e1dcdbge1dad`dbe1dcge1dage1dcggdtdfdgZ2dqdhdiZ3dqdjdkZ4dqdldmZ5dqdndoZ6dpS )uStorageTestCaser   r
   r   Nonec                 C  s   |j tjgd}| }t|dksJ |d j|ksJ |d jts'J |j tjgd}||ks5J | }t|dksAJ dd |D ||hksNJ t	dd |D sYJ d S )	N
directions   r      c                 S     h | ]}|j qS r   	_study_id.0sr   r   r   	<setcomp>/       z8StorageTestCase.test_create_new_study.<locals>.<setcomp>c                 s  s    | ]	}|j tV  qd S r   )
study_name
startswithr   r   r   r   r   	<genexpr>0       z8StorageTestCase.test_create_new_study.<locals>.<genexpr>)
create_new_studyr   MINIMIZEget_all_studieslenr   r$   r%   r   all)selfr   study_idfrozen_studies	study_id2r   r   r   test_create_new_study"   s   z%StorageTestCase.test_create_new_studyc                 C  s`   |j tjgd}|j tjgd}|| |j tjgd}| }dd |D ||hks.J d S )Nr   c                 S  r   r   r   r   r   r   r   r"   9   r#   zBStorageTestCase.test_create_new_study_unique_id.<locals>.<setcomp>r(   r   r)   delete_studyr*   )r-   r   r.   r0   	study_id3r/   r   r   r   test_create_new_study_unique_id2   s   
z/StorageTestCase.test_create_new_study_unique_idc                 C  sv   | j j}|}|jtjg|d}|||ksJ ttj	j
 |jtjg|d W d    d S 1 s4w   Y  d S )Nr   r$   )test_create_new_study_with_name__name__r(   r   r)   get_study_name_from_idpytestraisesoptuna
exceptionsDuplicatedStudyErrorr-   r   function_namer$   r.   r   r   r   r7   ;   s   "z/StorageTestCase.test_create_new_study_with_namec                 C  s   |j tjgd}|| ||}t|dksJ tt |	|d  W d    n1 s1w   Y  |	| |j tjgd}||}t|dksPJ |	| tt |	| W d    d S 1 skw   Y  d S )Nr   r   r   )
r(   r   r)   create_new_trialget_all_trialsr+   r:   r;   KeyErrorr3   )r-   r   r.   trialsr   r   r   test_delete_studyH   s   




"z!StorageTestCase.test_delete_studyc                 C  st   |j tjgd}|j tjgd}|j tjgd}|| dd | D }||v s,J ||vs2J ||v s8J d S )Nr   c                 S  s   i | ]}|j |qS r   r   r   r   r   r   
<dictcomp>c   s    zSStorageTestCase.test_delete_study_after_create_multiple_studies.<locals>.<dictcomp>r2   )r-   r   	study_id1r0   r4   studiesr   r   r   /test_delete_study_after_create_multiple_studies\   s   
z?StorageTestCase.test_delete_study_after_create_multiple_studiesc                 C  s   | j j}|}|jtjg|d}|||ksJ |||ks!J tt	 |d W d    n1 s6w   Y  tt	 ||d  W d    d S 1 sSw   Y  d S )Nr6   z
dummy-namer   )
6test_get_study_id_from_name_and_get_study_name_from_idr8   r(   r   r)   r9   get_study_id_from_namer:   r;   rC   r?   r   r   r   rJ   h   s   "zFStorageTestCase.test_get_study_id_from_name_and_get_study_name_from_idc              	     s   t jft jft jt jft jt jft jt jgt jt jgfD ]2 jdd fdd}|  d }tt  | W d    n1 sIw   Y  qd S )Nr   r   r   c                    s"     } | tksJ dd S )NzCDirection of a study should be a tuple of `StudyDirection` objects.)get_study_directionslist)got_directionsr   r.   targetr   r   	check_get   s   
zDStorageTestCase.test_set_and_get_study_directions.<locals>.check_getr   )r   r   )r   r)   MAXIMIZEr(   r:   r;   rC   rL   )r-   r   rQ   non_existent_study_idr   rO   r   !test_set_and_get_study_directions{   s    



z1StorageTestCase.test_set_and_get_study_directionsc                       j tjgdd fdd	}t D ]	\}}||| q tks'J |d
d d }tt  | W d    n1 sEw   Y  tt  	|dd W d    d S 1 sbw   Y  d S )Nr   keystrvaluer   r   r   c                   (     | |  |  |ksJ d S r   )set_study_user_attrget_study_user_attrsrV   rX   r   r.   r   r   check_set_and_get      zLStorageTestCase.test_set_and_get_study_user_attrs.<locals>.check_set_and_getdatasetImageNetr   rV   rW   rX   r   r   r   )
r(   r   r)   EXAMPLE_ATTRSitemsr[   r:   r;   rC   rZ   r-   r   r^   rV   rX   rS   r   r]   r   !test_set_and_get_study_user_attrs      
"z1StorageTestCase.test_set_and_get_study_user_attrsc                 C     t | d S r   )-_test_set_and_get_study_user_attrs_for_floatsr-   r   r   r   r   ,test_set_and_get_study_user_attrs_for_floats      z<StorageTestCase.test_set_and_get_study_user_attrs_for_floatsc                   rU   )Nr   rV   rW   rX   r   r   r   c                   rY   r   )set_study_system_attrget_study_system_attrsr\   r]   r   r   r^      r_   zNStorageTestCase.test_set_and_get_study_system_attrs.<locals>.check_set_and_getr`   ra   r   rb   )
r(   r   r)   rc   rd   rn   r:   r;   rC   rm   re   r   r]   r   #test_set_and_get_study_system_attrs   rg   z3StorageTestCase.test_set_and_get_study_system_attrsc                 C  rh   r   )/_test_set_and_get_study_system_attrs_for_floatsrj   r   r   r   .test_set_and_get_study_system_attrs_for_floats   rl   z>StorageTestCase.test_set_and_get_study_system_attrs_for_floatsc                 C  s   |j tjgd}t D ]\}}|||| q||tks!J ||i ks*J |j tjgd}t D ]\}}|||| q6||tksKJ ||i ksTJ d S Nr   )	r(   r   r)   rc   rd   rm   rn   r[   rZ   )r-   r   r.   rV   rX   r   r   r   *test_study_user_and_system_attrs_confusion   s   z:StorageTestCase.test_study_user_and_system_attrs_confusionc                 C  s2  ddd}|j tjgd}d}t|D ]$}t }td ||}td t }||}	||	|||| qt	
t ||d  W d    n1 sOw   Y  |j tjgd}
t|D ]}||
 ||
}	dd |	D tt|d ks}J q`||||
 }	tdd |	D d| ksJ d S )NrD   list[FrozenTrial]idxinttrial_idtime_before_creationr   time_after_creationr   r   c                   sB  t | |d ks
J t dd | D |d ksJ dd | D v s$J dd | D tt|d ks5J tdd | D s@J tdd | D sKJ td	d | D sVJ td
d | D saJ tdd | D slJ tfdd| D szJ t fdd| D sJ tdd | D sJ tdd | D sJ d S )Nr   c                 S  r   r   	_trial_idr    tr   r   r   r"      r#   zOStorageTestCase.test_create_new_trial.<locals>._check_trials.<locals>.<setcomp>c                 S  r   r   rz   r|   r   r   r   r"      r#   c                 S  r   r   numberr|   r   r   r   r"      r#   c                 s      | ]	}|j tjkV  qd S r   )stater   RUNNINGr|   r   r   r   r&      r'   zOStorageTestCase.test_create_new_trial.<locals>._check_trials.<locals>.<genexpr>c                 s      | ]}|j i kV  qd S r   paramsr|   r   r   r   r&          c                 s  r   r   intermediate_valuesr|   r   r   r   r&      r   c                 s  r   r   
user_attrsr|   r   r   r   r&      r   c                 s  r   r   system_attrsr|   r   r   r   r&      r   c                 3  s.    | ]}|j kr|jd ur|j k V  qd S r   r{   datetime_startr|   )rx   rw   r   r   r&      s    c                 3  s>    | ]}|j kr|jd ur|j  k o k n  V  qd S r   r   r|   ry   rx   rw   r   r   r&      s    c                 s      | ]}|j d u V  qd S r   datetime_completer|   r   r   r   r&      r   c                 s  r   r   rX   r|   r   r   r   r&      r   r+   setranger,   )rD   ru   rw   rx   ry   r   r   r   _check_trials   s"   "z<StorageTestCase.test_create_new_trial.<locals>._check_trialsr      MbP?r   c                 S  r   r   r~   r|   r   r   r   r"     r#   z8StorageTestCase.test_create_new_trial.<locals>.<setcomp>c                 S  r   r   rz   r|   r   r   r   r"     r#   r   )rD   rt   ru   rv   rw   rv   rx   r   ry   r   r   r   )r(   r   r)   r   r   nowr   rA   rB   r:   r;   rC   r   r+   )r-   r   r   r.   n_trial_in_studyirx   rw   ry   rD   r0   r   r   r   test_create_new_trial   s*   




$"z%StorageTestCase.test_create_new_trialzstart_time,complete_timei  	   r   r   
start_timer   complete_timec                   sX  t tjd||ddidtddiddidd	id
dddddd d! fdd}|jtjgd}d}t|D ]}|j| d}|	|}	||	|| q4t
t ||d  W d    n1 s`w   Y  |jtjgd}
t|D ]}|j|
 d |	|
}	dd |	D tt|d ksJ qq|	||	|
 }	tdd |	D d | ksJ d S )"Ni'  x      ?r   r   foobarbaz{   
   d   i  )r   r   r   7   )r   rX   r   r   r   distributionsr   r   r   r   rw   rD   rt   ru   rv   rw   r   r   c                   sX  t | |d ks
J t dd | D |d ksJ |dd | D v s$J dd | D tt|d ks5J t fdd| D sBJ t fdd| D sOJ t fd	d| D s\J t fd
d| D siJ t fdd| D svJ t fdd| D sJ t fdd| D sJ t fdd| D sJ t fdd| D sJ d S )Nr   c                 S  r   r   rz   r|   r   r   r   r"   *  r#   zcStorageTestCase.test_create_new_trial_with_template_trial.<locals>._check_trials.<locals>.<setcomp>c                 S  r   r   rz   r|   r   r   r   r"   +  r#   c                 S  r   r   r~   r|   r   r   r   r"   ,  r#   c                 3      | ]	}|j  j kV  qd S r   r   r|   template_trialr   r   r&   -  r'   zcStorageTestCase.test_create_new_trial_with_template_trial.<locals>._check_trials.<locals>.<genexpr>c                 3  r   r   r   r|   r   r   r   r&   .  r'   c                 3  r   r   )r   r|   r   r   r   r&   /  r'   c                 3  r   r   r   r|   r   r   r   r&   0  r'   c                 3  r   r   r   r|   r   r   r   r&   1  r'   c                 3  r   r   r   r|   r   r   r   r&   2  r'   c                 3  r   r   )r   r|   r   r   r   r&   3  r'   c                 3  r   r   r   r|   r   r   r   r&   4  r'   c                 3  r   r   r   r|   r   r   r   r&   5  r'   r   )rD   ru   rw   r   r   r   r   (  s   "zPStorageTestCase.test_create_new_trial_with_template_trial.<locals>._check_trialsr   r   r   c                 S  r   r   r~   r|   r   r   r   r"   G  r#   zLStorageTestCase.test_create_new_trial_with_template_trial.<locals>.<setcomp>c                 S  r   r   rz   r|   r   r   r   r"   K  r#   r   )rD   rt   ru   rv   rw   rv   r   r   )r   r   COMPLETEr   r(   r   r)   r   rA   rB   r:   r;   rC   r   r+   )r-   r   r   r   r   r.   r   r   rw   rD   r0   r   r   r   )test_create_new_trial_with_template_trial  s<   


$"z9StorageTestCase.test_create_new_trial_with_template_trialc                 C  s   |j tjgd}||}||dksJ ||}||dks$J tt ||d  W d    d S 1 s<w   Y  d S )Nr   r   r   )r(   r   r)   rA   get_trial_number_from_idr:   r;   rC   r-   r   r.   rw   r   r   r   test_get_trial_number_from_idM  s   

"z-StorageTestCase.test_get_trial_number_from_idc           	   
     s   j tjgd fddtD }t|tD ][\}}|tjkr!q |jtj	ks,J  |j
} j||| r<dnd d  |j|ksJJ |tj	krY |j
|ksYJ | rh |jd usgJ q |jd u srJ qtt t|d } j|tjd W d    n1 sw   Y  tD ]@}| sq } j||dd tD ])}d }|tjkrdg}tt  j|||d W d    n1 sw   Y  qqd S )	Nr   c                   s   g | ]}  qS r   )rA   )r    _r]   r   r   
<listcomp>\  s    zIStorageTestCase.test_set_trial_state_values_for_state.<locals>.<listcomp>)        r   valuesr   r   r   )r(   r   r)   
ALL_STATESzipr   WAITING	get_trialr   r   r   set_trial_state_valuesis_finishedr   r:   r;   rC   maxr   rA   r	   )	r-   r   	trial_idsrw   r   datetime_start_prevnon_existent_trial_idstate2r   r   r]   r   %test_set_trial_state_values_for_stateZ  sL   



z5StorageTestCase.test_set_trial_state_values_for_statec                 C  rh   r   )'_test_set_trial_state_values_for_floatsrj   r   r   r   &test_set_trial_state_values_for_floats  rl   z6StorageTestCase.test_set_trial_state_values_for_floatsc           
      C  sJ  t |dddd\}}| D ]2\}}| D ])\}}|||jks$J |j D ]}||||j| |j| ks>J q)qqtdd |	 D d }t
t || W d    n1 scw   Y  t
t ||d W d    n1 s~w   Y  |d }	t
t ||	d W d    d S 1 sw   Y  d S )	Nr      r   n_studyn_trialseedc                 s  "    | ]}|  D ]}|V  qqd S r   keysr    tstidr   r   r   r&          zLStorageTestCase.test_get_trial_param_and_get_trial_params.<locals>.<genexpr>paramAz	dummy-key)_setup_studiesrd   get_trial_paramsr   r   get_trial_paramr   to_internal_reprr   r   r:   r;   rC   )
r-   r   r   study_to_trialstrial_id_to_trialrw   expected_trialrV   r   existent_trial_idr   r   r   )test_get_trial_param_and_get_trial_params  s0   
"z9StorageTestCase.test_get_trial_param_and_get_trial_paramsc              	   C  sF  |j tjgd}||}||}||j tjgd}tddd}tdd}tdd}tddd	d
}	||dd| ||dd| ||ddksNJ ||ddksXJ ||j	dddkseJ |
|dddksqJ ||dd| ||dd|	 ||ddksJ ||ddksJ ||j	dddksJ |
|dddksJ tt ||dd|	 W d    n1 sw   Y  tt ||ddtdd W d    n1 sw   Y  |j|tjdgd tt ||dd| W d    n	1 sw   Y  tt ||d W d    n	1 s*w   Y  tt ||dd|	 W d    n	1 sHw   Y  ||dd| ||ddks`J ||j	ddiksmJ |
|ddiksyJ t|||gd }
tt ||
dd| W d    d S 1 sw   Y  d S )Nr         ?       @lowhigh)ShibuyaEbisuMegurochoices)r   Shinseng      Y@T)r   r   logr   r   yr   r   )r   r   333333?z皙?)r   r   )r   r   r   r   r   皙?r   r   )r(   r   r)   rA   r   r   set_trial_paramr   r   r   r   r:   r;   
ValueErrorr   r   r   r	   rC   r   )r-   r   r.   
trial_id_1
trial_id_2
trial_id_3distribution_xdistribution_y_1distribution_y_2distribution_zr   r   r   r   test_set_trial_param  s`   



$z$StorageTestCase.test_set_trial_paramc                 C  rh   r   )(_test_set_and_get_trial_param_for_floatsrj   r   r   r   'test_set_and_get_trial_param_for_floats  rl   z7StorageTestCase.test_set_and_get_trial_param_for_floatsc           	      C  s  |j tjgd}||}||}||j tjgd}||}||}|j|tjdd |j|tjtdfd |j|tjdd |j|tjg dd |	|j
dksZJ |	|j
d u sdJ |	|j
tdkspJ |	|jg dks|J |	|jg dksJ t|||||d }tt |j|tjdd W d    n1 sw   Y  tt |j|tjdd W d    d S 1 sw   Y  d S )	Nr   )r   r   inf)r   皙?r   r   r   )r   )r(   r   r)   rA   r   r   r   floatr   r   rX   r   r   r:   r;   rC   r	   )	r-   r   r.   r   r   r   
trial_id_4
trial_id_5r   r   r   r   &test_set_trial_state_values_for_values  s@   



"z6StorageTestCase.test_set_trial_state_values_for_valuesc                 C  s  |j tjgd}||}||}||j tjgd}||}||dd ||dd ||dd ||dd ||dd ||d	td
 ||dtd ||jdddksdJ ||ji ksnJ ||jdddtd
dksJ t	||jd sJ ||dd ||jdddksJ t
||||d }tt ||dd W d    n1 sw   Y  |j|tjdgd tt ||dd W d    d S 1 sw   Y  d S )Nr   r   r   r   r   r   r   r   r   r   nan)r   r   )r   r   r   r   r   r   r   )r(   r   r)   rA   set_trial_intermediate_valuer   r   r   npisnanr   r:   r;   rC   r   r   r   r	   )r-   r   r.   r   r   r   r   r   r   r   r   !test_set_trial_intermediate_value  sB   



"z1StorageTestCase.test_set_trial_intermediate_valuec                 C  rh   r   )-_test_set_trial_intermediate_value_for_floatsrj   r   r   r   ,test_set_trial_intermediate_value_for_floats0  rl   z<StorageTestCase.test_set_trial_intermediate_value_for_floatsc                      t  dddd\}}t fdd| D sJ tdd | D d }tt  | W d    d S 1 s<w   Y  d S )	Nr   r   r   r   c                 3  2    | ]}|  D ]\}} ||jkV  qqd S r   )rd   get_trial_user_attrsr   r    rD   rw   trialr   r   r   r&   5      z<StorageTestCase.test_get_trial_user_attrs.<locals>.<genexpr>c                 s  r   r   r   r   r   r   r   r&   ;  r   r   )r   r,   r   r   r:   r;   rC   r
  r-   r   r   r   non_existent_trialr   r  r   test_get_trial_user_attrs3     "z)StorageTestCase.test_get_trial_user_attrsc                   sN     jtjgd}d fd
d}t D ]
\}}|||| q |jtks+J ||dd    jtjgd}||dd t |jdksNJ  |jd dksZJ t	||hd }t
t  |dd W d    n1 syw   Y   j|tjdgd t
t  |dd W d    d S 1 sw   Y  d S )Nr   rw   rv   rV   rW   rX   r   r   r   c                   s*     | ||  | j| |ksJ d S r   )set_trial_user_attrr   r   rw   rV   rX   r  r   r   r^   D  s   zCStorageTestCase.test_set_trial_user_attr.<locals>.check_set_and_getr`   ra   baseline_scorer   r   r   r   rw   rv   rV   rW   rX   r   r   r   )rA   r(   r   r)   rc   rd   r   r   r+   r   r:   r;   rC   r  r   r   r   r	   )r-   r   r   r^   rV   rX   r   r   r   r  r   test_set_trial_user_attr?  s,   "z(StorageTestCase.test_set_trial_user_attrc                 C  rh   r   ),_test_set_and_get_trial_user_attr_for_floatsrj   r   r   r   +test_set_and_get_trial_user_attr_for_floatsb  rl   z;StorageTestCase.test_set_and_get_trial_user_attr_for_floatsc                   r  )	Nr   r   r   r   c                 3  r	  r   )rd   get_trial_system_attrsr   r  r  r   r   r&   g  r  z>StorageTestCase.test_get_trial_system_attrs.<locals>.<genexpr>c                 s  r   r   r   r   r   r   r   r&   m  r   r   )r   r,   r   r   r:   r;   rC   r  r  r   r  r   test_get_trial_system_attrse  r  z+StorageTestCase.test_get_trial_system_attrsc           
        s6   j tjgd} |}d fd
d}t D ]
\}}|||| q |j}|tks/J ||dd  |}||dd  |j}|ddiksNJ t||hd }	t	
t  |	dd W d    n1 smw   Y   j|tjdgd t	
t  |dd W d    d S 1 sw   Y  d S )Nr   rw   rv   rV   rW   rX   r   r   r   c                   s(     | ||  | | |ksJ d S r   )set_trial_system_attrr  r  r  r   r   r^   u  r_   zEStorageTestCase.test_set_trial_system_attr.<locals>.check_set_and_getr`   ra   r  r   r   r   r   r  )r(   r   r)   rA   rc   rd   r   r   r   r:   r;   rC   r  r   r   r   r	   )
r-   r   r.   r   r^   rV   rX   r   r   r   r   r  r   test_set_trial_system_attrq  s(   

"z*StorageTestCase.test_set_trial_system_attrc                 C  rh   r   )._test_set_and_get_trial_system_attr_for_floatsrj   r   r   r   -test_set_and_get_trial_system_attr_for_floats  rl   z=StorageTestCase.test_set_and_get_trial_system_attr_for_floatsc                 C  s   t |dddd\}}| }t|t|ksJ | D ];\}}d }|D ]}|j|jkr0|} nq$|d us7J |j|jks?J |j|jksGJ |j|jksOJ |j|jksWJ qd S )Nr   .   r   )r   r*   r+   rd   r$   	directionr   r   )r-   r   expected_frozen_studiesr   r/   expected_frozen_studyfrozen_studyr!   r   r   r   test_get_all_studies  s    z$StorageTestCase.test_get_all_studiesc                 C  s   t |dddd\}}| D ]\}}| D ]}||j}||ks$J qqtdd | D d }tt || W d    d S 1 sIw   Y  d S )Nr      /   r   c                 s  r   r   r   r   r   r   r   r&     r   z1StorageTestCase.test_get_trial.<locals>.<genexpr>r   )	r   rd   r   r   r{   r   r:   r;   rC   )r-   r   r   r   expected_trialsr   r  r   r   r   r   test_get_trial  s   "zStorageTestCase.test_get_trialc           
      C  s   t |dddd\}}| D ]\}}||}|D ]}||j }||ks&J qqt| d }	tt ||	 W d    d S 1 sFw   Y  d S )Nr   r&  0   r   r   )	r   rd   rB   r{   r   r   r:   r;   rC   )
r-   r   r   r   r.   r(  rD   r  r   rS   r   r   r   test_get_all_trials  s   

"z#StorageTestCase.test_get_all_trialsparam_namesab	list[str]c                 C  sr   |j tjgd}||tjjtjd}|D ]}|j	||dt
ddd q||}t|d j |ks7J d S )Nr   r   r   r   r   )distributionr   )r(   r   r)   rA   r<   r  create_trialr   r   r   r   rB   rM   r   r   )r-   r   r,  r.   rw   
param_namerD   r   r   r    test_get_all_trials_params_order  s   
z0StorageTestCase.test_get_all_trials_params_orderc                 C  sz   t |dddd\}}|D ].}|j|dd}t|t|| ks!J t|}d|d jd	< |j|d
d}||ks:J qd S )Nr   r   1   r   Tdeepcopyr   r   r   F)r   rB   r+   copyr6  r   )r-   r   r/   r   r.   trials0trials0_originaltrials1r   r   r   #test_get_all_trials_deepcopy_option  s   
z3StorageTestCase.test_get_all_trials_deepcopy_optionc           	      C  sT  |j tjgd}td}tjtjtjf}|D ]}t|}||_	|j	tjkr)dgnd |_
|j||d q|j|d d}t|dksCJ |j|tjfd}t|dksTJ tdd	 |D s_J |j|tjtjfd}t|dksrJ td
d	 |D s}J |j|dd}t|dksJ dd tD }|D ]}|j||fd}t|dksJ qd S )Nr   3   r   r   )statesr   r   c                 s  r   r   )r   r   r   r|   r   r   r   r&     r'   zCStorageTestCase.test_get_all_trials_state_option.<locals>.<genexpr>c                 s  s"    | ]}|j tjtjfv V  qd S r   )r   r   r   PRUNEDr|   r   r   r   r&     r   r   r   c                 S  $   g | ]}|t jkr|t jkr|qS r   r   r   r>  r   r   r   r   r         zDStorageTestCase.test_get_all_trials_state_option.<locals>.<listcomp>)r(   r   rR   randomRandomr   r   r>  _generate_trialr   r   rA   rB   r+   r,   r   )	r-   r   r.   	generatorr=  r   r}   rD   other_statesr   r   r    test_get_all_trials_state_option  s8   
z0StorageTestCase.test_get_all_trials_state_optionc              
   C  s(  t |dddd\}}| D ]}|j|dd}t|}|D ]l}|j sA||jddt	dd	 |
|jd
d ||jdd |jtjkr||jd dkrY||jtjdg q|jd d	krs||jdd ||jtjdg q||jtj q|jtjkr||jtj q||ksJ qd S )Nr   r&  r*  r   Fr5  paramXr   r   	usr_attrX	sys_attrXr   )r   r   rB   r7  r6  r   r   r   r{   r   r  r  r   r   r   r   r   r  r>  FAILr   )r-   r   r   r   r.   rD   deepcopied_trialsr  r   r   r    test_get_all_trials_not_modified  s*   

z0StorageTestCase.test_get_all_trials_not_modifiedc                 C  s~   t |dddd\}}|D ]}||dksJ qt| d }tt ||s-J W d    d S 1 s8w   Y  d S )Nr      2   r   r   )r   get_n_trialsr   r   r:   r;   rC   )r-   r   study_id_to_frozen_studiesr   r.   rS   r   r   r   test_get_n_trials  s   "z!StorageTestCase.test_get_n_trialsc                 C  s   |j tjfd}td}tjtjtjg}|D ]}t|}||_	|j	tjkr)dgnd |_
|j||d q||tjdks?J ||tjdksJJ dd tD }|D ]}|||d	ks_J qSd S )
Nr   r<  r   r   r   r   c                 S  r?  r   r@  r   r   r   r   r   9  rA  zBStorageTestCase.test_get_n_trials_state_option.<locals>.<listcomp>r   )r(   r   rR   rB  rC  r   r   r>  rD  r   r   rA   rP  r   )r-   r   r.   rE  r=  r!   r}   rF  r   r   r   test_get_n_trials_state_option&  s&   
z.StorageTestCase.test_get_n_trials_state_optionr!  r   )r   r   r   r   r   r   z-infr   list[float]c           	      C  s   |j |gd}tt || W d    n1 sw   Y  tt ||d  W d    n1 s8w   Y  td}|D ]}t|}t	j
|_||_|j||d qD|tjkrbt|nt|}||j|kspJ d S )Nr   r   r<  r   )r(   r:   r;   r   get_best_trialrC   rB  rC  rD  r   r   r   rX   rA   r   rR   r   min)	r-   r   r!  r   r.   rE  vr   expected_valuer   r   r   test_get_best_trial?  s   
z#StorageTestCase.test_get_best_trialc                 C  s   |j tjtjfd}td}tdD ]}t|}tj	|_
||d g|_|j||d qtt || W d    d S 1 sBw   Y  d S )Nr   r<  r   r   r   )r(   r   rR   r)   rB  rC  r   rD  r   r   r   r   rA   r:   r;   RuntimeErrorrU  )r-   r   r.   rE  r   r   r   r   r   4test_get_best_trial_for_multi_objective_optimization_  s   

"zDStorageTestCase.test_get_best_trial_for_multi_objective_optimizationc                 C  s   t t |jddd W d    n1 sw   Y  |jtjgd}t t |j|dd W d    n1 s;w   Y  ||}||j|ddksPJ |jtjgd}||}||j|ddkshJ d S )Nr   )r.   trial_numberr   )r\  )r:   r;   rC   'get_trial_id_from_study_id_trial_numberr(   r   r)   rA   r   r   r   r   ,test_get_trial_id_from_study_id_trial_numbern  s    

z<StorageTestCase.test_get_trial_id_from_study_id_trial_numberc                 C  sf   |j tjgd}||dd tt|}||}||}||  kr.ddiks1J  J d S )Nr   rV   pickle)r(   r   r)   rm   r_  loadsdumpsrn   )r-   r   r.   restored_storagestorage_system_attrsrestored_storage_system_attrsr   r   r   test_pickle_storage  s   

$z#StorageTestCase.test_pickle_storagec                 C  s   |j tjgd}||}||tj ||tj t	t
 ||tj W d    n1 s2w   Y  t	t
 ||tj W d    n1 sNw   Y  t	t
 ||tj W d    d S 1 skw   Y  d S rr   )r(   r   r)   rA   check_trial_is_updatabler   r   r   r:   r;   r	   rK  r>  r   r   r   r   r   test_check_trial_is_updatable  s   
"z-StorageTestCase.test_check_trial_is_updatableNr   r
   r   r   )r   r
   r   r   r   r   r   r   )r   r
   r,  r/  r   r   )r   r
   r!  r   r   rT  r   r   )7r8   
__module____qualname__r1   r5   r7   rE   rI   rJ   rT   rf   rk   ro   rq   rs   r   r:   markparametrizer   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r%  r)  r+  r3  r;  rG  rM  rR  rS  r   rR   r)   r   rY  r[  r^  re  rg  r   r   r   r   r   !   sx    


	









:&
6

*


?

'
*


#


!





%

	



r   MNISTr   imageclassificationr  tags)r`   nonejson_serializablezdict[str, JSONSerializable]rc   r   r  )	zeropir   znegative maxrV  znegative minr   znegative infr  r-  r   r.  boolc                 C  s*   t | r
t |S t |rdS | |kS )NF)mathr  )r-  r.  r   r   r   is_equal_floats  s
   


rx  r   c                 C  L   | j tjgd}t D ]\}}| ||| t| || |s#J qd S rr   )r(   r   r)   FLOAT_ATTRSrd   rZ   rx  r[   r   r.   rV   rX   r   r   r   ri     
   ri   c                 C  ry  rr   )r(   r   r)   rz  rd   rm   rx  rn   r{  r   r   r   rp     r|  rp   c                 C  sr   | j tjgd}t D ]*}t|rq| |}| j|t	j
|fd | |j}|d us/J t||s6J qd S )Nr   r   )r(   r   r)   rz  r   rw  r  rA   r   r   r   r   rX   rx  )r   r.   rX   rw   	set_valuer   r   r   r     s   

r   c           
      C  s   | j tjgd}| |}t D ]L\}}t||d}t|fd}||fD ]7}t|tr2t	
|s2q%|jj| }||}	| |||	| t| |||	sPJ | |j| |ks\J q%qd S )Nr   r   r   )r(   r   r)   rA   rz  rd   r   r   
isinstancerw  isfinite	__class__r8   r   r   rx  r   r   r   )
r   r.   rw   rV   rX   float_distributioncategorical_distributionr0  r2  internal_reprr   r   r   r     s   

r   c                 C  s\   | j tjgd}| |}tt D ]\}}| ||| t| 	|j
| |s+J qd S rr   )r(   r   r)   rA   	enumeraterz  r   r  rx  r   r   )r   r.   rw   r   rX   r   r   r   r    s   
r  c                 C  R   |  | jtjgd}t D ]\}}| ||| t| || |s&J qd S rr   )	rA   r(   r   r)   rz  rd   r  rx  r
  r   rw   rV   rX   r   r   r   r       r  c                 C  r  rr   )	rA   r(   r   r)   rz  rd   r  rx  r  r  r   r   r   r    r  r  r   rv   r   r   r!  StudyDirection | None@tuple[dict[int, FrozenStudy], dict[int, dict[int, FrozenTrial]]]c                 C  s   t |}i }i }t|D ]Y}d| }	|d u r!|tjtjg}| j|f|	d}
| |
d| | 	|
d| i }t|D ]}t
|}||_| |
||_|||j< q=|||
< t|	|d|id|i|
d||
< q||fS )Nztest-study-name-r6   ur!   )r$   r!  r   r   r.   )rB  rC  r   choicer   r)   rR   r(   rZ   rm   rD  r   rA   r{   r   )r   r   r   r   r!  rE  study_id_to_frozen_studystudy_id_to_trialsr   r$   r.   rD   jr  r   r   r   r     s2   

r   rE  random.Randomr   c                 C  s  |  ddtddf|  ddtddddf| g dtdf|  ddtddf| dd	gtd
fd}ddd dddgdd}| t}i }i }i }i }i }| D ]\}	\}
}| ddgrk|
||	< |||	< qV| D ]\}	}
| ddgr|
|d|	 < | ddgr|
|d|	 < qpt| ddD ]}| ddgr|  dd||< qtd||t	j
kr|  ddnd t | rt nd |||||ddS )Nr   r   r   T)r   )CatACatBCatCr   r   )r   r   )r   paramBparamCparamDparamEvalueAr   rn  ro  rp  )attrAattrBattrCattrDFusr_sys_   r   i)r   r   rX   r   r   r   r   r   r   r   rw   )uniformr   r  r   r   rd   r   randintr   r   r   r   r   r   )rE  example_paramsexample_attrsr   r   r   r   r   r   rV   rX   distr   r   r   r   rD  /  s^   
rD  )r   r
   )r-  r   r.  r   r   rv  rh  r   )r   r
   r   rv   r   rv   r   rv   r!  r  r   r  )rE  r  r   r   )9
__future__r   r7  r   rw  r_  rB  systimer   typingr   numpyr  r:   r<   optuna._typingr   optuna.distributionsr   r   optuna.exceptionsr	   optuna.storagesr
   optuna.storages._baser   optuna.study._frozenr   optuna.study._study_directionr   optuna.trialr   r   fixturer   r   rM   r   rc   __annotations__ru  
float_infor   rV  r   rz  rx  ri   rp   r   r   r  r  r  r   rD  r   r   r   r   <module>   st           


	
	



"