o
    qoi)                     @   sH  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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mZmZmZmZmZ d d
lmZmZmZ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'm(Z( e)e*Z+ej,fde-ddfddZ.	d@dedee/e0ee0 f ddfddZ1dede0deddfddZ2dee0 dee0 fdd Z3d!ee' ddfd"d#Z4	$dAd%e(d&ed'e0d(ee0 d!e'd)e/dd*fd+d,Z5d-e0de0fd.d/Z6dBd0d1Z7G d2d3 d3eZ8eG d4d* d*Z9G d5d6 d6e%d7Z:d8ee0 ddfd9d:Z;ed;ee0e0f defd<d=Z<dBd>d?Z=dS )C    N)contextmanager)	dataclass)datetime)Enum)splitext)Path)dedent)AnyDictOptionalSequenceUnioncast)
DictConfig	OmegaConf	open_dict
read_write)version)deprecation_warning)HydraConfig)	Singleton)HydraContextTaskFunctionlevelreturnc                 C   s@   t  }||  t tj}t d}|| || d S )Nz%(message)s)	logging	getLoggersetLevelStreamHandlersysstdout	FormattersetFormatter
addHandler)r   roothandler	formatter r'   D/home/ubuntu/.local/lib/python3.10/site-packages/hydra/core/utils.pysimple_stdout_log_config   s   


r)   F
log_configverbose_configc                 C   s   t |ttfst|sJ | d ur&tj| dd}|d d ur%tj| nt	 }|
tj ttj}td}|| || t |trX|rVt	 
tj d S d S t |trdt|g}n
t|rl|}nJ |D ]}t	|
tj qpd S )NT)resolver$   z4[%(asctime)s][%(name)s][%(levelname)s] - %(message)s)
isinstanceboolstrr   is_listto_containerr   config
dictConfigr   r   INFOr   r   r    r!   r"   r#   DEBUGcreate)r*   r+   confr$   r%   r&   verbose_listloggerr'   r'   r(   configure_log$   s8   




r:   cfgfilename
output_dirc                 C   sZ   |j ddd tt|| ddd}|t|  W d    d S 1 s&w   Y  d S )NTparentsexist_okwzutf-8)encoding)mkdiropenr/   writer   to_yaml)r;   r<   r=   filer'   r'   r(   _save_configH   s   "rH   	overridesc                 C   s   dd | D S )z
    :param overrides: overrides list
    :return: returning a new overrides list with all the keys starting with hydra. filtered.
    c                 S   s   g | ]	}| d s|qS )zhydra.)
startswith).0xr'   r'   r(   
<listcomp>S   s    z$filter_overrides.<locals>.<listcomp>r'   )rI   r'   r'   r(   filter_overridesN   s   rN   hydra_contextc                 C   s   | d u r
t tdd S )Nz
                run_job's signature has changed: the `hydra_context` arg is now required.
                For more info, check https://github.com/facebookresearch/hydra/pull/1581.)	TypeErrorr   )rO   r'   r'   r(   _check_hydra_contextV   s   rQ   Ttask_functionr2   job_dir_keyjob_subdir_keyconfigure_logging	JobReturnc                 C   sp  t | |j}t }t j}t | tt	
||}	|d ur2tt	
||}
tj|	|
}	t|jj' t|jj tj|	|jj_W d    n1 sSw   Y  W d    n1 sbw   Y  t | d }z7t }t|}t| t| |d= W d    n1 sw   Y  W d    n1 sw   Y  ||_tt j}t|tsJ ||_t	|jjj}t|tsJ ||_tt|	jddd |jjj }|d u rt!"drd}|d u rd}t#t$d| dd	d
 d}|rt |	 |	|_%nt |_%|rt&|jj'|jj( |jj)d urAt|jjjt|jj) }t*|d| t*|d| t*|jjjd| t+|jjj,5 |j-|| d z| ||_.t/j0|_1W n t2yu } z||_.t/j3|_1W Y d }~nd }~ww W d    n	1 sw   Y  t4 5d|_6t7  |j8||d |W |t _|rt | S S |t _|rt | w w )NhydraTr>   z1.2FzIhttps://hydra.cc/docs/1.2/upgrades/1.1_to_1.2/changes_to_job_working_dir/z                    Future Hydra versions will no longer change working directory at job runtime by default.
                    See z for more information.   )message
