
    ,YHh                    6   U d Z ddlmZ ddl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
Z
ddlZddl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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d      Z%dZ&dCdZ'dDdZ(dEdZ)	 	 	 	 	 	 	 	 dFdZ* G d de      Z+ G d d      Z,dGdZ-dGdZ.	 	 	 	 	 	 	 	 	 	 dHdZ/ G d  d!      Z0 G d" d#e0      Z1 G d$ d%e0      Z2 G d& d'e0      Z3 G d( d)e0      Z4 G d* d+e0      Z5 G d, d-e0      Z6 G d. d/e0      Z7 G d0 d1e0      Z8 G d2 d3e0      Z9 G d4 d5e0      Z: G d6 d7e0      Z;e1e2e3e4e5e6e7e8e9e:e;d8Z<d9e=d:<   dId;Z>dJd<Z?	 	 	 	 	 	 dKd=Z@dLdMd>ZAdNd?ZBdOd@ZCdOdAZDdPdBZEy)QzfOptuna CLI module.
If you want to add a new command, you also need to update the constant `_COMMANDS`
    )annotationsN)ArgumentParser)	Namespace)Enum)Any)_LazyImport)CLIUsageError)ExperimentalWarning)BaseStorage)JournalFileStorage)JournalRedisStorage)JournalStorage)
RDBStorage)JournalFileBackend)JournalRedisBackend)
TrialStatezoptuna.study._dataframez%Y-%m-%d %H:%M:%Sc                    | | S t         j                  j                  d      }|t        j                  dt
               |S t        d      )NOPTUNA_STORAGEzSpecifying the storage url via 'OPTUNA_STORAGE' environment variable is an experimental feature. The interface can change in the future.zStorage URL is not specified.)osenvirongetwarningswarnr
   r	   )storage_urlenv_storages     C/var/www/html/planif/env/lib/python3.12/site-packages/optuna/cli.py_check_storage_urlr   *   sP    **..!12KS	

 
7
88    c                   t        |       } |r|t        j                  k(  rt        t        |             S |t        j                  k(  rt        t	        |             S |t
        j                  k(  rt        t        |             S |t        j                  k(  rt        t        |             S |t        j                  k(  rt        |       S t        d      | j                  d      rt        t        |             S t        j                  j                  |       rt        t        |             S 	 t        |       S # t        j                  j                  $ r t        d      w xY w)NzUnsupported storage classredisz.Failed to guess storage class from storage_url)r   r   __name__r   r   r   r   r   r	   
startswithr   pathisfile
sqlalchemyexcArgumentError)r   storage_classs     r   _get_storager)   9   s,   $[1K/888!"5k"BCC/888!"5k"BCC.777!"4["ABB.777!"4["ABBJ///k**788g&1+>??	ww~~k"0=>>N+&&>>'' NLMMNs   ,
D7 7)E c                   | t        | t        t        f      r| S t        | t        j                        r| j	                  t
              S t        | t              rt        d | D              S t        | t              rt        d | D              S t        | t              r6| j                         D ci c]  \  }}t        |      t        |       c}}S t        |       S c c}}w )Nc              3  2   K   | ]  }t        |        y wN_format_value.0vs     r   	<genexpr>z _format_value.<locals>.<genexpr>Y   s     4M!$4   c              3  2   K   | ]  }t        |        y wr,   r-   r/   s     r   r2   z _format_value.<locals>.<genexpr>[   s     5!]1%5r3   )
isinstanceintfloatdatetimestrftime_DATETIME_FORMATlisttupledictitemsr.   str)valuekr1   s      r   r.   r.   R   s    }
53,7	E8,,	-~~.//	E4	 4e444	E5	!5u555	E4	 ?D{{}Mtq!a -"22MM5z Ns   1Cc                h   g }g }|r3|D ]  d   dk7  r|j                  d    dd           (t        fd| D              rPd}| D ]  }|v st        |t        |               }! t	        |      D ]  }|j                  d    d|         |j                  d           | D ]  }i }|D ]l  |vrt        |         }	d   dk7  r|	|d    dd    <   /t        fd| D              r!t        |	      D ]  \  }}
|
|d    d| <    d|	|d    <   n |j                  |        ||fS |D ]  d   |vs|j                  d            | D ]  }|D ci c]  }|i  }}|D ]  |vrt        |         }	t        d   t              rX|d      i k(  rg |d   <   |d   xx   d gt        d   dz   t        |d            z
  d      z  z  cc<   |	|d      d   <   d   dk7  r|	|d      d   <   |	|d   <    |j                  |        ||fS c c}w )N    r   _c              3  h   K   | ])  }t        |j                        t        t        f       + y wr,   r5   r   r;   r<   r0   recordcolumns     r   r2   z#_convert_to_dict.<locals>.<genexpr>k   s%     YvZ

