
    Αi(                     @   S SK JrJr  S SKJr   " S S5      r " S S5      r " S S\5      rS	 r	0 4S
 jr
 " S S\5      rS rS rS rS rSS/0\l        0 \l        / SQ\l        \\S \" \R                   \R"                  5      /\l        S rS r " S S5      rg)    )ABCabstractmethod)_apply_passc                   F    \ rS rSrS rS rS
S jr\S 5       rS r	S r
S	rg)PassContext   c                      / U l         0 U l        g N_applied_passes_attrsselfs    c/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/passes/pass_base.py__init__PassContext.__init__   s    !    c                      X R                   U'   g r
   r   r   keyvalues      r   set_attrPassContext.set_attr   s     Cr   Nc                 8    U R                   R                  X5      $ r
   r   getr   r   defaults      r   get_attrPassContext.get_attr       {{s,,r   c                     U R                   $ r
   r   r   s    r   passesPassContext.passes   s    ###r   c                 :    U R                   R                  U5        g r
   )r   append)r   pass_objs     r   	_add_passPassContext._add_pass#   s    ##H-r   c                     U R                   S	 g )Nr$   r   s    r   	_pop_passPassContext._pop_pass&   s      $r   r   r
   )__name__
__module____qualname____firstlineno__r   r   r    propertyr%   r*   r.   __static_attributes__ r   r   r   r      s/    !- $ $.%r   r   c                   (    \ rS rSrSrSrSrSrSrSr	g)	PassType*   r               r6   N)
r0   r1   r2   r3   UNKNOWNCOMM_OPTCALC_OPTPARALLEL_OPT
FUSION_OPTr5   r6   r   r   r8   r8   *   s    GHHLJr   r8   c                       \ rS rSr0 r/ r0 r0 r/ rSr	\
S 5       rS rS rSS jr\S 5       r\S 5       rS	 rS
 rSS jrS r\S 5       rSrg)PassBase2   Nc                 X    [        U[        5      (       d   eU[        R                  U '   g r
   )
issubclassrD   _REGISTERED_PASSES)	pass_name
pass_classs     r   	_registerPassBase._register<   s%    *h////1;##I.r   c                     0 U l         g r
   r   r   s    r   r   PassBase.__init__A   s	    r   c                 "    X R                   U'   U $ r
   r   r   s      r   r   PassBase.set_attrD   s     Cr   c                 8    U R                   R                  X5      $ r
   r   r   s      r   r    PassBase.get_attrH   r"   r   c                     g r
   r6   r   s    r   _check_selfPassBase._check_selfK       r   c                     g r
   r6   r   
other_passs     r   _check_conflictPassBase._check_conflictO   rV   r   c                 "    [         R                  $ r
   )r8   r>   r   s    r   _typePassBase._typeS   s    r   c                 ~   ^ ^ T R                  T5      =(       a$    [        UU 4S j[        R                   5       5      $ )Nc              3   4   >#    U  H  o" TT5      v   M     g 7fr
   r6   ).0rrY   r   s     r   	<genexpr>BPassBase._check_conflict_including_common_rules.<locals>.<genexpr>W   s      8
)?AAj$)?s   )rZ   allrD   _COMMON_RULESrX   s   ``r   &_check_conflict_including_common_rules/PassBase._check_conflict_including_common_rulesV   s5    ##J/ 
C 8
)1)?)?8
 5
 	
