
    x-j                     X    g Z d  Zd Zd Zd Z G d d          Z G d de          ZdS )	c                     t          |           fdt                    D             }dgz  }t          |           D ]J\  }}t          |           D ]5\  }}|                    |          rd||         |<   ||xx         dz  cc<   6K||fS )Nc                     g | ]}d gz  	S )     .0_nsizes     o/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/distributed/fleet/base/strategy_compiler.py
<listcomp>z create_graph.<locals>.<listcomp>   s    ...AQC%K...    r      )lenrange	enumerate_can_update)optimizer_listedgeindegreeioptj	opt_innerr	   s          @r
   create_graphr      s    E....u...DsU{HN++ ! !3%n55 	! 	!LAyy)) !Q
q 	!
 >r   c                 F   t          |          }dg|z  }t          |          D ]{}d}||k     r#||         dk    r|dz  }||k     r||         dk    ||k     s
J d            |||<   d||<   t          |          D ]$}| |         |         dk    r||xx         dz  cc<   %||S )Nr   r   z0The combination of meta optimizers contains ringr   r   )r   r   r	   topor   r   ks          r
   	topo_sortr       s    MME4%<D5\\ 
! 
!%iiHQK1,,FA %iiHQK1,,5yyyLyyyQu 	! 	!AAwqzQq 	! Kr   c                 |   t          |           d}ddg}fdt                    D             }t                    D ]V}t                    D ]D}| |         |         dk    r0|g||         |<   | |         |         |k    r| |         |         }||g}EWt                    D ]}t                    D ]}t                    D ]}| |         |         dk    r| |         |         dk    s| |         |         dk    r:| |         |         | |         |         | |         |         z   k     r^| |         |         | |         |         z   | |         |<   ||         |         ||         |         z   ||         |<   | |         |         }||g}ƌ،|dk    rdgS |d         g||d                  |d                  z   S )Nr   c                 B    g | ]}d  t                    D             S )c                     g | ]}g S r   r   )r   r   s     r
   r   z$floyd.<locals>.<listcomp>.<listcomp>7   s    ******r   )r   r   s     r
   r   zfloyd.<locals>.<listcomp>7   s.    AAAq**U5\\***AAAr   r   r   r   )r   max_lenmax_edgemax_pathr   r   r   r	   s          @r
   floydr&   2   s   IIEGBxHAAAAE%LLAAAH5\\ & &u 	& 	&AAwqzA~~"#A71:''"1gajG !1vH	& 5\\ & &u 	& 	&A5\\ & & 71:??71:??d1gajAoo71:Q
T!WQZ 777!%ad1gaj!8DGAJ%-a[^hqk!n%DHQKN"1gajG !1vH&	&" "}}s
QK=8HQK0!===r   c                 L   t          |           dk    rd S t          |           \  }}t          ||           t          |          }g }|D ]}|                    | |                    t          |d d                   D ]#\  }}|                    ||dz                       $|S )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t!.11ND(dHT{{HI . .,----in-- 8 8S##IcAg$67777r   c                       e Zd Zd ZdS )StrategyCompilerBasec                     d S Nr   selfs    r
   __init__zStrategyCompilerBase.__init__l   s    r   N)__name__
__module____qualname__r3   r   r   r
   r.   r.   k   s#            r   r.   c                   B     e Zd ZdZ fdZd Zd Zd Zd Z	 d Z	 xZ
S )StrategyCompilera  
    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                     t                                                       g | _        g | _        d | _        d | _        g | _        g | _        d S r0   )superr3   _meta_optimizers_graph_optimizers_valid_optimizer_list_user_defined_strategy_meta_optimizer_candidates_graph_optimizer_candidates)r2   	__class__s    r
   r3   zStrategyCompiler.__init__{   sO     "!#%)"&*#*,'+-(((r   c                     | j         S r0   r;   r1   s    r
   _get_applied_meta_optimizerz,StrategyCompiler._get_applied_meta_optimizer   s    $$r   c                 $    d | j         D             S )Nc                 6    g | ]}t          |          j        S r   typer4   r   r   s     r
   r   z;StrategyCompiler._get_applied_meta_list.<locals>.<listcomp>   s!    DDDsS		"DDDr   rC   r1   s    r
   _get_applied_meta_listz'StrategyCompiler._get_applied_meta_list   s    DDd.CDDDDr   c                 $    d | j         D             S )Nc                 6    g | ]}t          |          j        S r   rG   rI   s     r
   r   z<StrategyCompiler._get_applied_graph_list.<locals>.<listcomp>   s!    EEEsS		"EEEr   )r<   r1   s    r
   _get_applied_graph_listz(StrategyCompiler._get_applied_graph_list   s    EEd.DEEEEr   c                 :   dd l }|                    |          }g }| j        D ]C}d}| j        D ] }|j        j        |j        j        k    rd} n!|s|                    |           D|D ]}	|	                    |           |D ]}	|	                    |           |S )Nr   FT)copydeepcopyr?   r;   rA   r4   r(   _disable_strategy)
r2   dist_strategycan_not_apply_optimizer_listrO   valid_strategyinvalid_optimizersr*   is_validvalidr   s
             r
   _get_valid_strategyz$StrategyCompiler._get_valid_strategy   s    }558 	5 	5IH.  &/5?3KKK#HE L  5")))444% 	2 	2C!!.1111/ 	2 	2C!!.1111r   c                 z   || _         || _        || _        t          |          dk    rt          |          dk    r|d fS t	          |          }t	          |          }|g n|| _        |g n|| _        |d n|d         }	|d n|d         }
|||	|
fS d}|D ]}|D ]}|j        j        |j	        v rd}|sd }
|	|
fS )Nr   TF)
r>   r?   r@   r   r,   r;   r<   rA   r4   meta_optimizers_black_list)r2   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_optimizerz#StrategyCompiler.generate_optimizer   sJ    '<#*='+?("##q((S1E-F-F!-K-Kd?" 44GHHO45IJJ &-? ! '.4D "
 (/_Q5G  )06Fq6I  &*:*B"L00 "N- / /	#2 / /K!+4&AB B *// " $#,,r   )r4   r5   r6   __doc__r3   rD   rJ   rM   rX   rh   __classcell__)rA   s   @r
   r8   r8   p   s         . . . . .% % %E E EF F F  &
7- 7- 7- 7- 7- 7- 7-r   r8   N)__all__r   r   r&   r,   r.   r8   r   r   r
   <module>rl      s        $%> %> %>P  "       
s- s- s- s- s-+ s- s- s- s- s-r   