o
    qoiS^                     @   s  U 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	m
Z
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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) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> da?eej@ eAd< G dd dZBdS )    N)ArgumentParser)defaultdict)AnyCallableDefaultDictListOptionalSequenceTypeUnion)	Container
DictConfig	OmegaConfflag_override)get_column_widthsrun_and_report)ConfigLoader)ConfigSearchPath)HydraConfig)Plugins)	JobReturn
JobRuntimeconfigure_logrun_jobsetup_globalssimple_stdout_log_config)CompletionPlugin)ConfigSource)Launcher)SearchPathPlugin)Sweeper)HydraContextRunModeTaskFunction   )DefaultsTreeNodeInputDefault   )	Callbacks)ConfigLoaderImpl)#create_automatic_config_search_pathlogc                   @   s&  e Zd Zeded  dee dee dee dedd fddZed	ed
edd fddZ	d	ede
ddfddZdee dee defddZ	dgdee dedee dedef
ddZ	dgdee dedee dedef
ddZededefddZded edefd!d"Z	#dhdee dee d ed$ee d%eddfd&d'Zede
deeee f fd(d)Zdee dee ddfd*d+Zed,edefd-d.Zdid0edee fd1d2Z 	dgd3e!egef d4edefd5d6Z"d7eded,ed%edef
d8d9Z#dee d,ed:eddfd;d<Z$dee d,ed:eddfd=d>Z%edjd@edAedBeddfdCdDZ&edjd@edAedBeddfdEdFZ'dkdGdHZ(e)j*fdee dee dIe)ddfdJdKZ+dLe,ddfdMdNZ-e)j*fdee dee dIe)ddfdOdPZ.e)j*fdee dee dIe)ddfdQdRZ/e)j*fdee dee dIe)ddfdSdTZ0	#		dldee dee dIe)dedUedVedefdWdXZ1e)j*fdee dee dIe)ddfdYdZZ2e)j*fdee dee dIe)ddfd[d\Z3	]dmd^e4e5e6f d_e,ddfd`daZ7e)j*fdee dee dIe)ddfdbdcZ8e)j*fddedee dee dIe)ddf
dedfZ9dS )nHydraclscalling_filecalling_moduleconfig_pathjob_namereturnc                 C   s   t |||}t||S N)r*   r,   create_main_hydra2)r-   r.   r/   r0   r1   config_search_path r6   I/home/ubuntu/.local/lib/python3.10/site-packages/hydra/_internal/hydra.py create_main_hydra_file_or_module)   s   z&Hydra.create_main_hydra_file_or_module	task_namer5   c                 C   s4   t |d}| ||d}ddlm} | | |S )N)r5   )r9   config_loaderr   )GlobalHydra)r)   hydra.core.global_hydrar;   instance
initialize)r-   r9   r5   r:   hydrar;   r6   r6   r7   r4   7   s   zHydra.create_main_hydra2r:   Nc                 C   s   t   || _t d| dS )zY
        :param task_name: task name
        :param config_loader: config loader
        nameN)r   r:   r   set)selfr9   r:   r6   r6   r7   __init__G   s   zHydra.__init__config_name	overridesc                 C   s6   z| j ||dtjdd}|jjW S  ty   Y d S w )NF)rD   rE   with_log_configurationrun_modevalidate_sweep_overrides)compose_configr"   MULTIRUNr?   mode	Exception)rB   rD   rE   cfgr6   r6   r7   get_modeQ   s   
zHydra.get_modeTtask_functionrF   c           	      C   s   | j |||tjd}|jjd u rtj|j_n	|jjtjksJ t|}|j||d tt| j	|d||dd |d}|j
|||d |j}|S )NrD   rE   rF   rG   configrD   r:   	callbackszhydra.run.dir)hydra_contextrO   rR   job_dir_keyjob_subdir_keyconfigure_logging)rR   rD   
job_return)rI   r"   RUNr?   rK   r(   on_run_startr   r!   r:   
on_run_endreturn_value)	rB   rD   rO   rE   rF   rM   rT   ret_r6   r6   r7   runb   s0   
z	Hydra.runc           
      C   s   | j |||tjd}t|}|j||d t j|t| j	|d|d}t
