Ë
    �\;jœ  ã                   ór   — d dl 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  G d„ d	e«      Zy)
é    Né   )Úunique_name)Ú_append_activation_in_dygraph)Ú	ParameterÚ_global_flagsÚdtype_is_floatingÚin_dygraph_mode)ÚLayerHelperBase)Ú	ParamAttrc                   óŠ   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zdd„Zed„ «       Zed„ «       Z	d„ Z
dd„Zdd	„Zd
„ Zdd„Zd„ Zd„ Zd„ Zˆ xZS )ÚLayerHelperc                 óÐ   •— || _         | j                   j                  dd «      }|€"t        j                  |«      | j                   d<   t        ‰| �  | j                   d   |¬«       y )NÚname)Ú
layer_type)ÚkwargsÚgetr   ÚgenerateÚsuperÚ__init__)Úselfr   r   r   Ú	__class__s       €úaG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/base/layer_helper.pyr   zLayerHelper.__init__    sY   ø€ ØˆŒØ�{‰{�‰˜v tÓ,ˆð ˆ<Ü"-×"6Ñ"6°zÓ"BˆD�K‰K˜Ñä‰Ñ˜Ÿ™ VÑ,¸ÐÕDó    c                 óV   —  | j                   j                  «       j                  |i |¤ŽS ©N)Úmain_programÚcurrent_blockÚ	append_op)r   Úargsr   s      r   r   zLayerHelper.append_op+   s)   € Ø:ˆt× Ñ ×.Ñ.Ó0×:Ñ:¸DÐKÀFÑKÐKr   c                 ó   — | j                   j                  |g «      }g }t        |t        t        f«      r)|D ]"  }|j                  | j                  |«      «       Œ$ |S |j                  | j                  |«      «       |S r   )r   r   Ú
isinstanceÚlistÚtupleÚappendÚto_variable)r   Úinput_param_nameÚinputsÚretÚinps        r   Úmultiple_inputzLayerHelper.multiple_input.   sp   € Ø—‘—‘Ð!1°2Ó6ˆØˆÜ�fœt¤U˜mÔ,Û�Ø—
‘
˜4×+Ñ+¨CÓ0Õ1ð ð ˆ
ð �J‰J�t×'Ñ'¨Ó/Ô0Øˆ
r   c                 óh   — | j                  |«      }t        |«      dk7  r| j                  › d�‚|d   S )Nr   z layer only takes one inputr   )r*   Úlenr   )r   r&   r'   s      r   ÚinputzLayerHelper.input8   s<   € Ø×$Ñ$Ð%5Ó6ˆÜˆv‹;˜!ÒØ—_‘_Ð%Ð%@ÐAÐAØ�a‰yÐr   c                 ó`   — t        j                  | j                  j                  dd «      «      S )NÚ
param_attr©r   Ú_to_attrr   r   ©r   s    r   r/   zLayerHelper.param_attr>   s"   € ä×!Ñ! $§+¡+§/¡/°,ÀÓ"EÓFÐFr   c                 ó`   — t        j                  | j                  j                  dd «      «      S )NÚ	bias_attrr0   r2   s    r   r4   zLayerHelper.bias_attrB   s"   € ä×!Ñ! $§+¡+§/¡/°+¸tÓ"DÓEÐEr   c                 ó  — | j                   }t        |t        «      r|g}t        |«      dk7  rt        |«      |k7  rt	        d«      ‚t        |«      dk(  r8|dk7  r3d g|z  }t        |«      D ]  }t        j                  |d   «      ||<   Œ |}|S )Nr   zparameter number mismatchr   )r/   r!   r   r,   Ú
ValueErrorÚrangeÚcopyÚdeepcopy)r   Úlengthr/   ÚtmpÚis        r   Úmultiple_param_attrzLayerHelper.multiple_param_attrG   s‹   € Ø—_‘_ˆ
Ü�j¤)Ô,Ø$˜ˆJäˆz‹?˜aÒ¤C¨
£O°vÒ$=ÜÐ8Ó9Ð9Ü�‹_ Ò! f°¢kØ�&˜6‘/ˆCÜ˜6–]�ÜŸ™ z°!¡}Ó5��A’ð #àˆJØÐr   c              #   óŽ   K  — | j                  |«      }| j                  t        |«      «      }t        ||«      E d {  –—†  y 7 Œ­wr   )r*   r=   r,   Úzip)r   r&   r'   Úparam_attrss       r   Úiter_inputs_and_paramsz"LayerHelper.iter_inputs_and_paramsU   s;   è ø€ Ø×$Ñ$Ð%5Ó6ˆØ×.Ñ.¬s°6«{Ó;ˆÜ�v˜{Ó+×+Ò+ús   ‚;A½A¾Ac                 óª   — | j                  |«      }d }|D ]:  }|€|j                  }Œ||j                  k7  sŒ"t        d||j                  fz  «      ‚ |S )NzData Type mismatch: %d to %d)r*   Údtyper6   )r   r&   r'   rC   Úeachs        r   Úinput_dtypezLayerHelper.input_dtypeZ   sa   € Ø×$Ñ$Ð%5Ó6ˆØˆÛˆDØˆ}ØŸ
™
‘Ø˜$Ÿ*™*Ó$Ü Ø2°e¸T¿Z¹ZÐ5HÑHóð ð	 ð ˆr   c                 ó”   — | j                   j                  «       j                  |«      }t        |t        «      st        d|z  «      ‚|S )Nzno Parameter name %s found)r   Úglobal_blockÚvarr!   r   r6   )r   r   Úparams      r   Úget_parameterzLayerHelper.get_parameterf   sA   € Ø×!Ñ!×.Ñ.Ó0×4Ñ4°TÓ:ˆÜ˜%¤Ô+ÜÐ9¸DÑ@ÓAÐAØˆr   c                 ó
  — t        |j                  || «      }| j                  }|s|S | j                  |||j                  d¬«      }| j                  |j                  ¬«      }| 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ÚshaperC   Úis_bias©rC   Úelementwise_add)ÚXÚYÚOutÚaxis©Útyper'   ÚoutputsÚattrs)r"   rM   r4   Úcreate_parameterrC   Ú"create_variable_for_type_inferencer   )r   Ú	input_varÚ	dim_startÚdim_endÚsizer4   Úbr;   s           r   Úappend_bias_opzLayerHelper.append_bias_opm   sž   € ô �I—O‘O I¨gÐ6Ó7ˆØ—N‘Nˆ	ÙØÐà×!Ñ!Ø $¨i¯o©oÀtð "ó 
ˆð ×5Ñ5¸I¿O¹OÐ5ÓLˆØ�‰Ø"Ø#˜¨A¨3Ñ/Ø˜S˜E�NØ˜9Ð%ð	 	ô 	
ð ˆ
r   c                 ón  — | j                   j                  dd «      }|€|S t        |t        «      rd|i}nt	        t        |«      dz   «      ‚d }d| j                   v r;| j                   j                  d«      r | j                   j                  d«      }||d<   | j                   j                  dt        «       j                  dd«      «      }|r||d<   |j                  d«      }t        «       rt        ||||«      }|S | j                  |j                  ¬«      }| j                  |d	|gid
|gi|¬«       |S )NÚactrV   z should be unicode or strÚ	use_cudnnÚ
use_mkldnnÚFLAGS_use_mkldnnFrO   rQ   rS   rU   )r   r   r!   ÚstrÚ	TypeErrorr   Úpopr	   r   rZ   rC   r   )r   r[   rb   rc   rd   Úact_typeÚresr;   s           r   Úappend_activationzLayerHelper.append_activation�   s0  € Ø�k‰k�o‰o˜e TÓ*ˆØˆ;ØÐÜ�cœ3ÔØ˜3�-‰CäœC ›HÐ'BÑBÓCÐCàˆ	Ø˜$Ÿ+™+Ñ%¨$¯+©+¯/©/¸+Ô*FØŸ™Ÿ™¨Ó4ˆIØ(ˆC�ÑØ—[‘[—_‘_Øœ-›/×-Ñ-Ð.@À%ÓHó
ˆ
ñ Ø *ˆC�ÑØ—7‘7˜6“?ˆÜÔÜ/Ø˜8 Y°
óˆCð ˆJà×9Ñ9À	ÇÁÐ9ÓPˆCØ�N‰NØØ˜i˜[Ð)Ø  ˜Øð	 ô ð ˆJr   c                 óÀ   — |�t        |«      du r(t        j                  j                  j	                  «       S t        j                  j                  j                  «       S )NT)r   ÚpaddleÚnnÚinitializerÚXavierUniformÚConstant)r   rC   s     r   Ú_get_default_initializerz$LayerHelper._get_default_initializer°   sH   € Øˆ=Ô-¨eÓ4¸Ñ<Ü—9‘9×(Ñ(×6Ñ6Ó8Ð8ô —9‘9×(Ñ(×1Ñ1Ó3Ð3r   c                 ó˜   — | j                   j                  |d «      }t        ||«      s"t        d|| j                  |j
                  «      ‚y )Nz1The input {0} parameter of method {1} must be {2})r   r   r!   rg   r   Ú__name__)r   Ú
param_nameÚclsrI   s       r   Úis_instancezLayerHelper.is_instance¸   sF   € Ø—‘—‘ 
¨DÓ1ˆÜ˜% Ô%ÜØCØØ—‘Ø—‘ó	ð ð &r   )r-   )r   N)rt   Ú
__module__Ú__qualname__r   r   r*   r-   Úpropertyr/   r4   r=   rA   rE   rJ   r`   rk   rr   rw   Ú__classcell__)r   s   @r   r   r      so   ø„ ô	EòLóóð ñGó ðGð ñFó ðFòó,ó

òóò@ òF4ör   r   )r8   rm   Ú r   Údygraph_utilsr   Ú	frameworkr   r   r   r	   Úlayer_helper_baser
   r/   r   r   © r   r   Ú<module>r�      s3   ðó ã å Ý 8÷ó õ /Ý !ôa�/õ ar   