Ë
    Ž\;j‹O  ã                   ó6  — d dl Z d dlmZ d dlZd dlmZ ddlmZmZ ddl	m
Z
 	 d dlmZ  G d
„ d«      Z G d„ d«      Zdi fd„Zy# e$ rN d dlZ ej                  e«      dz   Zej                  j#                   ej$                  ed	«      «       d dlmZ Y Œmw xY w)é    N)Úpath)Úframework_pb2é   )ÚcoreÚunique_name)ÚOpProtoHolder)Úpass_desc_pb2z/../../baseÚprotoc                   ó@   — e Zd Zg Zdi fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚRegisterPassHelperÚ c                 ól   — || _         || _        || _        t        j                  j                  | «       y ©N)Ú
_pass_typeÚ_pass_pairsÚ_input_specsr   Ú_register_helpersÚappend)ÚselfÚ
pass_pairsÚ	pass_typeÚinput_specss       úbG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/incubate/passes/ir.pyÚ__init__zRegisterPassHelper.__init__%   s-   € Ø#ˆŒØ%ˆÔØ'ˆÔÜ×,Ñ,×3Ñ3°DÕ9ó    c                 ó  — g }t        j                  |«      }|j                  D ]á  }| j                  j	                  |«      }t        |t        j                  j                  «      r;|j                  t        j                  ||j                  |j                  «      «       Œ}t        |t        j                  «      r%|j                  t        j                  |«      «       Œ¼|j                  t        j                  |dg«      «       Œã |S )Néÿÿÿÿ)ÚinspectÚgetfullargspecÚargsr   ÚgetÚ
isinstanceÚpaddleÚstaticÚ	InputSpecr   ÚPassDescÚ	VarHelperÚshapeÚdtypeÚ	ParamAttr)r   Úfuncr    Ú	arg_specsÚarg_nameÚ
input_specs         r   Ú_get_args_from_funcz&RegisterPassHelper._get_args_from_func+   sÇ   € ØˆÜ×*Ñ*¨4Ó0ˆ	Ø!ŸœˆHØ×*Ñ*×.Ñ.¨xÓ8ˆJÜ˜*¤f§m¡m×&=Ñ&=Ô>Ø—‘Ü×&Ñ&Ø  *×"2Ñ"2°J×4DÑ4Dóõô
 ˜J¬×(8Ñ(8Ô9Ø—‘œF×,Ñ,¨XÓ6Õ7à—‘œH×.Ñ.¨x¸"¸Ó>Õ?ð 'ð ˆr   c                 ó¾  — |D ]Ø  }t        j                  |j                  j                  «       «      }g }|j                  D ]v  }|j
                  dvrU|j                  «       }t        |«      dk(  r7|j                  «       d   d   }|j                  |j
                  «      }||k7  rŒf|j                  |«       Œx |D ]  }|j                  j                  |«       Œ ŒÚ y )N)Úop_namescopeÚop_callstackÚ	op_devicer   r   )r   Úget_op_attrs_default_valueÚtypeÚencodeÚattrsÚnameÚ
