
    9if              	          % S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
JrJr  S SKrS SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJrJrJrJrJrJrJ r J!r!  S SK"J#r#J$r$J%r%J&r&J'r'J(r(J)r)  S SK*J+r+J,r,J-r-J.r.J/r/J0r0J1r1  S SK2J3r3  S SK4J5r5  SSK6J7r7  \Rp                  " \95      r:\Rv                  \<S'   / SQr= " S S\'5      r> " S S\$5      r? " S S\?5      r@ S-S\A\B\	4   S\S\CS\#4S jjrDS\E\#   S\E\#   4S jrFS\A\B\	4   S \CS\&4S! jrG S-S\E\&   S"\CS\H\E\&   \4   4S# jjrIS\S\4S$ jrJS%\S&\S\C4S' jrKS(\R                  S)\S\C4S* jrMS+\E\&   S\S\C4S, jrNg).    N)ChainMap)reduce)AnycastOptionalUnion)narrow_tensor_by_index)dedup_save_plans)FLATTEN_MAPPINGflatten_state_dict)_flatten_sharded_tensors)set_element)BytesStorageMetadataChunkStorageMetadataMetadataMetadataIndexSTATE_DICT_TYPESTORAGE_TYPESStorageMetaTensorStorageMetadata)LoadPlanLoadPlannerReadItemSavePlanSavePlanner	WriteItemWriteItemType)_compare_save_plans_contains_usable_plan"_create_default_metadata_only_plan_create_read_items_create_write_items_init_state_dict_merge_delta_local_plans)find_state_dict_object)DTensor   )_versionlogger)DefaultSavePlannerDefaultLoadPlannercreate_default_local_load_plancreate_default_global_load_plancreate_default_local_save_plancreate_default_global_save_planc                      \ rS rSr% \\S'        SS\S\S\\   S\S\S	S4S
 jjr  S S\	S\\
   S\S	S4S jjrS	\4S jrS\\   S	\\   4S jrS\\   S	\\\   \4   4S jrS\\   S	\\\   \\   \4   4S jrS\\   S	\\\   \4   4S jrS\S	\4S jrS\S	\4S jrS\S	\\R4                  \R8                  4   4S jrS\S	\4S jr S\S\4S jr!Sr"g)!r*   E   mappingsNr   flatten_sharded_tensorsdedup_replicated_tensorsdedup_save_to_lowest_rankenable_plan_cachingreturnc                     Xl         X l        0 U l        X@l        Ub  [        R                  S5        U R                  R                  U l        XPl	        g )NzDefaultSavePlanner's `dedup_replicated_tensors` argument is being deprecated, and no longer has any effect. Please remove this argument from your call.)
r   r3   r2   r5   r)   warning	__class____name___cached_plans_key_enable_plan_caching)selfr   r3   r4   r5   r6   s         l/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/distributed/checkpoint/default_planner.py__init__DefaultSavePlanner.__init__H   sN     #5'>$)B&#/NN"
 '+nn&=&=$7!    
