
    yj|                        d dl mZ d dlZd dlmZmZ d dlZddlmZ ddl	m
Z
 ddlmZmZmZmZ ddlmZ dd	lmZ erd d
lmZ d dlmZ d dlmZ  G d de          ZdS )    )annotationsN)TYPE_CHECKINGAny   )unique_name)_append_activation_in_dygraph)	Parameterdtype_is_floatingin_dygraph_modein_pir_mode)LayerHelperBase)	ParamAttr)	Generator)Tensor)Operatorc                       e Zd Zd* fdZd+d
Zd,d-dZd,d.dZed/d            Zed/d            Z	d0dZ
	 d,d1dZ	 d,d2dZd3dZ	 d4d5d$Zd6d%Zd& Zd7d)Z xZS )8LayerHelper
layer_typestrkwargsr   returnNonec                P   || _         | j                             dd           }|Rt                      rt          j        |          | j         d<   n'| j        j                            |          | j         d<   t                                          | j         d         |           d S )Nname)r   )	r   getr   r   generatemain_program_name_generatorsuper__init__)selfr   r   r   	__class__s       h/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/base/layer_helper.pyr    zLayerHelper.__init__(   s    {vt,, <   &1&::&F&FF## %5>>zJJ F# 	V,DDDDD    argsr   c                J     | j                                         j        |i |S N)r   current_block	append_op)r!   r%   r   s      r#   r)   zLayerHelper.append_op8   s)    :t ..00:DKFKKKr$   inputinput_param_namelist[Tensor]c                $   | j                             |g           }g }t          |t          t          f          r.|D ]*}|                    |                     |                     +n(|                    |                     |                     |S r'   )r   r   
isinstancelisttupleappendto_variable)r!   r+   inputsretinps        r#   multiple_inputzLayerHelper.multiple_input;   s    !1266ftUm,, 	1 2 2

