
    ΅io$                         S SK r S SKrS SKrS SKrS SKrS SKJr  S SKrS SK	J
r  S SKrS SKJs  Jr  S SKJr  S r\" SS9S 5       rSS	.S
\R*                  S\S\4S jjr " S S5      r " S S5      rg)    N)defaultdict)StorageWeakRefc                     ^  U 4S jnU$ )zcLazily wrap a function with torch.compile on the first call

This avoids eagerly importing dynamo.
c                 J   >^  [         R                  " T 5      UU 4S j5       nU$ )Nc                     > [         R                  " T40 TD6n[        R                  " T5      " U5      [	        5       TR
                  '   U" U 0 UD6$ N)torchcompile	functoolswrapsglobals__name__)argskwargscompiled_fncompile_kwargsfns      T/home/james-whalen/.local/lib/python3.13/site-packages/torch/utils/_content_store.pycompile_hook7lazy_compile.<locals>.decorate_fn.<locals>.compile_hook4   sD    --=n=K%.__R%8%EGIbkk"///    )r   r   )r   r   r   s   ` r   decorate_fn!lazy_compile.<locals>.decorate_fn3   s&    			0 
	0
 r    )r   r   s   ` r   lazy_compiler   -   s     r   T)dynamicc                    [         R                  " SSU R                  U R                  [         R                  S9R                  5       nUS-  S-   R                  5       n[         R                  " SSU R                  U R                  [         R                  S9R                  5       R                  5       n[        R                  " X-  U-   R                  5       S/5      $ )Ni   l        )devicedtypei   r   )
r	   randintshaper   int32abslongprimsxor_sumint)xabs      r   hash_storage_kernelr,   C   s    
 	%		ce  y/Q	$$&Ahqwwqxxu{{S		  ==!%!)*QC00r   Fstable_hashstorager.   returnc                <   SS K nSSKJn  U R                  R                  nU(       d  U" U5      (       d  U R                  5       n[        R                  UR                  5       -  R                  UR                  5       5      n[        R                  " SS9nUR                  U5        UR                  5       $ US:X  a  UR                  R                   nOUS:X  a.  UR"                  R$                  U R                  R&                     nOcUS:X  a  UR(                  R+                  5       nOBUS:X  a.  UR,                  R$                  U R                  R&                     nO[/        S	U 35      eUR1                  5       n	 UR3                  S5        UR4                  " SUR6                  U R                  S
9R9                  U 5      n
U
R;                  5       * S-  nUS:  a  [<        R>                  " U
SU4SS5      n
U
RA                  URB                  5      n
Sn[E        U5       Vs/ s H  n[G        U
5      RI                  5       PM     nn[J        RL                  " SSU-  -   /UQ76 RO                  5       URQ                  U	5        $ s  snf ! URQ                  U	5        f = f)Nr   )is_compile_supportedF)usedforsecuritycpucudampsxpuzunhandled device type r   r      constant   >i))torch._dynamotorch._dynamo.utilsr2   r   typer4   ctypesc_bytenbytesfrom_addressdata_ptrhashlibsha1update	hexdigest_Cdefault_generatorr5   default_generatorsindexr6   _get_default_mps_generatorr7   AssertionError	get_statemanual_seedemptyuint8set_numelFpadviewr#   ranger,   itemstructpackhex	set_state)r/   r.   r	   r2   device_typecpu_storagebufrG   	generatorstater)   rW   ITER_css                  r   hash_storagerg   ^   s   8..%%K.{;;kkm }}{1133AA  "
 ||E2C~~ eHH..			JJ11'..2F2FG			II88:			II001E1EF	5k]CDD!E#a KKW^^DII'R wwyj1n7a!S:q1AFF5;; 5:4[A[!!$))+[A{{3t+1b1557E" B 	E"s   =B%J "#J,J J Jc                       \ rS rSrSS\S\SS4S jjrS\R                  S\4S jr	SS	\R                  4S
 jjrS\S	\R                  SS4S jrSrg)ContentStoreWriter   locr.   r0   Nc                 :    Xl         [        5       U l        X l        g r   )rk   setseen_storage_hashesr.   )selfrk   r.   s      r   __init__ContentStoreWriter.__init__   s    -0U &r   r/   c                    [        XR                  S9nX R                  ;   a  U$ [        R                  R                  U R                  S5      n[        R                  " USS9  [        R                  R                  X25      n[        R                  R                  U5      (       a  U$ [        R                  " X5        U R                  R                  U5        U$ )Nr-   storagesTexist_ok)rg   r.   rn   ospathjoinrk   makedirsexistsr	   saveadd)ro   r/   h	subfoldertargets        r   write_storage ContentStoreWriter.write_storage   s    .>.>?(((H GGLL:6	
I-i+77>>&!!H

7#  $$Q'r   tc                    Uc"  [        UR                  5       U R                  S9nUR                  UUR	                  5       [        UR                  5      UR                  5       [        R                  R                  U5      4$ )Nr-   )rg   untyped_storager.   r   storage_offsettupler"   strider	   _utilsget_tensor_metadata)ro   r   r}   s      r   compute_tensor_metadata*ContentStoreWriter.compute_tensor_metadata   sh    9Q..0d>N>NOAGG!''NHHJLL,,Q/
 	
r   namec                    UR                  5       nU R                  U5      n[        R                  R	                  U5      u  pVU R                  X$S9n[        R                  R                  U R                  SU5      n[        R                  " USS9  [        R                  " U[        R                  R                  X5      5        g )N)r}   tensorsTrt   )r   r   rv   rw   splitr   rx   rk   ry   r	   r{   )	ro   r   r   r/   r}   dfpayloadr~   s	            r   write_tensorContentStoreWriter.write_tensor   s    ##%w'ww}}T"..q.6GGLL9a8	
I-

7BGGLL67r   )rk   rn   r.   )Fr   )r   
__module____qualname____firstlineno__strboolrp   r	   UntypedStorager   Tensorr   r   __static_attributes__r   r   r   ri   ri      sc    'C 'd 't 'U%9%9 c 

 

8 8 8$ 8r   ri   c                       \ rS rSrSS.S\SS4S jjrSS.S	\S\R                  4S
 jjrS\4S jr	SS.S\S\R                  4S jjrSrg)ContentStoreReader   T)cacherk   r0   Nc                V    Xl         S U l        U(       a  [        [        5      U l        g g r   )rk   storage_cacher   dict)ro   rk   r   s      r   rp   ContentStoreReader.__init__   s+      	 !,T!2D r   r   r}   c          	      P   Ub  [         R                  " U5      nU R                  b  U R                  U   R                  U5      OS nUb.  [         R                  R                  UR                  5      nUb  U$ [         R                  " [        R                  R                  U R                  SU5      SUS9R                  nUc:  [        SU S[        R                  R                  U R                  S5       S35      eU R                  b  [        U5      U R                  U   U'   U$ )Nrs   T)weights_onlymap_locationzexpected storage for hash z in z
, got None)r	   r   r   getr   _new_with_weak_ptrcdataloadrv   rw   rx   rk   _untyped_storagerO   r   )ro   r}   r   wsss        r   read_storageContentStoreReader.read_storage   s   \\&)F !!- v&**1- 	 >$$77AA}JJGGLL:q1
 
	 	

 9 ,QCtBGGLL:4V3WWab  ),:1,=Dv&q)r   r   c                     [         R                  R                  U R                  SU5      n[         R                  R	                  U5      (       d  [        U5      e[        R                  " USS9$ )Nr   T)r   )rv   rw   rx   rk   rz   FileNotFoundErrorr	   r   )ro   r   r   s      r   read_tensor_metadata'ContentStoreReader.read_tensor_metadata   sK    WW\\$((It4ww~~b!!#B''zz"400r   c                    U R                  U5      u  p4pVpxU R                  XBS9n	[        R                  " / X9R                  S9n
U
R                  XXg5        [        R                  R                  X5        U
$ )Nr   r8   )r   r   r	   tensorr   rT   r   set_tensor_metadata)ro   r   r   r   r}   r   sizer   metadatar/   r   s              r   read_tensorContentStoreReader.read_tensor   sj    ;?;T;T<
8. ##A#5LL5@	w5((5r   )rk   r   )r   r   r   r   r   rp   r	   r   r   r   r   r   r   r   r   r   r   r      sc    *. 3C 34 3 .2 c e6J6J 41 1 04    r   r   )rA   r   rF   os.pathrv   r[   collectionsr   r	   torch._prims_primsr&   torch._utilstorch.nn.functionalnn
functionalrV    torch.multiprocessing.reductionsr   r   r,   r   r   r   rg   ri   r   r   r   r   <module>r      s   >      #      ;, d1 14 HM ,#%.. ,# ,#QT ,#^08 08f1 1r   