
    x-j(                     P   d dl mZmZ d dlmZ  G d d          Z G d d          Z G d de          Zd	 Z	i fd
Z
 G d de          Zd Zd Zd Zd Zddgie_        i e_        g de_        eed  eej        ej                  ge_        d Zd Z G d d          ZdS )    )ABCabstractmethod)_apply_passc                   D    e Zd Zd Zd ZddZed             Zd Zd Z	dS )	PassContextc                 "    g | _         i | _        d S N)_applied_passes_attrsselfs    c/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/distributed/passes/pass_base.py__init__zPassContext.__init__   s    !    c                     || j         |<   d S r	   r   r   keyvalues      r   set_attrzPassContext.set_attr   s     Cr   Nc                 8    | j                             ||          S r	   r   getr   r   defaults      r   get_attrzPassContext.get_attr       {sG,,,r   c                     | j         S r	   r
   r   s    r   passeszPassContext.passes   s    ##r   c                 :    | j                             |           d S r	   )r
   append)r   pass_objs     r   	_add_passzPassContext._add_pass#   s    ##H-----r   c                     | j         d= d S )Nr   r   s    r   	_pop_passzPassContext._pop_pass&   s     $$$r   r	   )
__name__
__module____qualname__r   r   r   propertyr    r$   r'    r   r   r   r      s          ! ! !- - - - $ $ X$. . .% % % % %r   r   c                   "    e Zd ZdZdZdZdZdZdS )PassTyper               N)r(   r)   r*   UNKNOWNCOMM_OPTCALC_OPTPARALLEL_OPT
FUSION_OPTr,   r   r   r.   r.   *   s'        GHHLJJJr   r.   c                       e Zd Zi Zg Zi Zi Zg ZdZe	d             Z
d Zd ZddZed             Zed             Zd Zd	 Zdd
Zd Zed             ZdS )PassBaseNc                 R    t          |t                    sJ |t          j        | <   d S r	   )
issubclassr9   _REGISTERED_PASSES)	pass_name
pass_classs     r   	_registerzPassBase._register<   s+    *h/////1;#I...r   c                     i | _         d S r	   r   r   s    r   r   zPassBase.__init__A   s    r   c                     || j         |<   | S r	   r   r   s      r   r   zPassBase.set_attrD   s     Cr   c                 8    | j                             ||          S r	   r   r   s      r   r   zPassBase.get_attrH   r   r   c                     d S r	   r,   r   s    r   _check_selfzPassBase._check_selfK       r   c                     d S r	   r,   r   
other_passs     r   _check_conflictzPassBase._check_conflictO   rE   r   c                     t           j        S r	   )r.   r3   r   s    r   _typezPassBase._typeS   s    r   c                 |                                     o%t           fdt          j        D                       S )Nc              3   0   K   | ]} |          V  d S r	   r,   ).0rrH   r   s     r   	<genexpr>zBPassBase._check_conflict_including_common_rules.<locals>.<genexpr>W   s@       8
 8
$%AAj$8
 8
 8
 8
 8
 8
r   )rI   allr9   _COMMON_RULESrG   s   ``r   &_check_conflict_including_common_rulesz/PassBase._check_conflict_including_common_rulesV   sY    ##J// 
C 8
 8
 8
 8
 8
)1)?8
 8
 8
 5
 5
 	
r   c                     |t                      }                                 s|S t           fd|j        D                       s|S t	          |t
                    sJ t	          |t
                    sJ t          |          t          |          k    sJ                      |||           |                                |S )Nc              3   B   K   | ]}                     |          V  d S r	   rS   )rN   pr   s     r   rP   z!PassBase.apply.<locals>.<genexpr>b   sE       
 
 77::
 
 
 
 
 
