
    ёiL1                         S SK r S SKrS SKrS SKJr  \" \\R                  SS9r " S S5      rS r	S r
S	 rS
 rS rSS jrg)    N)
get_loggerz&%(asctime)s-%(levelname)s: %(message)s)fmtc                   ,    \ rS rSrS rS rS rS rSrg)OperatorStatsUnit   c                 J    S U l         SU l        SU l        SU l        SU l        g )Nr   )op_type
fp32_calls
fp16_calls
bf16_callsother_callsselfs    [/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/static/amp/debugging.py__init__OperatorStatsUnit.__init__   s&        c                 R   Uc  U R                   S-   U l         g U[        R                  :X  a  U R                  S-   U l        g U[        R                  :X  a  U R
                  S-   U l        g U[        R                  :X  a  U R                  S-   U l        g U R                   S-   U l         g )N   )r   paddlefloat32r
   float16r   bfloat16r   )r   dtypes     r   updateOperatorStatsUnit.update"   s    =#//!3D&"&//A"5&..("&//A"5&//)"&//A"5#'#3#3a#7 r   c                     U =R                   UR                   -  sl         U =R                  UR                  -  sl        U =R                  UR                  -  sl        U =R                  UR                  -  sl        g N)r
   r   r   r   )r   anothers     r   addtoOperatorStatsUnit.addto/   sU    7---7---7---G///r   c                 ^    U R                   U R                  U R                  U R                  /$ r   )r   r   r
   r   r   s    r   convert_to_list!OperatorStatsUnit.convert_to_list5   s*    OOOOOO	
 	
r   )r   r   r
   r	   r   N)	__name__
