a
    d/                     @   s   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 Z
dd Zd	d
 Ze	dd ZdddZdd ZdddZdS )    N)path   )master_onlyc                 C   s<   t |  tj |  t|  tj|  tj|  dS )zSet random seeds.N)randomseednptorchZmanual_seedZcudaZmanual_seed_all)r    r	   [/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/basicsr/utils/misc.pyset_random_seed   s
    

r   c                   C   s   t dt  S )Nz%Y%m%d_%H%M%S)timestrftime	localtimer	   r	   r	   r
   get_time_str   s    r   c                 C   sH   t | r6| d t  }td| dd t| | tj| dd dS )zwmkdirs. If path exists, rename it with timestamp and create a new one.

    Args:
        path (str): Folder path.
    Z
_archived_z"Path already exists. Rename it to T)flushexist_okN)ospexistsr   printosrenamemakedirs)r   new_namer	   r	   r
   mkdir_and_rename   s
    
r   c                 C   sz   | d   }| d r$t|d nt|d | D ]:\}}d|v s:d|v s:d|v s:d|v rfq:q:tj|d	d
 q:dS )zMake dirs for experiments.r   Zis_trainZexperiments_rootZresults_rootZstrict_loadZpretrain_networkresume	param_keyTr   N)copyr   popitemsr   r   )optZpath_optkeyr   r	   r	   r
   make_exp_dirs%   s     r"   Fc                    s@   |durt |ttfstd|  fdd  | ||dS )a  Scan a directory to find the interested files.

    Args:
        dir_path (str): Path of the directory.
        suffix (str | tuple(str), optional): File suffix that we are
            interested in. Default: None.
        recursive (bool, optional): If set to True, recursively scan the
            directory. Default: False.
        full_path (bool, optional): If set to True, include the dir_path.
            Default: False.

    Returns:
        A generator for all the interested files with relative paths.
    Nz-"suffix" must be a string or tuple of stringsc                 3   s   t | D ]r}|jds^| r^r.|j}nt|j}|d u rL|V  q|||r||V  q
|r
 |j||dE d H  q
q
q
d S )N.suffix	recursive)	r   scandirname
startswithis_filer   r   relpathendswith)dir_pathr%   r&   entryZreturn_path_scandir	full_pathrootr	   r
   r0   I   s    
zscandir.<locals>._scandirr$   )
isinstancestrtuple	TypeError)r-   r%   r&   r1   r	   r/   r
   r'   4   s
    r'   c           	   	   C   s.  | d d r*dd |   D }d}|D ] }| d d| dur(d}q(|rVtd	 |D ]}d| }|d
d}| d ddu s|| d d vrZt| d d d| d| d| d |< td| d| d |   qZdd | d   D }|D ]0}| d | dkrd| d |< td| d qdS )zCheck resume states and pretrain_network paths.

    Args:
        opt (dict): Options.
        resume_iter (int): Resume iteration.
    r   Zresume_statec                 S   s   g | ]}| d r|qS )network_r)   .0r!   r	   r	   r
   
<listcomp>g       z check_resume.<locals>.<listcomp>FZ	pretrain_NTz6pretrain_network path will be ignored during resuming.r7    Zignore_resume_networksmodelsZnet__z.pthzSet z to c                 S   s   g | ]}| d r|qS )r   r8   r9   r	   r	   r
   r;   x   r<   Z
params_emaparamsz
 to params)keysgetr   replacer   join)	r    Zresume_iterZnetworksZflag_pretrainnetworkr(   basenameZ
param_keysr   r	   r	   r
   check_resume^   s*    

*rG   Bc                 C   sF   dD ]0}t | dk r,| dd| |   S | d } q| dd| S )zGet human readable file size.

    Args:
        size (int): File size.
        suffix (str): Suffix. Default: 'B'.

    Return:
        str: Formatted file size.
    )r=   KMGTPEZg      @z3.1f z Y)abs)sizer%   unitr	   r	   r
   
sizeof_fmt   s
    

rT   )NFF)rH   )numpyr   r   r   r   r   r   r   Z	dist_utilr   r   r   r   r"   r'   rG   rT   r	   r	   r	   r
   <module>   s   	

*!