
    j                      r   d dl mZmZmZmZmZmZmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ 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j0        eej1        eej2        eej3        eej4        e
ej5        e
ej6        e
ej7        e	ej8        e	ej9        e	ej:        eej;        eej<        eej=        eej>        eej?        eej@        eejA        eejB        eejC        eejD        eejE        eejF        eejG        eiZHddZI	 	 	 	 dd	ejJ        fd
ZKdS )    )	count_grucount_gru_cell
count_lstmcount_lstm_cell	count_rnncount_rnn_celltorch)count_adap_avgpoolcount_avgpoolcount_convNdcount_convtNdcount_linearcount_normalizationcount_parameterscount_prelu
count_relucount_softmaxcount_upsampleloggingnnzero_ops   )prRedNTFc                 h   g t                      i rdfd}| j        }|                                  |                     |           t	          j                    5   | |  ddd           n# 1 swxY w Y   d}d}|                                 D ]8}	t          |	                                          r$||	j	        z  }||	j
        z  }9|                                }|                                }|                     |           D ]}
|
                                 |                                 D ]m\  }}	t          |	                                          r'd|	j        v r|	j                            d           d|	j        v r|	j                            d           n||fS )z^Profiles a PyTorch model's operations and parameters, applying either custom or default hooks.NTc                    t          |                                           rd S t          | d          st          | d          rt          j        d| d           |                     dt          j        dt                               |                     dt          j        dt                               | 	                                D ]7}| xj
        t          j        |                                g          z  c_
        8t          |           }d }|v r*|         }|vr	rt          d|j         d| d	           nQ|t           v r/t           |         }|vr	rt          d
|j         d| d	           n|vrrt#          d| d           |*|                     |          }                    |                               |           d S )N	total_opstotal_paramsz9Either .total_ops or .total_params is already defined in z3. Be careful, it might change your code's behavior.r   dtype[INFO] Customize rule () .[INFO] Register () for [WARN] Cannot find rule for (. Treat it as zero Macs and zero Params.)listchildrenhasattrr   warningregister_bufferr	   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verboses
        Q/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/thop/profile.py	add_hooksz!profile_origin.<locals>.add_hooks[   s   

 	F1k"" 	ga&@&@ 	ODA D D D  
 	
+u{1M'J'J'JKKK	.%+a}*M*M*MNNN 	> 	>ANNe0!''))===NNNaZF#B---'-LrLL6LLLMMM~%%'B---'-JJJJJJKKK---.-eVeeefff>--b11G%%g...V$$$$$    r   r   r   )settrainingevalapplyr	   no_gradmodulesr'   r(   r   r   itemtrainremovenamed_modules_bufferspop)modelinputsr=   rA   r?   rC   rF   r   r   r8   r<   nr>   r@   s     ```       @@rB   profile_originrT   R   s)   uu
 "% "% "% "% "% "% "% "% "%H ~H	JJLLL	KK		  v               IL]]__ ' '

 	Q[ 	&  I$$&&L 
KK%   ##%% + +1

 	!*$$JNN;'''QZ''JNN>***l""s   *A<<B B rQ   c                    i t                      i rddt          j        ffd}| j        }|                                  |                     |           t          j                    5   | |  ddd           n# 1 swxY w Y   ddt          j        dt          t          fffd |           \  }}	}
| 	                    |           
                                D ]d\  }\  }}|                                 |                                 |j                            d	           |j                            d
           e|r||	|
fS ||	fS )zdProfiles a PyTorch model, returning total operations, parameters, and optionally layer-wise details.NTr8   c                    |                      dt          j        dt          j                             |                      dt          j        dt          j                             t	          |           }d}|v r*|         }|vrrt          d|j         d| d           nQ|t          v r/t          |         }|vrrt          d	|j         d
| d           n|vrrt          d| d           |2| 	                    |          | 	                    t                    f| <                       |           dS )zTRegisters hooks to a neural network module to track total operations and parameters.r   r   r   r   Nr    r!   r"   r#   r$   r%   r&   )r+   r	   r,   float64r1   r2   r3   r4   r   r5   r   r7   )r8   r:   r;   r=   r>   r?   r@   rA   s      rB   rC   zprofile.<locals>.add_hooks   su   	+u{1EM'J'J'JKKK	.%+au}*M*M*MNNN
 aZF#B---'-LrLL6LLLMMM~%%'B---'-JJJJJJKKK---.-eVeeefff>''++''(899%q! 	V$$$$$rD   	modulereturnc                    | j                                         | j                                        }}i }|                                 D ]\  }}i }|v rYt	          |t
          j        t
          j        f          s3|j                                         |j                                        }	}n 
||dz             \  }}	}||	|f||<   ||z  }||	z  }|||fS )zfRecursively counts the total operations and parameters of the given PyTorch module and its submodules.rX   )prefix)r   rK   r   named_children
isinstancer   
Sequential
ModuleList)rY   r\   r   r   ret_dictrS   r8   	next_dictm_opsm_params	dfs_countr>   s             rB   re   zprofile.<locals>.dfs_count   s    "("2"7"7"9"96;N;S;S;U;U<	))++ 	% 	%DAq
 I&&&z!bmR]=[/\/\&"#+"2"2"4"4an6I6I6K6Kx-6Yq$-O-O-O*x (I6HQKIH$LL,00rD   r   r   )rX   )rE   r   ModulerF   rG   rH   r	   rI   intrL   itemsrM   rO   rP   )rQ   rR   r=   rA   ret_layer_infor?   rC   prev_training_statusr   r   ra   r8   
op_handlerparams_handlerre   r>   r@   s     `` `        @@@rB   profilerm      s    uu
 %RY % % % % % % % % % %> !>	JJLLL	KK		  v              1 1") 1c3Z 1 1 1 1 1 1 1( )2	%(8(8%I|X 
KK$%%%+=+C+C+E+E ' '''J	
{###	
~&&&& 1,00l""s   8B

BB)NTF)NTFF)Lthop.rnn_hooksr   r   r   r   r   r   r	   thop.vision.basic_hooksr
   r   r   r   r   r   r   r   r   r   r   r   r   r   utilsr   rW   r-   	ZeroPad2dConv1dConv2dConv3dConvTranspose1dConvTranspose2dConvTranspose3dBatchNorm1dBatchNorm2dBatchNorm3d	LayerNormInstanceNorm1dInstanceNorm2dInstanceNorm3dPReLUSoftmaxReLUReLU6	LeakyReLU	MaxPool1d	MaxPool2d	MaxPool3dAdaptiveMaxPool1dAdaptiveMaxPool2dAdaptiveMaxPool3d	AvgPool1d	AvgPool2d	AvgPool3dAdaptiveAvgPool1dAdaptiveAvgPool2dAdaptiveAvgPool3dLinearDropoutUpsampleUpsamplingBilinear2dUpsamplingNearest2dRNNCellGRUCellLSTMCellRNNGRULSTMr_   PixelShuffleSyncBatchNormr4   rT   rf   rm    rD   rB   <module>r      s                                                  "      .L(.I|. I|. I|	.
 . . . N'. N'. N'. L%. *. *. *. Hk.  J!." GX#. .$ Hh%.& L*'.( L().* L(+., L(-.. (/.0 (1.2 (3.4 L-5.6 L-7.8 L-9.: ,;.< ,=.> ,?.@ I|A.B JC.D KE. .F ^NJJKFIFIGZM8OX)[. .bN# N# N# N#h X# X#9X# X# X# X# X# X#rD   