r   c                 r  ^  Uc
  [        5       nT R                  5       (       d  U$ [        U 4S jUR                   5       5      (       d  U$ [	        U[
        5      (       d   e[	        U[
        5      (       d   e[        U5      [        U5      :X  d   eT R                  XU5        UR                  T 5        U$ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr
   rg   )ra   pr   s     r   rc   !PassBase.apply.<locals>.<genexpr>b   s&      
# 77::#   !)	r   rT   re   r%   
isinstancelistlen_apply_implr*   )r   main_programsstartup_programscontexts   `   r   applyPassBase.apply[   s    ?!mG!!N 
^^
 
 
 N-....*D1111=!S)9%::::'B$r   c                 P    [        X5       H  u  pEU R                  XEU5        M     g r
   )zip_apply_single_impl)r   rs   rt   ru   main_programstartup_programs         r   rr   PassBase._apply_implo   s)    -0.
)L ##L7K.
r   c                     g r
   r6   r   r{   r|   ru   s       r   rz   PassBase._apply_single_implu   rV   r   r   r
   )r0   r1   r2   r3   rH   rf   _BEFORE_WHITE_LISTS_DICT_AFTER_WHITE_LISTS_DICT_PASS_PROCESS_ORDER_LISTnamestaticmethodrK   r   r   r    r   rT   rZ   r]   rg   rv   rr   rz   r5   r6   r   r   rD   rD   2   s    M! !D< <-     

(L  r   rD   c                    ^  U 4S jnU$ )Nc                 B   > [         R                  TU 5        TU l        U $ r
   )rD   rK   r   )clsr   s    r   implregister_pass.<locals>.impl{   s    4%
r   r6   )r   r   s   ` r   register_passr   z   s    
 Kr   c                     [         R                  R                  U 5      nUc   SU  S35       eU" 5       nUR                  5        H  u  pEUR	                  XE5        M     U$ )NPass z is not registered)rD   rH   r   itemsr   )r   
pass_attrsrJ   r)   kvs         r   new_passr      sb    ,,006J!CU4&0B#CC!|H  "! #Or   c                   Z   ^  \ rS rSrU 4S jr\S 5       r\S 5       rS rS r	S r
SrU =r$ )	CPPPassWrapper   c                 "   > [         TU ]  5         g r
   )superr   )r   	__class__s    r   r   CPPPassWrapper.__init__   s    r   c                     [         er
   )NotImplementedErrorr   s    r   cpp_nameCPPPassWrapper.cpp_name   s    !!r   c                     0 $ r
   r6   r   s    r   cpp_attr_typesCPPPassWrapper.cpp_attr_types   s    	r   c                     gNTr6   r   s    r   rT   CPPPassWrapper._check_self       r   c                     gr   r6   rX   s     r   rZ   CPPPassWrapper._check_conflict   r   r   c                 ^    [        UUU R                  U R                  U R                  5        g r
   )_apply_cpp_passr   r   r   r   s       r   rz   !CPPPassWrapper._apply_single_impl   s'    MMKK	
r   r6   )r0   r1   r2   r3   r   r4   r   r   rT   rZ   rz   r5   __classcell__)r   s   @r   r   r      sD     " "  
 
r   r   c                     U R                  5       [        R                  :X  a#  UR                  5       [        R                  :w  a  gg)NFT)r]   r8   rB   pass_before
pass_afters     r   _fusion_opt_last_ruler      s6    x222("5"55r   c                     U R                  5       [        R                  :X  a9  UR                  5       [        R                  :X  a  [        U 5      [        U5      :  $ gr   )r]   r8   rB   _get_list_indexr   s     r   _fusion_opt_list_ruler      sH    x222("5"55{+oj.IIIr   c                 V  ^ S n[        5       nU" X5        U" X5        0 mU H  n[        5       TU'   M     U R                  5        H"  u  pVU H  nTU   R                  U5        M     M$     UR                  5        H"  u  pVU H  nTU   R                  U5        M     M$     U4S jnU$ )Nc                     U R                  5        Hj  u  p#UR                  U5        [        U[        [        45      (       d   eU H1  n[        U[
        [        45      (       d   eUR                  U5        M3     Ml     g r
   )r   addro   rp   tuplebytesstr)white_lists_dictresultr   r   rI   s        r   collect_pass_names<_make_rule_from_white_lists_dict.<locals>.collect_pass_names   sf    $**,DAJJqMa$////	!)eS\::::

9%  -r   c                    > TR                  U R                  5      nUb  UR                  T;  a  gUR                  U;   $ r   )r   r   )r   r   all_passes_aftercompatible_pass_dicts      r   rule._make_rule_from_white_lists_dict.<locals>.rule   s@    /33K4D4DE$&::??&666r   )setr   r   )	before_white_lists_dictafter_white_lists_dictr   all_pass_namesrI   r   r   r   r   s	           @r    _make_rule_from_white_lists_dictr      s    & UN.?->#	*-%Y' $ (--/I #''	2  0 ',,.I +//2  /7 Kr   c                     U R                   [        R                  ;   d   SU R                    S35       e[        R                  R                  U R                   5      $ )Nr   z# is not in _PASS_PROCESS_ORDER_LIST)r   rD   r   index)in_passs    r   r   r      sO    <<8<<< 
~@A< ,,227<<@@r   fuse_gradient_mergefuse_all_reduce)	fuse_resunitfuse_relu_depthwise_convfuse_bn_add_actfuse_bn_actfused_attentionfused_feedforwardfuse_gemm_epilogue
fuse_adamwfuse_optimizerc                 0    [        U 5      [        U5      :g  $ r
   )typer   s     r   <lambda>r     s    D$5j9I$Ir   c                 N   [        U 5      nS /U-  nS /U-  n/ nSn[        U5       H  nS /U-  X&'   S /U-  X6'   [        U5       Hl  n[        X   U   [        5      (       d   eX   U   (       d  XU   U'   / X&   U'   M;  X   U   SL d   eSX6   U'   Xg/X&   U'   X6   U   U:  d  Mc  SnX&   U   nMn     M     [        U5       H  n[        U5       H  n[        U5       H  nX6   U   X6   U   X8   U   -   :  d  M  X6   U   X8   U   -   X6   U'   X&   U   (       a  X&   U   S   U:X  d   eOMP  X(   U   (       a  X(   U   S   U:X  d   eOMo  X(   U   (       a  X&   U   X(   U   SS  -   O/ X&   U'   X6   U   U:  d  M  X6   U   nX&   U   nM     M     M     U(       a  U$ S/$ )Nr   Tr-   r:   )rq   rangero   bool)	edgesnpathsdistsmin_pathmin_distijr   s	            r   _find_longest_pathr     s   E
AFQJEFQJEHH1X6A:6A:qAehqk400008A;a x{d***  f8A;)!H$x{H    1XqA1X8A;!ux{!::"'(1+";EHQKx{$x{2!333 x{$x{1~222 9>!ehqk!"o5" HQK x{X-#(8A;#(8A;!   (  8(aS(r   c                 :  ^ U  Vs/ s H  o"R                  5       (       d  M  UPM     n nU (       d  / $ U n/ n U H:  m[        U4S jUR                   5       5      (       d  M)  U R                  T5        M<     U (       d  / $ [	        U 5      n/ n[        U5       H  nUR                  S /U-  5        M     [        U5       H0  n[        U5       H  nU U   R                  X   5      XW   U'   M      M2     [        U5      n	U	 V
s/ s H  oU
   PM	     sn
$ s  snf s  sn
f )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr
   rk   )ra   	applied_prl   s     r   rc   '_solve_pass_conflict.<locals>.<genexpr>F  s&      
+	 44Y??+rn   )rT   re   r%   r(   rq   r   rg   r   )r%   ru   rl   
old_passesr   adjacent_matrix_r   r   longest_pathidxs     `        r   _solve_pass_conflictr   >  s   3A==?aF3	JF 
$^^
 
 
 MM!  	FAO1Xvz*  1XqA$*%44VY? q!   &o6L#/0<C3K<009 48 1s   DDDc                   T    \ rS rSrS	S jrS r\S 5       r\S 5       r\S 5       r	Sr
g)
PassManageri^  Nc                 z    Uc
  [        5       nX l        U(       a  [        X5      U l        g [	        U5      U l        g r
   )r   _contextr   _passesrp   )r   r%   ru   auto_solve_conflicts       r   r   PassManager.__init___  s-    ?!mG/@DL<DLr   c                 t    U R                   nU R                   H  nUR                  XU5      nM     X0l         U$ r
   )r   r   rv   )r   rs   rt   ru   rl   s        r   rv   PassManager.applyi  s3    --AggmwGG r   c                     U R                   $ r
   )r   r   s    r   ru   PassManager.contextp  s    }}r   c                 X    U R                    Vs/ s H  oR                  PM     sn$ s  snf r
   )r%   r   )r   rl   s     r   namesPassManager.namest  s      $,1,,,s   'c                 ,    [        U R                  5      $ r
   )r   r   r   s    r   r%   PassManager.passesx  s    T\\""r   )r   r   r   )r0   r1   r2   r3   r   rv   r4   ru   r   r%   r5   r6   r   r   r   r   ^  sH    (   - - # #r   r   N)abcr   r   paddle.frameworkr   r   r   r8   rD   r   r   r   r   r   r   r   r   r   r   rf   r   r   r   r6   r   r   <module>r      s    $ ;% %, Es EP ! 
X 
8%PA -.% !$  

% ! I$))8+K+K	 +)\1@# #r   