
    |h,                        d dl  d dl 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j0                  eej2                  eej6                  eej:                  e	i ej<                  e	ej>                  e ejB                  e	ejD                  e	ejF                  e	ejH                  e	ejJ                  e	ejL                  e	ejN                  e(ejR                  e(ejT                  e(ejV                  e,ejZ                  e,ej\                  e,ej^                  e0ejb                  e	ejd                  e3ejh                  e3ejj                  e3ejl                  e7ejp                  e9ejt                  e;ejx                  e=ej|                  e?ej                  eAej                  e	ej                  e	ej                  eiZEddZF	 	 	 	 d	dej                  fdZHy)
    )*   )prRedNc                 B   g t               i rdfd}| j                  }| j                          | j                  |       t        j                         5   | |  ddd       d}d}| j                         D ]:  }	t        |	j                               r||	j                  z  }||	j                  z  }< |j                         }|j                         }| j                  |       D ]  }
|
j                           | j                         D ]r  \  }}	t        |	j                               r d|	j                  v r|	j                  j!                  d       d|	j                  v sX|	j                  j!                  d       t ||fS # 1 sw Y   ,xY w)z^Profiles a PyTorch model's operations and parameters, applying either custom or default hooks.NTc                 `   t        | j                               ry t        | d      st        | d      r"t        j	                  dt        |        d       | j                  dt        j                  dt                     | j                  dt        j                  dt                     | j                         D ]9  }| xj                  t        j                  |j                         g      z  c_        ; t        |       }d }|v r(|   }|vrh	rft        d|j                    d| d	       nI|t"        v r,t"        |   }|vr4	r2t        d
|j                    d| d	       n|vrrt%        d| d       |"| j'                  |      }j)                  |       j+                  |       y )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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verboses
        K/var/www/html/test/engine/venv/lib/python3.12/site-packages/thop/profile.py	add_hooksz!profile_origin.<locals>.add_hooksD   s   

1k"ga&@OOKCPQF8 TD D
 	
+u{{1M{'JK	.%++a}+*MN 	>ANNe00!'')==N	> aZF#B--'.r.?s6(!LM~%'B--'((9JK--.4VH<def>--b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,   r0   r.   r2   r5   r   r	   r'   r+   nr-   r/   s     ```       @@r1   profile_originrC   ;   sy   u
"% "%H ~~H	JJL	KK		 v IL]]_ '

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

!**$JJNN;'QZZ'JJNN>*+ l""9 s   $FFr@   c                    i t               i rddt        j                  ffd}| j                  }| j	                          | j                  |       t        j                         5   | |  ddd       d
dt        j                  dt        t        fffd |       \  }}	}
| j                  |       j                         D ]^  \  }\  }}|j                          |j                          |j                  j                  d       |j                  j                  d	       ` |r||	|
fS ||	fS # 1 sw Y   xY w)zdProfiles a PyTorch model, returning total operations, parameters, and optionally layer-wise details.NTr'   c                 V   | j                  dt        j                  dt        j                               | j                  dt        j                  dt        j                               t	        |       }d}|v r(|   }|vrhrft        d|j                   d| d       nI|t        v r,t        |   }|vr4r2t        d	|j                   d
| d       n|vrrt        d| d       |)| j                  |      | j                  t              f| <   j                  |       y)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   float64r    r!   r"   r#   r   r$   count_parametersr&   )r'   r)   r*   r,   r-   r.   r/   r0   s      r1   r2   zprofile.<locals>.add_hooks   s&   	+u{{1EMM{'JK	.%++au}}+*MN
 aZF#B--'.r.?s6(!LM~%'B--'((9JK--.4VH<def>''+''(89%q! 	V$r3   modulereturnc                    | j                   j                         d}}i }| j                         D ]  \  }}i }|v r_t        |t        j
                  t        j                  f      s5|j                   j                         |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.r   	)prefix)r   r:   named_children
isinstancenn
Sequential
ModuleListr	   )rH   rL   r   r	   ret_dictrB   r'   	next_dictm_opsm_params	dfs_countr-   s             r1   rV   zprofile.<locals>.dfs_count   s    "("2"2"7"7"91<	))+ 	%DAq
 I&&z!bmmR]]=[/\"#++"2"2"4ann6I6I6Kx-6q$-O*x (I6HQKIH$L	% ,00r3   r   r	   )rK   )r4   rO   Moduler5   r6   r7   r   r8   intr;   itemsr<   r>   r?   )r@   rA   r,   r0   ret_layer_infor.   r2   prev_training_statusr   r	   rR   r'   
op_handlerparams_handlerrV   r-   r/   s     `` `        @@@r1   profiler^      s6    u
%RYY % %> !>>	JJL	KK		 v1")) 1c3Z 1( )2%(8%I|X 
KK$%+=+C+C+E '''J	

{#	

~&	' ,00l""G s   6EE
)NTF)NTFF)Ithop.rnn_hooksthop.vision.basic_hooksutilsr   r   rF   r   rO   	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_lstmrP   PixelShuffleSyncBatchNormr#   rC   rW   r^    r3   r1   <module>r      s     % .LL(.II|. II|. II|	.
 . . . NN'. NN'. NN'. LL%. *. *. *. HHk.  JJ!." GGX#.$ HHh%.& LL*'.( LL().* LL(+., LL(-.. (/.0 (1.2 (3.4 LL-5.6 LL-7.8 LL-9.: ,;.< ,=.> ,?.@ II|A.B JJC.D KKE.F ^NJJJJKKFFIFFIGGZMM8OOX)[.bN#h X#99X#r3   