ListFieldsÚlenr!   r   Úremove)	r   ÚopsÚop_descÚdefault_attrsÚremove_attrsÚattrÚattr_list_fieldsÚ
attr_valueÚdefault_attr_values	            r   Ú_prune_program_descz&RegisterPassHelper._prune_program_desc<   sÑ   € ÛˆGÜ ×;Ñ;Ø—‘×#Ñ#Ó%óˆMð ˆLØŸœ�à—9‘9ð %ñ ð
 (,§¡Ó'8Ð$äÐ+Ó,°Ò1Ø%)§_¡_Ó%6°rÑ%:¸2Ñ%>˜
Ø-:×->Ñ->¸t¿y¹yÓ-IÐ*à-°Ò;Ø$Ø×#Ñ# DÕ)ð &ó  %�Ø—‘×$Ñ$ TÕ*ñ %ñ+ r   c                 óâ  — g }t         j                  j                  «       }t         j                  j                  «       }t         j                  j                  ||«      5  | j	                  |«      }|j                  |«        ||Ž }t        |t        t        f«      s|g}|D ]–  }t        |t        j                  «      ri|j                  «       }	t        |	«      dk7  r$t        dj                  |j                  «      «      ‚|	j!                  «       D ]  }
|j                  |
«       Œ Œ†|j#                  |«       Œ˜ 	 d d d «       |j%                  «       j&                  }t)        |j+                  «       «      D ]>  }|j-                  «       j/                  |j1                  |«      j3                  «       «       Œ@ | j5                  |«       ||j%                  «       j6                  fS # 1 sw Y   ŒªxY w)Né   zGOperator '{}' has multiple outputs, please specify one output variable.)r#   r$   ÚProgramÚprogram_guardr/   Úextendr"   ÚlistÚtupler&   ÚOpHelperÚOutputsr:   Ú
ValueErrorÚformatÚ_typeÚvaluesr   Úcurrent_blockÚdescÚrangeÚop_sizeÚaddÚParseFromStringÚopÚserialize_to_stringrD   r<   )r   r+   r<   ÚvarsÚprogramÚstartup_programr    ÚoutsÚoutÚop_outsÚop_outÚ
block_descÚis                r   Ú_func_to_program_descz(RegisterPassHelper._func_to_program_descU   s…  € ØˆÜ—-‘-×'Ñ'Ó)ˆÜ Ÿ-™-×/Ñ/Ó1ˆÜ�]‰]×(Ñ(¨°/ÕBØ×+Ñ+¨DÓ1ˆDØ�K‰K˜ÔÙ˜�;ˆDÜ˜d¤T¬5 MÔ2Ø�v�Û�Ü˜c¤8×#4Ñ#4Ô5Ø!Ÿk™k›m�GÜ˜7“| qÒ(Ü(Øe×lÑlØ #§	¡	óóð ð
 #*§.¡.Ö"2˜ØŸ™ FÕ+ñ #3ð —K‘K Õ$ñ ÷ Cð& ×*Ñ*Ó,×1Ñ1ˆ
Ü�z×)Ñ)Ó+Ö,ˆAØ�G‰G‹I×%Ñ% j§m¡m°AÓ&6×&JÑ&JÓ&LÕMð -à× Ñ  Ô%Ø�W×*Ñ*Ó,×0Ñ0Ð0Ð0÷/ CÐBús   ÁCG%Ç%G.c                 ó$  ‡
— ˆ
fd„Š
t        ||«      D �]z  \  }}|j                  j                  «       }|j                  |_        |j                  |_        |j                  }|j                  | j                  v rÌ|j                  «       }|j                  d«      j                  |j                  «       d|j                  _        t        j                  j                  |j                  _        |j                  j                   j#                  |j$                  «       t&        j(                  j*                  j,                  |_        t(        j.                  |j0                  k(  s�ŒR|j2                  j5                  «       D ]  }	 ‰
||	g«       Œ �Œ} y )Nc                 óˆ   •— |D ]<  }|j                   r| j                  |j                   «        ‰| |j                  «       Œ> y r   )Ú
_conditionr   Ú	_elements)Ú
conditionsÚelementsÚelementÚ_add_element_conditionss      €r   rk   zNRegisterPassHelper._convert_vars_to_pass_desc.<locals>._add_element_conditionss   s:   ø€ Û#�Ø×%Ò%Ø×%Ñ% g×&8Ñ&8Ô9Ù'¨
°G×4EÑ4EÕFñ $r   r(   r   )ÚzipÚvar_mapsrV   r8   Úpattern_varÚreplace_varÚvar_attr_conditionsr   ÚAttrÚ_to_pass_desc_attrr@   Úcondition_valuer   ÚAttrTypeÚLONGSr5   ÚlongsrI   r(   r	   r&   ÚConditionTypeÚkEQr'   Ú	__class__Ú_attrsrQ   )r   ÚpatternsÚreplacesrS   ÚpatternÚreplaceÚvar_maprh   Ú	conditionr@   rk   s             @r   Ú_convert_vars_to_pass_descz-RegisterPassHelper._convert_vars_to_pass_descr   s%  ø€ ô	Gô !$ H¨h× 7ÑˆG�Wà—m‘m×'Ñ'Ó)ˆGØ")§,¡,ˆGÔØ")§,¡,ˆGÔØ×1Ñ1ˆJà�|‰|˜t×0Ñ0Ñ0Ø&ŸN™NÓ,�	Ø—‘˜WÓ%×8Ñ8¸¿¹ÔHØ13�	×)Ñ)Ô.Ü1>×1GÑ1G×1MÑ1M�	×)Ñ)Ô.Ø×)Ñ)×/Ñ/×6Ñ6°w·}±}ÔEÜ!.×!7Ñ!7×!EÑ!E×!IÑ!I�	”ä×!Ñ! W×%6Ñ%6Ô6Ø#ŸN™N×1Ñ1Ö3�DÙ+¨J¸¸Õ?ò 4ñ! !8r   c                 óÜ  — |D ]ç  }t        |t        j                  «      sŒ|j                  j	                  «       D ]­  }|j
                  }t        j                  |«      r ||«      }|j                  j                  «       }|j                  |j                  «       |j                  |j                  «       |j                  €Œ‰|j                  j                  |j                  «       Œ¯ Œé y r   )r"   r&   rL   rz   rQ   Ú_mappedr   Ú
