o
    Ďi                     @   s  d dl mZ d dlT d dlT ddlmZmZmZ eej	edk r+e
djej	d ejZi ejeejeejeejeejeejeejeejeejeejeejeejeejeej eej!e"ej#e$ej%ei ej&eej'e(ej)eej*eej+eej,eej-eej.eej/e0ej1e0ej2e0ej3e4ej5e4ej6e4ej7e8ej9eej:e;ej<e;ej=e;ej>e?ej@eAejBeCejDeEejFeGejHeIejJeejKei
ZLeej	edkreLMejNei dddZO			
		ddejPfddZQd	S )    )LooseVersion)*   )prGreenprRedprYellowz1.0.0zLYou are using an old version PyTorch {version}, which THOP does NOT support.)versionz1.1.0NTFc                    sB  g t   d u ri  rd fdd}| j}|   | | t  | |  W d    n1 s8w   Y  d}d}|  D ]}	tt|		 dkrRqE||	j
7 }||	j7 }qE| }| }| | D ]}
|
  ql|  D ]%\}}	tt|		 dkrqwd|	jv r|	jd d|	jv r|	jd qw||fS )NTc                    s@  t t|  dkrd S t| dst| drtdt|   | dtj	dt
d | dtj	dt
d |  D ]}|  jt| g7  _q9t| }d }| v rg | }|vrfrftd|j|f  n$|tv rt| }|vr~r~td|j|f  n|vrrtd	|  |d ur| |}| | d S )
Nr   	total_opstotal_paramsznEither .total_ops or .total_params is already defined in %s. Be careful, it might change your code's behavior.r   dtype[INFO] Customize rule %s() %s.[INFO] Register %s() for %s.F[WARN] Cannot find rule for %s. Treat it as zero Macs and zero Params.)lenlistchildrenhasattrloggingwarningstrregister_buffertorchzerosdefault_dtype
parametersr
   DoubleTensornumeltypeprint__qualname__register_hooksr   register_forward_hookappendadd)mpm_typefnhandler
custom_opshandler_collectionreport_missingtypes_collectionverbose H/home/jeff/fluffinator/venv/lib/python3.10/site-packages/thop/profile.py	add_hooksP   sD   

z!profile_origin.<locals>.add_hooksr   r	   r
   )settrainingevalapplyr   no_gradmodulesr   r   r   r	   r
   itemtrainremovenamed_modules_bufferspop)modelinputsr+   r/   r-   r2   r4   r	   r
   r%   r)   nr0   r*   r1   profile_originH   sD   )







rB   r?   c                    s  i t   d u ri  rddtjf fdd}| j}|   | | t  | |  W d    n1 s<w   Y  ddtjdttfffdd	| \}}	}
| 	| 
 D ]\}\}}|  |  |jd
 |jd qa|r||	|
fS ||	fS )NTr%   c                    s   |  dtjdtjd |  dtjdtjd t| }d }| v r6 | }|vr5r5td|j|f  n$|tv rNt| }|vrMrMtd|j|f  n|vrZrZtd|  |d urj| 	|| 	t
f| < | d S )Nr	   r   r   r
   r   r   r   )r   r   r   float64r   r   r    r!   r   r"   count_parametersr$   )r%   r'   r(   r*   r0   r1   r2      s2   zprofile.<locals>.add_hooks	modulereturnc           
         s   | j  d}}i }|  D ]9\}}i }|v r-t|tjtjfs-|j  |j }}	n ||d d\}}	}||	|f||< ||7 }||	7 }q|||fS )Nr   rE   )prefix)r	   r9   named_children
isinstancenn
Sequential
ModuleListr
   )
rF   rH   r	   r
   ret_dictrA   r%   	next_dictm_opsm_params)	dfs_countr,   r0   r1   rR      s   


zprofile.<locals>.dfs_countr	   r
   )rE   )r3   rK   Moduler4   r5   r6   r   r7   intr:   itemsr;   r=   r>   )r?   r@   r+   r/   ret_layer_infor-   r2   prev_training_statusr	   r
   rN   r%   
op_handlerparams_handlerr0   )r+   rR   r,   r-   r.   r/   r1   profile   s0   !


 

rZ   )NTF)NTFF)Rdistutils.versionr   thop.vision.basic_hooksthop.rnn_hooksutilsr   r   r   r   __version__r   r   formatrC   r   rK   	ZeroPad2dzero_opsConv1dcount_convNdConv2dConv3dConvTranspose1dConvTranspose2dConvTranspose3dBatchNorm1dcount_normalizationBatchNorm2dBatchNorm3d	LayerNormInstanceNorm1dInstanceNorm2dInstanceNorm3dPReLUcount_preluSoftmaxcount_softmaxReLUReLU6	LeakyReLU
count_relu	MaxPool1d	MaxPool2d	MaxPool3dAdaptiveMaxPool1dAdaptiveMaxPool2dAdaptiveMaxPool3d	AvgPool1dcount_avgpool	AvgPool2d	AvgPool3dAdaptiveAvgPool1dcount_adap_avgpoolAdaptiveAvgPool2dAdaptiveAvgPool3dLinearcount_linearDropoutUpsamplecount_upsampleUpsamplingBilinear2dUpsamplingNearest2dRNNCellcount_rnn_cellGRUCellcount_gru_cellLSTMCellcount_lstm_cellRNN	count_rnnGRU	count_gruLSTM
count_lstmrL   PixelShuffler!   updateSyncBatchNormrB   rS   rZ   r0   r0   r0   r1   <module>   s    	
 !"#/
X