4++C0011112 JJt''//000
r$   r   c                v    |                      |          }t          |          dk    r
| j         d|d         S )Nr   z layer only takes one inputr   )r6   lenr   )r!   r+   r3   s      r#   r*   zLayerHelper.inputE   sB    $$%566v;;!_AAAAayr$   r   c                \    t          j        | j                            dd                     S )N
param_attrr   _to_attrr   r   r!   s    r#   r:   zLayerHelper.param_attrK   s#    !$+//,"E"EFFFr$   c                \    t          j        | j                            dd                     S )N	bias_attrr;   r=   s    r#   r?   zLayerHelper.bias_attrO   s#    !$+//+t"D"DEEEr$   lengthintlist[ParamAttr]c                N   | j         }t          |t                    r|g}t          |          dk    r"t          |          |k    rt	          d          t          |          dk    r=|dk    r7d g|z  }t          |          D ]}t          j        |d                   ||<    |}|S )Nr   zparameter number mismatchr   )r:   r.   r   r8   
ValueErrorrangecopydeepcopy)r!   r@   r:   tmpis        r#   multiple_param_attrzLayerHelper.multiple_param_attrT   s    _
j),, 	&$Jz??aC
OOv$=$=8999__!!fkk&6/C6]] 6 6z!}55AJr$   #Generator[tuple[Tensor, ParamAttr]]c              #     K   |                      |          }|                     t          |                    }t          ||          E d {V  d S r'   )r6   rJ   r8   zip)r!   r+   r3   param_attrss       r#   iter_inputs_and_paramsz"LayerHelper.iter_inputs_and_paramsb   s]       $$%566..s6{{;;v{+++++++++++r$   None | paddle.dtypec                    |                      |          }d }|D ]1}||j        }||j        k    rt          d| d|j                   2|S )NzData Type mismatch: z to )r6   dtyperD   )r!   r+   r3   rR   eachs        r#   input_dtypezLayerHelper.input_dtypei   st     $$%566 	Q 	QD}
$*$$ !O!O!O4:!O!OPPP %r$   r   c                    | j                                                             |          }t          |t                    st          d| d          |S )Nzno Parameter name z found)r   global_blockvarr.   r	   rD   )r!   r   params      r#   get_parameterzLayerHelper.get_parameteru   sV    !..0044T::%++ 	@>$>>>???r$   r   N	input_var	dim_startdim_end
int | Nonec                2   t          |j        ||                   }| j        }|s|S |                     |||j        d          }t                      r||z   S |                     |j                  }|                     d|g|gdd|gid|i           |S )	a:  
        Append bias operator and return its output. If the user does not set
        bias_attr, append_bias_op will return input_var

        :param input_var: the input variable. The len(input_var.shape) is
        larger or equal than 2.
        :bias_initializer: an instance of a subclass of Initializer used to
        initialize the bias
        :param dim_start:
        :param dim_end: the shape of the bias will be
        input_var.shape[dim_start:dim_end]. The bias is broadcasted to other
        dimensions and added to input_var to get the output
        T)attrshaperR   is_biasrR   elementwise_add)XYOutaxistyper3   outputsattrs)r/   r`   r?   create_parameterrR   r   "create_variable_for_type_inferencer)   )r!   rZ   r[   r\   sizer?   brH   s           r#   append_bias_opzLayerHelper.append_bias_op|   s      IOIg$5677N	 	!!$iot " 
 
 == 	!q= 55IO5LL"#A3//SEN9%	 	 	
 	
 	
 
r$   c                |   | j                             dd           }||S t          |t                    rd|i}nt	          t          |          dz             d }d| j         v r9| j                             d          r| j                             d          }||d<   |                    d          }t                      rt          |||          }|S t                      r!t          j
                            |||          S |                     |j                  }|                     |d|gid|gi|           |S )	Nactri   z should be unicode or str	use_cudnnrb   rd   rf   rh   )r   r   r.   r   	TypeErrorpopr   r   r   paddle	pir_utilsappend_activation_in_pirrm   rR   r)   )r!   rZ   rr   rs   act_typeresrH   s          r#   append_activationzLayerHelper.append_activation   sR   kooeT**;c3 	D3-CCCHH'BBCCC	$+%%$+//+*F*F%44I(C776?? 	/	8YOOCJ]] 	#<<8Y   99	9PPCNNi[)	     Jr$   c                    |t          |          du r#t          j        j                                        S t          j        j                                        S )NT)r
   rv   nninitializerXavierUniformConstant)r!   rR   s     r#   _get_default_initializerz$LayerHelper._get_default_initializer   sJ    =-e44<<9(66888 9(11333r$   
param_nameclsc                    | j                             |d           }t          ||          st          d|| j        |j                  d S )Nz1The input {0} parameter of method {1} must be {2})r   r   r.   rt   r   __name__)r!   r   r   rX   s       r#   is_instancezLayerHelper.is_instance   sU    
D11%%% 	C	  	 	r$   )r   r   r   r   r   r   )r%   r   r   r   r   r   )r*   )r+   r   r   r,   )r+   r   r   r   )r   r   )r@   rA   r   rB   )r+   r   r   rK   )r+   r   r   rP   )r   r   r   r   )r   N)rZ   r   r[   rA   r\   r]   r   r   )rZ   r   r   r   )r   r   r   r   r   r   )r   
__module____qualname__r    r)   r6   r*   propertyr:   r?   rJ   rO   rT   rY   rp   r{   r   r   __classcell__)r"   s   @r#   r   r   '   s       E E E E E E L L L L         G G G XG F F F XF    '., , , , , '.
 
 
 
 
    LP! ! ! ! !H   @4 4 4       r$   r   )
__future__r   rF   typingr   r   rv    r   dygraph_utilsr   	frameworkr	   r
   r   r   layer_helper_baser   r:   r   collections.abcr   r   paddle.base.frameworkr   r    r$   r#   <module>r      sE   # " " " " "  % % % % % % % %        8 8 8 8 8 8            / . . . . . ! ! ! ! ! ! /))))))......i i i i i/ i i i i ir$   