isfunctionÚop_attr_mapsrV   rr   Úpattern_attrÚreplace_attrÚ
_operationÚ	operationÚCopyFrom)r   r{   r|   rS   r~   r@   ÚmappedÚattr_maps           r   Ú_convert_ops_to_pass_descz,RegisterPassHelper._convert_ops_to_pass_descŒ   s¶   € ÛˆGÜ˜'¤8×#4Ñ#4Õ5Ø#ŸN™N×1Ñ1Ö3�Dà!Ÿ\™\�FÜ×)Ñ)¨&Ô1Ù!'¨Ó!1˜Ø#×0Ñ0×4Ñ4Ó6�HØ×-Ñ-¨h×.CÑ.CÔDØ×+Ñ+¨H×,AÑ,AÔBØ×(Ñ(Ñ4Ø ×*Ñ*×3Ñ3°F×4EÑ4EÕFñ 4ñ  r   c                 ó  — t        j                  «       }|rt        j                  «        t        j                  «       }| j
                  |_        | j                  D ]ƒ  \  }}|j                  j                  «       }| j                  ||j                  «      \  }}| j                  ||j                  «      \  }}	| j                  |||«       | j                  ||	|«       Œ… |rt        j                  «        |j!                  «       S r   )r#   Úin_dynamic_modeÚenable_staticr	   ÚMultiPassDescr   r   r   Ú
pass_descsrV   rc   r}   r~   r�   r�   Údisable_staticÚSerializeToString)
r   Úswitch_static_modeÚmulti_pass_descr}   r~   Ú	pass_descÚpattern_varsÚpattern_opsÚreplace_varsÚreplace_opss
             r   ÚSerializeMultiPassDescz)RegisterPassHelper.SerializeMultiPassDescš   sò   € Ü#×3Ñ3Ó5ÐÙÜ× Ñ Ô"Ü'×5Ñ5Ó7ˆØ$(§O¡OˆÔ!ð !%× 0Ô 0ÑˆG�WØ'×2Ñ2×6Ñ6Ó8ˆIà(,×(BÑ(BØ˜×*Ñ*ó)Ñ%ˆL˜+ð )-×(BÑ(BØ˜×*Ñ*ó)Ñ%ˆL˜+ð ×+Ñ+Ø˜l¨Iôð ×*Ñ*¨;¸ÀYÕOð !1ñ Ü×!Ñ!Ô#Ø×0Ñ0Ó2Ð2r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r/   rD   rc   r�   r�   rœ   © r   r   r   r   "   s2   „ ØÐà-/¸Ró :òò"+ò21ò:@ò4Gó3r   r   c                   ó€   — e Zd Z G d„ d«      Z G d„ dej
                  j                  «      Z G d„ d«      Z e«       Z	y)r&   c                   ó\   — e Zd Zdd„Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Z	 dd„Zy)úPassDesc.AttrHelperNc                 ót   — || _         || _        d | _        || _        g | _        d | _        d | _        d | _        y r   )Ú_objÚ_nameÚ_operation_typeÚ_element_indexrg   rˆ   rf   rƒ   )r   Úobjr8   Úelement_indexs       r   r   zPassDesc.AttrHelper.__init__¶   s<   € ØˆDŒIØˆDŒJØ#'ˆDÔ Ø"/ˆDÔØˆDŒNØ"ˆDŒOØ"ˆDŒOØˆD�Lr   c                 ó”   — t         j                  | j                  | j                  |¬«      }| j                  j                  |«       |S )N©rª   )r&   Ú