r   )	r   rD   rQ   r    
isinstancelistlen_apply_implr$   )r   main_programsstartup_programscontexts   `   r   applyzPassBase.apply[   s    ?!mmG!! 	N 
 
 
 
^
 
 
 
 
 	 N-.....*D11111=!!S)9%:%:::::(8'BBB$r   c                 `    t          ||          D ]\  }}|                     |||           d S r	   )zip_apply_single_impl)r   r\   r]   r^   main_programstartup_programs         r   r[   zPassBase._apply_implo   sQ    -0+.
 .
 	L 	L)L/ ##L/7KKKK	L 	Lr   c                     d S r	   r,   r   rc   rd   r^   s       r   rb   zPassBase._apply_single_implu   rE   r   r	   )r(   r)   r*   r<   rR   _BEFORE_WHITE_LISTS_DICT_AFTER_WHITE_LISTS_DICT_PASS_PROCESS_ORDER_LISTnamestaticmethodr?   r   r   r   r   rD   rI   rK   rS   r_   r[   rb   r,   r   r   r9   r9   2   s       M! !D< < \<    - - - -   ^   ^     
 
 

   (L L L   ^  r   r9   c                       fd}|S )Nc                 L    t                               |            | _        | S r	   )r9   r?   rj   )clsrj   s    r   implzregister_pass.<locals>.impl{   s%    4%%%
r   r,   )rj   ro   s   ` r   register_passrp   z   s#        
 Kr   c                     t           j                            |           }|J d|  d             |            }|                                D ]\  }}|                    ||           |S )NPass z is not registered)r9   r<   r   itemsr   )rj   
pass_attrsr>   r#   kvs         r   new_passrw      s    ,0066J!!#C4#C#C#C!!!z||H  ""    1!QOr   c                   \     e Zd Z fdZed             Zed             Zd Zd Zd Z	 xZ
S )CPPPassWrapperc                 H    t                                                       d S r	   )superr   )r   	__class__s    r   r   zCPPPassWrapper.__init__   s    r   c                     t           r	   )NotImplementedErrorr   s    r   cpp_namezCPPPassWrapper.cpp_name   s    !!r   c                     i S r	   r,   r   s    r   cpp_attr_typeszCPPPassWrapper.cpp_attr_types   s    	r   c                     dS NTr,   r   s    r   rD   zCPPPassWrapper._check_self       tr   c                     dS r   r,   rG   s     r   rI   zCPPPassWrapper._check_conflict   r   r   c                 J    t          ||| j        | j        | j                   d S r	   )_apply_cpp_passr   r   r   rf   s       r   rb   z!CPPPassWrapper._apply_single_impl   s4    MK	
 	
 	
 	
 	
r   )r(   r)   r*   r   r+   r   r   rD   rI   rb   __classcell__)r|   s   @r   ry   ry      s             " " X"   X    
 
 
 
 
 
 
r   ry   c                     |                                  t          j        k    r$|                                 t          j        k    rdS dS )NFT)rK   r.   r7   pass_before
pass_afters     r   _fusion_opt_last_ruler      s@    x222("555utr   c                     |                                  t          j        k    rB|                                 t          j        k    r t          |           t          |          k     S dS r   )rK   r.   r7   _get_list_indexr   s     r   _fusion_opt_list_ruler      sV    x222("555{++oj.I.IIItr   c                 |   d }t                      } || |            |||           i |D ]}t                      |<   |                                 D ]%\  }}|D ]}|                             |           &|                                D ]%\  }}|D ]}|                             |           &fd}|S )Nc                    |                                  D ]p\  }}|                    |           t          |t          t          f          sJ |D ]5}t          |t
          t          f          sJ |                    |           6qd S r	   )rs   addrX   rY   tuplebytesstr)white_lists_dictresultru   rv   r=   s        r   collect_pass_namesz<_make_rule_from_white_lists_dict.<locals>.collect_pass_names   s    $**,, 	& 	&DAqJJqMMMa$///// & &	!)eS\:::::

9%%%%&	& 	&r   c                 d                         | j                  }|	|j        vrdS |j        |v S r   )r   rj   )r   r   all_passes_aftercompatible_pass_dicts      r   rulez._make_rule_from_white_lists_dict.<locals>.rule   sA    /33K4DEE$&:::4?&666r   )setrs   r   )	before_white_lists_dictafter_white_lists_dictr   all_pass_namesr=   ru   rv   r   r   s	           @r    _make_rule_from_white_lists_dictr      s,   & & & UUN.???-~>>># 0 0	*-%%Y'''--// 3 31 	3 	3I #''	2222	3 ',,.. 3 31 	3 	3I +//2222	37 7 7 7 7 Kr   c                     | j         t          j        v sJ d| j          d            t          j                            | j                   S )Nrr   z# is not in _PASS_PROCESS_ORDER_LIST)rj   r9   ri   index)in_passs    r   r   r      sK    <8<<<<AAA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                 B    t          |           t          |          k    S r	   )typer   s     r   <lambda>r     s    D$5$5j9I9I$I r   c                    t          |           }d g|z  }d g|z  }g }d}t          |          D ]}d g|z  ||<   d g|z  ||<   t          |          D ]}t          | |         |         t                    sJ | |         |         s|||         |<   g ||         |<   J| |         |         du sJ d||         |<   ||g||         |<   ||         |         |k     rd}||         |         }t          |          D ]>}t          |          D ]*}t          |          D ]}||         |         ||         |         ||         |         z   k    r||         |         ||         |         z   ||         |<   ||         |         r||         |         d         |k    sJ n||         |         r||         |         d         |k    sJ n||         |         r%||         |         ||         |         dd          z   ng ||         |<   ||         |         |k     r||         |         }||         |         },@|r|ndgS )Nr   Tr&   r/   )rZ   rangerX   bool)	edgesnpathsdistsmin_pathmin_distijru   s	            r   _find_longest_pathr     s   E

AFQJEFQJEHH1XX + +6A:a6A:aq 	+ 	+AeAhqk4000008A; 	+a aQx{d**** a !fa8A;))!H$Qx{H	+ 1XX / /q 	/ 	/A1XX / /8A;q!uQx{!:::"'(1+a";E!HQKQx{ !$Qx{2!33333 Qx{ !$Qx{1~22222 9>q!LaeAhqk!""o55" !HQK Qx{X--#(8A;#(8A;!/	/&  (88aS(r   c                    	 d  D               sg S  }g  |D ]7	t          	fd|j        D                       r                     	           8 sg S t                     }g }t	          |          D ]}|                    d g|z             t	          |          D ]>}t	          |          D ],} |                              |                   ||         |<   -?t          |          } fd|D             S )Nc                 :    g | ]}|                                 |S r,   )rD   rN   rW   s     r   
<listcomp>z(_solve_pass_conflict.<locals>.<listcomp>?  s%    333A1==??3a333r   c              3   B   K   | ]}                     |          V  d S r	   rV   )rN   	applied_prW   s     r   rP   z'_solve_pass_conflict.<locals>.<genexpr>F  sE       
 
 44Y??
 
 
 
 
 
r   c                      g | ]
}|         S r,   r,   )rN   idxr    s     r   r   z(_solve_pass_conflict.<locals>.<listcomp>[  s    000CF3K000r   )rQ   r    r"   rZ   r   rS   r   )
r    r^   
old_passesr   adjacent_matrix_r   r   longest_pathrW   s
   `        @r   _solve_pass_conflictr   >  sg   33333F 	JF   
 
 
 
