
    ϑiUL                     :   S SK r S SKJr  S SKrS SKJr  SSKJrJr  SSK	J
r
   S SKJr   " S
 S5      r " S S5      rS0 4S jrg! \ aN    S SKr\R                  " \5      S-   r\R                  R#                  \R$                  " \S	5      5        S SKJr   Nof = f)    N)path)framework_pb2   )coreunique_name)OpProtoHolder)pass_desc_pb2z/../../baseprotoc                   J    \ rS rSr/ rS0 4S jrS rS rS rS r	S r
S	 rS
rg)RegisterPassHelper"    c                 f    X l         Xl        X0l        [        R                  R                  U 5        g N)
_pass_type_pass_pairs_input_specsr   _register_helpersappend)self
pass_pairs	pass_typeinput_specss       Y/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/incubate/passes/ir.py__init__RegisterPassHelper.__init__%   s'    #%',,33D9    c                 2   / n[         R                  " U5      nUR                   H  nU R                  R	                  U5      n[        U[        R                  R                  5      (       a;  UR                  [        R                  XER                  UR                  5      5        M  [        U[        R                  5      (       a'  UR                  [        R                  " U5      5        M  UR                  [        R                  US/5      5        M     U$ )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_func&RegisterPassHelper._get_args_from_func+   s    **40	!H**..x8J*fmm&=&=>>&& "2"2J4D4D
 J(8(899F,,X67H..x">? ' r   c                    U H  n[         R                  " UR                  R                  5       5      n/ nUR                   H{  nUR
                  S;  aW  UR                  5       n[        U5      S:X  a8  UR                  5       S   S   nUR                  UR
                  5      nX:w  a  Mj  UR                  U5        M}     U H  nUR                  R                  U5        M      M     g )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_desc&RegisterPassHelper._prune_program_desc<   s    G ;;##%M L99 % 
 (,'8$+,1%)__%6r%:2%>
-:->->tyy-I*-;$##D) &  %$$T* %+ r   c                    / n[         R                  R                  5       n[         R                  R                  5       n[         R                  R                  XE5         U R	                  U5      nUR                  U5        U" U6 n[        U[        [        45      (       d  U/nU H  n[        U[        R                  5      (       ab  UR                  5       n	[        U	5      S:w  a  [        SUR                   S35      eU	R                  5        H  n
UR                  U
5        M     M  UR!                  U5        M     S S S 5        UR#                  5       R$                  n['        UR)                  5       5       H?  nUR+                  5       R-                  UR/                  U5      R1                  5       5        MA     U R3                  U5        X4R#                  5       R4                  4$ ! , (       d  f       N= f)N   
Operator 'z;' has multiple outputs, please specify one output variable.)r%   r&   Programprogram_guardr1   extendr$   listtupler(   OpHelperOutputsr=   
ValueError_typevaluesr   current_blockdescrangeop_sizeaddParseFromStringopserialize_to_stringrG   r?   )r   r-   r?   varsprogramstartup_programr"   outsoutop_outsop_out
block_descis                r   _func_to_program_desc(RegisterPassHelper._func_to_program_descU   s   --'') --//1]]((B++D1DKK;DdT5M22vc8#4#455!kkmG7|q(((3no  #*.."2F+ #3 KK$  C" **,11
z))+,AGGI%%jmmA&6&J&J&LM -  %**,0000+ CBs   C!G))
G7c                 0  ^
 U
