
    Αi,$                     L    S SK Jr   " S S5      r " S S5      r " S S5      rg)	    )Variablec                       \ rS rSrSrS rSrg)	VarStruct   z1
record part properties of a Variable in python.
c                 L    Xl         X l        X0l        X@l        XPl        X`l        g N)nameshapedtypetype	lod_levelpersistable)selfr	   r
   r   r   r   r   s          v/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/transpiler/details/vars_distributed.py__init__VarStruct.__init__   s!    	

	"&    )r   r   r	   r   r
   r   N)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__ r   r   r   r      s    'r   r   c                   R    \ rS rSrSr     S	S jr\S 5       r\S 5       rS r	Sr
g)
VarDistributed   z
a class to record the var distributed on parameter servers.
the class will record the relationship between origin var and slice var.
the slice var's properties, such as type/shape/offset/endpoint.
Nc                    [        U[        5      (       a  U R                  U5      U l        OXl        [        U[        5      (       a  U R                  U5      U l        OX l        U R                  U R                  U R                  5      (       a  SU l        SU l        SU l        OSU l        SU l        SU l        Ub  X0l        Ub  X@l        Ub  XPl        X`l	        Xpl
        g)a  
Args:
    origin_var(Variable|VarStruct): origin var properties
    slice_var(Variable|VarStruct): slice var properties
    is_slice(bool|None): slice or not, slice_var=True/False and its block size > 8192 are the judgement standard.
    block_id(int|None): the number about the slice var.
    offset(int|None): if the slice var is sliced, offset is the numel before the var.
    vtype(str|None): a tag, such as Optimizer/Param/RemotePrefetch.
    endpoint(str|None): which parameter the slice var on, such as "127.0.0.1:1001"
Fr   TN)
isinstancer   "_VarDistributed__create_var_structoriginsliceequalis_sliceblock_idoffsetvtypeendpointr   
origin_var	slice_varr$   r%   r&   r'   r(   s           r   r   VarDistributed.__init__&   s    * j(++22:>DK$Ki**11)<DJ"J::dkk4::..!DMDMDK DMDMDK$M$M K
 r   c                     [        U R                  U R                  U R                  U R                  U R
                  U R                  5      $ r   )r   r	   r
   r   r   r   r   )vars    r   __create_var_struct"VarDistributed.__create_var_structX   s9    HHIIIIHHMMOO
 	
