
    DPh                        d dl mZ d dl d dl ddlmZmZmZ  eej                         ed      k  r+e
j                  dj                  ej                               ej                  Zi 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j8                  eej:                  eej<                  eej>                  eej@                  eejB                  e"ejF                  e$ejJ                  ei ejL                  eejN                  e(ejR                  eejT                  eejV                  eejX                  eejZ                  eej\                  eej^                  e0ejb                  e0ejd                  e0ejf                  e4ejj                  e4ejl                  e4ejn                  e8ejr                  eejt                  e;ejx                  e;ejz                  e;ej|                  e?ej                  eAej                  eCej                  eEej                  eGej                  eIej                  eej                  ei
ZL eej                         ed      k\  reLj                  ej                  ei       dd
ZO	 	 	 	 ddej                  fdZQy	)    )LooseVersion)*   )prGreenprRedprYellowz1.0.0zLYou are using an old version PyTorch {version}, which THOP does NOT support.)versionz1.1.0Nc                 r   g t               i rdfd}| j                  }| j                          | j                  |       t        j                         5   | |  d d d        d}d}| j                         D ]F  }	t        t        |	j                                     dkD  r)||	j                  z  }||	j                  z  }H |j                         }|j                         }| j                  |       D ]  }
|
j                           | j                         D ]~  \  }}	t        t        |	j                                     dkD  r,d|	j                   v r|	j                   j#                  d       d|	j                   v sd|	j                   j#                  d        ||fS # 1 sw Y   DxY w)NTc                 t   t        t        | j                                     dkD  ry t        | d      st        | d      r!t        j                  dt        |       z         | 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rg	ret!        d|j"                  d|d	       nH|t$        v r,t$        |   }|vr3	r1t!        d
|j"                  d|d	       n|vrrt'        d|z         |"| j)                  |      }j+                  |       j-                  |       y )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 () .[INFO] Register () for 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verboses
        WC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\thop/profile.py	add_hooksz!profile_origin.<locals>.add_hooksP   sz   tAJJL!"Q&1k"ga&@OODFI!fM
 	
+u{{1M{'JK	.%++a}+*MNANNe00!'')==N   aj F#B--'"//6RS~%'B--'PQ--.\
 >--b1G%%g.V$    r   r   r   )settrainingevalapplyr   no_gradmodulesr   r   r   r   r   itemtrainremovenamed_modules_bufferspop)modelinputsr0   r4   r2   r6   r9   r   r   r+   r/   nr1   r3   s     ```       @@r5   profile_originrG   H   sv   u
'% '%R ~~H	JJL	KK		v 
 IL]]_tAJJL!"Q&Q[[ 	&	   I$$&L 
KK% & ##%1tAJJL!"Q&!**$JJNN;'QZZ'JJNN>* & l""9 
s   $F,,F6rD   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)
NTr+   c                 T   | j                  dt        j                  dt        j                               | j                  dt        j                  dt        j                               t	        |       }d }|v r(|   }|vrgret        d|j                  d|d       nH|t        v r,t        |   }|vr3r1t        d|j                  d	|d       n|vrrt        d
|z         |)| j                  |      | j                  t              f| <   j                  |       y )Nr   r   r   r   r   r   r   r   r   r   )r   r   r   float64r$   r%   r&   r'   r   r(   count_parametersr*   )r+   r-   r.   r0   r1   r2   r3   r4   s      r5   r6   zprofile.<locals>.add_hooks   s   	+u{{1EMM{'JK	.%++au}}+*MN
 aZF#B--'"//6RS~%'B--'PQ--.\
 >''+''(89%q! 	V$r7   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 )Nr   	)prefix)r   r>   named_children
isinstancenn
Sequential
ModuleListr   )rL   rP   r   r   ret_dictrF   r+   	next_dictm_opsm_params	dfs_countr1   s             r5   rZ   zprofile.<locals>.dfs_count   s    "("2"2"7"7"91<	))+DAq
 I&&zBMM2==10 #$++"2"2"4ann6I6I6Kx-6q$-O*x (I6HQKIH$L ,  ,00r7   r   r   )rO   )r8   rS   Moduler9   r:   r;   r   r<   intr?   itemsr@   rB   rC   )rD   rE   r0   r4   ret_layer_infor2   r6   prev_training_statusr   r   rV   r+   
op_handlerparams_handlerrZ   r1   r3   s     `` `        @@@r5   profilerb      s+    u
%RYY % %B !>>	JJL	KK		v 
1")) 1c3Z 1* )2%(8%I|X 
KK$%+=+C+C+E''J	

{#	

~&	 ,F ,00l""I 
s   6EE
)NTF)NTFF)Rdistutils.versionr   thop.vision.basic_hooksthop.rnn_hooksutilsr   r   r   r   __version__r   r   formatrJ   r    rS   	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_lstmrT   PixelShuffler'   updateSyncBatchNormrG   r[   rb    r7   r5   <module>r      sq   * %  , +!!"\'%::OOV]]%% 	^ 	
 -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OOXY-^ !!"l7&;;2++-@ABR#p Z#99Z#r7   