o
    oi                     @   s^  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
 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mZ d	aed
jd Zed
jd Zd'de	e dede	e fddZdd Z dd Z!G dd dZ"de
ee#f fddZ$d(dedeeef fddZ%G d d! d!Z&e& a'd)dej(j)fd"d#Z*d$efd%d&Z+dS )*    N)defaultdict)deepcopy)DictOptionalTuple)logger)Number)GroupedLinearEinsum)get_branch_nameget_commit_hash
get_deviceget_hostFWARNING      INFOfilelevelmodelc                 C   s  t rtd nt  | }| dkrtt|jtdjkdj	}tj
tj||dd d | d urAtj
| ||dd d td	tj  td
t   t }|d urftd| dt   td}|d urwtd|  tjdtdd tj
tjtt|jt|dd d tjdtdd tj
tjtt|jt|dd d |d urtdtj|d da d S )NzLogger already initialized.noneDEBUG)debugc                 S   s   | d j tthvS Nr   )noWARN_ONCE_NODEPRECATED_NOr r   G/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/df/logger.py<lambda>"   s    zinit_logger.<locals>.<lambda>)r   formatfilterc                 S   s   | d j tkS r   )r   r   r   r   r   r   r    )   s    zRunning on torch zRunning on host zGit commit: z
, branch: SLURM_JOB_IDzSlurm jobid: WARNONCEz<yellow><bold>)r   colorc                 S      | d j tko
t| S r   )r   r   _duplicate_filterr   r   r   r   r    9       
DEPRECATEDc                 S   r&   r   )r   r   r'   r   r   r   r   r    @   r(   zLoading model settings of {}/T)_logger_initializedr   r   removeupperlower	Formatterr   r   r!   addsysstdoutinfotorch__version__r   r   r
   osgetenvr   stderrmaxr   pathbasenamerstrip)r   r   r   
log_formatcommitjobidr   r   r   init_logger   sX    
r@   c                 O   N   zt jd| g|R i | W d S  ty&   t j| g|R i | Y d S w )Nr$   r   log
ValueErrorwarningmessageargskwargsr   r   r   	warn_onceG   
    rJ   c                 O   rA   )Nr)   rB   rF   r   r   r   log_deprecatedN   rK   rL   c                   @   s   e Zd ZdddZdd ZdS )r/   Fc                 C   s$   |rd| _ nd| _ |  j d7  _ d S )Nz<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | <level>{message}</level>zs<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>DF</cyan> | <level>{message}</level>z
{exception})fmt)selfr   r   r   r   __init__V   s   zFormatter.__init__c                 C   s"   |d j tkr| jddS | jS )Nr   z{level: <8}zWARNING )r   r   rM   replace)rN   recordr   r   r   r!   g   s   zFormatter.formatNF)__name__
__module____qualname__rO   r!   r   r   r   r   r/   U   s    
r/   k_c                 C   sz   | d }| d}t|dkr!zt|d W S  ty    Y dS w |dkr'dS d| v r/dS |d	kr5d
S |dkr;dS dS )Nr   _r   i  lossiilri  wdi  i)splitlenintrD   r.   )rV   k0ksr   r   r   _metrics_keym   s"   
ra   prefixmetricsc              	   C   s8  d}t t}d}t| tdD ]U\}}t|dkr$d| d|d}n	d| d|d}d|v rN|d	d
 dd }	||	  |d	|	 dd7  < qd| v sVd| v rad| v ra||7 }q||7 }q| D ]\}	}
t	
||  d|	 |
  qjt|dkrt	
|| |  t|dkrt	
|| |  d S d S )N )keygMbP?z | z: z #.5fz #.3Estagestage_r   _snrr   rW   validtestrY   z	 | stage )r   strsorteditemsra   absr\   rP   r.   r   rC   r]   )rb   rc   r   msgstagesloss_msgnvmsmsg_sr   r   r   log_metrics   s(   "

rw   c                   @   s&   e Zd ZdZdd ZdefddZdS )DuplicateFilterzl
    Filters away duplicate log messages.
    Modified version of: https://stackoverflow.com/a/60462619
    c                 C   s   t  | _d S )N)setmsgs)rN   r   r   r   rO      s   zDuplicateFilter.__init__returnc                 C   s2   |d  |d  }|| j v rdS | j | dS )Nr   rG   FT)rz   r0   )rN   rQ   kr   r   r   __call__   s
   
zDuplicateFilter.__call__N)rS   rT   rU   __doc__rO   boolr}   r   r   r   r   rx      s    rx   c           
   	      s  zdd l }W n ty   td Y d S w ddlm} | }d}|j|j }t }t	
|d||jd d dg|t	
|d||jg| t	
|d||jdg|tjddtdd	 |jt| |f fd
dd||ttid\}}	td|	d dd|d dd d S )Nr   z5Failed to import ptflops. Cannot print model summary.)ModelParamsr   r   ignorezRNN module weightsr4   )categorymodulec                    s    dS )N)specfeat_erb	feat_specr   )rW   r   r   r   r   r   r       s    z#log_model_summary.<locals>.<lambda>F)input_constructor
as_stringsprint_per_layer_statverbosecustom_modules_hookszModel complexity: g    .Az.3fzM #Params, z.1fzM MACS)ptflopsImportErrorr   r   df.modelr   srhop_sizer   r4   randnfft_sizetonb_erbnb_dfwarningsfilterwarningsUserWarningget_model_complexity_infor   r	   !grouped_linear_flops_counter_hookr3   )
r   r   r   r   pbtdevicemacsparamsr   r   r   log_model_summary   s4   
$
(r   r   c                 C   sN   |d }| j jd }|d| j| jf}t|j| }|  jt|7  _d S )Nr   rX   )	weightshape	unflattengroupswsnpprod	__flops__r^   )r   inputoutputoutput_last_dimweight_flopsr   r   r   r      s
   r   )Nr   N)r   rR   ),r6   r1   r   collectionsr   copyr   typingr   r   r   numpyr   r4   logurur   torch.typesr   
df.modulesr	   df.utilsr
   r   r   r   r+   r   r   r   r   rk   r@   rJ   rL   r/   floatra   rw   rx   r'   nnModuler   r   r   r   r   r   <module>   s2     2%