a
    þd  ã                   @   sŒ   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mZmZ dd„ Zdd	d
„Zdd„ Zddd„Zedd„ ƒZdS )é    N)ÚOrderedDict)Úpath)Úset_random_seed)Úget_dist_infoÚ	init_distÚmaster_onlyc                  C   sz   zddl m}  ddl m} W n" ty>   ddl m} m} Y n0 t jjj}dd„ }dd„ }|  	t
|¡ | ||¡ || fS )	zPSupport OrderedDict for yaml.

    Returns:
        yaml Loader and Dumper.
    r   )ÚCDumper)ÚCLoader)ÚDumperÚLoaderc                 S   s   |   | ¡ ¡S ©N)Zrepresent_dictÚitems)ZdumperÚdata© r   ú^/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/basicsr/utils/options.pyÚdict_representer   s    z&ordered_yaml.<locals>.dict_representerc                 S   s   t |  |¡ƒS r   )r   Zconstruct_pairs)ÚloaderÚnoder   r   r   Údict_constructor   s    z&ordered_yaml.<locals>.dict_constructor)Úyamlr   r	   ÚImportErrorr
   r   ÚresolverÚBaseResolverZDEFAULT_MAPPING_TAGZadd_representerr   Zadd_constructor)r
   r   Z_mapping_tagr   r   r   r   r   Úordered_yaml   s    
r   é   c                 C   sˆ   d}|   ¡ D ]v\}}t|tƒr^|d|d  | d 7 }|t||d ƒ7 }|d|d  d 7 }q|d|d  | d t|ƒ d 7 }q|S )zÃdict to string for printing options.

    Args:
        opt (dict): Option dict.
        indent_level (int): Indent level. Default: 1.

    Return:
        (str): Option string for printing.
    Ú
ú é   z:[r   z]
z: )r   Ú
isinstanceÚdictÚdict2strÚstr)ÚoptÚindent_levelÚmsgÚkÚvr   r   r   r    %   s    

&r    c                 C   s    | dks|   ¡ dkrd S |   ¡ dkr(dS |   ¡ dkr8dS |  d¡rRt|  dd¡ƒS |  ¡ rbt| ƒS |  d	dd
¡ ¡ rŠ|  d	¡dk rŠt| ƒS |  d¡rœt| ƒS | S )Nú~ÚnoneÚtrueTÚfalseFz!!floatÚ Ú.r   r   ú[)ÚlowerÚ
startswithÚfloatÚreplaceÚisdigitÚintÚcountÚeval)Úvaluer   r   r   Ú_postprocess_yml_value:   s    
 
r7   Tc                 C   sð  t  ¡ }|jdtddd |jdg d¢ddd	 |jd
dd |jddd |jdtdd |jddd dd | ¡ }t|jdd$}tj	|t
ƒ d d}W d   ƒ n1 s®0    Y  |jdkrØd|d< tddd n@d|d< |jdkrd|v rt|jfi |d ¤Ž n
t|jƒ tƒ \|d< |d< | d ¡}|d u rRt d!d"¡}||d < t||d  ƒ |jd urÚ|jD ]d}| d#¡\}}	| ¡ |	 ¡  }}	t|	ƒ}	d$}
| d%¡D ]}|
d&|› d'7 }
q®|
d(7 }
t|
ƒ qt|j|d)< ||d*< |jr|d+  d,¡sd-|d+  |d+< |d. d/kr0tj ¡ |d.< |d0  ¡ D ]z\}}| d1¡d }||d2< d3|v rp|d3 |d3< | d4¡d ur’t  |d4 ¡|d4< | d5¡d ur<t  |d5 ¡|d5< q<|d6  ¡ D ]:\}}|d urÄd7|v sêd8|v rÄt  |¡|d6 |< qÄ|rªt !| d9|d+ ¡}||d6 d:< t !|d;¡|d6 d;< t !|d<¡|d6 d<< ||d6 d=< t !|d>¡|d6 d>< d,|d+ v rèd?|v rd@|d? dA< d!|dB dC< d@|dB dD< n>t !| dE|d+ ¡}||d6 dF< ||d6 d=< t !|d>¡|d6 d>< ||fS )GNz-optTzPath to option YAML file.)ÚtypeÚrequiredÚhelpz
--launcher)r(   ZpytorchÚslurmr(   zjob launcher)ÚchoicesÚdefaultr:   z--auto_resumeÚ
store_true)Úactionz--debugz--local_rankr   )r8   r=   z--force_ymlú+z:Force to update yml files. Examples: train:ema_decay=0.999)Únargsr=   r:   Úr)Úmode)r   FÚdistzDisable distributed.)Úflushr;   Zdist_paramsZrankZ
world_sizeZmanual_seedr   i'  ú=r"   ú:z["z"]z=valueÚauto_resumeÚis_trainÚnameÚdebugZdebug_Znum_gpuÚautoZdatasetsÚ_ÚphaseZscaleZdataroot_gtZdataroot_lqr   Zresume_stateZpretrain_networkZexperimentsÚexperiments_rootÚmodelsZtraining_statesÚlogZvisualizationÚvalé   Zval_freqÚloggerZ
print_freqZsave_checkpoint_freqÚresultsÚresults_root)"ÚargparseÚArgumentParserÚadd_argumentr!   r3   Ú
parse_argsÚopenr"   r   Úloadr   ÚlauncherÚprintr   r   ÚgetÚrandomÚrandintr   Z	force_ymlÚsplitÚstripr7   ÚexecrH   rK   r/   ÚtorchZcudaZdevice_countr   ÚospÚ
expanduserÚjoin)Ú	root_pathrI   ÚparserÚargsÚfr"   ÚseedÚentryÚkeysr6   Zeval_strÚkeyrN   ZdatasetrR   rO   rV   r   r   r   Úparse_optionsR   sŒ    ÿ2







rq   c           	   	   C   s¬   dd l }dd l}ddlm} d |j¡}t |t | ¡¡}|| |ƒ t|dƒJ}| 	¡ }| 
dd| ¡ › d|› d¡ | d¡ | |¡ W d   ƒ n1 sž0    Y  d S )Nr   )Úcopyfiler   zr+z# GENERATE TIME: z

# CMD:
# z

)ÚsysÚtimeÚshutilrr   rh   Úargvrf   Úbasenamer[   Ú	readlinesÚinsertÚasctimeÚseekÚ
writelines)	Zopt_filerO   rs   rt   rr   ÚcmdÚfilenamerl   Úlinesr   r   r   Úcopy_opt_file´   s    

r€   )r   )T)rW   r`   re   r   Úcollectionsr   Úosr   rf   Zbasicsr.utilsr   Zbasicsr.utils.dist_utilr   r   r   r   r    r7   rq   r€   r   r   r   r   Ú<module>   s   

b