6 2T5MBY   /2c              3  h   K   | ])  }t        |j                        t        t        f       + y wr,   rG   rH   s     r   r2   z#_convert_to_dict.<locals>.<genexpr>|   s%     ]6FJJv$6uF]rK   )	appendanymaxlenranger.   	enumerater5   r6   )recordscolumnsflattenheaderret
max_lengthrI   irowr@   r1   column_nameattrsrJ   s                @r   _convert_to_dictr]   b   s    F
C 	)FayB1VAYK89YQXYY
% JF'%(S5H%I
J z* 6AMMVAYKq"456 fQi(	)  	FC! 
0'%fVn5!9?6;C6!9+Qvayk23]U\]] )% 0 4123vayk1#./4 +0C6!9+'
0 JJsO	J ;-  	)Fay&fQi(	)  	FHN$O["_$OE$O! -'%fVn5fQi- VAY'2-+-fQi(&)$VAY]SvVWyIYEZ5Z\]1^(^^$27E&)$VAY/AY"_27E&)$VAY/',E&)$- JJu#	& ;% %Ps   (
H/c                      e Zd ZdZdZdZy)	ValueTyper   rC      N)r!   
__module____qualname__NONENUMERICSTRING r   r   r_   r_      s    DGFr   r_   c                  ,    e Zd ZddZddZddZd	dZy)
	CellValuec                    || _         |t        j                  | _        y t	        |t
        t        f      rt        j                  | _        y t        j                  | _        y r,   )	r@   r_   rc   