AttrHelperr¥   r¦   rg   r   )r   Úindexrj   s      r   Ú__getitem__zPassDesc.AttrHelper.__getitem__À   s?   € Ü×)Ñ)Ø—	‘	˜4Ÿ:™:°Uð *ó ˆGð �N‰N×!Ñ! 'Ô*ØˆNr   c                 óö  — t        | j                  t        j                  «      rEt        j                  j
                  j                  |_        | j                  j                  |_	        nDt        j                  j
                  j                  |_        | j                  j                  |_        | j                  |_        | j                  �| j                  |_        | j                   �| j                   |_        y y r   )r"   r¥   r&   r'   r	   ÚRoleTypeÚ	kVariableÚroler8   Úvar_nameÚ	kOperatorÚ_indexÚop_indexr¦   r§   r‰   r¨   rª   )r   Úpass_desc_attrs     r   rr   z&PassDesc.AttrHelper._to_pass_desc_attrÇ   s±   € Ü˜$Ÿ)™)¤X×%7Ñ%7Ô8Ü&3×&<Ñ&<×&EÑ&E×&OÑ&O�Ô#Ø*.¯)©)¯.©.�Õ'ä&3×&<Ñ&<×&EÑ&E×&OÑ&O�Ô#Ø*.¯)©)×*:Ñ*:�Ô'Ø"&§*¡*ˆNÔØ×#Ñ#Ð/Ø+/×+?Ñ+?�Ô(Ø×"Ñ"Ð.Ø/3×/BÑ/B�Õ,ð /r   c                 ó”   — d|_         t        |t        «      r't        j                  j
                  |_        ||_        y t        d«      ‚)Nr   z"Unimplemented transform operation.)	r8   r"   Úintr   rt   ÚINTr5   rb   ÚNotImplementedError)r   ÚvalueÚop_desc_attrs      r   Ú_to_op_desc_attrz$PassDesc.AttrHelper._to_op_desc_attrÔ   s;   € Ø "ˆLÔÜ˜%¤Ô%Ü$1×$:Ñ$:×$>Ñ$>�Ô!Ø!&�•ä)Ð*NÓOÐOr   c                 óÚ  — t         j                  | j                  | j                  | j                  «      }| j
                  j                  |«       |€	||_        |S t        j                   j                  «       }||_
        t        |t         j                  «      r|j                  |j                  «       n| j                  ||j                  «       ||_        | j                  |_        |S r   )r&   r­   r¥   r¦   r¨   rg   r   r§   r	   Ú	Operationr5   r"   rr   r@   r¿   r½   rˆ   )r   r5   r½   r@   r‰   s        r   Ú_clone_with_operationz)PassDesc.AttrHelper._clone_with_operationÜ   s¸   € Ü×&Ñ&Ø—	‘	˜4Ÿ:™: t×':Ñ':óˆDð �N‰N×!Ñ! $Ô'Øˆ}Ø'+�Ô$Ø�Ü%×.Ñ.×8Ñ8Ó:ˆIØ!ˆIŒNÜ˜%¤×!4Ñ!4Ô5Ø×(Ñ(¨¯©Õ8à×%Ñ% e¨Y¯_©_Ô=Ø'ˆDŒOØ#'×#7Ñ#7ˆDÔ ØˆKr   c                 ój   — | j                  t        j                  j                  j                  |«      S r   )rÂ   r	   r&   ÚOperationTypeÚkSub©r   r½   s     r   Ú__sub__zPassDesc.AttrHelper.__sub__î   ó,   € Ø×-Ñ-Ü×&Ñ&×4Ñ4×9Ñ9¸5óð r   c                 ój   — | j                  t        j                  j                  j                  |«      S r   )rÂ   r	   r&   rÄ   ÚkAddrÆ   s     r   Ú__add__zPassDesc.AttrHelper.__add__ó   rÈ   r   c                 ój   — | j                  t        j                  j                  j                  |«      S r   )rÂ   r	   r&   rÄ   ÚkModrÆ   s     r   ÚModzPassDesc.AttrHelper.Modø   rÈ   r   c                 óh   — | j                  t        j                  j                  j                  «      S r   )rÂ   r	   r&   rÄ   ÚkSize©r   s    r   ÚSizezPassDesc.AttrHelper.Sizeý   s*   € Ø×-Ñ-Ü×&Ñ&×4Ñ4×:Ñ:óð r   c                 ó˜  — t         j                  j                  «       }| j                  |j                  «       ||_        t        |t        j                  «      r|j                  |j                  «       n| j                  ||j                  «       | j                  r%|j                  j                  | j                  «       || _        y r   )r	   r&   ÚAttrConditionrr   r@   r5   r"   r­   Úcondition_attrr¿   rs   rˆ   r‰   rŠ   rf   )r   r5   r½   r€   s       r   Ú_set_with_conditionz'PassDesc.AttrHelper._set_with_condition  s�   € Ü%×.Ñ.×<Ñ<Ó>ˆIØ×#Ñ# I§N¡NÔ3Ø!ˆIŒNÜ˜%¤×!4Ñ!4Ô5Ø×(Ñ(¨×)AÑ)AÕBà×%Ñ% e¨Y×-FÑ-FÔGØ�ŠØ×#Ñ#×,Ñ,¨T¯_©_Ô=Ø'ˆD�Or   c                 ól   — | j                  t        j                  j                  j                  |«       y r   )rÖ   r	   r&   rw   rx   rÆ   s     r   ÚEQzPassDesc.AttrHelper.EQ  s'   € Ø×$Ñ$Ü×&Ñ&×4Ñ4×8Ñ8¸%õr   c                 ót   ‡‡‡‡— t        |‰g«      rt        d«      ‚d„ }ˆˆˆˆfd„}|€|| _        y || _        y )Nz#Only mapped one of which var or op.c                 ó   — t        d«      ‚)Nz'Mapping to variable is not implemented.)r¼   )r™   s    r   Ú