4S jm
[        X5       GH  u  pEUR                  R                  5       nUR                  Ul        UR                  Ul        UR                  nUR                  U R                  ;   a  UR                  5       nUR                  S5      R                  UR                  5        SUR                  l        [        R                  R                  UR                  l        UR                  R                   R#                  UR$                  5        [&        R(                  R*                  R,                  Ul        [(        R.                  UR0                  :X  d  GMU  UR2                  R5                  5        H  n	T
" Xy/5        M     GM     g )Nc                    > U HA  nUR                   (       a  U R                  UR                   5        T" XR                  5        MC     g r   )
_conditionr   	_elements)
conditionselementselement_add_element_conditionss      r   rp   NRegisterPassHelper._convert_vars_to_pass_desc.<locals>._add_element_conditionsq   s8    #%%%%g&8&89'
4E4EF $r   r*   r   )zipvar_mapsrZ   r;   pattern_varreplace_varvar_attr_conditionsr   Attr_to_pass_desc_attrrC   condition_valuer   AttrTypeLONGSr8   longsrN   r*   r	   r(   ConditionTypekEQr)   	__class___attrsrU   )r   patternsreplacesrW   patternreplacevar_maprm   	conditionrC   rp   s             @r   _convert_vars_to_pass_desc-RegisterPassHelper._convert_vars_to_pass_descp   s   	G !$H 7Gmm'')G"),,G"),,G11J||t000&NN,	W%88H13	)).1>1G1G1M1M	)).))//66w}}E!.!7!7!E!E!I!I	!!W%6%66#NN113D+J? 4! !8r   c                     U H  n[        U[        R                  5      (       d  M$  UR                  R	                  5        H  nUR
                  n[        R                  " U5      (       a  U" U5      nUR                  R                  5       nUR                  UR                  5        UR                  UR                  5        UR                  c  M  UR                  R                  UR                  5        M     M     g r   )r$   r(   rQ   r   rU   _mappedr    
isfunctionop_attr_mapsrZ   rx   pattern_attrreplace_attr
_operation	operationCopyFrom)r   r   r   rW   r   rC   mappedattr_maps           r   _convert_ops_to_pass_desc,RegisterPassHelper._convert_ops_to_pass_desc   s    G'8#4#455#NN113D!\\F))&11!'!1#00446H--h.C.CD++H,A,AB((4 **33F4E4EF 4  r   c                 "   [         R                  " 5       nU(       a  [         R                  " 5         [        R                  " 5       nU R
                  Ul        U R                   H}  u  p4UR                  R                  5       nU R                  X5R                  5      u  pgU R                  XER                  5      u  pU R                  XhU5        U R                  XyU5        M     U(       a  [         R                  " 5         UR!                  5       $ r   )r%   in_dynamic_modeenable_staticr	   MultiPassDescr   r   r   
pass_descsrZ   rg   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   SerializeMultiPassDesc)RegisterPassHelper.SerializeMultiPassDesc   s    #335  "'557$(OO! !% 0 0G'22668I(,(B(B**)%L )-(B(B**)%L ++I **;YO !1 !!#0022r   )r   r   r   N)__name__
__module____qualname____firstlineno__r   r   r1   rG   rg   r   r   r   __static_attributes__ r   r   r   r   "   s2    -/R :"+216@4G3r   r   c                       \ rS rSr " S S5      r " S S\R                  R                  5      r " S S5      r	\	" 5       r
Srg	)
r(      c                   j    \ rS rSrSS jrS rS rS rSS jrS r	S	 r
S
 rS rS rS r SS jrSrg)PassDesc.AttrHelper   Nc                 n    Xl         X l        S U l        X0l        / U l        S U l        S U l        S U l        g r   )_obj_name_operation_type_element_indexrl   r   rk   r   )r   objr;   element_indexs       r   r   PassDesc.AttrHelper.__init__   s6    IJ#'D "/DN"DO"DODLr   c                     [         R                  U R                  U R                  US9nU R                  R                  U5        U$ )Nr   )r(   