value_typer5   r6   r7   rd   re   )selfr@   s     r   __init__zCellValue.__init__   sA    
='nnDOU|,'//DO'..DOr   c                    t        | j                  t        j                        r| j                  j                  t              S t        | j                        S r,   )r5   r@   r8   r9   r:   r?   rk   s    r   __str__zCellValue.__str__   s:    djj("3"34::&&'788tzz?"r   c                >    t        t        | j                              S r,   )rP   r?   r@   rn   s    r   widthzCellValue.width   s    3tzz?##r   c                    t        | j                        }| j                  d|z  S |t        j                  k(  r|d| dS |d| dS )N >rD   <)r?   r@   r_   rd   )rk   rj   rq   r@   s       r   
get_stringzCellValue.get_string   sW    DJJ::;9,,,AeW@9%&AeW@9%&r   N)r@   r   returnNone)rw   r?   rw   r6   )rj   r_   rq   r6   rw   r?   )r!   ra   rb   rl   ro   rq   rv   rf   r   r   rh   rh      s    /#$'r   rh   c                    g }| D ][  }g }|D ]2  }|j                  |j                  |      t        ||         nd       4 |j                  dj                  |             ] dj                  |      S )NrD   rs   
)rM   r   r?   join)rS   rV   valuesrI   rZ   r[   s         r   _dump_valuer~      s|    F %! 	`K JJ6::k3J3Vs6+./\^_		`
 	chhsm$% 99Vr   c           
        g }| D ]E  }g }|D ]+  }|j                  t        |j                  |                   - |j                  |       G d}d}|D cg c]  }d }	}t        t	        |            D ]  |D cg c]  }|   j
                   }
}t        j                  }|
D ]&  }|t        j                  k(  st        j                  }( t	        |      dk(  rt	        |         }n*t        t	        |         t        fd|D                    }|d|dz   z  dz   z  }|t        j                  k(  r|d|   d| d	d
z  }n|d|   d| d	d
z  }t        |      D ]+  \  }}|	|xx   d|   j                  ||      z   d
z   z  cc<   - ! d	}||dz   z  }||dz   z  }||dz   z  }|	D ]
  }||dz   z  } ||dz   z  }|S c c}w c c}w )N+|r   c              3  D   K   | ]  }|   j                           y wr,   )rq   )r0   rZ   rJ   s     r   r2   z_dump_table.<locals>.<genexpr>   s     4YSS[5F5F5H4Ys    -r`   rs   rt   rD   z |ru   r{   )rM   rh   r   rQ   rP   rj   r_   rd   re   rO   rR   rv   )rS   rV   rowsrI   rZ   r[   	separatorheader_stringrE   rows_stringvalue_typesrj   t	max_widthrY   rW   
row_stringrJ   s                    @r   _dump_tabler      s1   D ! 	;KJJyK!89:	;C	 IM $%13%K%F$ Y9=>#s6{-->>&&
 	.AI$$$&--
	. t9>F6N+ICv/4YTX4Y1YZISIM*S00	***q)@} =R@@Mq)@} =R@@Mo 	YFAsNcCK$:$::y$QQTXXXN	YY$ C9tC=4C9tC! !
zD  !9tCJ7 &>s   	G
=Gc                x   t        | t              rt        | ||      \  }}nt        | g||      \  }}|dk(  rt        ||      j	                         S |dk(  rt        ||      j	                         S |dk(  rYt        | t              r#t        j                  |      j	                         S t        j                  |d         j	                         S |dk(  rYt        | t              r#t        j                  |      j	                         S t        j                  |d         j	                         S t        d| d      )Nr@   tablejsonr   yamlz"Optuna CLI does not supported the z format.)r5   r;   r]   r~   stripr   r   dumpsr   	safe_dumpr	   )rS   rT   output_formatrU   r}   rV   s         r   _format_outputr      s    '4 )'7GD)7)WgF66*0022	'	!66*0022	&	 gt$::f%++--::fQi(..00	&	 gt$>>&)//11>>&),2244@xXYYr   c                  (    e Zd ZdZddZddZddZy)	_BaseCommandzBase class for commands.

    Note that command classes are not intended to be called by library users.
    They are exclusively used within this file to manage Optuna CLI commands.
    c                T    t         j                  j                  t              | _        y r,   )optunalogging
get_loggerr!   loggerrn   s    r   rl   z_BaseCommand.__init__  s    nn//9r   c                     y)zAdd arguments required for each command.

        Args:
            parser:
                `ArgumentParser` object to add arguments
        Nrf   rk   parsers     r   add_argumentsz_BaseCommand.add_arguments  s     	r   c                    t         )a  Define action if the command is called.

        Args:
            parsed_args:
                `Namespace` object including arguments specified by user.

        Returns:
            Running status of the action.
            0 if this method finishes normally, otherwise 1.
        )NotImplementedError)rk   parsed_argss     r   take_actionz_BaseCommand.take_action$  s
     "!r   N)rw   rx   r   r   rw   rx   r   r   rw   r6   )r!   ra   rb   __doc__rl   r   r   rf   r   r   r   r     s    :"r   r   c                       e Zd ZdZddZddZy)_CreateStudyzCreate a new study.c                    |j                  dd d       |j                  dd t        dd       |j                  dd	d
d       |j                  dt        d ddd       y )N--study-namez?A human-readable name of a study to distinguish it from others.defaulthelpz--direction)minimizemaximizeznSet direction of optimization to a new study. Set 'minimize' for minimization and 'maximize' for maximization.)r   typechoicesr   z--skip-if-existsF
store_truezgIf specified, the creation of the study is skipped without any error when the study name is duplicated.r   actionr   z--directionszSet directions of optimization to a new study. Put whitespace between directions. Each direction should be either "minimize" or "maximize".r   )r   r   r   r   nargsadd_argumentr?   r   s     r   r   z_CreateStudy.add_arguments6  s    R 	 	

 	,@ 	 	
 	C	 	 	
 	,0  	 		
r   c                    t        |j                  |j                        }t        j                  ||j
                  |j                  |j                  |j                        j
                  }t        |       y)N)storage
study_name	direction
directionsload_if_existsr   )
r)   r   r(   r   create_studyr   r   r   skip_if_existsprint)rk   r   r   r   s       r   r   z_CreateStudy.take_actionV  sh    {22K4M4MN(("--!++"--&55
 * 	 	jr   Nr   r   r!   ra   rb   r   r   r   rf   r   r   r   r   3  s    
@
r   r   c                       e Zd ZdZddZddZy)_DeleteStudyzDelete a specified study.c                ,    |j                  dd d       y )Nr   z The name of the study to delete.r   r   r   s     r   r   z_DeleteStudy.add_argumentsf  s    ND?abr   c                    t        |j                  |j                        }|j                  |j                        }|j                  |       y)Nr   )r)   r   r(   get_study_id_from_namer   delete_study)rk   r   r   study_ids       r   r   z_DeleteStudy.take_actioni  sA    {22K4M4MN11+2H2HIX&r   Nr   r   r   rf   r   r   r   r   c  s    #cr   r   c                       e Zd ZdZddZddZy)_StudySetUserAttributez Set a user attribute to a study.c                ~    |j                  ddd       |j                  dddd       |j                  ddd	       y )
Nr   Tz3The name of the study to set the user attribute to.)requiredr   z--keyz-kzKey of the user attribute.z--valuezValue to be set.r   r   s     r   r   z$_StudySetUserAttribute.add_argumentss  sN    F 	 	

 	GTD?[\I;MNr   c                   t        |j                  |j                        }t        j                  ||j
                        }|j                  |j                  |j                         | j                  j                  d       y)Nr   r   zAttribute successfully written.r   )r)   r   r(   r   
load_studyr   set_user_attrkeyr@   r   info)rk   r   r   studys       r   r   z"_StudySetUserAttribute.take_action|  sb    {22K4M4MN!!'k>T>TUKOO[->->?:;r   Nr   r   r   rf   r   r   r   r   p  s    *Or   r   c                       e Zd ZdZddZddZy)_StudyNamesz1Get all study names stored in a specified storagec                :    |j                  ddt        ddd       y )N-f--formatr@   r   r   r   r@   Output format.r   r   r   r   r   r   s     r   r   z_StudyNames.add_arguments  s'    6! 	 	
r   c                    t        |j                  |j                        }t        j                  |      }g }d}|D ]  }|j                  ||i        t        t        ||g|j                  d             y)NnamerD   F)rU   r   )	r)   r   r(   r   get_all_study_namesrM   r   r   format)rk   r   r   all_study_namesrS   
record_keyr   s          r   r   z_StudyNames.take_action  ss    {22K4M4MN 44W=!
) 	5JNNJ
34	5nWzlK4F4FPUVWr   Nr   r   r   rf   r   r   r   r     s    ;
r   r   c                  (    e Zd ZdZg dZddZddZy)_StudieszShow a list of studies.)r   r   rD   n_trialsrD   datetime_startrD   c                d    |j                  ddt        ddd       |j                  ddd	d
       y )Nr   r   r   r   r   r   	--flattenFr   z*Flatten nested columns such as directions.r   r   r   s     r   r   z_Studies.add_arguments  sH    6! 	 	
 	=	 	 	
r   c                j   t        |j                  |j                        }t        j                  |d      }g }|D ]  }|j
                  |j
                  j                  t              nd }i }|j                  |d<   t        d |j                  D              |d<   |j                  |d<   ||d<   |j                  |d<   |j                  |        t        d	 |D              r| j                  j                  d       t!        t#        || j                  |j$                  |j&                               y
)NF)include_best_trialr   c              3  4   K   | ]  }|j                     y wr,   )r   )r0   ds     r   r2   z'_Studies.take_action.<locals>.<genexpr>  s     -Kaff-Ks   r   r   r   
user_attrsrD   c              3  ,   K   | ]  }|d    i k7    yw)r   Nrf   )r0   rs     r   r2   z'_Studies.take_action.<locals>.<genexpr>  s     <qq#$*<s   r   )r)   r   r(   r   get_all_study_summariesr   r9   r:   r   r<   r   r   r   rM   rN   _study_list_headerr   r   r   rU   )rk   r   r   	summariesrS   sstartrI   s           r   r   z_Studies.take_action  s&   {22K4M4MN227uU	 	#A ##/   ))*:; 
 24F#$<<F< (--Kall-K(KF$%'(zzF#$-2F)*)*F%&NN6"	# <G<<##**+=>00+2D2DkFYFY	

 r   Nr   r   )r!   ra   rb   r   r   r   r   rf   r   r   r   r     s    !
 r   r   c                       e Zd ZdZddZddZy)_TrialszShow a list of trials.c                    |j                  dt        dd       |j                  ddt        ddd	
       |j                  dddd       y )Nr   Tz,The name of the study which includes trials.r   r   r   r   r   r   r   r   r   r   Fr   5Flatten nested columns such as params and user_attrs.r   r   r   s     r   r   z_Trials.add_arguments  i    ?	 	 	
 	6! 	 	
 	H	 	 	
r   c                z   t        j                  dt               t        |j                  |j
                        }t        j                  ||j                        }d|j                         sdnddddd	d
df}t        j                  ||      \  }}t        t        |||j                  |j                               y)NzP'trials' is an experimental CLI command. The interface can change in the future.r   numberr@   r}   r   datetime_completedurationparamsr   stater   )r   r   r
   r)   r   r(   r   r   r   _is_multi_objective
_dataframe$_create_records_and_aggregate_columnr   r   r   rU   rk   r   r   r   r\   rS   rT   s          r   r   z_Trials.take_action  s    ^	

 {22K4M4MN!!'k>T>TU 446GH	
 &JJ5RWXnWg{/A/A;CVCVWXr   Nr   r   r   rf   r   r   r   r     s     
,r   r   c                       e Zd ZdZddZddZy)
_BestTrialzShow the best trial.c                    |j                  dt        dd       |j                  ddt        ddd	
       |j                  dddd       y )Nr   Tz,The name of the study to get the best trial.r   r   r   r   r   r   r   r   Fr   r   r   r   r   s     r   r   z_BestTrial.add_arguments  r   r   c                   t        j                  dt               t        |j                  |j
                        }t        j                  ||j                        }d|j                         sdnddddd	d
df}t        j                  ||      \  }}t        t        ||j                  j                     ||j                   |j"                               y)NzT'best-trial' is an experimental CLI command. The interface can change in the future.r   r  r@   r}   r   r  r  r  r   r  r   )r   r   r
   r)   r   r(   r   r   r   r  r  r	  r   r   
best_trialr  r   rU   r
  s          r   r   z_BestTrial.take_action!  s    b	

 {22K4M4MN!!'k>T>TU 446GH	
 &JJ5RWX((//0';;M;M{ObOb	

 r   Nr   r   r   rf   r   r   r  r    s    
,r   r  c                       e Zd ZdZddZddZy)_BestTrialsz2Show a list of trials located at the Pareto front.c                    |j                  dt        dd       |j                  ddt        ddd	
       |j                  dddd       y )Nr   TzJThe name of the study to get the best trials (trials at the Pareto front).r   r   r   r   r   r   r   r   Fr   r   r   r   r   s     r   r   z_BestTrials.add_arguments@  si    ]	 	 	
 	6! 	 	
 	H	 	 	
r   c                  	 t        j                  dt               t        |j                  |j
                        }t        j                  ||j                        }|j                  D cg c]  }|j                   c}	d|j                         sdnddddd	d
df}t        j                  ||      \  }}t        t        	fd|            }t!        t#        |||j$                  |j&                               yc c}w )NzU'best-trials' is an experimental CLI command. The interface can change in the future.r   r  r@   r}   r   r  r  r  r   r  c                    | d   v S )Nr  rD   rf   )rI   best_trialss    r   <lambda>z)_BestTrials.take_action.<locals>.<lambda>l  s    &2HK2W r   r   )r   r   r
   r)   r   r(   r   r   r   r  r  r  r  r	  r;   filterr   r   r   rU   )
rk   r   r   r   trialr\   rS   rT   best_recordsr  s
            @r   r   z_BestTrials.take_actionV  s    	
 {22K4M4MN!!'k>T>TU161B1BCu||C 446GH	
 &JJ5RWXF#WY`abn\7K4F4FH[H[\] Ds   +C:Nr   r   r   rf   r   r   r  r  =  s    <
,r   r  c                      e Zd ZdZddZy)_StorageUpgradez%Upgrade the schema of an RDB storage.c                *   t        |j                        }	 t        |dd      }|j                         }|j                         }|j                         }||k(  r| j                  j                  d       y	||v rG| j                  j                  d       |j                          | j                  j                  d       y	t        j                  d       y	# t        j                  j
                  $ r | j                  j                  d       Y yw xY w)
