
    Αi2                       % S SK Jr  S SKJr  S SKJr  S SKrS SKrS SK	J
r
  SSKJrJr  SSKJr  SS	KJrJrJr  \(       a  S S
KJr  SSKJr  0 rS\S'   \" SS9 " S S5      5       rS r    SS jr    SS jrS rS r " S S5      r g)    )annotations)	dataclass)TYPE_CHECKINGN)logger   )LocalTensorIndexLocalTensorMetadata)ShardedWeight)%compute_local_shape_and_global_offsetget_target_tensorslice_tensor)Group)AbstractCommunicatorzdict[str, tuple[list, list]]PATH_TO_CHECKPOINT_FILEST)frozenc                      \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   S\S'   S\S'   S\S'   SrS\S'   Srg)ReadItem+   a  
A communication operation for a Tensor between ranks.

Attributes:
    tensor_name (str): Name of the tensor.
    src_global_offset (tuple[int]): Global offset in the source tensor.
    dst_global_offset (tuple[int] | None): Global offset in the destination tensor.
    dst_rank (list[int]): Destination ranks.
    src_rank (int): Source rank.
    dst_local_offset (tuple[int]): Local offset in the destination tensor partition.
    src_local_offset (tuple[int]): Local offset in the source tensor partition.
    slice_shape (tuple[int]): Shape of the slice to transfer.
    file_name (str): The name of the file from which the source tensor is read on the source rank.
    dtype (str): Data type of the tensor.
strtensor_namez
tuple[int]src_global_offsetztuple[int] | Nonedst_global_offsetdst_rankintsrc_rankdst_local_offsetsrc_local_offsetslice_shape	file_namedtypeNzGroup | None
comm_group )__name__
__module____qualname____firstlineno____doc____annotations__r!   __static_attributes__r"       p/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/flex_checkpoint/dcp/resharder.pyr   r   +   sL      !!((M    NJ#J#r*   r   c                   0 n[         R                  R                  5       nU  H3  nUR                  R	                  5        H  u  pxX;   d  M  UU4XG'   M     M5     / n	U(       a!  [         R                  R                  XU5        OU	R                  U5        0 n
U	 H+  nUR	                  5        H  u  nu  pXz;  d   eX4X'   M     M-     U
$ N)paddledistributedget_rankstorage_metadataitemsall_gather_objectappend)metadata_listlocal_load_filesprocess_groupuse_dist	load_infocur_rankmetadatalocal_tensor_indexr   load_info_list
load_infosranks               r+   get_load_infosr@   J   s    I!!**,H!-5-F-F-L-L-N),1	- .O " N,,}	
 	i(J#	5>__5F1 1%777.2->J* 6G $ r*   c           	        / n/ n/ n[        U R                  U R                  UR                  UR                  5       H  u  pVpx[        Xh5      n	[	        Xe-   X-   5      n
X:X  a%  UR                  S5        UR                  X-
  5        O>X:X  a%  UR                  X-
  5        UR                  S5        O[        SU	 SU SU 35      eUR                  X-
  5        US   S:  a  M   SUS    SU
 SU	 35       e   X#U4$ )	Nr   zInvalid begin_offset:z, cur_offset:z, storage_offset:zInvalid length:z, end_offset:z, begin_offset:)ziplocal_shapeglobal_offsetmaxminr4   
ValueError)cur_chunk_metadatastorage_local_tensor_metadatacur_offsetsstorage_offsetslengthscur_len
cur_offsetstorage_lenstorage_offsetbegin_offset
end_offsets              r+   compute_overlaprT   c   s,    KOG<?&&((%11%33	=8[ :6-~/KL
%q!""<#@A+|89""1%'~]:,N_`n_op  	z01r{a 	
gbk]-
|?S_R`a	
'=, 00r*   c                    [        U R                  U R                  UR                  UR                  5       H  u  p#pEX5U-   :  d
  X2-   U::  d  M    g   g)NTF)rC   rD   rE   )rI   rJ   rN   rO   rP   rQ   s         r+   not_overlaprV      s]     =@&&((%11%33	=8[ K78$7= r*   c                   0 nU  HH  nUR                   R                  5       nU H%  u  pEUR                  US5      [        U5      -   X'   M'     MJ     UR                  5        VVs0 s H  u  pFUS /U-  _M     nnn[        R                  US5      nU  HF  nUR                   R                  5       nU H#  u  pEX   n	[        U5      nXWU   XU-   & X-   X'   M%     MH     U$ s  snnf )Nr   )state_dict_metadatar2   getlendictfromkeys)
r5   countsmdr2   klstnresultoffsetos
             r+   !build_storage_state_dict_metadatare      s    F&&,,.FA

1a(3s83FI  
 )/7a$!mF7]]61%F&&,,.FA	ACA#&1Iaa% FI	   M 8s   $Cc                   0 n[        U 5      n/ nS nUR                  5        GH  u  pS n
[        U	[        R                  5      (       a  U	R                  5       (       ag  [        U	R                  5      S:  a+  [        U	R                  U	R                  U	R                  5      OSu  nn[        U	R                  5      nUb  Uc  M  OT[        U	R                  5      n[        U	R                  5      S:  a"  [        S/[        U	R                  5      -  5      OSnUn[        U	R                  5      R                  S5      S   nUn
O[        U	[        5      (       a  [        U	R                   5      S:  a  U	R"                  U	R$                  4OSu  p[        U	R&                  R                  5      R                  S5      S   n[        U[        5      (       a  US   OUn
O[)        S[+        U	5       35      e[-        XX5      nUU
    H  n[/        X5      (       a  M  [1        X5      u  nnn[3        U
[        UR$                  5      [        UR"                  5      S9nUU   u  nnUR5                  [7        U
[        UR$                  5      U[        R8                  R;                  5       4U[        U5      [        U5      [        U5      UUR                  S9
5        M     GM     / n/ nU(       a!  [        R8                  R=                  UXb5        OUR5                  U5        U H  nU H  nUR5                  U5        M     M     U$ )	Nr   )r"   r"   r"   .r   z&Only support paddle.Tensor., val type:)rD   )
r   r   r   r   r   r   r   r   r   r    )re   r2   
isinstancer.   Tensoris_distrZ   shaper   process_mesh
placementstupler   r    splitr
   global_shaperD   rE   local_tensorrH   typer	   rV   rT   r   r4   r   r/   r0   r3   )r5   
state_dictr7   r8   r>   storage_state_dict_metadata
read_itemsrp   
tensor_keyvalr   rD   rE   r    rI   rJ   rK   rL   rM   storage_local_tensor_indexr   r   global_read_itemstmpr2   items                             r+   get_read_itemsr|      s    #%"C# JL%++-
c6==)){{}} 399~) :		(( "!  %SYY/&-*? +@ $CII.36syy>A3EE1#CII./2   +		N((-a0E$K]++ s''(1, #"3"34 'K
 ((../55c:1=E!+J!>!>
1J  8cD  1
 .I.
) -MM4C"51K' *:3AAB!"?"K"KL*&
 #--G"HHi +&+5CC' '4$0099;=%%*;%7%*?%; %g'7==.
_ .\ 
C,,S*L

:D$$T*   r*   c                  <    \ rS rSr   S S	S jjrS rS rS rSrg)
StateDictResharderi  Nc                X    Xl         X l        X0l        X@l        XPl        X`l        Xpl        g r-   )target_state_dictsource_state_dictr5   communicatorr7   offloadr8   )selfr   r   r5   r   r7   r   r8   s           r+   __init__StateDictResharder.__init__  s,     "3!2*(* r*   c                   U R                   (       a  U R                  R                  5        H  u  pUR                  5        VVs0 s HO  u  p4U[        U[        R
                  5      (       a(  [        R                  " U[        R                  " 5       S9OU_MQ     snnU R                  U'   M     [        U R                  R                  5       5      n[        U R                  UU R                  U R                  5      n[        U R                  U R                   U R                  U R                  U5      nU R                   R                  5        VVs0 s H)  u  p4U[        U["        5      (       a  UR$                  OU_M+     nnn['        S U 5       5      n	['        S U 5       5      n
U	(       a  U
(       a   S5       eX4$ s  snnf s  snnf )N)placec              3  B   #    U  H  n[        U[        5      v   M     g 7fr-   rh   rn   .0r_   s     r+   	<genexpr>0StateDictResharder.preprocess.<locals>.<genexpr>=  s      
*EQJq%  *Es   c              3  L   #    U  H  n[        U[        5      (       + v   M     g 7fr-   r   r   s     r+   r   r   @  s!       
.I
1e$$$.Is   "$z=target_state_dict contains a mix of tuple and non-tuple keys.)r   r   r2   rh   npndarrayr.   	to_tensorCPUPlacelistkeysr@   r5   r7   r8   r|   r   r
   rq   any)r   r   rs   r_   vr6   r>   ru   processed_target_state_dicthas_tuple_keyhas_non_tuple_keys              r+   
preprocessStateDictResharder.preprocess!  s   <<)-)?)?)E)E)G%	
 !+ 0 0 2	5 !3 !!RZZ00 ''1BC !3	5&&y1 *H   6 6 ; ; =>#MM	

 $""MM

 ..446'