j|jjjdd}t|ts5J |j|d}	|j||d |	S )NrP   rQ   rS   )rR   rU   rO   Fresolve	arguments)rI   r"   rJ   r(   on_multirun_startr   r=   instantiate_sweeperr!   r:   r   to_containerr?   rE   task
isinstancelistsweepon_multirun_end)
rB   rD   rO   rE   rF   rM   rT   sweepertask_overridesr^   r6   r6   r7   multirun   s(   zHydra.multirunsrc_cfgc                 C   s   t | }t|ddgddg t| D ]	}|dkr||= qW d    n1 s*w   Y  t|jddgd |jd= |jd= W d    |S 1 sLw   Y  |S )NstructreadonlyFr?   
hydra_helphelp)copydeepcopyr   rj   keysr?   )rp   rM   keyr6   r6   r7   get_sanitized_hydra_cfg   s   


zHydra.get_sanitized_hydra_cfgrM   cfg_typec                 C   sj   |dv sJ |dkr*t |ddgddg |d= W d    |S 1 s#w   Y  |S |dkr3| |}|S )N)jobr?   allr{   rq   rr   Fr?   )r   ry   )rB   rM   rz   r6   r6   r7   get_sanitized_cfg   s   

zHydra.get_sanitized_cfgFpackagerb   c                 C   s   | j ||tjdd}t | t|jd  | 	||}|dkr$d }|d u r+|}nt
||}|d u rDtjd| d td t|tsOt| d S |d urZtd|  |rat| tjt| d S )NFrD   rE   rG   rF   _global_z	package 'z' not found in config
r'   z# @package )rI   r"   rZ   r   r=   
set_configr   set_readonlyr?   r}   selectsysstderrwriteexitri   r   printrb   stdoutto_yaml)rB   rD   rE   rz   r~   rb   rM   r^   r6   r6   r7   show_cfg   s0   