mapped_varz5PassDesc.AttrHelper.MappedPattern.<locals>.mapped_var  s   € Ü)Ø=óð r   c                 óÂ   •— | D �cg c]  }|j                   ‰k(  sŒ|‘Œ }}t        |«      ‰k  rt        d‰› d‰› d�«      ‚t        j	                  |‰   ‰‰¬«      S c c}w )NzIndex 'z' of operator 'z' is incorrect.r¬   )rP   r:   rN   r&   r­   )r™   Úor<   rª   r®   r8   rX   s      €€€€r   Ú	mapped_opz4PassDesc.AttrHelper.MappedPattern.<locals>.mapped_op  sw   ø€ Ù"-Ó?¡+˜Q°·±¸B³’q +�Ð?Ü�s“8˜uÒ$Ü$Ø! % ¨¸°t¸?ÐKóð ô  ×*Ñ*Ø˜‘J °Mð +ó ð ùò @s
   †A›A)ÚallrN   rƒ   )r   ÚvarrX   r®   r8   rª   rÛ   rÞ   s     ````  r   ÚMappedPatternz!PassDesc.AttrHelper.MappedPattern  s9   û€ ô �C˜�9Œ~Ü Ð!FÓGÐGò÷
ð ),¨˜9ˆD�L¸ˆD�Lr   r   )NNr   NN)r�   rž   rŸ   r   r¯   rr   r¿   rÂ   rÇ   rË   rÎ   rÒ   rÖ   rØ   rá   r    r   r   r­   r£   µ   sH   „ ó	 ò	ò	Cò	Pó	ò$	ò
	ò
	ò
	ò

	(ò	ð HLô	Dr   r­   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)úPassDesc.VarHelperc                 ó²   — t         j                  j                  «       j                  «       }t        j                  j                  |i |¤Ž| _        i | _        y r   )r#   r$   Údefault_main_programrR   ÚdataÚ_varrz   )r   r    ÚkwargsÚblocks       r   r   zPassDesc.VarHelper.__init__+  s?   € Ü—M‘M×6Ñ6Ó8×FÑFÓHˆEÜŸ™×*Ñ*¨DÐ;°FÑ;ˆDŒIØˆD�Kr   c                 ó.   — t        | j                  |«      S r   )Úgetattrrç   )r   r8   s     r   Ú__getattr__zPassDesc.VarHelper.__getattr__0  s   € Ü˜4Ÿ9™9 dÓ+Ð+r   c                 óŠ   — | j                   j                  |«      }|€%t        j                  | |«      }|| j                   |<   |S r   ©rz   r!   r&   r­   ©r   r8   r@   s      r   rq   zPassDesc.VarHelper.Attr3  ó>   € Ø—;‘;—?‘? 4Ó(ˆDØˆ|Ü×*Ñ*¨4°Ó6�Ø$(�—‘˜DÑ!ØˆKr   N)r�   rž   rŸ   r   rì   rq   r    r   r   r'   rã   *  s   „ ò	ò
	,ó	r   r'   c                   óL   — e Zd Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zy)úPassDesc.OpHelperc           
      óz  — t        |t        «      sJ dj                  t        |«      «      «       ‚d}|dj	                  | j
                  j                  «       D ��cg c]  \  }}|› d|› �‘Œ c}}«      z  }|dz  }d}|dj	                  | j                  j                  «       D ��cg c]  \  }}|› d|› �‘Œ c}}«      z  }|dz  }d}|dj	                  | j                  j                  «       D ��cg c]  \  }}|› d|› �‘Œ c}}«      z  }|dz  }|› d| j                  › d|› d|› d�}|S c c}}w c c}}w c c}}w )	NzEskip_op_callstack parameter's type is error, expect bool, received {}Ú{z, Ú=Ú}z = z(inputs=Ú))
