
    v-jdZ                        d dl mZ d dlZd dlmZ d dlZd dlZddlm	Z	m
Z
 ddlmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZ erd d	lmZ g Z G d
 d          ZdS )    )annotationsN)TYPE_CHECKING   )coreunique_name)Variable_current_expected_placedefault_main_programdefault_startup_programin_dygraph_modein_dynamic_or_pir_modein_pir_mode)_global_bias_initializer_global_weight_initializer)	ParamAttrWeightNormParamAttr)_DTypeLiteralc                  "   e Zd ZU dZded<   d Zed             Zed             Zed             Z	ed             Z
ed	             Zed
             ZddZd Zddddej        j        j        dfdZ	 dddZ	 ddZ	 ddZd ZddZd Zd ZdS )LayerHelperBasefloat32r   _LayerHelperBase__dtypec                "    || _         || _        d S N)_layer_type_name)selfname
layer_types      ]/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/base/layer_helper_base.py__init__zLayerHelperBase.__init__.   s    %


    c                    | j         S r   )r   r   s    r   r   zLayerHelperBase.name2   s
    zr!   c                    | j         S r   )r   r#   s    r   r   zLayerHelperBase.layer_type6   s    r!   c                    t                      S r   )r
   r#   s    r   main_programzLayerHelperBase.main_program:   s    #%%%r!   c                    t                      S r   )r   r#   s    r   startup_programzLayerHelperBase.startup_program>   s    &(((r!   c                    || _         d S r   r   )clsdtypes     r   set_default_dtypez!LayerHelperBase.set_default_dtypeB   s    r!   c                    | j         S r   r*   )r+   s    r   get_default_dtypez!LayerHelperBase.get_default_dtypeF   s
    {r!   Nc                L   t          |t          j                  r4t          j                            |t                      dd|r|ndd          S t          |t          t          j        j        t          j	        j
        f          r|S t          dt          |                     )a  
        The API will create a ``Variable`` object from numpy\.ndarray or Variable object.

        Parameters:
            value(ndarray): The numpy\.ndarray object that needs to be converted, it can be multi-dimension, and the data type is one of numpy\.{float16, float32, float64, int16, int32, int64, uint8, uint16}.
            name(str, optional): The default value is None. Normally there is no need for user to set this property. For more information, please refer to :ref:`api_guide_Name`

        Returns:
            Variable: ``Tensor`` created from the specified numpy\.ndarray object, data type and shape is the same as ``value`` .

        Examples:

            .. code-block:: python

                >>> import numpy as np
                >>> import paddle.base as base

                >>> with base.dygraph.guard():
                ...     x = np.ones([2, 2], np.float32)
                ...     y = base.dygraph.to_variable(x)
                ...
        FNTz[The type of input value is invalid, expected type is 'ndarray' or 'Variable', but received )
isinstancenpndarrayr   eagerTensorr	   r   paddlepirValue	TypeErrortype)r   valuer   s      r   to_variablezLayerHelperBase.to_variableJ   s    . eRZ(( 	:$$'))&$   $**;VZ=MNOO 	L{nrsxnyny{{  r!   c                    d dd d j                                         f fd	d  j                                         f fd	d  j                                         f fd	d d  j                                         f fd	 fd}t          j        |          }|j        dz   |_        d	gt          |          z  }|j        ||j                 ||j        <   t          j        |          }|j        d
z   |_        |}  j                                         j        d|d|                    d          }	  j                                         j        d|d|                    d          }
 |
|	|j         j                                                     |	||	 j                                                      j	                                        j        d|d|                                }	  j	                                        j        d|d|                                }
 ||	|
