
    h                      F   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j2                  Zi ej6                  eej8                  eej:                  eej<                  e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jP                  eejR                  eejT                  eejV                  ei ejX                  eejZ                  eej\                  e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jp                  e	ejr                  e	ejt                  eejv                  eejx                  eejz                  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ZHd	dZI	 	 	 	 d
dej                  fdZKy)    )	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   )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hasattrr   warningstr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
        J/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/thop/profile.py	add_hooksz!profile_origin.<locals>.add_hooks[   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>   rB   r@   rD   rG   r   r   r9   r=   nr?   rA   s     ```       @@rC   profile_originrU   R   sy   u
"% "%H ~~H	JJL	KK		 v IL]]_ '

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

!**$JJNN;'QZZ'JJNN>*+ l""9 s   $FFrR   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.NTr9   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-   float64r2   r3   r4   r5   r   r6   r   r8   )r9   r;   r<   r>   r?   r@   rA   rB   s      rC   rD   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$rE   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   rL   named_children
isinstancer   
Sequential
ModuleListr   )rY   r]   r   r   ret_dictrT   r9   	next_dictm_opsm_params	dfs_countr?   s             rC   rf   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0rE   r   r   )r\   )rF   r   ModulerG   rH   rI   r	   rJ   intrM   itemsrN   rP   rQ   )rR   rS   r>   rB   ret_layer_infor@   rD   prev_training_statusr   r   rb   r9   
op_handlerparams_handlerrf   r?   rA   s     `` `        @@@rC   profilern      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)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   rX   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SyncBatchNormr5   rU   rg   rn    rE   rC   <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#rE   