r   c                    [        U [        5      (       a  [        U[        5      (       d   eU R                  UR                  :H  =(       a    U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R
                  UR
                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ zS
the two var is equal or not.
Returns:
    bool: equal will return True else False
)r   r   r	   r   r
   r   r   r   var1var2s     r   r#   VarDistributed.equalc   s     $	**z$	/J/JJJ II" 5		TYY&5

djj(5 

djj(5 $..0	5
   D$4$44	
r   c                    U R                   R                   SU R                   R                   SU R                   R                   SU R                   R                   S3nU R
                  R                   SU R
                  R                   SU R
                  R                   SU R
                  R                   SU R                   SU R                   SU R                   S3nSU R                   S	U S
U SU R                   S3	$ )Nz : base.z.shapez.astype()z).slice(z).block(z	).offset(zvar owned: z, origin var: ( z ), slice var: ( z ), endpoint:  )r!   r	   r   r
   r   r"   r$   r%   r&   r'   r(   )r   origin_var_strslice_var_strs      r   __str__VarDistributed.__str__u   s    KK,,-Xdkk6F6F5GvdkkN_N_M``himititizizh{{|} zzx

'8tzz?O?O>PPXY]YcYcYiYiXj kmm_HT]]O9T[[MQRT 	
 TZZL(88HHYZgYhhvw{  xE  xE  wF  FG  H  	Hr   )r%   r(   r$   r&   r!   r"   r'   NNNNN)r   r   r   r   r   r   staticmethodr    r#   r<   r   r   r   r   r   r      sL     0!d 
 
 
 
"Hr   r   c                   h    \ rS rSrSrS r     SS jrS r\S 5       r	S r
SS	 jrSS
 jrS rSrg)VarsDistributed   aG  
a gather about VarDistributed with many methods to find distributed vars.
through the class, we can get overview about the distributed parameters on parameter servers.
this class may centralized and convenient for developer to manage and get variable's distribute.
other module can also use this to find variables such io.py.
c                     / U l         g r   distributed_vars)r   s    r   r   VarsDistributed.__init__   s
     "r   Nc                 X    U R                   R                  [        UUUUUUU5      5        g)a@  
add distributed var in this.

Args:
    origin_var(Variable|VarStruct): origin var properties
    slice_var(Variable|VarStruct): slice var properties
    is_slice(bool|None): slice or not, slice_var=True/False and its block size > 8192 are the judgement standard.
    block_id(int|None): the number about the slice var.
    offset(int|None): if the slice var is sliced, offset is the numel before the var.
    vtype(str|None): a tag, such as Optimizer/Param/RemotePrefetch.
    endpoint(str|None): which parameter the slice var on, such as "127.0.0.1:1001"
Returns:
    None
N)rE   appendr   r)   s           r   add_distributed_var#VarsDistributed.add_distributed_var   s5    0 	$$
	
r   c                 f    U R                    H!  nUR                  R                  U:X  d  M  Us  $    g)z
get distributed var by conditions.

Args:
    var_name(str): slice var name, such as "w.trainer0.block1"
Returns:
    VarDistributed: distributed var.
N)rE   r"   r	   )r   var_namedist_vars      r   get_distributed_var_by_slice,VarsDistributed.get_distributed_var_by_slice   s0     --H~~""h. . r   c                 t   U R                   UR                   :H  =(       a    U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R
                  UR
                  :H  $ r2   )r	   r   r
   r   r   r   r3   s     r   r#   VarsDistributed.equal   s     II" 5		TYY&5

djj(5 

djj(5 $..0	5
   D$4$44	
r   c                     U R                    H3  nUR                  R                  U:X  d  M  UR                  U:X  d  M1  Us  $    g)z
get distributed var by conditions.

Args:
    origin_var_name(str):
    endpoint(str): the parameter endpoint, such as "127.0.0.1:1001"
Returns:
    VarDistributed: distributed var.
N)rE   r!   r	   r(   )r   origin_var_namer(   rM   s       r   $get_distributed_var_by_origin_and_ep4VarsDistributed.get_distributed_var_by_origin_and_ep   s>     --H$$7%%1 . r   c                 B   / nU R                    H&  nUR                  U;   d  M  UR                  U5        M(     U(       d  U$ 0 nU HU  nUR                  R                  nXeR                  5       ;   a  UR                  U5      nO/ nUR                  U5        XuU'   MW     U$ )a  
get distributed vars by conditions.

Args:
    vtype(str|None): distributed var's vtype, such as "Optimizer", "RemotePrefetch"
    groupby(bool|False): group by origin var or not.

Returns:
    list: distributed var list.
    dict: distributed var map when groupby=True
)rE   r'   rH   r!   r	   keysget)r   vtypesgroupby
vtype_varsr.   
params_maprS   
optimizerss           r   get_distributed_vars_by_vtypes.VarsDistributed.get_distributed_vars_by_vtypes   s     
((CyyF"!!#& ) 
C!jjooO//"33'^^O<

c"*4'  r   c                     / nU R                    H&  nUR                  U:X  d  M  UR                  U5        M(     U(       d  U$ / nU H&  nUR                  U:X  d  M  UR                  U5        M(     U$ )z
get distributed vars by conditions.

Args:
    endpoint(str): the parameter server endpoint, such as "127.0.0.1:2001"
    vtype(str|None): distributed var's vtype, such as "Optimizer", "RemotePrefetch"

Returns:
    list: distributed var list.
)rE   r(   rH   r'   )r   r(   r'   endpoint_varsr.   r[   s         r   get_distributed_vars_by_ep*VarsDistributed.get_distributed_vars_by_ep   so     ((C||x'$$S) )   
 CyyE!!!#& ! r   c                     / nU R                    H  nUR                  [        U5      5        M     SR                  U5      $ )zi
get the overview string about all params on all parameter servers.

Returns:
    Str: overview string.


)rE   rH   strjoin)r   vars_strr.   s      r   overviewVarsDistributed.overview  s8     ((COOCH% )yy""r   rD   r>   )Fr   )r   r   r   r   r   r   rI   rN   r?   r#   rT   r^   rb   ri   r   r   r   r   rA   rA      sP    # "
H 
 
$>0#r   rA   N)paddle.staticr   r   r   rA   r   r   r   <module>rl      s/    #' '^H ^HBa# a#r   