|j                  }|S )N   Fc           	        |O|                     
j        j                            d                    
j        dg                    	d          }|                     
j        j                            d                    
j        dg                    	d          }|                    dd| id|i	           |                     
j        j                            d                    
j        d
g                    	d          }|                    dd|id|idt          |          i           |                     
j        j                            d                    
j        dg                    	d          }|                    dd|id|i|||dndd           |                    dd|id|idd|z  i           |S )N.weight_norm_normFr   r,   persistableweight_norm_absabsXOut)r:   inputsoutputsweight_norm_powpowfactorr:   rH   rI   attrsweight_norm_sum
reduce_sumT)dimkeep_dim
reduce_allg      ?)
create_varr&   _name_generatorgenerate_with_ignorable_keyjoinr   	append_opfloat)xoutprQ   rR   blockabs_outpow_outsum_outr,   r   s            r   	__norm_opz;LayerHelperBase._create_weight_normalize.<locals>.__norm_opt   sM    {&&*:VV$)-?!@AA    % '   &&&6RRHHdi):;<<  ! '  G OOC8eW5E     &&&6RRHHdi):;<<  ! '  G OOW~(q*	     &&&6RRHHdi):;<<  ! '  G OO!W~( (*-+$$5 	  	 	 	 OOW~q)	     Jr!   c                "   |O|                     j        j                            d                    j        dg                    d          }|                     d| j                  }|                    dd| id	|i||d
           |S )Nr@   weight_norm_reshapeFrB   Xshape)r   r,   reshape2rF   shape)rG   XShape)r:   rH   rN   rI   )rT   r&   rU   rV   rW   r   r,   rX   )rZ   rf   r[   r]   x_shaper,   r   s        r   __reshape_opz>LayerHelperBase._create_weight_normalize.<locals>.__reshape_op   s     {&&*:VV$)-B!CDD    % '   &&HAG&DDGOOQx& #w77	     Jr!   c                    |O|                     j        j                            d                    j        dg                    d          }|                    dd| id|id|i	           |S )
Nr@   weight_norm_transposeFrB   	transposerF   rG   axisrM   )rT   r&   rU   rV   rW   r   rX   )rZ   rm   r[   r]   r,   r   s       r   __transpose_opz@LayerHelperBase._create_weight_normalize.<locals>.__transpose_op   s     {&&*:VV$)-D!EFF    % '   OO Qxtn	     Jr!   c                   |O|                     j        j                            d                    j        dg                    d          }| 
| |||           n|dk    re| j        d         gdgt          | j                  dz
  z  z   } | | j        d         d	g|
          } 
|dg|          } ||||           n7|t          | j                  dz
  k    rddgt          | j                  dz
  z  | j        d	         gz   } | d	| j        d	         g|
          } 
|dg|          } ||||           nt          t          t          | j                                      }|dc|d<   ||<    | ||          }|j        d         gdgt          |j                  dz
  z  z   } ||j        d         d	g|
          } 
|dg|          } |||
          }	 |	|||           |S )z0Computes the norm over all dimensions except dimNr@   rA   FrB   rQ   r]   r   r   )rf   r]   )r[   rf   r]   )r]   r[   r]   )
rT   r&   rU   rV   rW   r   rf   lenlistrange)rZ   r[   rQ   r]   	out_shapereshapenormpermrl   re   _LayerHelperBase__norm_op_LayerHelperBase__reshape_op_LayerHelperBase__transpose_opr,   r   s             r   __norm_except_dimzCLayerHelperBase._create_weight_normalize.<locals>.__norm_except_dim   s    {&&*:VV$)-?!@AA    % '   {	!Sc77777WQZLA3#ag,,2B+CC	&,qR0@NNN yqc???Ts)5IIIIIAGq(((C3qw<<!#34}D	&,qQWR[0AOOO yqc???Ts)5IIIIIE#ag,,//00%(!"Qc*N1d%@@@	&_Q/0A3	((1,4 	 ',ioa&8"%=U   !yqc???'<IUKKKx3eDDDDJr!   c                    ||j                                                   }t          j        | |          }t          j        j                            |||n!t          j        ||j        |         g          |dn|          }|S )z%Calculations for weight normalizationrp   )rZ   yN)rZ   rf   rq   )rZ   r   rm   )	r&   current_blockr6   dividetensormath_multiply_with_axisrw   rf   )gvrQ   rx   scalew!_LayerHelperBase__norm_except_dimr   s         r   __weight_normalizezDLayerHelperBase._create_weight_normalize.<locals>.__weight_normalize  s    $$s$"3"A"A"C"C  D Mt  E "66 { E%~FFF;RRC 7  A Hr!   _gr   _vr,   rf   with_initializerT)rZ   r[   rQ   r]   rr   )rQ    )
r(   global_blockcopydeepcopyr   rs   rQ   create_parameter
_to_kwargsr&   )r   attrrf   r,   "_LayerHelperBase__weight_normalizeg_param_attrg_param_shapev_param_attrv_param_shapeg_paramv_paramw_paramr   rz   r{   r|   s   `  `        @@@@r   _create_weight_normalizez(LayerHelperBase._create_weight_normalizeq   sY   
 &3355>	 >	 >	 >	 >	 >	 >	B d&:&G&G&I&I	 	 	 	 	 	 	* T%9%F%F%H%H	 	 	 	 	 	 	( T)=)J)J)L)L%	 %	 %	 %	 %	 %	 %	 %	 %	 %	N	 	 	 	 	 	0 }T** I,c%jj(8&+DHoM$(#}T** I, G$&3355F 

 
 %%u%==
 

 G$&3355F 

 
 %%t%<<
 

 	&3355		
 	
 	
 	
 	&3355		
 	
 	
 	
 D$#0022C 
}
 
0<0G0G0I0I
 
 D$#0022C 
}
 
