
      i&              	          d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZ d dlZd dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dl m!Z!m"Z" dZ#erd dl$m%Z%  G d d      Z& G d dejN                        Z(de!defdZ)dedefdZ*	 d de+e,ef   de+e,eee"f   f   dee-e,      ddfdZ.dede+e,ef   fdZ/y)!    N)OrderedDict)Sequence)partial)BytesIO)Path)IOTYPE_CHECKINGAnyCallableOptionalUnion)apply_to_collection)Tensor)_TensorMeta)	Parameter)override)_TORCH_GREATER_EQUAL_2_3)_PATH	_Statefulzmeta.ptTypedStoragec                   d   e Zd Zdedddededdf
dZedd	d
ededede	de
d   defd       Zedd	dededede
d   deed f   f
d       Ze	 d"dddededededede
e   dddd fd       ZdefdZe	 	 d#d
ededee   de
e	   def
d       Zedej0                  fd       Zdedefd Zdefd!Zy)$_NotYetLoadedTensor
metatensorarchiveinfo_LazyLoadingUnpicklerstorageinforebuild_argsreturnNc                 <    || _         || _        || _        || _        y N)r   r   r   r   )selfr   r   r   r   s        t/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_fabric/utilities/load.py__init__z_NotYetLoadedTensor.__init__*   s#     %&&(    r   funcnew_typeargsstatec                     || }t        |t              r#|j                  dt        ffd}||_        |S t        j
                  j                  ||      S )Nr   c                  ^              t         j                  j                   fdd      S )Nc                       S r!    ts   r#   <lambda>zP_NotYetLoadedTensor.rebuild_from_type_v2.<locals>._load_tensor.<locals>.<lambda>F   s    1r%   r.   )torch_tensor_rebuild_from_type_v2)r0   r(   old_ltr*   s   @r#   _load_tensorz>_NotYetLoadedTensor.rebuild_from_type_v2.<locals>._load_tensorD   s'    H}}::9hPRTYZZr%   )
isinstancer   r6   r
   r2   r3   r4   )	clsr'   r(   r)   r*   r   retr6   r5   s	     ` `   @r#   rebuild_from_type_v2z(_NotYetLoadedTensor.rebuild_from_type_v26   s\     Dkc./%%F[# [  ,CJ}}2244OOr%   datarequires_gradbackward_hooksc                    t        |t              r#|j                  dt        ffd}||_        |S t        j
                  j                  |      S )Nr   c                  T            } t         j                  j                  |       S r!   )r2   _utils_rebuild_parameter)r0   r=   r5   r<   s    r#   r6   z;_NotYetLoadedTensor.rebuild_parameter.<locals>._load_tensorX   s#    H||66q-XXr%   )r7   r   r6   r   r2   r@   rA   )r8   r;   r<   r=   r   r6   r5   s     ``  @r#   rebuild_parameterz%_NotYetLoadedTensor.rebuild_parameterL   sQ     d/0&&FY) Y !-DK||..t]NSSr%   storager   storage_offsetsizestridemetadatac          	          ||||||f}	t         j                  j                  |||||||      }
|j                  }t	        |
|||	      S r!   )r2   r@   _rebuild_tensor_v2r   r   )r8   rC   rD   rE   rF   r<   r=   rG   r   r   r   r   s               r#   rebuild_tensor_v2z%_NotYetLoadedTensor.rebuild_tensor_v2`   sY     'fm^U]^\\44^T6=.RZ

 ))":{KVVr%   c                    ddl m}m} | j                  \  }}}}}| j                  j
                  }| j                  j                  j                  d| |t        j                  j                  |      z  |      }|j                         j                  }t        j                         5  t        j                   d        |||d      }d d d        t        j                  j"                  |g| j$                   S # 1 sw Y   3xY w)Nr   )r   UntypedStoragezdata/ignoreT)wrap_storagedtype	_internal)torch.storager   rL   r   r   rO   r   file_readerget_storage_from_recordr2   r@   _element_size_typed_storage_untyped_storagewarningscatch_warningssimplefilterrI   r   )	r"   r   rL   _fnrE   rO   rC   utss	            r#   r6   z _NotYetLoadedTensor._load_tensort   s    > ,,1b!T%%""..FFB4L$!;!;E!BBN
 $$&77$$&!!(+"5DQG ' ||..wK9J9JKK	 '&s   )!C<<Dtypeskwargsc                     |xs i }|D cg c]$  }t        |t              r|j                         n|& }} ||i |S c c}w r!   )r7   r   r6   )r8   r'   r]   r)   r^   argloaded_argss          r#   __torch_function__z&_NotYetLoadedTensor.__torch_function__   sS     2hlmhladj>Q.R((*X[[hlm[+F++ ns   )>c                 F    t        j                  | j                  d         S )N   )r2   devicer   r"   s    r#   re   z_NotYetLoadedTensor.device   s    ||D,,Q/00r%   namec                     |dv rt        | j                  |      S |dv rt        | j                         |      S t        dt	        |       j
                   d| d      )N>   gradndimrE   rO   namesshapelayoutgrad_fnis_metavolatile	output_nrretains_gradr<   >   tocudar;   half