zHydra.show_cfgc                 C   s   t t}t tD ]}t|tsJ || }||  | q|	 D ]\}}t
|dkrDddd |D }td| d| q&|S )Nr'   ,c                 S   s   g | ]}t |jqS r6   )type__name__).0pluginr6   r6   r7   
<listcomp>   s    z1Hydra.get_shell_to_plugin_map.<locals>.<listcomp>zMultiple plugins installed for  : )r   rj   r   r=   discoverr   
issubclassprovidesappenditemslenjoin
ValueError)r:   shell_to_pluginclazzr   shellpluginslstr6   r6   r7   get_shell_to_plugin_map   s   zHydra.get_shell_to_plugin_mapc                    s   g d}t | t fdd|D }|dkr td| d| | jdtdtffd	d
}d v r@| j}|  d S d v rO| j	}|	  d S d v r`| j
}|j
|d d S d S )N)install	uninstallqueryc                 3   s    | ]	}| v rd V  qdS )r'   Nr6   )r   rx   rc   r6   r7   	<genexpr>   s    z)Hydra.shell_completion.<locals>.<genexpr>r'   zExpecting one subcommand from z
 to be setcmdr2   c                    s@   |  vrd dd   D }td|  d|  |  d S )N
c                 S      g | ]}d | qS )	r6   r   xr6   r6   r7   r          z?Hydra.shell_completion.<locals>.find_plugin.<locals>.<listcomp>zNo completion plugin for 'z' found, available : 
r   )r   rw   r   )r   r   )r   r6   r7   find_plugin   s   z+Hydra.shell_completion.<locals>.find_pluginr   r   r   )rD   )r   from_dotlistsumr   r   r:   strr   r   r   r   )rB   rD   rE   subcommandsnum_commandsr   r   r6   )rd   r   r7   shell_completion   s"   



zHydra.shell_completionargs_parserc                 C   sX   d}d }| j D ]}t|jdkr|}q|d|j d|j d7 }q|d|j 7 }|S )N r   r   r   r   zOverrides : )_actionsr   option_stringsr   rt   )r   srE   actionr6   r6   r7   format_args_help  s   
 zHydra.format_args_helpr   parentc                 C   s   ddl m} g }| j|D ]8}|dkr|}nd||}| j||j}| j||j}t|dkr8|	| t|dkrF|
| | q|S )Nr   )
ObjectTyper   z{}/{})hydra.core.object_typer   r:   list_groupsformatget_group_optionsCONFIGGROUPr   r   extendlist_all_config_groups)rB   r   r   groupsgroup
group_namefilesdirsr6   r6   r7   r     s   
zHydra.list_all_config_groups	predicatecompactc           	         s    fdd|   D }d}t|D ].}t| j|}|r)d|}d||}nddd |D }d||}||d 7 }q|S )	Nc                    s   g | ]} |r|qS r6   r6   r   r   r6   r7   r   .  s    z.Hydra.format_config_groups.<locals>.<listcomp>r   z, z{}: {}r   c                 S   r   )  r6   )r   or6   r6   r7   r   6  r   z{}:
{})r   sortedr:   r   r   r   )	rB   r   r   r   r   r   optionsr   liner6   r   r7   format_config_groups+  s   
zHydra.format_config_groupshelp_cfgc                    sf   t |j}dtdtfdd dtdtf fdd}|j| ||  | |tj	||dd}|S )	Nr   r2   c                 S   s   |  dp| dkS )Nzhydra/r?   )
startswithr   r6   r6   r7   is_hydra_groupE  s   z&Hydra.get_help.<locals>.is_hydra_groupc                    s
    |  S r3   r6   r   r   r6   r7   is_not_hydra_groupH  s   
z*Hydra.get_help.<locals>.is_not_hydra_groupra   )
FLAGS_HELPHYDRA_CONFIG_GROUPSAPP_CONFIG_GROUPSr   )
stringTemplatetemplater   bool
substituter   r   r   r   )rB   r   rM   r   rb   r   r   	help_textr6   r   r7   get_help<  s   zHydra.get_helpargsc                 C   sF   | j d |jtjdd}|jj}| |}| j|||dd}t| d S )NTr   Fra   )	rI   rE   r"   rZ   r?   rs   ry   r   r   )rB   rD   r   r   rM   r   r   r6   r6   r7   rs   S  s   
zHydra.hydra_helpc                 C   sb   | j ||jtjdd}t | |jj}t	
|}| |d}| j||||jd}t| d S )NTr   r{   ra   )rI   rE   r"   rZ   r   r=   r   r?   rt   ru   rv   r}   r   rb   r   )rB   rD   r   r   rM   r   	clean_cfgr   r6   r6   r7   app_helpa  s   

zHydra.app_help-headerprefixfillerc                 C   s8   t d usJ t ||   t |dt| |  d S Nr   r+   debugljustr   r   r   r   r6   r6   r7   _log_headert  s   zHydra._log_headerc                 C   s*   t d usJ t |dt| |  d S r   r   r   r6   r6   r7   _log_footerz  s   zHydra._log_footerc                 C   s   t d usJ | jddd dd t  D }ttttt	fD ]3}t |}t
|dkrRtj|j ddd	 |D ]}t d
|j |j|v rQ||j q;qt
|dkrmtjddd	 |D ]}t d
| qbd S d S )NzInstalled Hydra Plugins*r   r   c                 S   s   h | ]}|j qS r6   )r   )r   pr6   r6   r7   	<setcomp>  s    z'Hydra._print_plugins.<locals>.<setcomp>r   :r   )r   r   z		{}zGeneric plugins: )r+   r   r   r=   r   r   r   r   r    r   r   r,   r   r   r   remove)rB   all_pluginsplugin_typer   r   plugin_namer6   r6   r7   _print_plugins  s.   
zHydra._print_pluginsrG   c              	   C   s
  t d usJ t d | jddd ddgg}| j|||dd}t | | j|d	d
}|jj	j
}|D ]}||j|j d|j g q5t|\}}	dd|d|	}
| j|
dd |D ]}t d|j||j d|j |	 qb| j|
dd d S )Nr   zConfig search pathr   r   ProviderzSearch pathFr   r?   )rz   z://z| {} | {} |r   )r+   r   r   rI   r   r=   r   r}   r?   runtimeconfig_sourcesr   providerschemapathr   r   r   r   )rB   rD   rE   rG   boxrM   sourcesspprovider_padsearch_path_padr   sourcer6   r6   r7   _print_search_path  s8   


 
zHydra._print_search_pathtop_nc                 C   sr  t d usJ t  }|d u rd S t|j }tdd |}t|dd dd}t	t
||}ddgg}|d| D ]}||d |d	 d
g q;t|}t d | jddd | jd|jd
ddd d|d d |d  d|d d	 |d	  d}	| j|	dd |d= |D ] }
|
d |d }|
d	 |d	 }t d| d| d q| j|	dd d S )Nc                 S   s   | d dkS )Nr'   gMb@?r6   r   r6   r6   r7   <lambda>  s    z5Hydra._print_plugins_profiling_info.<locals>.<lambda>c                 S   s   | d S )Nr'   r6   r   r6   r6   r7   r    s    T)rx   reverseModuleSecr   r'   z.3fr   zProfiling informationr   r   zTotal plugins scan time : z secondsr   z| z | z |)r+   r   r=   	get_statsrj   modules_import_timer   filterr   maxr   r   r   r   r   
total_timer   r   )rB   r  statsr   filteredsorted_itemsr   itempaddingr   rowabr6   r6   r7   _print_plugins_profiling_info  s4   

6z#Hydra._print_plugins_profiling_infoc                    s   t d usJ j d j d j d t fdd}t | jddd t	|dd	gd
d
g |d= W d    n1 sMw   Y  t 
t| d S )NrD   rE   rG   )rD   rE   c                      s   j  ddS )NFr   )rI   r6   rD   rE   rG   rB   r6   r7   r    s    z*Hydra._print_config_info.<locals>.<lambda>Configr   r   rq   rr   Fr?   )r+   r  _print_defaults_tree_print_defaults_listr   r   r=   r   r   r   infor   r   )rB   rD   rE   rG   rM   r6   r  r7   _print_config_info  s   zHydra._print_config_infoc           
      C   s>  t d usJ | jj|||d}g dg}|jD ]}|j|j|jr"dnd|jg}dd |D }|| qt	|}|d= t 
d | jd	d
d dd|d d|d d|d d|d }	| j|	dd |D ])}t 
d|d |d |d |d |d |d |d |d  ql| j|	dd d S )Nr  )Config pathPackage_self_ParentTrueFalsec                 S   s   g | ]
}|d ur
|ndqS r   r6   r   r6   r6   r7   r     s    z.Hydra._print_defaults_list.<locals>.<listcomp>r   r   zDefaults Listr   r   z| {} | {} | {} | {} | r!  r"  r'   r#  r$   r$     r   r   z| {} | {} | {} | {} |)r+   r:   compute_defaults_listdefaultsr0   r~   is_selfr   r   r   r   r   r   r   r   )
rB   rD   rE   rG   r*  r   dr  r  r   r6   r6   r7   r     sJ   

	zHydra._print_defaults_listc                 C   s.   t d usJ t tjr| ||| d S d S r3   )r+   isEnabledForloggingDEBUG_print_all_inforB   rD   rE   rG   r6   r6   r7   _print_debug_info6  s   zHydra._print_debug_info
from_shellrH   c                 C   sH   | j j|||||d}|r"t|jj|jj tta	| 
||| |S )ae  
        :param config_name:
        :param overrides:
        :param run_mode: compose config for run or for multirun?
        :param with_log_configuration: True to configure logging subsystem from the loaded config
        :param from_shell: True if the parameters are passed from the shell. used for more helpful error messages
        :return:
        )rD   rE   rG   r3  rH   )r:   load_configurationr   r?   hydra_loggingverboser.  	getLoggerr   r+   r2  )rB   rD   rE   rG   rF   r3  rH   rM   r6   r6   r7   rI   @  s   
zHydra.compose_configc                 C   s   |    | jdd d S )N
   )r  )r   r  r1  r6   r6   r7   _print_plugins_info`  s   zHydra._print_plugins_infoc                 C   s:   ddl m} | jd| dd |   | ||| d S )Nr$   )__version__zHydra =r'  )r   r:  r   r   r   )rB   rD   rE   rG   r:  r6   r6   r7   r0  i  s   zHydra._print_all_infor   treeindentc                    s   t d usJ ddlm m}m d|dtf fdd}d| }t|trY||j}|j	d urPt