0<0G0G0I0I
 
 %$Wg48DDDr!   Fc	                   t          j        |          }t          j        |          }|sdS t	          |t                    sJ t          |          D ]\  }	}
|
dk    sJ d|	 d|
             |s| j        }t	          |t          j                  rt          j
        j        j        |         }|r!d}t                      t                      n|}n d}t                      t                      n|}|j        t                      r4t!          j        d                    | j        |g                    |_        n>| j        j                            d                    | j        |g                    |_        ||j        t	          |t          j        j                  r|t          j        j        j        k    rw|t          j        j        j        k    r]|t          j        j        j        k    rC|t          j        j        j        k    r)|t          j        j        j        k    rt;          d          n|d	vrt;          d
          |r|                                 n*|                                 n|                     |           t	          |tB                    r8| "                    |||          }tB          j#        $                    |           |S tK                      rt!          j&        |j                  }|rtO          d|j         d           | j        (                                j)        d||||d|*                    d          }||+                    |          }|S tY                      rt	          |t          j        j                  rt          j
        j        j-        |         }t          j
        j        j)        d||d|*                    d          }||+                    |          }|S  | j.        (                                j)        d|||d|*                    d            | j        (                                j)        d|||d|*                                S )a  Create parameters for this layers.

           Args:
               attr: [ParamAttr] should be the parameter attribute for this parameter
               shape: shape of the parameter
               dtype: data type of this parameter
               is_bias: if this is a bias parameter
               default_initializer: set the default initializer for this parameter
               device: device where this parameter will be placed

        Returns created parameter Variable.
        Nr   zOExpected every dim's size to be larger than or equal to 0, but the size of the z-th dim is br   r@   zCan not create parameter with default initializer when dtype is not ['float16', 'float32', 'float64', 'bfloat16'] type. Set default_initializer to fit the parameter dtype!)float16r   float64bfloat16rY   int8zCan not create parameter with default initializer when dtype is not ['float16', 'float32', 'float64', 'bfloat16', 'float'] type. Set default_initializer to fit the parameter dtype!zparameter name [z] have be been used. In dygraph mode, the name of parameter can't be same.Please check the parameter attr value passed to self.create_parameter or constructor of dygraph Layers)r,   rf   r:   stop_gradientTr   r   )r,   rf   r:   r   )/r   r   r   _to_attrr1   	enumerater   r   DataTyper6   r7   datatype_to_vartyper   r   r   r   r   generaterW   r&   rU   initializerVarDescVarTypeFP32FP64FP16BF16INT8r9   _set_default_bias_initializer_set_default_param_initializer_set_default_initializerr   r   params_with_weight_normappendr   dygraph_parameter_name_checker
ValueErrorr   r   r   tor   vartype_to_datatyper(   )r   r   rf   r,   is_biasdefault_initializerr   r:   deviceisizesuffixparamis_useds                 r   r   z LayerHelperBase.create_parameterN  s   0 }T""!$'' 	4$	***** '' 	 	GAt1999<'(< <59< < 999
  	!LEeT]++ 	?JO7>E 	F ,--9 )***(   F .//; +,,,(  
 9%'' '049f:M1N1NOO		 -=FFHHdi011 	 &4+;+C%!566 T\1666!5!:::!5!:::!5!:::!5!:::# F    !   $ O    6224444335555))*=>>> d/00 	11$uEEE7>>uEEEL *	 "@KKG  4ty 4 4 4   FD%2244E +	 
 //4/88 E !((L}} 
eT\%9:: G"JO?FE
8   ooto<< 
 %!HHV,,E@D --//@   //4/88	   E4$1133D 5t 7;7H7H  r!   returnpaddle.Tensorc                   |s| j         }| j                                                            | j        j                            d                    | j        dg                    ||t          j	        j
        j        d|          S )aI  Create a temporary variable that should be type inferred layer.

        Note:
            The default type will be set to DENSE_TENSOR. However, when
            the var is used as operator output, its type will be updated
            based on operator's `VarTypeInference` implementation in
            infer_var_type.
        r@   tmpFr   r,   rf   r:   rC   r   )r   r&   r   rT   rU   rV   rW   r   r   r   r   DENSE_TENSORr   r,   r   rf   s       r   "create_variable_for_type_inferencez2LayerHelperBase.create_variable_for_type_inference  s      	!LE ..00;;"2NN$)U+,,  %2' < 	
 	
 		