AttrHelperr   r   rl   r   )r   indexro   s      r   __getitem__PassDesc.AttrHelper.__getitem__   s?    ))		4::U * G NN!!'*Nr   c                    [        U R                  [        R                  5      (       aE  [        R                  R
                  R                  Ul        U R                  R                  Ul	        OD[        R                  R
                  R                  Ul        U R                  R                  Ul        U R                  Ul        U R                  b  U R                  Ul        U R                   b  U R                   Ul        g g r   )r$   r   r(   r)   r	   RoleType	kVariableroler;   var_name	kOperator_indexop_indexr   r   r   r   r   )r   pass_desc_attrs     r   rx   &PassDesc.AttrHelper._to_pass_desc_attr   s    $))X%7%788&3&<&<&E&E&O&O#*.))..'&3&<&<&E&E&O&O#*.))*:*:'"&**N##/+/+?+?(""./3/B/B, /r   c                     SUl         [        U[        5      (       a&  [        R                  R
                  Ul        Xl        g [        S5      e)Nr   z"Unimplemented transform operation.)	r;   r$   intr   rz   INTr8   rf   NotImplementedError)r   valueop_desc_attrs      r   _to_op_desc_attr$PassDesc.AttrHelper._to_op_desc_attr   s<     "L%%%$1$:$:$>$>!!&)*NOOr   c                    [         R                  U R                  U R                  U R                  5      nU R
                  R                  U5        Uc  Xl        U$ [        R                   R                  5       nXl
        [        U[         R                  5      (       a  UR                  UR                  5        OU R                  X$R                  5        XCl        U R                  Ul        U$ r   )r(   r   r   r   r   rl   r   r   r	   	Operationr8   r$   rx   rC   r   r   r   )r   r8   r   rC   r   s        r   _clone_with_operation)PassDesc.AttrHelper._clone_with_operation   s    &&		4::t':':D NN!!$'}'+$%..88:I!N%!4!455((8%%e__='O#'#7#7D Kr   c                 j    U R                  [        R                  R                  R                  U5      $ r   )r   r	   r(   OperationTypekSubr   r   s     r   __sub__PassDesc.AttrHelper.__sub__   ,    --&&44995 r   c                 j    U R                  [        R                  R                  R                  U5      $ r   )r   r	   r(   r   kAddr   s     r   __add__PassDesc.AttrHelper.__add__   r   r   c                 j    U R                  [        R                  R                  R                  U5      $ r   )r   r	   r(   r   kModr   s     r   ModPassDesc.AttrHelper.Mod   r   r   c                 h    U R                  [        R                  R                  R                  5      $ r   )r   r	   r(   r   kSizer   s    r   SizePassDesc.AttrHelper.Size   s*    --&&44:: r   c                    [         R                  R                  5       nU R                  UR                  5        Xl        [        U[        R                  5      (       a  UR                  UR                  5        OU R                  X#R                  5        U R                  (       a%  UR                  R                  U R                  5        X0l        g r   )r	   r(   AttrConditionrx   rC   r8   r$   r   condition_attrr   ry   r   r   r   rk   )r   r8   r   r   s       r   _set_with_condition'PassDesc.AttrHelper._set_with_condition   s    %..<<>I##INN3!N%!4!455(()A)AB%%e-F-FG##,,T__='Or   c                 l    U R                  [        R                  R                  R                  U5        g r   )r   r	   r(   r}   r~   r   s     r   EQPassDesc.AttrHelper.EQ  s'    $$&&4488%r   c                    ^^^^ [        UT/5      (       a  [        S5      eS nUUUU4S jnUc  Xpl        g UU l        g )Nz#Only mapped one of which var or op.c                     [        S5      e)Nz'Mapping to variable is not implemented.)r   )r   s    r   
mapped_var5PassDesc.AttrHelper.MappedPattern.<locals>.mapped_var  s    )= r   c                    > U  Vs/ s H  oR                   T:X  d  M  UPM     nn[        U5      T::  a  [        ST ST S35      e[        R	                  UT   TTS9$ s  snf )NzIndex '' of operator 'z' is incorrect.r   )rT   r=   rS   r(   r   )r   or?   r   r   r;   r\   s      r   	mapped_op4PassDesc.AttrHelper.MappedPattern.<locals>.mapped_op  su    "-?+QBq+?s8u$$!%t?K   **JM +   @s
   AA)allrS   r   )r   varr\   r   r;   r   r   r   s     ````  r   MappedPattern!PassDesc.AttrHelper.MappedPattern  s>     C9~~ !FGG
  ),9LDLr   )rk   r   rl   r   r   r   r   r   r   )NNr   NN)r   r   r   r   r   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sH    	 		C	P	$	
	
	
	

	(	 HL	Dr   r   c                   &    \ rS rSrS rS rS rSrg)PassDesc.VarHelperi(  c                     [         R                  R                  5       R                  5       n[         R                  R                  " U0 UD6U l        0 U l        g r   )r%   r&   default_main_programrV   data_varr   )r   r"   kwargsblocks       r   r   PassDesc.VarHelper.__init__)  s?    MM668FFHE**D;F;DIDKr   c                 .    [        U R                  U5      $ r   )getattrr  )r   r;   s     r   __getattr__PassDesc.VarHelper.__getattr__.  s    499d++r   c                     U R                   R                  U5      nUc#  [        R                  X5      nX R                   U'   U$ r   r   r#   r(   r   r   r;   rC   s      r   rw   PassDesc.VarHelper.Attr1  :    ;;??4(D|**46$(D!Kr   )r   r  N)r   r   r   r   r   r	  rw   r   r   r   r   r)   r   (  s    	
	,	r   r)   c                   X    \ rS rSrSS jrSS jrS rS rS rS r	S	 r