$^
 
 
 
 
 	 MM! 	FAO1XX + +vz****1XX @ @q 	@ 	@A$*%44VAY?? Aq!!	@
 &o66L0000<0000r   c                   ^    e Zd ZddZd Zed             Zed             Zed             ZdS )	PassManagerNTc                     |t                      }|| _        |rt          ||          | _        d S t	          |          | _        d S r	   )r   _contextr   _passesrY   )r   r    r^   auto_solve_conflicts       r   r   zPassManager.__init___  sE    ?!mmG 	(/@@DLLL<<DLLLr   c                 d    | j         }| j        D ]}|                    |||          }|| _         |S r	   )r   r   r_   )r   r\   r]   r^   rW   s        r   r_   zPassManager.applyi  s@    - 	H 	HAggm-=wGGGGr   c                     | j         S r	   )r   r   s    r   r^   zPassManager.contextp  s
    }r   c                 $    d | j         D             S )Nc                     g | ]	}|j         
S r,   )rj   r   s     r   r   z%PassManager.names.<locals>.<listcomp>v  s    ,,,1,,,r   )r    r   s    r   nameszPassManager.namest  s    ,,,,,,r   c                 *    t          | j                  S r	   )r   r   r   s    r   r    zPassManager.passesx  s    T\"""r   r   )	r(   r)   r*   r   r_   r+   r^   r   r    r,   r   r   r   r   ^  s        ( ( ( (     X - - X- # # X# # #r   r   N)abcr   r   paddle.frameworkr   r   r   r.   r9   rp   rw   ry   r   r   r   r   rg   rh   ri   rR   r   r   r   r,   r   r   <module>r      s   $ # # # # # # # ; ; ; ; ; ;% % % % % % % %,       E E E E Es E E EP   !    
 
 
 
 
X 
 
 
8    % % %PA A A -.% !$  

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