r!   c                   |s| j         }| j                                                            | j        j                            d                    | j        dg                    ||t          j	        j
        j        d|          }| j        j        }d| j        _        t          j        j                            |j        |dd|           ||_        || j        _        |S )aF  Create a global variable that should be type inferred layer.

        Note:
            The default type will be set to DENSE_TENSOR. However, when
            the var is used as operator output, its type will be updated
            based on operator's `VarTypeInference` implementation in
            infer_var_type.
        r@   r   Fr   r   g        )	force_cpur[   )r   r&   r   rT   rU   rV   rW   r   r   r   r   r   current_block_idxr6   r   creationfill_constantrf   r   )r   r,   r   rf   outputsaved_block_ids         r   *_create_global_variable_for_type_inferencez:LayerHelperBase._create_global_variable_for_type_inference  s      	!LE"//11<<"2NN$)U+,,  %2' = 	
 	
 *<./+,,L%6 	- 	
 	
 	
  -.<+r!   c                   |s| j         }| j                                                            | j        j                            d                    | j        dg                    ||t          j	        j
        j        d|          S )aN  Create a temporary sparse variable that should be type inferred layer.

        Note:
            The default type will be set to SPARSE_COO. However, when
            the var is used as operator output, its type will be updated
            based on operator's `VarTypeInference` implementation in
            infer_var_type.
        r@   r   Fr   )r   r&   r   rT   rU   rV   rW   r   r   r   r   
SPARSE_COOr   s       r   )create_sparse_variable_for_type_inferencez9LayerHelperBase.create_sparse_variable_for_type_inference  s      	!LE ..00;;"2NN$)U+,,  %0' < 	
 	
 		
r!   c                J     | j                                         j        |i |S )zKCreate Variable for this layers.
        Returns created Variable.
        )r&   r   rT   )r   argskwargss      r   create_variablezLayerHelperBase.create_variable/  s+     <t ..00;TLVLLLr!   c                N     | j                                         j        |d|i|S )aM  
        create global variable, note that there is no initializer for this global variable.
        Args:
            persistable(bool): True if it is a checkpoint value.
            *args: See create_var's documentation
            **kwargs: See create_var's documentation

        Returns(Variable): the created variable.
        rC   )r&   r   rT   )r   rC   r   r   s       r   create_global_variablez&LayerHelperBase.create_global_variable5  s=     ;t --//:
*
.4
 
 	
r!   c                    | j                                                             |          r.| j                                                             |          dfS  | j        |d|i|dfS )z
        Creates a global variable if not exists and returns the variable and
        a boolean flag which is true when it is a new variable.
        Fr   T)r&   r   has_varvarr   )r   r   r   r   s       r   create_or_get_global_variablez-LayerHelperBase.create_or_get_global_variableC  st    
 ))++33D99 	Q$113377==uDD.4.4JDJ6JJDPPr!   c                &   t          |t                    sJ t                      r% ||| j                                                   dS | j                                                            |j        |j        |j	        |j
        d|           dS )zSet target Variable's initializer

        Args:
            var: target Variable
            initializer: initializer to use
        T)r   r:   r,   rf   rC   r   N)r1   r   r   r&   r   r(   rT   r   r:   r,   rf   )r   r   r   s      r   set_variable_initializerz(LayerHelperBase.set_variable_initializerM  s     #x((((( 
	KT.;;==>>>>> --//::XXii ' ;     r!   r   )FN)r   r   )F)__name__
__module____qualname__r   __annotations__r    propertyr   r   r&   r(   classmethodr-   r/   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r   *   s        &G&&&&     X     X  & & X& ) ) X)   [   [% % % %NZ Z ZB  \!.L L L L^ 15
 
 
 
 
4 15   D 15
 
 
 
2M M M
 
 
 
Q Q Q    r!   r   )
__future__r   r   typingr   numpyr2   r6    r   r   	frameworkr   r	   r
   r   r   r   r   r   r   r   
param_attrr   r   paddle._typing.dtype_liker   __all__r   r   r!   r   <module>r      sI   # " " " " "                                            N M M M M M M M 6 6 6 6 6 6 6 6 8777777
u u u u u u u u u ur!   