S
 rS rS rSrg)PassDesc.OpHelperi8  c           
      x   [        U[        5      (       d   S[        U5       35       eSnUSR                  U R                  R                  5        VVs/ s H  u  p4U SU 3PM     snn5      -  nUS-  nSnUSR                  U R                  R                  5        VVs/ s H  u  p4U SU 3PM     snn5      -  nUS-  nSnUSR                  U R                  R                  5        VVs/ s H  u  p4U SU 3PM     snn5      -  nUS-  nU SU R                   SU SU S3nU$ s  snnf s  snnf s  snnf )	NzCskip_op_callstack parameter's type is error, expect bool, received {z, =}z = z(inputs=))	r$   boolr8   join_outputsitems_inputsr   rT   )r   skip_op_callstackoutputs_strkv
inputs_str	attrs_strop_strs           r   _to_readable_code#PassDesc.OpHelper._to_readable_code9  s[   /66 UVZ[lVmUno6 K499(,(;(;(=>(=A3as(=> K 3KJ$))(,(:(:(<=(<A3as(<= J #JI4;;;L;L;N#O;N41qc1#J;N#OPPII#}C

|8J<r)TUVFM ? >
 $Ps   D*!D0.D6Nc                     Xl         g r   )rT   )r   r8   s     r   r   PassDesc.OpHelper.__init__P  s    Jr   c                 P    [         R                  U5      nUR                  5         U$ r   )r(   rQ   Init)r   r;   r\   s      r   r	  PassDesc.OpHelper.__getattr__S  s     ""4(BGGIIr   c                 t   [        U5      S:  a  [        S5      eUR                  5        GHZ  u  p4U R                  R	                  U5      nUc  [        SU R
                   SU S35      e[        U[        [        45      (       a,  [        U5      S:X  a  [        SU SU R
                   S35      eOU/nU H  n[        U[        R                  5      (       ab  UR                  5       n[        U5      S	:w  a  [        S
UR
                   S35      eUR                  5        H  nUR                  U5        M     M  UR                  U5        M     U R                  R!                  X5 V	s/ s H  oR"                  PM     sn	5        GM]     [$        R&                  R)                  5       R+                  5       n
U R,                  R                  5        H_  u  p[.        R0                  " U R
                  5      nUR                  U
R3                  US95        U R                  R5                  X/5        Ma     U $ s  sn	f )Nr   z6Each input argument needs to specify a parameter name.rK   z' does not have input named ''.zInput 'r   z' cannot be empty.rJ   z!The size of outputs of operator 'z5' is not equal 1, please specify one output variable.)r;   )r=   rS   r  r  r#   rT   r$   rO   rP   r(   rQ   rR   rU   rN   r   _desc	set_inputr;   r%   r&   r  rV   r  r   generate
create_var
set_output)r   r"   r  in_namein_argsop_inputin_argrc   rd   rf   r  out_name	op_outputop_output_names                 r   __call__PassDesc.OpHelper.__call__X  s   4y1} L  %+LLN <<++G4#$$TZZL0MgYVXY  ge}557|q((%gYodjj\I[\  )
  'iG%F!&(*;*;<<"(.."2w<1,","CFLL>  RG  !H#  '.nn&6F$OOF3 '7 !/ & 

$$Wx.Hx!vvx.HI1 %32 MM668FFHE'+}}':':'<#!,!5!5djj!A  !1!1~!1!FG

%%h0@A (= K /Is   )H5c                    [         R                  R                  5       R                  5       n[        R
                  " 5       R                  R                  U R                  5      U l	        U R                  c  [        SU R                   S35      e[        UR                  5      U l        UR                  R                  5       U l        U R                   R#                  U R                  5        0 U l        U R                  R&                   Vs0 s H  o"R(                  / _M     snU l        U R                  R,                   Vs0 s H  o3R(                  / _M     snU l        UR                  R1                  U 5        g s  snf s  snf )Nz)type object 'OpHelper' has no attribute '')r%   r&   r  rV   r   instanceop_proto_mapr#   rT   _protoAttributeErrorr=   r?   r   rW   	append_opr,  set_typer   inputsr;   r  outputsr  r   )r   r  rf   r   s       r   r(  PassDesc.OpHelper.Init}  s   MM668FFHE'002??CCDJJODK{{"$?

|1M  eii.DK--/DJJJ

+DK040B0BC0B1FFBJ0BCDL151D1DE1DAVVRZ1DEDMIIT" DEs   E=Fc                     U R                   R                  U5      nUc#  [        R                  X5      nX R                   U'   U$ r   r  r  s      r   rw   PassDesc.OpHelper.Attr  r  r   c                     [        U[        R                  5      (       a  X R                  U5      l        g U R
                  R                  X5        g r   )r$   r(   r   rw   r   r,  	_set_attr)r   r;   r   s      r   SetAttrPassDesc.OpHelper.SetAttr  s5    %!4!455*/		$'

$$T1r   c                 z    U R                   R                  U5      nUc  [        SU R                   SU S35      eU$ )NrK   z' does not have output named 'r+  )r  r#   rS   rT   )r   r;   outputs      r   OutputPassDesc.OpHelper.Output  sG    ]]&&t,F~  ,J4&PRS  Mr   c                     U R                   $ r   )r  r   s    r   rR   PassDesc.OpHelper.Outputs  s    == r   c                     UR                  5        HK  u  p#Uc  U R                  R                  U5        M%  U R                  R                  X#R                  /5        MM     g r   )r  r,  remove_outputr0  r;   )r   r  paramargs       r   
SetOutputsPassDesc.OpHelper.SetOutputs  sC    $lln
;JJ,,U3JJ))%((<	 -r   )r   r,  r   r  r  r>  rT   )Tr   )r   r   r   r   r#  r   r	  r8  r(  rw   rI  rM  rR   rU  r   r   r   r   rQ   r  8  s5    	.		
#	J	#		2		!	=r   rQ   r   N)r   r   r   r   r   r%   r&   Variabler)   rQ   OPr   r   r   r   r(   r(      s=    sD sDjFMM**  q= q=f 
Br   r(   c                 d   ^^ S mUU4S jn[         R                  " U 5      (       a  U" U 5      $ U$ )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                     [        U [        [        45      (       a8  [        U 5      S:X  a)  [	        [        [        R                  U 5      5      (       a  gg)N   TF)r$   rO   rP   r=   r   mapr    r   )
check_pairs    r   _is_pass_pair#RegisterPass.<locals>._is_pass_pair  s=    j4-00:!#s7--z:;;r   c                   > U R                   n[        R                  " U 5      n[        UR                  5      S:  a  [        S5      e[        UR                  5      S:X  ai  U " 5       nT" U5      (       a  U/nO%[        [        TU5      5      (       d  [        S5      e[        X1T5      n[        R                  " XR                  5        U $ )Nr   z2Pass function with parameter is not supported now.z;Return value of Pass function must be (callable, callable).)r   r    	signaturer=   
parametersr   r   r\  rS   r   r   register_passr   )python_funcr   ra  r   helperr^  r   s        r   	decoratedRegisterPass.<locals>.decorated  s    ((	%%k2	y##$q(%D  %%&!+$JZ(((\
]J788 Q  (
{KFy*G*GHr   )r    r   )functionr   rf  r^  s    ` @r   RegisterPassri    s2    B& (##""r   )r    osr   r%   paddle.base.protor   baser   r   base.frameworkr   r	   ModuleNotFoundErrorsysdirname__file__	base_pathr   r  r   r(   ri  r   r   r   <module>rs     s       + % +0/M3 M3`y yx B >i  0X&6IHHOODIIi12/0s   A ABB