r"   ÚboolrO   r5   ÚjoinÚ_outputsÚitemsÚ_inputsrz   rP   )r   Úskip_op_callstackÚoutputs_strÚkÚvÚ
inputs_strÚ	attrs_strÚop_strs           r   Ú_to_readable_codez#PassDesc.OpHelper._to_readable_code;  sg  € ÜØ!¤4ôð àV×]Ñ]ÜÐ&Ó'óóð ð
 ˆKØ˜4Ÿ9™9Ø(,¯©×(;Ñ(;Ô(=Ô>Ñ(=¡  1�A�3�a˜�s’Ð(=Ò>óñ ˆKð ˜3ÑˆKàˆJØ˜$Ÿ)™)Ø(,¯©×(:Ñ(:Ô(<Ô=Ñ(<¡  1�A�3�a˜�s’Ð(<Ò=óñ ˆJð ˜#ÑˆJàˆIØ˜Ÿ™¸4¿;¹;×;LÑ;LÔ;NÔ#OÑ;N±4°1°a q c¨¨1¨#¢JÐ;NÒ#OÓPÑPˆIØ˜ÑˆIà#�} C¨¯
©
 |°8¸J¸<ÀrÈ)ÈÐTUÐVˆFØˆMùó ?ùó >ùó
 $Ps   ÁD+Â&D1Ã1D7Nc                 ó   — || _         y r   )rP   )r   r5   s     r   r   zPassDesc.OpHelper.__init__T  s	   € ØˆD�Jr   c                 óP   — t         j                  |«      }|j                  «        |S r   )r&   rL   ÚInit)r   r8   rX   s      r   rì   zPassDesc.OpHelper.__getattr__W  s    € Ü×"Ñ" 4Ó(ˆBØ�G‰GŒIØˆIr   c                 ó†  — t        |«      dkD  rt        d«      ‚|j                  «       D �]c  \  }}| j                  j	                  |«      }|€%t        dj                  | j                  |«      «      ‚t        |t        t        f«      r3t        |«      dk(  r(t        dj                  || j                  «      «      ‚|g}|D ]–  }t        |t        j                  «      ri|j                  «       }t        |«      dk7  r$t        dj                  |j                  «      «      ‚|j                  «       D ]  }|j                  |«       Œ Œ†|j                  |«       Œ˜ | j                   j#                  ||D �	cg c]  }	|	j$                  ‘Œ c}	«       �Œf t&        j(                  j+                  «       j-                  «       }