__module____qualname____firstlineno__r   r   r    r#   __static_attributes__ r   r   r   r      s    80
r   r   c                    U [         R                  R                  R                  R                  R
                  [         R                  R                  R                  R                  R                  [         R                  R                  R                  R                  R                  [         R                  R                  R                  R                  R                  4;   a  gg)NTF)	r   basecoreVarDescVarTypeFP64FP32FP16BF16r   s    r   _is_floating_pointr5   >   s      ((--  ((--  ((--  ((--	  r   c           	      h   U(       a  UR                  U5      OUR                  U5      n[        U[        5      (       d   e[	        U5      S:X  a  g US   n U R                  U5      nUR                  $ !   [        R                  SR                  UR                  U(       a  SOSX%5      5         g = f)Nr   z*Operator < {} > gets {} < {} : {} > error!inputoutput)r7   r8   
isinstancelistlen_var_recursiver   _loggerwarningformattype)blockoparg_nameis_input	var_namesvar_namevars          r   _get_var_dtype_from_blockrH   J   s    &."BIIh4GIi&&&&
9~|H	""8,yy8??H(H	

 s   A4 4;B1c           
         S nS nU R                    H  n[        XUS5      nUc  M  Uc  UnM  X5:w  d  M#  [        U5      (       aO  [        U5      (       a?  [        R	                  SU R
                   SU R                    SU R                   S35        M  [        U5      (       d  M  UnM     U R                   H  n[        XUS5      nUc  M  Uc  UnM  X5:w  d  M#  [        U5      (       d  M5  [        U5      (       d  MG  [        R	                  SU R
                   SU R                    SU R                   S35        M     U$ )NTzOperator < z1 > has different input data types, input_names = z, output_names = .Fz: > has different input / output data types, input_names = )input_namesrH   r5   r=   r>   r@   output_names)rB   rA   rF   compute_dtypein_name	var_dtypeout_names          r   _extract_compute_dtyperQ   ]   s~   HM>>-e$G	 %M)%m449K: : OO%bggY._`b`n`n_o  pA  BD  BQ  BQ  AR  RS  T (	22 %.M' "* OO-e5I	  &M)%m449K: : OO%bggY.hikiwiwhx  yJ  KM  KZ  KZ  J[  [\  ] $$ r   c                     0 nU  H\  nUR                  5        HE  u  p4UR                  US 5      c  [        R                  " U5      X'   M2  X   R                  U5        MG     M^     U$ r   )itemsgetcopyr    )op_stats_listmerged_op_stats_dicteach_op_stats_dictr	   units        r   _merge_op_statsrZ      se    +/557MG#''6>04		$$-$-33D9	 8 ,  r   c                    S n/ nU R                    H  n0 nUR                   H  nUR                  UR                  S 5      c  [	        5       nXdUR                  '   OXER                     nUR                  S;   a  S nONU" UR                  5      (       a  [        X5SS5      nO)SUR                  ;   a  [        X5SS5      nO[        XS5      nUR                  US9  M     UR                  U5        M     U$ )Nc                 F    / SQnX;   a  gU R                  SS5      U;   a  gg)N)cast
batch_norminstance_norm
layer_normT_grad F)replace)r	   special_op_lists     r   _is_special_ops_with_input_x8_get_op_stats_list.<locals>._is_special_ops_with_input_x   s)    O%??7B'?:r   )create_py_readerreadcreate_double_buffer_readerXTParamr4   )
blocksopsrT   r@   r   rH   rK   rQ   r   append)programre   rV   rA   block_op_stats_dictrB   rY   rM   s           r   _get_op_stats_listrq      s     M ))B"&&rww5=(*/3BGG,*773ww  
 !%-bgg66 9%S$ OBNN* 9w! !7r AKKmK,/ 0 	015  6 r   c           	          S nU c  [         R                  R                  5       n [        U 5      n[	        U5      nU(       a  [        U5      S:  au  [        [        U5      5       H]  n[        SR                  S[        U5      -   S-   5      5        [         R                  R                  R                  U" X5   5      5        M_     [        SR                  S5      5        [         R                  R                  R                  U" U5      5        g)a  
Collect the number of operators for different data types through parsing
the program. The statistical data are categorized according to four data
types, namely float32, float16, bfloat16 and others.

Args:
    program(Program, optional): The program to parse. Default None, and the default main_program will be parsed.
    print_subblocks(bool, optional): Whether to print the operator stats for each subblock. Default False.

Examples:

    .. code-block:: python

        >>> import paddle
        >>> paddle.enable_static()

        >>> class SimpleConvNet(paddle.nn.Layer):
        ...     def __init__(self):
        ...         super().__init__()
        ...         self.conv = paddle.nn.Conv2D(in_channels=1, out_channels=6, kernel_size=3)
        ...         self.linear = paddle.nn.Linear(in_features=26, out_features=10)
        ...
        ...     def forward(self, x):
        ...         out = self.conv(x)
        ...         out = paddle.nn.functional.relu(out)
        ...         out = self.linear(out)
        ...         out = paddle.nn.functional.softmax(out)
        ...         return out

        >>> main_program = paddle.static.Program()
        >>> startup_program = paddle.static.Program()
        >>> with paddle.utils.unique_name.guard():
        ...     with paddle.static.program_guard(main_program, startup_program):
        ...         model = SimpleConvNet()
        ...         x = paddle.static.data(
        ...             name='input', shape=[None, 1, 28, 28], dtype='float32'
        ...         )
        ...         out = model(x)
        ...         loss = paddle.mean(out)
        ...         optimizer = paddle.optimizer.AdamW()
        ...         optimizer = paddle.static.amp.decorate(optimizer)
        ...         optimizer.minimize(loss)
        >>> paddle.static.amp.debugging.collect_operator_stats(main_program)
        <------------------------------------------------ op list of all blocks ------------------------------------------------->
        <------------------------------------------------------- op list -------------------------------------------------------->
        <--------------- Op Name ---------------- | -- FP16 Calls --- | -- BF16 Calls --- | --- FP32 Calls--- | -- Other Calls -->
        adamw                                   |  0                |  0                |  4                |  0
        cast                                    |  5                |  0                |  6                |  0
        check_finite_and_unscale                |  0                |  0                |  1                |  0
        conv2d                                  |  1                |  0                |  0                |  0
        conv2d_grad                             |  1                |  0                |  0                |  0
        elementwise_add                         |  2                |  0                |  0                |  0
        elementwise_add_grad                    |  2                |  0                |  0                |  0
        elementwise_mul                         |  0                |  0                |  1                |  0
        elementwise_mul_grad                    |  0                |  0                |  1                |  0
        fill_constant                           |  0                |  0                |  1                |  0
        matmul_v2                               |  1                |  0                |  0                |  0
        matmul_v2_grad                          |  1                |  0                |  0                |  0
        memcpy                                  |  0                |  0                |  0                |  1
        reduce_mean                             |  0                |  0                |  1                |  0
        reduce_mean_grad                        |  0                |  0                |  1                |  0
        relu                                    |  1                |  0                |  0                |  0
        relu_grad                               |  1                |  0                |  0                |  0
        reshape2                                |  0                |  0                |  1                |  0
        reshape2_grad                           |  0                |  0                |  1                |  0
        softmax                                 |  0                |  0                |  1                |  0
        softmax_grad                            |  0                |  0                |  1                |  0
        update_loss_scaling                     |  0                |  0                |  1                |  0
        <----------------------------------------------------- op count: 22 ----------------------------------------------------->
c                 \    U R                  5        H  u  pUR                  5       X'   M     U $ r   )rS   r#   )op_stats_unit_dictkeyvalues      r   _convert_to_list0collect_operator_stats.<locals>._convert_to_list  s/    ,224JC&+&;&;&=# 5!!r   Nr   z
<{:-^120}>z op list of block  z op list of all blocks )r   staticdefault_main_programrq   rZ   r;   rangeprintr?   stramp	debugging_print_operator_stats)ro   print_subblocksrw   rV   merged_op_statsis         r   collect_operator_statsr      s    P"
 --446&w/M%m4O3}-1s=)*A,%%&:SV&Cc&IJKJJ  66 !12 +
 
,

7
89
JJ..)r   )NF)rU   loggingr   paddle.base.log_helperr   r%   INFOr=   r   r5   rH   rQ   rZ   rq   r   r*   r   r   <module>r      sU       -
gll H
!
 !
H	&*Z &R[r   