state_dictstorage_metais_coordinatorc                     U R                   (       a  [        U5      u  ol        U R                  (       a  [        U5      nXl        X0l        g N)r   r2   r3   r   rC   rE   )r>   rC   rD   rE   s       r?   set_up_planner!DefaultSavePlanner.set_up_planner]   s:     ""(::(F%J''1*=J$,rB   c                    [        U R                  U R                  5      nU R                  (       a  [        R
                  " XR                  S9nXl        U R                  (       a  U R                  [        R                  ;   aK  [        U[        R                  U R                     5      (       a  [        R                  S5        [        / SS9$ U[        R                  U R                  '   U R                  $ )Nplanner_datazINo change in the local plan. Skipping sending the plan to the coordinatorFusable)r.   rC   rE   r   dataclassesreplacer2   planr=   r<   r   _cached_save_planr   r)   infor   )r>   rQ   s     r?   create_local_plan$DefaultSavePlanner.create_local_planj   s    -doot?R?RS""&&t--HD	$$ &&+*G*GG'+778N8NO  _  511HL--d.D.DEyyrB   	all_plansc                 ,    [        XR                  5      $ rG   )r
   r5   )r>   rV   s     r?   _dedup_save_plans$DefaultSavePlanner._dedup_save_plans   s    	+I+IJJrB   c                 &   U R                  U5      n[        U5      u  p4U R                  (       a@  U Vs/ s H  oUR                  PM     nn[	        [        U6 5      n[        R                  " XGS9n[        X45      (       d  [        S5      eX44$ s  snf )NrK   zFailed to validate global plan)
rX   r/   r   rL   dictr   rO   rP   _validate_global_plan
ValueError)r>   rV   deduped_plansglobal_planmetadatapplanner_data_dictmerged_mappingss           r?   _create_global_plan&DefaultSavePlanner._create_global_plan   s     ..y9 ? N""
 :E EA E"8->#?@O"**8RH$[;;=>>$$ !Fs   Bc                    / nU R                   [        R                  ;  an  U[        R                  U R                   '   U R                  U5      u  p4U[        R                  U R                   '   U[        R
                  U R                   '   X3U4$ [        U5      (       dS  [        / SS9/[        U5      -  n[        R                  U R                      n[        R
                  U R                      nGO[        [        R                  U R                      U5      nU[        R                  U R                   '   U R                  U5      u  p4U R                   U R                  ;   al  [        [        R                  U R                      U5       HA  u  pg[        Xg5      (       a  UR                  [        / SS95        M0  UR                  U5        MC     U[        R                  U R                   '   U[        R
                  U R                   '   X#U4$ )z_
Create global plan with caching.
Returns a tuple of global_plan_delta, global_plan, metadata.
FrM   )r<   r   _cached_all_plansrd   _cached_global_plan_cached_metadatar   r   lenr$   zipr   append)r>   rV   global_plan_deltar_   r`   merged_planscached_plannew_plans           r?    _create_global_plan_with_caching3DefaultSavePlanner._create_global_plan_with_caching   s    -/!!)F)FF
 ENK))$*@*@A$($<$<Y$G!KFQK++D,B,BCCKK(()?)?@X55 %Y// "*"U!; <s9~ M%99$:P:PQK"33D4J4JKH 4--d.D.DEyL EQK))$*@*@A$($<$<\$J!K%%)A)AA-033D4J4JK[.)K +;AA)00"U1KL)00:. GRK++D,B,BCCKK(()?)?@ x77rB   c                     / nU R                   (       a  U R                  U5      u  nnnOU R                  U5      u  p4UnX0l        X@l        X R                  4$ rG   )r=   rq   rd   r_   r`   )r>   rV   rm   r_   r`   s        r?   create_global_plan%DefaultSavePlanner.create_global_plan   sd     -/$$ 55i@	! %)$<$<Y$G!K +&  --//rB   rp   c                     UnUR                   (       d  [        R                  U R                     nU$ UnU[        R                  U R                  '   U$ rG   )rN   r   _cached_final_save_planr<   r>   rp   finished_plans      r?   _finish_plan_with_caching,DefaultSavePlanner._finish_plan_with_caching   sO    "*'??@V@VWM  %MJRK//0F0FGrB   c                 n    UnU R                   (       a  U R                  U5      nX l        U R                  $ rG   )r=   rz   rQ   rx   s      r?   finish_planDefaultSavePlanner.finish_plan   s/    "*$$ ::8DM!	yyrB   
write_itemc                 Z    U R                  UR                  5      nU R                  X5      $ rG   )lookup_objectindextransform_object)r>   r   objects      r?   resolve_dataDefaultSavePlanner.resolve_data   s)    ##J$4$45$$Z88rB   r   c                 .    [        U R                  U5      $ zSExtension from the planner interface to make it easy to extend the default planner.r%   rC   r>   r   s     r?   r    DefaultSavePlanner.lookup_object      %doou==rB   r   c                     UR                   [        R                  :X  a-  [        R                  " 5       n[
        R                  " X#5        UnU$ r   )typer   BYTE_IOioBytesIOtorchsave)r>   r   r   bytess       r?   r   #DefaultSavePlanner.transform_object  s5    ??m333JJLEJJv%FrB   )r<   r=   r5   r3   r   r_   rE   r2   r`   rQ   rC   )TTNFFNF)#r;   
__module____qualname____firstlineno__r   __annotations__boolr   r@   r   r   rH   r   rT   listrX   tupler   rd   rq   rt   rz   r}   r   r   r   Tensorr   r   r   r   r   r   r   __static_attributes__ rB   r?   r*   r*   E   s    $((,37*/$)8 8 "&8 #+4.	8
 $(8 "8 
80 /3$	-#- {+- 	-
 
-8 .K4> Kd8n K%h%	tH~x'	(%*98h98	tH~tH~x7	898v0h0	tH~x'	(0,( x H  9y 9U5<<;S5T 9>= >S >9 c rB   r*   c            	       f   \ rS rSr% Sr\\S'   \\S'      SS\S\S\SS	4S
 jjr	  SS\S\
\   S\SS	4S jjrS\4S jrS\\   S\\   4S jrS\S\4S jrS\S\R(                  SS	4S jrS\4S jrS\S\R0                  SS	4S jrS\S\R0                  4S jrS\S\R0                  4S jrSrg	) r+   i  aS  
DefaultLoadPlanner that adds multiple features on top of LoadPlanner.

In particular it adds the following:

flatten_state_dict: Handle state_dict with nested dicts
flatten_sharded_tensors: For FSDP in 2D parallel mode
allow_partial_load: If False, will raise a runtime error if a key is present in state_dict, but not in the checkpoint.
original_state_dictr2   r   r3   allow_partial_loadr7   Nc                 D    Xl         X l        0 U l        0 U l        X0l        g rG   )r   r3   r   r2   r   )r>   r   r3   r   s       r?   r@   DefaultLoadPlanner.__init__  s%     #5'>$#% "4rB   rC   r`   rE   c                     [        U5        Xl        U R                  (       a  [        U5      nU R                  (       a  [	        U5      u  ol        Xl        X l        X0l        g rG   )	r#   r   r3   r   r   r2   rC   r`   rE   )r>   rC   r`   rE   s       r?   rH   !DefaultLoadPlanner.set_up_planner(  sM     	$#- ''1*=J""(::(F%J$ ,rB   c                    U R                   c   eU R                  (       a  [        U R                  R	                  5       5      n[        U R                   R
                  R	                  5       5      nX!-
  nU(       a]  S[        l        [        U R                  5      u  pE[        UR	                  5       5      nXc-  (       a  XEsU l        U l	        S [        l        [        U R                  U R                   U R                  (       + 5      $ )N2_3)r`   r   setrC   keysstate_dict_metadatar(   _derived_versionr   r2   r,   r   )r>   current_keys	load_keysmissing_keysold_state_dictold_mappingsold_keyss          r?   rT   $DefaultLoadPlanner.create_local_plan;  s    }}(((""$ t3356LDMM==BBDEI$3L,1)/A,,0, ~2245*5C2DOT] -1)-OOT]]0G0G,G
 	
rB   r_   c                     [        U5      $ rG   )r-   )r>   r_   s     r?   rt   %DefaultLoadPlanner.create_global_planb  s    .{;;rB   rp   c                     U$ rG   r   )r>   rp   s     r?   r}   DefaultLoadPlanner.finish_plane  s    rB   	read_itemvaluec           	      *   U R                   (       aL  [        U R                  U R                  UR                  R
                     [        R                  " USS95        g [        R                  " USS9U R                  UR                  R
                  '   g )NF)weights_only)	r   r   r   r2   
dest_indexfqnr   loadrC   )r>   r   r   s      r?   
load_bytesDefaultLoadPlanner.load_bytesh  sl    ""((i22667

5u5 9>

E9DOOI00445rB   c                 Z    U R                  UR                  5      nU R                  X5      $ rG   )lookup_tensorr   transform_tensorr>   r   tensors      r?   resolve_tensor!DefaultLoadPlanner.resolve_tensort  s)    ##I$8$89$$Y77rB   r   c                     g rG   r   r   s      r?   commit_tensor DefaultLoadPlanner.commit_tensorx  s    rB   r   c                 .    [        U R                  U5      $ r   r   r   s     r?   r    DefaultLoadPlanner.lookup_tensor{  r   rB   c                 B    [        X!R                  UR                  5      $ r   )r	   dest_offsetslengthsr   s      r?   r   #DefaultLoadPlanner.transform_tensor  s    %f.D.DiFWFWXXrB   )r   r3   r   rE   r2   r`   r   rC   )TTFr   )r;   r   r   r   __doc__r   r   r   r   r@   r   r   rH   r   rT   r   rt   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   rB   r?   r+   r+     s7    )( $((,#(	
5 
5 "&
5 !	
5
 

5 (,$	-#- 8$- 	-
 
-&%
8 %
N<d8n <h <H  
H 
RZZ 
D 
8 8x  $ >= >U\\ >Y( YELL YrB   r+   c            	       t   ^  \ rS rSrSrSU 4S jjrS\S\S\4S jr	  SS	\
S\\   S
\SS4U 4S jjjrSrU =r$ )_EmptyStateDictLoadPlanneri  a  
Extension of DefaultLoadPlanner, which rebuilds state_dict from the saved metadata.
Useful for loading in state_dict without first initializing a model, such as
when converting a DCP checkpoint into a Torch save file.

. N.B. `state_dict` must be an empty dictionary when used with this LoadPlanner

.. warning::
    Because the entire state dict is initialized, It's recommended to only utilize
    this LoadPlanner on a single rank or process to avoid OOM.

Nc                 2   > Xl         [        TU ]  " U0 UD6  g rG   )r   superr@   )r>   r   argskwargsr:   s       r?   r@   #_EmptyStateDictLoadPlanner.__init__  s    	$)&)rB   keyr`   r7   c           	      V  ^  T R                   c  gUT R                   ;   a  g/ nUR                  R                  U5      nU HK  nU(       a0  UR                  SR	                  US   [        U5      /5      5        M:  UR                  U5        MM     [        U 4S jU 5       5      (       a  gg)NT.c              3   @   >#    U  H  oTR                   ;   v   M     g 7frG   r   ).0unflattened_keyr>   s     r?   	<genexpr>A_EmptyStateDictLoadPlanner._should_include_key.<locals>.<genexpr>  s     TCS$))+CSs   F)r   rL   getrl   joinstrany)r>   r   r`   unflattened_keysrL   r   s   `     r?   _should_include_key._EmptyStateDictLoadPlanner._should_include_key  s    99$))&(,,005+O ''HH.r2C4HIJ
 !''8  , TCSTTTrB   rC   rE   c                   > U(       a   eUc   eUR                   R                  5        H  u  pEU R                  XB5      (       d  M  [        U[        5      (       a3  [
        R                  " UR                  UR                  R                  S9nUR                  b*  XBR                  ;   a  [        XR                  U   U5        M  XQU'   M     [        TU ]5  XU5        g )N)dtype)r   itemsr   
isinstancer   r   emptysize
propertiesr   rL   r   r   rH   )r>   rC   r`   rE   kvr:   s         r?   rH   )_EmptyStateDictLoadPlanner.set_up_planner  s     ~### 00668DA++A88!233KKall.@.@A$$0Q:O:O5OJ(=(=a(@!D !1 9 	z^DrB   r   rG   r   )r;   r   r   r   r   r@   r   r   r   r   r   r   rH   r   __classcell__)r:   s   @r?   r   r     sj    *s h 4 4 (,$	E#E 8$E 	E
 
E ErB   r   rC   r`   strictr7   c           	      :   / n U R                  5        H  u  pEXAR                  ;  a  U(       a  [        SU S35      eM,  UR                  U   n[        U[        5      (       aX  [        USS 5      bJ  UR                  UR                  5       :w  a,  [        SUR                   SUR                  5        SU 35      e[        U[        5      (       a.  UR                  R                  5       b  U[        XFU5      -  nM  M  U[        XFU5      -  nM     [        U5      $ )Nz&Missing key in checkpoint state_dict: r   r   zSize mismatch between saved z and current: z for )r   r   RuntimeErrorr   r   getattrr   r]   r&   device_meshget_coordinater!   r   )rC   r`   r   requestsr   objmds          r?   r,   r,     s    H $$&222"%KC5PQ#RSS))#.r011VT*6388:%.rwwi~chhj\QVWZV[\ 
 c7##--/;.s<< < *3C88H/ '2 HrB   rV   c                     U $ )z
Create global load plan used by DefaultLoadPlanner.

The default load behavior involved no global coordination and this function
currently doesn't change the local plans.
r   )rV   s    r?   r-   r-     s
     rB   rE   c                     / nU R                  5        HU  u  p4[        U[        5      (       a-  UR                  R	                  5       b  U[        X45      -  nME  MG  U[        X45      -  nMW     [        U5      $ )z
Create the ``SavePlan`` used by DefaultSavePlanner.

On non-coordinator ranks, this function ignores tensors and non-tensor objects,
only producing writes for ShardedTensor objects.

On the coordinator rank, produce writes for all values.
)r   r   r&   r   r   r"   r   )rC   rE   r   r   r   s        r?   r.   r.     st     H$$& c7##--/;/99 < +C55H ' HrB   rewrite_index_hintsc                 6   0 n/ nU  GH  n/ nUR                    GH  nUR                  [        R                  :X  d  UR                  R
                  U;  d   eUR                  [        R                  :X  a3  [        5       X&R                  R
                  '   UR                  U5        M  UR                  c   e[        [        UR                  UR                  R
                  [        UR                  R                  UR                  R                  / S95      5      nUnU(       aF  [        R                   " UR                  [#        UR$                  5      S9n	[        R                   " XiS9nUR                  U5        UR                  R&                  c   SUR                  R
                   S35       eUR$                  R                  UR                  R&                  5        GM     UR                  [        R                   " XES95        GM     U[)        U5      4$ )a"  
Create the global plan and metadata used by DefaultSavePlanner.

Metadata is produced by concatenating the metadata of all ``WriteItem`` from the supplied plans.

The only global planning change is to update index hints in all ``MetadataIndex`` objects if
``rewrite_index_hints`` is True.
)r   r   chunks)r   zZ
                    Cannot create MD for tensor without bounds.
                    FQN: z
                )r   )r   r   r   SHARDr   r   r   r   rl   tensor_datar   r   
setdefaultr   r   rO   rP   rj   r  chunkr   )
rV   r  r   	new_plansrQ   	new_itemsitem	tensor_mdnew_item	new_indexs
             r?   r/   r/     s    $&BI	JJD99 3 33zz~~R///yyM111%9%;::>>"  &''333 )MM

-'+'7'7'B'B!%!1!1!6!6#%
	  & + 3 3

#i.>.>*?!I  +224IH  *''--9  @**..) *< 9   ''(8(8(>(>?A B 	,,TCDG H x|$$rB   c                 8    [        U 5      n[        U/5      u  p#U$ )zTReturn the ``Metadata`` if DefaultSavePlanner was used to checkpoint ``state_dict``.)r    r/   )rC   rQ   _r   s       r?   _create_default_local_metadatar  K  s    -j9D+TF3EAIrB   box0box1c                    [        U R                  5      n[        U5       Hg  nU R                  U   UR                  U   UR                  U   -   :  a    gUR                  U   U R                  U   U R                  U   -   :  d  Mg    g   g)z9Check if two boxes overlap. Tuples are (offset, lengths).FT)rj   offsetsrangesizes)r  r  ndimsis       r?   _check_box_overlapr  R  su     E5\<<?dll1o

1==<<?dll1o

1==	  rB   outer_box_size	inner_boxc                     [        [        U 5      5       HT  nUR                  U   S:  a    gUR                  U   S:  a    gUR                  U   UR                  U   -   X   :  d  MT    g   g)Nr   FT)r  rj   r  r  )r  r  r  s      r?   _check_box_boundsr  b  sn     3~&'Q!#??1!Q)//!"44~7HH ( rB   r_   c           	          SnUR                   R                  5        GH\  u  p4[        U[        5      (       a  M  [	        UR
                  5      S:X  a  M8  Sn[        UR                  5       H  u  pg[        UR
                  U5      (       d$  [        R                  SUUR
                  U5        SnU[        [        R                  UR                  S5      -  nUR                  US-   S   H.  n[        Xx5      (       d  M  [        R                  SX7U5        SnM0     M     [        [        R                  UR
                  S5      n	[	        U 5      S:  d  GM:  XY:w  d  GMB  [        R                  SUU	U5        SnGM_     U$ )NTr   z~
                        key:%s has out of bounds chunk:
                        tensor-size:%s chunk: %s
                    Fr'   z$key:%s has overlapping chunks: %s %szq
                    key:%s invalid fill tensor-volume:
                    %s chunks-volume: %s
                )r   r   r   r   rj   r   	enumerater  r  r)   r9   r   operatormulr  r  )
r_   r`   all_goodr   r   chunks_volume	chunk_idxchunk0chunk1tensor_volumes
             r?   r\   r\   p  sJ   H2288:
e122uzz?a!*5<<!8I$UZZ88 JJ !VHLL&,,BBM  ,,y1}7%f55NN>V  %H 8! "90 x||UZZ;{aM$BNN  HS ;V OrB   )T)OrO   r   loggingr   collectionsr   	functoolsr   typingr   r   r   r   r   torch.distributed._shard._utilsr	   .torch.distributed.checkpoint._dedup_save_plansr
   )torch.distributed.checkpoint._nested_dictr   r   2torch.distributed.checkpoint._sharded_tensor_utilsr   &torch.distributed.checkpoint._traverser   %torch.distributed.checkpoint.metadatar   r   r   r   r   r   r   r   $torch.distributed.checkpoint.plannerr   r   r   r   r   r   r   ,torch.distributed.checkpoint.planner_helpersr   r   r    r!   r"   r#   r$   "torch.distributed.checkpoint.utilsr%   torch.distributed.tensorr&    r(   	getLoggerr;   r)   Loggerr   __all__r*   r+   r   r[   r   r   r,   r   r-   r.   r   r/   r  r  Sizer  r\   r   rB   r?   <module>r;     s    	      - -  B K X >	 	 	     F ,  !**84 4F FRsY sYl>E!3 >ED DH'S#X'*2'<@''T	H~		(^	S#X04: !%2%H~2%2% 4>8#$2%j 8 1 9M RV  JJ+?	-tH~ - -d -rB   