contiguous'z' object has no attribute ')getattrr   r6   AttributeErrortype__name__)r"   rg   s     r#   __getattr__z_NotYetLoadedTensor.__getattr__   sl     
 
 4??D11 ??4,,.55qd!4!4 55PQUPVVWXYYr%   c                 `    | j                   j                   dt        | j                         dS )N())	__class__r{   reprr   rf   s    r#   __repr__z_NotYetLoadedTensor.__repr__   s*    ..))*!D,A+B!DDr%   r!   )r.   N)r{   
__module____qualname__r   tupler$   classmethodr   r   dictr   r
   r:   boolr   r   rB   intrJ   r6   r   rb   propertyr2   re   strr|   r   r.   r%   r#   r   r   )   s   
)
) -
) 	
)
 
) 

)  :>PP P 	P
 P 56P 
P P*  :>TT T $	T 56T 
v,,	-T T&  #'WW W 	W
 W W $W 3-W -W 
W W&Lf L" 
 !!%	,	, 	, sm		,
 	, 
	, 	, 1 1 1Z Z Z2E# Er%   r   c                   |     e Zd Zdedej
                  ddf fdZededede	f fd       Z
ed	edd
fd       Z xZS )r   filerR   r   Nc                 2    t         |   |       || _        y r!   )superr$   rR   )r"   r   rR   r   s      r#   r$   z_LazyLoadingUnpickler.__init__   s    &r%   modulerg   c                    |dk(  r |dk(  rt        t        j                  |       S |dk(  r |dk(  rt        t        j                  |       S |dk(  r |dk(  rt        t        j                  |       S t
        |   ||      S )Nztorch._utilsrI   r&   ztorch._tensorr4   rA   )r   r   rJ   r:   rB   r   
find_class)r"   r   rg   r   s      r#   r   z _LazyLoadingUnpickler.find_class   s    ^#0D(D.@@dSS_$1H)H.CCQUVV^#0D(D.@@dSSw!&$//r%   pidr   c                     ddl m} |\  }}}}}t        j                         5  t        j                  d        | |       j
                  d      }d d d        |_        |S # 1 sw Y   xY w)Nr   r   rM   meta)rO   re   )rQ   r   rW   rX   rY   rO   r   )r"   r   r   rZ   r8   rC   s         r#   persistent_loadz%_LazyLoadingUnpickler.persistent_load   s]    .31a$$&!!(+"VDG ' " '&s   /A##A,)r{   r   r   r   r2   PyTorchFileReaderr$   r   r   r
   r   r   r   __classcell__)r   s   @r#   r   r      sn    'R 'e.E.E '$ ' 0 0C 0C 0 0 	5 	^ 	 	r%   r   filenamer   c                 D   t         j                  j                  |       st        dt	        |       d      t        j                  t	        |             }t        |j                  d            5 }t        ||      }|j                         cd d d        S # 1 sw Y   y xY w)NzPath z! does not exist or is not a file.zdata.pkl)ospathisfileFileNotFoundErrorr   r2   r   r   
get_recordr   load)r   rR   pklmups       r#   
_lazy_loadr      sv    77>>(#%H'88Y Z[[))#h-8K	''
3	4#C5xxz 
5	4	4s   0BB
collectionc                 F    dt         dt        fd}t        | t         |      S )Nr0   r   c                 "    | j                         S r!   )r6   r/   s    r#   r6   z*_materialize_tensors.<locals>._load_tensor   s    ~~r%   )rO   function)r   r   r   )r   r6   s     r#   _materialize_tensorsr      s(     +     z1D|\\r%   sourcedestinationkeysc                     |t        |       n|t        |       z  }|D ]D  }| j                  |      }||v r(t        ||   t              r||   j	                  |       @|||<   F y)zTakes the state from the source destination and moves it into the destination dictionary.

    If an object in the destination follows the stateful protocol, it loads the source state via ``load_state_dict``.

    N)setpopr7   r   load_state_dict)r   r   r   keyr*   s        r#   _move_state_intor      sf     ,3v;D3v;,>D

3+*[-=y"I,,U3$K r%   checkpoint_folderc                    t         st        d      ddlm} ddlm} ddlm} i } || ||        |       d       | t        z  }|j                         rt        j                  |d	      ni }|j                  |       |S )
zLoads a sharded checkpoint saved with the `torch.distributed.checkpoint` into a full state dict.

    The current implementation assumes that the entire checkpoint fits in CPU memory.

    z;Processing distributed checkpoints requires PyTorch >= 2.3.r   )FileSystemReader)_EmptyStateDictLoadPlanner)_load_state_dictT)storage_readerplannerno_distcpu)map_location)r   ImportErrortorch.distributed.checkpointr   )torch.distributed.checkpoint.format_utilsr   .torch.distributed.checkpoint.state_dict_loaderr   _METADATA_FILENAMEis_filer2   r   update)r   r   r   r   
checkpoint
extra_fileextras          r#   _load_distributed_checkpointr      s}     $WXX=TO!#J'(9:*,	 #%77J:D:L:L:NEJJz6TVEer%   r!   )0r   picklerW   collectionsr   collections.abcr   	functoolsr   ior   pathlibr   typingr   r	   r
   r   r   r   r2   #lightning_utilities.core.apply_funcr   r   torch._Cr   torch.nnr   typing_extensionsr   "lightning_fabric.utilities.importsr    lightning_fabric.utilities.typesr   r   r   rQ   r   r   	Unpicklerr   r   r   r   r   r   r   r   r.   r%   r#   <module>r      s   
   # $    D D  C     & G =  *FE FETF,, 8 3 ]S ]S ] gk%cN%)-c5i3H.H)I%QYZ]^aZbQc%	%"D T#s(^ r%   