
    Αi                     J    / r S  rS rS rS r " S S5      r " S S\5      rg)	c                    [        U 5      n[        U5       Vs/ s H	  nS/U-  PM     nnS/U-  n[        U 5       HD  u  pV[        U 5       H0  u  pxUR                  U5      (       d  M  SX5   U'   XG==   S-  ss'   M2     MF     X44$ s  snf )N       )lenrange	enumerate_can_update)	optimizer_listnsize_edgeindegreeioptj	opt_inners	            o/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/fleet/base/strategy_compiler.pycreate_graphr      s    E!&u.AQC%KD.sU{HN+%n5LAy))
q  6 , > /s   Bc                    [        U5      nS/U-  n[        U5       He  nSnXR:  a  X   S:w  a  US-  nXR:  a
  X   S:w  a  M  XR:  d   S5       eXSU'   SX'   [        U5       H  nX   U   S:w  d  M  X==   S-  ss'   M     Mg     U$ )Nr   r   z0The combination of meta optimizers contains ringr   r   )r   r   r
   topor   r   ks          r   	topo_sortr       s    ME4%<D5\iHK1,FA iHK1,yLLLyQuAwqzQq    K    c                    [        U 5      nSnSS/n[        U5       Vs/ s H  n[        U5       Vs/ s H  n/ PM     snPM!     nn[        U5       HA  n[        U5       H/  nX   U   S:  d  M  U/XV   U'   X   U   U:  d  M%  X   U   nXg/nM1     MC     [        U5       H  n[        U5       H  n[        U5       Ht  nX   U   S:X  a  M  X   U   S:X  d  X   U   S:X  a  M(  X   U   X   U   X   U   -   :  d  MB  X   U   X   U   -   X   U'   XV   U   XX   U   -   XV   U'   X   U   nXg/nMv     M     M     US:X  a  S/$ US   /XSS      US      -   $ s  snf s  snf )Nr   r   r   r   )	r   r
   max_lenmax_edger   max_pathr   r   r   s	            r   floydr   2   s   IEGBxH49%LALqU5\*\\*LHA5\uAwqzA~"#A71:'"gajG !vH   5\uA5\ 71:?71:?dgajAo71:
TWQZ 77!%dgaj!8DGAJ%-[^hk!n%DHKN"gajG !vH "  $ "}s
QK=8QK0!===A +As   E E
E E c                    [        U 5      S:X  a  g [        U 5      u  p[        X5        [        U5      n/ nU H  nUR	                  X   5        M     [        US S 5       H  u  pVUR                  XES-      5        M     U$ )Nr   r   r   )r   r   r   r   appendr   _update_inner_optimizer)r	   r   r   r   	candidateidxr   s          r   maximum_path_len_algor%   Z   s    
>a!.1NDdT{HI,-  in-##IAg$67 . r   c                       \ rS rSrS rSrg)StrategyCompilerBasek   c                     g N selfs    r   __init__StrategyCompilerBase.__init__l   s    r   r+   N)__name__
__module____qualname____firstlineno__r.   __static_attributes__r+   r   r   r'   r'   k   s    r   r'   c                   L   ^  \ rS rSrSrU 4S jrS rS rS rS r	 S r
S	rU =r$ )
StrategyCompilerp   ag  
StrategyCompiler is responsible for meta optimizers combination
Generally, a user can define several distributed strategies that
can generate several meta optimizer. The combination of these
meta optimizers should have the right order to apply the optimizers'
minimize function.
This class is responsible for the executable distributed optimizer
generation.
c                 v   > [         TU ]  5         / U l        / U l        S U l        S U l        / U l        / U l        g r*   )superr.   _meta_optimizers_graph_optimizers_valid_optimizer_list_user_defined_strategy_meta_optimizer_candidates_graph_optimizer_candidates)r-   	__class__s    r   r.   StrategyCompiler.__init__{   s>     "!#%)"&*#*,'+-(r   c                     U R                   $ r*   )r:   r,   s    r   _get_applied_meta_optimizer,StrategyCompiler._get_applied_meta_optimizer   s    $$$r   c                 l    U R                    Vs/ s H  n[        U5      R                  PM     sn$ s  snf r*   )r:   typer0   r-   r   s     r   _get_applied_meta_list'StrategyCompiler._get_applied_meta_list   s,    .2.C.CD.CsS	"".CDDD   1c                 l    U R                    Vs/ s H  n[        U5      R                  PM     sn$ s  snf r*   )r;   rF   r0   rG   s     r   _get_applied_graph_list(StrategyCompiler._get_applied_graph_list   s,    .2.D.DE.DsS	"".DEEErJ   c                    SS K nUR                  U5      n/ nU R                   Hd  nSnU R                   H5  nUR                  R
                  UR                  R
                  :X  d  M3  Sn  O   U(       a  MS  UR                  U5        Mf     U H  n	U	R                  U5        M     U H  n	U	R                  U5        M     U$ )Nr   FT)copydeepcopyr>   r:   r@   r0   r!   _disable_strategy)
r-   dist_strategycan_not_apply_optimizer_listrO   valid_strategyinvalid_optimizersr#   is_validvalidr   s
             r   _get_valid_strategy$StrategyCompiler._get_valid_strategy   s    }588IH..&&//5??3K3KK#H / 8")))4 9 &C!!.1 &/C!!.1 0r   c                    X@l         XPl        X`l        [        U5      S:X  a  [        U5      S:X  a  US 4$ [	        U5      n[	        U5      nUc  / OUU l        Uc  / OUU l        Uc  S OUS   n	Uc  S OUS   n
Ub  Uc  X4$ SnU H4  nU H+  nUR                  R                  UR                  ;   d  M)  SnM-     M6     U(       d  S n
X4$ )Nr   TF)
r=   r>   r?   r   r%   r:   r;   r@   r0   meta_optimizers_black_list)r-   loss
role_maker	optimizeruser_defined_strategymeta_optimizer_listgraph_optimizer_listmeta_optimizersgraph_optimizersreturn_metareturn_graphneed_graph_opt	graph_optprogram_opts                 r   generate_optimizer#StrategyCompiler.generate_optimizer   s    '<#*='+?("#q(S1E-F!-Kd?" 44GHO45IJ &-? ! '.4D "
 (/_Q5G  )06Fq6I  &*:*B"00 "N-	#2K!++44&AAB */ $3 . "#,,r   )r?   r;   r>   r:   r=   r<   )r0   r1   r2   r3   __doc__r.   rC   rH   rL   rX   ri   r4   __classcell__)r@   s   @r   r6   r6   p   s2    .%EF&
7- 7-r   r6   N)__all__r   r   r   r%   r'   r6   r+   r   r   <module>rn      s:    $%>P" 
s-+ s-r   