| j.                  j                  «       D ]b  \  }}t1        j2                  | j                  «      }|j                  |
j5                  |¬«      «       | j                   j7                  ||g«       Œd | S c c}	w )Nr   z6Each input argument needs to specify a parameter name.z-Operator '{}' does not have input named '{}'.z,Input '{}' of operator '{}' cannot be empty.rF   zXThe size of outputs of operator '{}' is not equal 1, please specify one output variable.)r8   )r:   rN   rû   rü   r!   rO   rP   r"   rJ   rK   r&   rL   rM   rQ   rI   r   Ú_descÚ	set_inputr8   r#   r$   rå   rR   rú   r   ÚgenerateÚ
create_varÚ
set_output)r   r    rè   Úin_nameÚin_argsÚop_inputÚin_argr_   r`   rb   ré   Úout_nameÚ	op_outputÚop_output_names                 r   Ú__call__zPassDesc.OpHelper.__call__\  sø  € Ü�4‹y˜1Š}Ü ØLóð ð %+§L¡L§NÑ �˜ØŸ<™<×+Ñ+¨GÓ4�ØÐ#Ü$ØG×NÑNØ ŸJ™J¨óóð ô
 ˜g¬¬e }Ô5Ü˜7“| qÒ(Ü(ØJ×QÑQØ '¨¯©óóð ð  '˜i�GÛ%�FÜ! &¬(×*;Ñ*;Ô<Ø"(§.¡.Ó"2˜Ü˜w›<¨1Ò,Ü",Ø z÷  !Bñ  !BØ$*§L¡Ló!"ó#ð ð
 '.§n¡nÖ&6˜FØ$ŸO™O¨FÕ3ñ '7ð !Ÿ™¨Õ/ð &ð —
‘
×$Ñ$ W¹xÓ.H¹x¸!¨q¯v«v¸xÑ.HÖIð= %3ô> —M‘M×6Ñ6Ó8×FÑFÓHˆEØ'+§}¡}×':Ñ':Ö'<Ñ#�˜)Ü!,×!5Ñ!5°d·j±jÓ!A�Ø× Ñ  ×!1Ñ!1°~Ð!1Ó!FÔGØ—
‘
×%Ñ% h°Ð0@ÕAð (=ð ˆKùò /Is   Å4H>c                 ó  — t         j                  j                  «       j                  «       }t	        j
                  «       j                  j                  | j                  «      | _	        | j                  €t        d| j                  › d�«      ‚t        |j                  «      | _        |j                  j                  «       | _        | j                   j#                  | j                  «       i | _        | j                  j&                  D �ci c]  }|j(                  g “Œ c}| _        | j                  j,                  D �ci c]  }|j(                  g “Œ c}| _        |j                  j1                  | «       y c c}w c c}w )Nz)type object 'OpHelper' has no attribute 'Ú')r#   r$   rå   rR   r   ÚinstanceÚop_proto_mapr!   rP   Ú_protoÚAttributeErrorr:   r<   r¶   rS   Ú	append_opr	  Úset_typerz   Úinputsr8   rü   Úoutputsrú   r   )r   ré   rb   rÝ   s       r   r  zPassDesc.OpHelper.Init‡  s  € Ü—M‘M×6Ñ6Ó8×FÑFÓHˆEÜ'×0Ñ0Ó2×?Ñ?×CÑCÀDÇJÁJÓOˆDŒKØ�{‰{Ð"Ü$Ø?ÀÇ
Á
¸|È1ÐMóð ô ˜eŸi™i›.ˆDŒKØŸ™×-Ñ-Ó/ˆDŒJØ�J‰J×Ñ §
¡
Ô+ØˆDŒKØ04·±×0BÒ0BÓCÑ0B¨1˜AŸF™F B™JÐ0BÑCˆDŒLØ15·±×1DÒ1DÓEÑ1D¨A˜QŸV™V R™ZÐ1DÑEˆDŒMØ�I‰I×Ñ˜TÕ"ùò DùÚEs   ÄE7Ä?E<c                 óŠ   — | j                   j                  |«      }|€%t        j                  | |«      }|| j                   |<   |S r   rî   rï   s      r   rq   zPassDesc.OpHelper.Attr–  rð   r   c                 óž   — t        |t        j                  «      r|| j                  |«      _        y | j
                  j                  ||«       y r   )r"   r&   r­   rq   rƒ   r	  Ú	_set_attr)r   r8   r½   s      r   ÚSetAttrzPassDesc.OpHelper.SetAttr�  s6   € Ü˜%¤×!4Ñ!4Ô5Ø*/�—	‘	˜$“Õ'à—
‘
×$Ñ$ T¨5Õ1r   c                 óx   — | j                   j                  |«      }|€t        d| j                  › d|› d�«      ‚|S )Nz
Operator 'z' does not have output named 'z'.)rú   r!   rN   rP   )r   r8   Úoutputs      r   ÚOutputzPassDesc.OpHelper.Output£  sG   € Ø—]‘]×&Ñ& tÓ,ˆFØˆ~Ü Ø  §¡ Ð,JÈ4È&ÐPRÐSóð ð ˆMr   c                 ó   — | j                   S r   )rú   rÑ   s    r   rM   zPassDesc.OpHelper.Outputs«  s   € Ø—=‘=Ð r   c                 ó¾   — |j                  «       D ]J  \  }}|€| j                  j                  |«       Œ$| j                  j                  ||j                  g«       ŒL y r   )rû   r	  Úremove_outputr  r8   )r   rè   ÚparamÚargs       r   Ú
SetOutputszPassDesc.OpHelper.SetOutputs®  sG   € Ø$Ÿl™lžn‘
��sØ�;Ø—J‘J×,Ñ,¨UÕ3à—J‘J×)Ñ)¨%°#·(±(°Õ<ñ	 -r   )Tr   )r�   rž   rŸ   r  r   rì   r  r  rq   r#  r&  rM   r,  r    r   r   rL   rò   :  s5   „ ó	ó2	ò	ò
)	òV	#ò	ò	2ò	ò	!ó	=r   rL   N)
r�   rž   rŸ   r­   r#   r$   ÚVariabler'   rL   ÚOPr    r   r   r&   r&   ´   s=   „ ÷sDñ sDôj�F—M‘M×*Ñ*ô ÷ y=ñ y=ñv 
‹�Br   r&   c                 óV   ‡‡— d„ Šˆˆfd„}t        j                  | «      r || «      S |S )aî  
    The function decorator of Register Pass. Decorator @RegisterPass handles
    the function and register it into a core.Pass instance. Use name of function
    as Pass type.

    Args:
        function (callable): The function with return of callable pair(s) that
            represents the pattern subgraph and the replace subgraph.
        input_specs (dict[str, InputSpec]): Dict of InputSpec to specific the shape/dtype
            information of Tensor. Some operators limit the shape and dtype of datas when
            create subgraph with Paddle APIs. So user need specify InputSpec of data to
            ensure create a correctly subgraph. Of course, this argument is not limited to
            matching subgraph. The default is dict().

    Returns:
        callables: Callable pair(s).

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> from paddle.incubate.passes.ir import RegisterPass

            >>> @RegisterPass
            >>> def multi_add_to_addn():
            ...    def pattern(x, y, z):
            ...        return paddle.add(paddle.add(x, y), z)
            ...    def replace(x, y, z):
            ...        return paddle.add_n([x, y, z])
            ...    return pattern, replace
    c                 ó”   — t        | t        t        f«      r2t        | «      dk(  r$t	        t        t        j                  | «      «      ryy)Né   TF)r"   rJ   rK   r:   rß   Úmapr   r„   )Ú
check_pairs    r   Ú_is_pass_pairz#RegisterPass.<locals>._is_pass_pairÙ  s7   € Ü�j¤4¬ -Ô0Ü�:‹ !Ò#Ü”sœ7×-Ñ-¨zÓ:Ô;ØØr   c                 ó€  •— | j                   }t        j                  | «      }t        |j                  «      dkD  rt        d«      ‚t        |j                  «      dk(  r` | «       } ‰|«      r|g}n t        t        ‰|«      «      st        d«      ‚t        ||‰«      }t        j                  ||j                  «       | S )Nr   z2Pass function with parameter is not supported now.z;Return value of Pass function must be (callable, callable).)r�   r   Ú	signaturer:   Ú
parametersr¼   rß   r2  rN   r   r   Úregister_passrœ   )Úpython_funcr   r6  r   Úhelperr4  r   s        €€r   Ú	decoratedzRegisterPass.<locals>.decoratedà  s·   ø€ Ø×(Ñ(ˆ	Ü×%Ñ% kÓ2ˆ	Üˆy×#Ñ#Ó$ qÒ(Ü%ØDóð ô �×%Ñ%Ó&¨!Ò+Ù$›ˆJÙ˜ZÔ(Ø(˜\‘
Üœ˜]¨JÓ7Ô8Ü ØQóð ô (¨
°I¸{ÓKˆFÜ×Ñ˜y¨&×*GÑ*GÔHØÐr   )r   r„   )Úfunctionr   r;  r4  s    ` @r   ÚRegisterPassr=  ¸  s/   ù€ òBõô& ×Ñ˜(Ô#Ù˜Ó"Ð"àÐr   )r   Úosr   r#   Úpaddle.base.protor   Úbaser   r   Úbase.frameworkr   r	   ÚModuleNotFoundErrorÚsysÚdirnameÚ__file__Ú	base_pathr   rù   r   r&   r=  r    r   r   Ú<module>rG     s‘   ðó Ý ã Ý +ç %Ý +ð0Ý/÷O3ñ O3÷dAñ AðH ¨Bô >øð} ò 0Ûà�—‘˜XÓ&¨Ñ6€IØ‡H�H‡O�O�I�D—I‘I˜i¨Ó1Ô2ß/ð0ús   ¤A ÁABÂB