a
    d                     @   s~   d dl Z d dlZd dlZddlmZmZ i ZG dd dZG dd dZedd	 Z	ed
d Z
dejdfddZdd ZdS )    N   )get_dist_infomaster_onlyc                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )AvgTimer   c                 C   s*   || _ d| _d| _d| _d| _|   d S )Nr   )windowcurrent_time
total_timecountavg_timestart)selfr    r   ]/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/basicsr/utils/logger.py__init__   s    zAvgTimer.__init__c                 C   s   t    | _| _d S N)time
start_timeticr   r   r   r   r      s    zAvgTimer.startc                 C   sj   |  j d7  _ t | _| j| j | _|  j| j7  _| j| j  | _| j | jkr\d| _ d| _t | _d S )Nr   r   )r
   r   Ztocr   r   r	   r   r   r   r   r   r   record   s    
zAvgTimer.recordc                 C   s   | j S r   )r   r   r   r   r   get_current_time&   s    zAvgTimer.get_current_timec                 C   s   | j S r   )r   r   r   r   r   get_avg_time)   s    zAvgTimer.get_avg_timeN)r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   
   s
   
r   c                   @   s.   e Zd ZdZd
ddZdd Zedd	 ZdS )MessageLoggeru  Message logger for printing.

    Args:
        opt (dict): Config. It contains the following keys:
            name (str): Exp name.
            logger (dict): Contains 'print_freq' (str) for logger interval.
            train (dict): Contains 'total_iter' (int) for total iters.
            use_tb_logger (bool): Use tensorboard logger.
        start_iter (int): Start iter. Default: 1.
        tb_logger (obj:`tb_logger`): Tensorboard logger. Default： None.
    r   Nc                 C   sV   |d | _ |d d | _|| _|d d | _|d d | _|| _t | _t | _	d S )NnameloggerZ
print_freqZtrainZ
total_iteruse_tb_logger)
exp_nameinterval
start_iter	max_itersr   	tb_loggerr   r   get_root_loggerr   )r   optr"   r$   r   r   r   r   :   s    

zMessageLogger.__init__c                 C   s   t   | _d S r   )r   r   r   r   r   r   reset_start_timeD   s    zMessageLogger.reset_start_timec                 C   sr  | d}| d}| d}d| jdd  d|dd	|d
d}|D ]}||dd7 }qH|d7 }d| v r| d}| d}t | j }	|	|| j d  }
|
| j| d  }ttj	t
|d}|d| d7 }|d|dd|dd7 }| D ]b\}}|| d|dd7 }| jrd| jvr|drP| jd| || q| j||| q| j| dS )a\  Format logging message.

        Args:
            log_vars (dict): It contains the following keys:
                epoch (int): Epoch number.
                iter (int): Current iter.
                lrs (list): List for learning rates.

                time (float): Iter time.
                data_time (float): Data time for each iter.
        epochiterlrs[N   z
..][epoch:Z3dz, iter:z8,dz, lr:(z.3e,z)] r   	data_timer   )secondsz[eta: z, ztime (data): z.3fz (z: z.4e debugZl_zlosses/)popr    keysr   r   r"   r#   strdatetime	timedeltaintitemsr   
startswithr$   Z
add_scalarr   info)r   Zlog_varsr(   Zcurrent_iterr*   messagevZ	iter_timer.   r	   Ztime_sec_avgZeta_secZeta_strkr   r   r   __call__G   s.    


&

zMessageLogger.__call__)r   N)r   r   r   __doc__r   r'   r   r>   r   r   r   r   r   -   s
   

r   c                 C   s   ddl m} || d}|S )Nr   )SummaryWriter)log_dir)Ztorch.utils.tensorboardr@   )rA   r@   r$   r   r   r   init_tb_loggerv   s    
rB   c                 C   s   ddl }t }| d d d }| d d d}|rP|}d}|d| d	 n|j }d
}|j||| d | |dd |d| d| d	 dS )z.We now only use wandb to sync tensorboard log.r   Nr   wandbproject	resume_idZallowzResume wandb logger with id=.neverr   T)idresumer   configrD   Zsync_tensorboardzUse wandb logger with id=z
; project=)rC   r%   getwarningutilZgenerate_idinitr:   )r&   rC   r   rD   rE   Zwandb_idrI   r   r   r   init_wandb_logger}   s    
rO   Zbasicsrc           	      C   s   t | }| tv r|S d}t  }|t | || d|_t \}}|dkr`|	d nB|dur|	| t 
|d}|t | |	| || dt| < |S )a  Get the root logger.

    The logger will be initialized if it has not been initialized. By default a
    StreamHandler will be added. If `log_file` is specified, a FileHandler will
    also be added.

    Args:
        logger_name (str): root logger name. Default: 'basicsr'.
        log_file (str | None): The log filename. If specified, a FileHandler
            will be added to the root logger.
        log_level (int): The root logger level. Note that only the process of
            rank 0 is affected, while other processes will set the level to
            "Error" and be silent most of the time.

    Returns:
        logging.Logger: The root logger.
    z&%(asctime)s %(levelname)s: %(message)sFr   ERRORNwT)logging	getLoggerinitialized_loggerStreamHandlersetFormatter	Formatter
addHandler	propagater   setLevelFileHandler)	Zlogger_nameZ	log_levelZlog_filer   Z
format_strZstream_handlerZrank_Zfile_handlerr   r   r   r%      s&    





r%   c                  C   sB   ddl } ddl}ddlm} d}|d| d| j d|j 7 }|S )zPGet environment information.

    Currently, only log the software version.
    r   N)__version__a]  
                ____                _       _____  ____
               / __ ) ____ _ _____ (_)_____/ ___/ / __ \
              / __  |/ __ `// ___// // ___/\__ \ / /_/ /
             / /_/ // /_/ /(__  )/ // /__ ___/ // _, _/
            /_____/ \__,_//____//_/ \___//____//_/ |_|
     ______                   __   __                 __      __
    / ____/____   ____   ____/ /  / /   __  __ _____ / /__   / /
   / / __ / __ \ / __ \ / __  /  / /   / / / // ___// //_/  / /
  / /_/ // /_/ // /_/ // /_/ /  / /___/ /_/ // /__ / /<    /_/
  \____/ \____/ \____/ \____/  /_____/\____/ \___//_/|_|  (_)
    z!
Version Information: 
	BasicSR: z
	PyTorch: z
	TorchVision: )torchtorchvisionZbasicsr.versionr]   )r^   r_   r]   msgr   r   r   get_env_info   s    ra   )r5   rR   r   Z	dist_utilr   r   rT   r   r   rB   rO   INFOr%   ra   r   r   r   r   <module>   s   #I

*