stacklevelzconfig.yamlz
hydra.yamlzoverrides.yaml)r2   rR   name)r2   
job_return)9rQ   	callbacksosgetcwdr   instancer;   
set_configr/   r   selectpathjoinr   rW   runtimer   abspathr=   rV   copydeepcopyr-   r   	hydra_cfgr1   rI   tasklistr   rC   jobchdirr   base_at_leastr   r   working_dirr:   job_loggingverboseoutput_subdirrH   env_overrideenv_seton_job_startreturn_value	JobStatus	COMPLETEDstatus	ExceptionFAILED
JobRuntimeget	task_name_flush_loggers
on_job_end)rR   r2   rS   rT   rO   rU   r]   old_cwdorig_hydra_cfgr=   subdir_chdirrettask_cfgri   rI   urlhydra_outputer'   r'   r(   run_jobc   s   








	

r   sc                 C   s"   t |  dd} tdd| S )N _z(?u)[^-\w.] )r/   stripreplaceresub)r   r'   r'   r(   get_valid_filename   s   r   c                     s   t jddd ddd t jddd dd tj} | d	  | d	  d
| d  | d	  d
| d  d
| d  d t jdd fdd	dd d S )Nnowc                 S   s   t  | S N)r   r   strftime)patternr'   r'   r(   <lambda>   s    zsetup_globals.<locals>.<lambda>T)	use_cacher   rW   c                 S   s   t ttt | S r   )r   rb   r   r   r   r}   )rc   r'   r'   r(   r      s    )r   r   .   rX   )majorminormicropython_versionr   c                    s
     | S r   )r}   )r   version_dictr'   r(   r      s   
 )r   )r   register_new_resolverr   version_info)vir'   r   r(   setup_globals   s&   
r   c                   @   s   e Zd ZdZdZdZdS )rw   r   r   rX   N)__name__
__module____qualname__UNKNOWNrx   r{   r'   r'   r'   r(   rw      s    rw   c                   @   s   e Zd ZU dZeee  ed< dZee	 ed< dZ
ee	 ed< dZee ed< dZee ed< ejZeed< dZeed< ed	efd
dZejded	dfddZdS )rV   NrI   r;   ri   ro   r~   ry   _return_valuer   c                 C   sF   | j tjks
J d| j tjkr| jS tjd| j t	j
  | j)Nzreturn_value not yet availablez$Error executing job with overrides: )ry   rw   r   rx   r   r   stderrrE   rI   r^   linesepselfr'   r'   r(   rv      s   zJobReturn.return_valuevaluec                 C   s
   || _ d S r   )r   )r   r   r'   r'   r(   rv     s   
)r   r   r   rI   r   r   r/   __annotations__r;   r   ri   ro   r~   rw   r   ry   r   r	   propertyrv   setterr'   r'   r'   r(   rV      s   
 
c                   @   s>   e Zd ZdddZdedefddZdededdfd	d
ZdS )r|   r   Nc                 C   s   t  | _| dd d S )Nr[   UNKNOWN_NAME)r   r6   r7   setr   r'   r'   r(   __init__  s   
zJobRuntime.__init__keyc                 C   s4   t | j|}|d u rtdt| j d| |S )NzKey not found in z: )r   rb   r7   KeyErrortyper   )r   r   r   r'   r'   r(   r}     s   zJobRuntime.getr   c                 C   s0   t dt| j d| d|  || j|< d S )NzSetting :=)logdebugr   r   r7   )r   r   r   r'   r'   r(   r     s   "zJobRuntime.setr   N)r   r   r   r   r/   r	   r}   r   r'   r'   r'   r(   r|     s    
r|   )	metaclassconfig_pathc                 C   s4   | d urt | }|d dv rtd}t|d S d S )Nr   )z.yamlz.ymlz            Using config_path to specify the config name is not supported, specify the config name via config_name.
            See https://hydra.cc/docs/1.2/upgrades/0.11_to_1.0/config_path_changes
            )r   r   
ValueError)r   
split_filemsgr'   r'   r(   validate_config_path  s   r   envc              
   c   s    dd | D }t j|  zdV  W | D ]\}}|du r$t j|= q|t j|< qdS | D ]\}}|du r=t j|= q0|t j|< q0w )z{Temporarily set environment variables inside the context manager and
    fully restore previous environment afterwards
    c                 S   s   i | ]}|t |qS r'   )r^   getenv)rK   r   r'   r'   r(   
<dictcomp>-  s    z env_override.<locals>.<dictcomp>N)r^   environupdateitems)r   original_envr   r   r'   r'   r(   rs   (  s   

rs   c               	   C   s0   t jD ]} z|    W q ty   Y qw d S r   )r   _handlerListflushrz   )
h_weak_refr'   r'   r(   r   9  s   
r   )F)Tr   )>rg   r   r^   r   r   
contextlibr   dataclassesr   r   enumr   os.pathr   pathlibr   textwrapr   typingr	   r
   r   r   r   r   	omegaconfr   r   r   r   rW   r   #hydra._internal.deprecation_warningr   hydra.core.hydra_configr   hydra.core.singletonr   hydra.typesr   r   r   r   r   r4   intr)   r.   r/   r:   rH   rN   rQ   r   r   r   rw   rV   r|   r   rs   r   r'   r'   r'   r(   <module>   st    

$
j