NT)skip_compatibility_checkskip_table_creationzInvalid RDBStorage URL.rC   zThis storage is up-to-date.z3Upgrading the storage schema to the latest version.z!Completed to upgrade the storage.zYour optuna version seems outdated against the storage version. Please try updating optuna to the latest version by `$ pip install -U optuna`.r   )r   r   r   r%   r&   r'   r   errorget_current_versionget_head_versionget_all_versionsr   upgrader   r   )rk   r   r   r   current_versionhead_versionknown_versionss          r   r   z_StorageUpgrade.take_actiont  s    ()<)<=	 dPTG "557//1 113l*KK:;  .KKRSOOKK@A  MM-
 % ~~++ 	KK78	s   C 8DDNr   )r!   ra   rb   r   r   rf   r   r   r  r  q  s
    /r   r  c                       e Zd ZdZddZddZy)_Askz*Create a new trial and suggest parameters.c                $   |j                  dt        d       |j                  dt        d       |j                  dt        d       |j                  dt        d	       |j                  d
dt        ddd       |j                  dddd       y )Nr   Name of study.r   r   z	--samplerz'Class name of sampler object to create.z--sampler-kwargsz8Sampler object initialization keyword arguments as JSON.z--search-spaceztSearch space as JSON. Keys are names and values are outputs from :func:`~optuna.distributions.distribution_to_json`.r   r   r   r   r   r   r   Fr   z&Flatten nested columns such as params.r   r   r   s     r   r   z_Ask.add_arguments  s    N;KLKc8abK 	 	

 	F	 	 	
 	6! 	 	
 	9	 	 	