|j	dkrPt || d	  |j	D ]}| j||d
 d qBd S t ||  d S t||s`J t |||  d S )Nr$   )GroupDefaultr&   VirtualRootnoder2   c                    sH   t | r	|  S t |  r |  }|d u rd}|  d | S |  S )Nnullz: )ri   get_config_pathget_nameget_override_key)r@  r@   r>  r?  r6   r7   to_str}  s   

z/Hydra._print_defaults_tree_impl.<locals>.to_strr   r   r   r'   )r<  r=  )r+   core.default_elementr>  r&   r?  r   ri   r%   r@  childrenr   r  _print_defaults_tree_impl)rB   r<  r=  r&   rF  padnode_strchildr6   rE  r7   rI  u  s   


zHydra._print_defaults_tree_implc                 C   sF   t d usJ | jj|||d}t d | jddd | |j d S )Nr  r   zDefaults Treer   r'  )r+   r:   r)  r  r   rI  defaults_tree)rB   rD   rE   rG   r*  r6   r6   r7   r    s   
zHydra._print_defaults_treer  c                 C   sz   | j | j| j| j| j| jd}ttjd t	t
a||vr2t| }tdd| d d S || |||d d S )N)r|   r*  zdefaults-treerR   r   
searchpath)levelzInfo usage: --info [|]r  )r0  r  r  r   r9  r  r   r.  r/  r7  r   r+   r   rw   errorr   )rB   r  rD   rE   rG   r   optsr6   r6   r7   	show_info  s   

zHydra.show_info)T)F)r   )r   r   )r2   N)FTT)r   ):r   
__module____qualname__classmethodr
   r   r   r8   r   r4   r   rC   r   r   rN   r#   r   r   r`   ro   staticmethodr   ry   r}   r   r   r   r   r   r   r   r	   r   r   r   r   rs   r   r   r   r   r"   rZ   r  intr  r   r  r2  rI   r9  r0  r   r%   r&   rI  r  rT  r6   r6   r6   r7   r,   (   s   


+

%






)(

:

$



%
r,   )Cru   r.  r   r   argparser   collectionsr   typingr   r   r   r   r   r	   r
   r   	omegaconfr   r   r   r   hydra._internal.utilsr   r   hydra.core.config_loaderr   hydra.core.config_search_pathr   hydra.core.hydra_configr   hydra.core.pluginsr   hydra.core.utilsr   r   r   r   r   r   hydra.plugins.completion_pluginr   hydra.plugins.config_sourcer   hydra.plugins.launcherr    hydra.plugins.search_path_pluginr   hydra.plugins.sweeperr    hydra.typesr!   r"   r#   rG  r%   r&   rT   r(   config_loader_implr)   utilsr*   r+   Logger__annotations__r,   r6   r6   r6   r7   <module>   s4   
( 