6 A}!=!=q~~1D6 	$ '
  
*E
 
    
.I 
 
 "&7 	
K	
8 +66E5*'
s   AG0Gc                   U H  nU R                   UR                     UR                     n[        XCR                  UR
                  5      R                  5       n[        X#5      n[        XcR                  UR
                  5      nUR                  UR                  :w  a  UR                  UR                  5      n[        R                  " XW5        M     g r-   )r   r   r   r   r   r   
contiguousr   r   r   tor.   assign)r   ru   r   	read_item
src_tensorsrc_chunk_tensor
dst_tensordst_chunk_tensors           r+   local_reshard StateDictResharder.local_reshardH  s    #I//	0C0CD%%J  ,66	8M8M jl  ++J  ,66	8M8M   %%)9)?)??#3#6#67G7M7M#N MM*= $r*   c                   [         R                  R                  5       nU R                  5       u  p#[        R
                  " S[        U5       S35        U(       d  U$ UU R                  S.nU R                  US.nU R                  (       a   U R                  R                  X5U5        U ?U$ U R                  X25        U ?U$ )Nz/ReadItem generation completed, with a total of rg   )r?   r7   )r   r   )r.   r/   r0   r   r   inforZ   r7   r   r8   r   communicater   )r   r:   r   ru   contextstates         r+   reshardStateDictResharder.reshardZ  s    %%..026//2C/#=c*o=NaP	
 .. !//
 "&!7!7!<

 ==))*WE "** zG"**r*   )r   r5   r   r7   r   r   r8   )NFT)r   r   )	r#   r$   r%   r&   r   r   r   r   r)   r"   r*   r+   r~   r~     s,     !
 +!$%7N>$+r*   r~   )rI   r	   rJ   r	   )!
__future__r   dataclassesr   typingr   numpyr   r.   'paddle.distributed.fleet.utils.log_utilr   r;   r   r	   sharded_weightr
   utilsr   r   r   paddle.distributed.collectiver   reshard_commr   r   r(   r   r@   rT   rV   re   r|   r~   r"   r*   r+   <module>r      s    # !     : ;  329; 6 ; $$ $ $<21+1#61@+#6$*aHf+ f+r*   