r   c           
     *   t        j                  dt               t        |j                  |j
                        }||j                  dd}|j                  `|j                   t        j                  |j                        }ni }t        t        j                  |j                        } |di |}||d<   n|j                  t        d      |j                  qt        j                  |j                        j!                         D ci c]8  \  }}|t        j"                  j%                  t        j&                  |            : }	}}ni }		 t        j(                  |d   |d   |j+                  d            }
|
j/                  |	
      }| j0                  j3                  d|j4                   d|j6                   d       d|j4                  i}dg}t9        |j6                        dk(  r#|j:                  si |d<   |j=                  d       n<|j6                  j!                         D ]  \  }}||d|f<   |j=                  d|f       ! t?        tA        |||jB                  |j:                               yc c}}w # t,        $ r t-        d	      w xY w)NzM'ask' is an experimental CLI command. The interface can change in the future.T)r   r   r   samplerzm`--sampler_kwargs` is set without `--sampler`. Please specify `--sampler` as well or omit `--sampler-kwargs`.r   r   )r   r   r.  zImplicit study creation within the 'ask' command was dropped in Optuna v4.0.0. Please use the 'create-study' command beforehand.)fixed_distributionszAsked trial z with parameters .r  r   )r  rD   r  rf   )"r   r   r
   r)   r   r(   r   r.  sampler_kwargsr   loadsgetattrr   samplers
ValueErrorsearch_spacer>   distributionsjson_to_distributionr   r   r   KeyErroraskr   r   r  r  rP   rU   rM   r   r   r   )rk   r   r   create_study_kwargsr1  sampler_clsr.  r   distr6  r   r  rI   rT   
param_nameparam_values                   r   r   z_Ask.take_action  sy   [	

 {22K4M4MN %00"
 *))5!%K,F,F!G!#!&//;3F3FGK!3N3G-4	*))5 8 
 ##/ #'**[-E-E"F"L"L"ND$ f**??

4@PQQL 
 L	%%.|<+I6+//	:E 		l	;<~5Fu||nTUVW.<ell-K!"u||!+*=*=%'F>"NN>*+0<<+=+=+? 7'
K1<*-.*567 	nVWk.@.@+BUBUVWG  	D 	s   
=I7-I= =JNr   r   r   rf   r   r   r)  r)    s    4
>Dr   r)  c                       e Zd ZdZddZddZy)_Tellz5Finish a trial, which was created by the ask command.c                    |j                  dt        d       |j                  dt        d       |j                  dt        dd	       |j                  d
t        dd       |j                  dddd       y )Nr   r+  r,  z--trial-numberzTrial number.z--valuesr   zObjective values.)r   r   r   z--statezTrial state.)completeprunedfail)r   r   r   z--skip-if-finishedFr   zSIf specified, tell is skipped without any error when the trial is already finished.r   )r   r?   r6   r7   r   s     r   r   z_Tell.add_arguments  s    N;KL,3_MJU#DWX2	 	 	
 	 	 	 	
r   c           	        t        j                  dt               t        |j                  |j
                        }t        j                  ||j                        }|j                  "t        |j                  j                            }nd }|j                  }|j                  }|j                  ||||j                         | j                   j#                  d| d| d| d       y)	NzN'tell' is an experimental CLI command. The interface can change in the future.r   )r  r}   r  skip_if_finishedzTold trial z with values z and state r0  r   )r   r   r
   r)   r   r(   r   r   r   r  r   uppertrial_numberr}   tellrG  r   r   )rk   r   r   r   r  rI  r}   s          r   r   z_Tell.take_action  s    \	

 {22K4M4MN!!"--

 ('1+2C2C2I2I2K'LEE"//##

(99	 	 	
 	;|nM&UZT[[\]^r   Nr   r   r   rf   r   r   rA  rA    s    ?
$r   rA  )zcreate-studyzdelete-studyzstudy set-user-attrzstudy-namesstudiestrialsz
best-trialzbest-trialszstorage upgrader:  rJ  zdict[str, type[_BaseCommand]]	_COMMANDSc                   t         j                  t        j                  t        j                  g}t        j                  t
        j                  g}| ||z   v r| S t        j                  d|  dt        |      dd  d      )NzInvalid choice: z  (choose from rC   ))	r   r!   r   r   r   r   argparseArgumentTypeErrorr?   )r@   r   deprecated_choicess      r   :_parse_storage_class_without_suggesting_deprecated_choicesrT  =  s    ##$$G 	##$$ ,,,

$
$
5'Wa1C0DAF r   c                0   | j                  dd d       | j                  ddd t               | j                         }|j                  ddd	d
dd       |j                  dddd
dd       | j                  ddd d       | j                  dddd       | S )Nz	--storagezbDB URL. (e.g. sqlite:///example.db) Also can be specified via OPTUNA_STORAGE environment variable.r   z--storage-classz,Storage class hint (e.g. JournalFileBackend))r   r   r   z-vz	--verbosecountverbose_levelrC   z.Increase verbosity of output. Can be repeated.)r   destr   r   z-qz--quietstore_constr   z+Suppress output except warnings and errors.)r   rX  constr   z
--log-filestorez2Specify a file to log output. Disabled by default.)r   r   r   z--debugFr   zShow tracebacks on errors.r   )r   rT  add_mutually_exclusive_group)r   verbose_groups     r   _add_common_argumentsr^  N  s    
M	   ;G	   779M=   :   A	   )	   Mr   c                x     j                         }i }t        j                         D ]f  \  }} |       }|j                  ||gt	        j
                  |            }|j                  |       |j                  |j                         |||<   h d fd}|j                  dd      j                  |       |S )N)parentsr   )handlerc                &    j                          y r,   )
print_help)argsmain_parsers    r   _print_helpz"_add_commands.<locals>._print_help  s     r   r   zShow help message and exit.)r   rd  r   rw   rx   )	add_subparsersrM  r>   
add_parserinspectgetdocr   set_defaultsr   )	re  parent_parser
subparserscommand_name_to_subparsercommand_namecommand_typecommand	subparserrf  s	   `        r   _add_commandsrt  }  s     ++-J "&/oo&7 <"l.))=/|8T * 
	 	i(w':':;2;!,/<! &'DERR S  %$r   c                    t        d      }t        |      }t        | |g      }|j                  dddj                  dt        j
                               t        ||      }||fS )	NF)add_help)descriptionr`  z	--versionversionz{0} {1}r   )r   rx  )r   r^  r   r   r   __version__rt  )rw  rm  re  ro  s       r   _get_parserrz    sn     #E2M)-8M [=/RKIy/?/?&J\J\/]   !.k= I111r   c                    t        |       dkD  r| dd  ndg} t        t        |             D ]M  }t        ||dz         D ]9  }dj                  | ||dz          }|t        v s#| d | | |dz   d  z   }|g|z   c c S  O | S )NrC   r   r`   rs   )rP   rQ   r|   rM  )argvrY   jcommand_candidateoptionss        r   _preprocess_argvr    s     4y1}486(D3t9 5q!a% 	5A #a!a% 9 I-r(T!a%']2)*W44		55 Kr   c                <   t        j                         }|j                  t         j                         t        j                  t
        j                        }t         j                  t         j                  t         j                  dj                  | j                  t         j                        }|j                  |       |j                  t        j                   j                                |j                  |       t        j                   j                  |       y )N)r   rC   r`   )r   	getLoggersetLevelDEBUGStreamHandlersysstderrWARNINGINFOr   rW  setFormatterr   create_default_formatter
addHandlerset_verbosity)rd  root_loggerstream_handlerlogging_levels       r   _set_verbosityr    s    ##%K'**3::6N ??<<== 
c$

gmm,	  M* G G IJ>*
NN  /r   c                @   | j                   y t        j                         }|j                  t        j                         t        j
                  | j                         }|j                  t        j                  j                                |j                  |       y )N)filename)
log_filer   r  r  r  FileHandlerr  r   r  r  )rd  r  file_handlers      r   _set_log_filer    sq    }}##%K'&&L fnnEEGH<(r   c                 *   t               \  } }t        j                  }t        |      }| j	                  |      }t        |       t        |       t        j                  d      }	 |j                  |      S # t        $ rO}|j                  r|j                  |       n'|j                  |       ||d      j                          Y d }~yd }~wt        $ r< dj!                  |dd        }|j                  d| d       | j                          Y yw xY w)Nr   r   rC   rs   'z/' is not an optuna command. see 'optuna --help')rz  r  r|  r  
parse_argsr  r  r   r  ra  r	   debug	exceptionr   rc  AttributeErrorr|   )re  ro  r|  preprocessed_argvrd  r   eargv_strs           r   mainr    s    -8]*K*88D(.!!"34D4$x(F||D!! ::QLLO &&7&:;FFH  88DH%q
"QRS s    &A7 7	D AC

ADD)r   
str | Nonerw   r?   )r   r  r(   r  rw   r   )r@   r   rw   r   )rS   z list[dict[tuple[str, str], Any]]rT   list[tuple[str, str]]rU   boolrw   z&tuple[list[dict[str, Any]], list[str]])rS   zlist[dict[str, Any]]rV   	list[str]rw   r?   )
rS   z=list[dict[tuple[str, str], Any]] | dict[tuple[str, str], Any]rT   r  r   r?   rU   r  rw   r?   )r@   r?   rw   r?   )r   r   rw   r   )re  r   rm  r   rw   zdict[str, ArgumentParser])rD   )rw  r?   rw   z0tuple[ArgumentParser, dict[str, ArgumentParser]])r|  r  rw   r  rg  ry   )Fr   
__future__r   rQ  r   r   r8   enumr   rj  r   r   r   r  typingr   r   sqlalchemy.excr%   r   r   optuna._importsr   optuna.exceptionsr	   r
   optuna.storagesr   r   r   r   r   optuna.storages.journalr   r   optuna.trialr   r  r:   r   r)   r.   r]   r_   rh   r~   r   r   r   r   r   r   r   r   r   r  r  r  r)  rA  rM  __annotations__rT  r^  rt  rz  r  r  r  r  rf   r   r   <module>r     s   #  #       	 
      ' + 1 ' . / * & 6 7 # 23
& 9N2 7-78M7X\7+7t ' ':
%PZJZ"Z Z 	Z
 	Z:" "D-< -`
< 
\ ., 04| 4n/l /d2 2j1, 1hl <f< fR3L 3n ! 1&,	( ",^%%0>%%02 0$)r   