
    JThdZ                     6   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  S SKrS SK	J
r
   S SKr  " S S5      r " S S	\5      r\" 5       rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS S jrS r S r!S r"S r#S r$S r%S r&g! \ a     Nif = f)!    N)	reduction)register_after_fork)Union)check_serializing_named_tensorc                   N    \ rS rSrSrSS/rS r\S 5       rS r	S r
S	 rS
 rSrg)StorageWeakRef   zA weak reference to a Storage.

The cdata member is a Python number containing the integer representation of
the Storage pointer.
cdata_free_weak_refc                 l    UR                  5       U l        [        R                  R                  U l        g N)	_weak_refr
   torchStorager   )selfstorages     X/var/www/auris/envauris/lib/python3.13/site-packages/torch/multiprocessing/reductions.py__init__StorageWeakRef.__init__!   s&    &&(
 $mm::    c                 r    U R                  U 5      nXl        [        R                  R                  Ul        U$ r   )__new__r
   r   r   r   )clsr
   instances      r   from_weakrefStorageWeakRef.from_weakref'   s,    ;;s#"'--">">r   c                 T    [         R                  R                  U R                  5      $ r   )r   r   _expiredr
   r   s    r   expiredStorageWeakRef.expired.   s    }}%%djj11r   c                 :    U R                  U R                  5        g r   r   r
   r   s    r   __del__StorageWeakRef.__del__1   s    DJJ'r   c                     U R                   $ r   )r
   r   s    r   __hash__StorageWeakRef.__hash__4   s    zzr   c                 f    [        U 5      [        U5      :X  a  gU R                  UR                  :H  $ )NT)idr
   )r   others     r   __eq__StorageWeakRef.__eq__7   s(    d8r%y zzU[[((r   r#   N)__name__
__module____qualname____firstlineno____doc__	__slots__r   classmethodr   r    r$   r'   r,   __static_attributes__ r   r   r   r      sA     *+I;  2()r   r   c                   :    \ rS rSrSrS
S jrS rS rS rS r	S	r
g)SharedCache=   z:Dictionary from multiprocessing handles to StorageWeakRef.Nc                 f    SU l         U R                  5         [        U [        R                  5        g )N   )limit_after_forkr   r8   r   s    r   r   SharedCache.__init__@   s)     
 	D+"9"9:r   c                 8    [         R                  " 5       U l        g r   )	threadingLocklockr   s    r   r=   SharedCache._after_forkJ   s    NN$	r   c                 z    U R                      [        R                  X5      sS S S 5        $ ! , (       d  f       g = fr   )rB   dictget)r   keys     r   rF   SharedCache.getM   s    YY88D& YYs   ,
:c                     U R                      [        R                  XU5        [        U 5      U R                  :  a  U R                  5         S S S 5        g ! , (       d  f       g = fr   )rB   rE   __setitem__lenr<   free_dead_references)r   rG   storage_refs      r   rJ   SharedCache.__setitem__Q   s?    YYT44y4::%))+ YYs   A A
A$c                     Sn[        U R                  5       5       H#  u  p#UR                  5       (       a  X	 M  US-  nM%     [        SUS-  5      U l        g )Nr      r;      )listitemsr    maxr<   )r   liverG   rM   s       r   rL    SharedCache.free_dead_referencesW   sP     $TZZ\ 2C""$$I		 !3
 dQh'
r   )r<   rB   )returnN)r.   r/   r0   r1   r2   r   r=   rF   rJ   rL   r5   r6   r   r   r8   r8   =   s    D;%',(r   r8   c                 T    [         R                  R                  R                  X5      $ r   )r   cudaEventfrom_ipc_handle)devicehandles     r   rebuild_eventr^   e   s    ::++F;;r   c                 J    U R                  5       n[        U R                  U44$ r   )
ipc_handler^   r\   )eventr]   s     r   reduce_eventrb   i   s$    FELL&122r   c                     Uu  p4pV[         R                  R                  XXE5      nU [         R                  R                  R
                  :X  a)  [         R                  R                  R                  XvS9nU$ Xgl        U$ )Nrequires_grad)r   _utils_rebuild_tensornn	parameter	Parameterre   )r   r   metadatastorage_offsetsizestridere   ts           r   rebuild_tensorrp   n   sl    2:/N&$$WdKA
ehh  *** HH(((H H (Hr   c                 L   [         R                  " USS9n[         R                  " XtSS9n[         R                  R	                  UUUU5      n	U [         R
                  R                  R                  :X  a)  [         R
                  R                  R                  XS9n	U	$ Xil        U	$ )Nmetar\   Twrap_storagedtype	_internalrd   )	r   UntypedStorageTypedStoragerf   rg   rh   ri   rj   re   )

tensor_clstensor_sizetensor_stridetensor_offsetrv   storage_size_bytesre   untyped_storagetyped_storagero   s
             r   rebuild_meta_tensorr   {   s     **+=fMO&&$TM 	$$		A UXX''111 HH(((H H (Hr   c           
         Ub  US:X  a	  U" SXVSS9nOj[        XGU	45      nUcJ  [        R                  R                  5         UR	                  UUUU	UUUU5      n[        U5      [        Xy4'   OUR                  XUS9  [        U[        R                  5      (       a  UOUR                  n[        R                  R                  [        R                  R                  UUSS9UUU5      nU [        R                  R                   R"                  :X  a*  [        R                  R                   R#                  UU
S9nU$ U
Ul        U$ )Nr   T)rv   r\   rw   rs   rt   rd   )storage_from_cacher   rY   
_lazy_init_new_shared_cudar   shared_cache_release_ipc_counter
isinstancerx   _untyped_storagerf   rg   r   ry   rh   ri   rj   re   )rz   r{   r|   r}   storage_clsrv   storage_devicestorage_handler~   storage_offset_bytesre   ref_counter_handleref_counter_offsetevent_handleevent_sync_requiredr   _storagero   s                     r   rebuild_cuda_tensorr      sW   $ !3q!8autT$*>?
 ?JJ!!#!22"$""#	G DRDL.?@
 ,,"~ -  gu3344 	%%  	$$""QU"V		A UXX''111 HH((-(H H (Hr   c                 J   U R                   (       a  U R                  (       d  [        S5      e[        U 5        [        R
                  R                  R                  U 5        SSKJ	n  U R                  (       a  [        X5      (       d  [        U 5      $ U R                  [        R                  [        R                  [        R                   [        R"                  [        R$                  1;   a  ['        U 5      $ U R)                  5       nUR*                  R,                  R.                  S:X  a  UR1                  5       u  nnnnnnn	n
U R3                  5       n[5        U5      [6        U'   [8        [/        U 5      U R;                  5       U R=                  5       U[/        U5      U R>                  UUUUU R                   UUU	U
44$ UR*                  R,                  R.                  S:X  ar  [@        [/        U 5      U R;                  5       U R=                  5       U R3                  5       U R>                  U RC                  5       R;                  5       U R                   44$ U R3                  5       U R;                  5       U R=                  5       U R                   4n[D        [/        U 5      X,44$ )NzCowardly refusing to serialize non-leaf tensor which requires_grad, since autograd does not support crossing process boundaries.  If you just want to transfer the data, call detach() on the tensor before serializing (e.g., putting it on the queue).r   )NestedTensorrY   rr   )#re   is_leafRuntimeErrorr   r   utilshookswarn_if_has_hooks$torch.nested._internal.nested_tensorr   	is_nestedr   reduce_nested_tensorlayout
sparse_coo
sparse_csr
sparse_bsr
sparse_csc
sparse_bscreduce_sparse_tensor_typed_storager   r\   type_share_cuda_rl   r   r   r   rm   rn   rv   r   r   rp   )tensorr   r   r\   r]   r~   r   r   r   r   r   r}   rk   s                r   reduce_tensorr      sC   FNNB
 	
 #6*	KK''/~ B
6 @ @#F++}}  $F++##%G&&++v5   "		
 --/-g6V  VW"$$$""#
 	
( 
	!	!	(	(	-	-	7V%%'&&(--/$$
 	
 		H T&\7=>>r   c                 X    U " U6 nU" U6 n	U" U6 n
U" U6 n[         R                  " XX5      $ r   )r   _nested_view_from_buffer_copy)rebuild_buffer_funcrebuild_buffer_argsrebuild_sizes_funcrebuild_sizes_argsrebuild_strides_funcrebuild_strides_argsrebuild_offsets_funcrebuild_offsets_argsbuffersizesstridesoffsetss               r   rebuild_nested_tensorr     sC     !"56F 23E"$89G"$89G..vgOOr   c           	          [        U R                  5       5      u  p[        U R                  5       5      u  p4[        U R                  5       5      u  pV[        U R	                  5       5      u  px[
        UUUUUUUU44$ r   )r   values_nested_tensor_size_nested_tensor_strides_nested_tensor_storage_offsetsr   )	ntr   r   r   r   r   r   r   r   s	            r   r   r     s    /<RYY[/I,-:2;Q;Q;S-T*1>
!!#2. 2?
))+2.
 	    		
 r   c                 @    U " U6 nU" U6 n[         R                  " XgXES9$ )N)is_coalesced)r   sparse_coo_tensor)rebuild_indices_funcrebuild_indices_argsrebuild_values_funcrebuild_values_argsshaper   indicesr   s           r   rebuild_sparse_coo_tensorr     s-     #$89G "56F""7EUUr   c                 L    U " U6 nU" U6 n	U" U6 n
[         R                  " XXUS9$ )N)r   )r   sparse_compressed_tensor)rebuild_compressed_indices_funcrebuild_compressed_indices_argsrebuild_plain_indices_funcrebuild_plain_indices_argsr   r   r   r   compressed_indicesplain_indicesr   s              r    rebuild_sparse_compressed_tensorr     sD     9	( /0JKM "56F))6 r   c           	         U R                   [        R                  L a\  [        U R	                  5       5      u  p[        U R                  5       5      u  p4[        UUUUU R                  U R                  5       44$ U R                   [        R                  [        R                  1;   a!  U R                  5       nU R                  5       nOdU R                   [        R                  [        R                  1;   a!  U R                  5       nU R!                  5       nO[#        U R                   5      e[        U5      u  nn[        U5      u  p[        U R%                  5       5      u  p4[&        UUU	U
UUU R                  U R                   44$ r   )r   r   r   r   _indices_valuesr   r   r   r   r   crow_indicescol_indicesr   r   ccol_indicesrow_indicesNotImplementedErrorr   r   )sparser   r   r   r   r   r   r   r   r   r   s              r   r   r     se   }}(((5B6??CT5U23@AQ3R0%$$####%

 
	
 ==U--u/?/?@@!'!4!4!6"..0M]]u//1A1ABB!'!4!4!6"..0M%fmm44 ,-	
++ANB
>" 4A3Q0,//**##	
 	
r   c                 ^    [         R                  " U 5      nUR                  UR                  4$ r   )osfstatst_inost_dev)fdstats     r   fd_idr     s$     88B<DKK%%r   c                     [         R                  U5      nUc  g [        R                  R	                  UR
                  5      $ r   )r   rF   r   rx   _new_with_weak_ptrr
   )r   rG   rM   s      r   r   r     s8    ""3'K22;3D3DEEr   c                 B   UR                  5       n [        U [        U5      5      nUb  U[        R                  " U5        $ U R                  X25      n[        U5      [        [        U5      '   U[        R                  " U5        $ ! [        R                  " U5        f = fr   )detachr   r   r   close_new_shared_fd_cpur   r   )r   dfrm   r   r   s        r   rebuild_storage_fdr     sw    	B$S%)4
 		 ((2"0"9U2Y
s   B -B Bc                 x   [        X5      nUb  UR                  5       $ Uc!  [        R                  R	                  XU5      nOWU[        R
                  R                  U5      -  n[        R                  R	                  XU5      n[        R                  " XtSS9n[        U5      [        U'   UR                  5       $ NTrt   )
r   _shared_decrefr   rx   _new_shared_filename_cpurf   _element_sizery   r   r   )r   managerr]   rm   rv   r   	byte_sizer   s           r   rebuild_storage_filenamer   )  s    ?Q@G %%''}&&??QUV5<<55e<<	  99'9U 	 $$(
 *'2L!!##r   c                     U " 5       $ r   r6   )r   s    r   rebuild_storage_emptyr   =  s	    5Lr   c                 >    [         R                  R                  XSS9$ r   )r   r   ry   )r   rv   s     r   rebuild_typed_storager   A  s    ==%%7SW%XXr   c                 >    [         U R                  U R                  44$ r   )r   r   rv   r   s    r   reduce_typed_storager   F  s    !G$<$<gmm#LMMr   c                     U" U SS9$ )NT)ru   rw   r6   )r   storage_types     r   rebuild_typed_storage_childr   J  s    W==r   c                 <    [         U R                  [        U 5      44$ r   )r   r   r   r   s    r   reduce_typed_storage_childr   O  s    ''*B*BDM)RSSr   c                 v   SSK Jn  U R                  (       a  [        S5      eU R                  R
                  S:X  a  [        S5      eU" 5       S:X  aZ  U R                  5       nUS   n[        n[        U [        R                  5      (       a  X R                  4-  nU R                  5         OkU R                  5       S:X  a  [        [        U 5      44$ U R                  5       u  pV[         R"                  R%                  U5      n['        U5      nXv4n[(        n[+        U 5      [,        U'   U[        U 5      4U-   4$ )NrP   )get_sharing_strategyz>Cannot pickle CUDA storage; try pickling a CUDA tensor insteadrr   z>Cannot pickle meta storage; try pickling a meta tensor insteadfile_systemr   ) r   is_cudar   r\   r   _share_filename_cpu_r   r   r   ry   rv   _shared_increfrm   r   _share_fd_cpu_multiprocessingr   DupFdr   r   r   r   )r   r   rk   	cache_keyrebuildr   rm   r   s           r   reduce_storager  S  s   &L
 	
 
			&L
 	
 
	=	0//1QK	*gu1122((H 	1	 &W'788))+&&,,R0"I	:$,W5Ld7m%011r   c                     [         R                  " [        R                  R                  [
        5        [        R                   HK  n U R                  S:X  a  [         R                  " U [        5        M0  [         R                  " U [        5        MM     [         R                  " [        R                  R                  [        5        [        R                   H  n [         R                  " U [        5        M      [         R                  " [        R                  [        5        SSKJn  [         R                  " U[        5        g )Nrx   r   )rj   )r   registerr   rY   rZ   rb   _storage_classesr.   r  r   r   ry   r   _tensor_classesr   Tensortorch.nn.parameterrj   )ro   rj   s     r   init_reductionsr  t  s    uzz''6##::))q.1q"<=	 $ u}}113GH""1m, # u||]3,y-0r   r   )'r  r   r@   r   multiprocessing.utilr   typingr   r   torch._namedtensor_internalsr   multiprocessing.resource_sharerImportErrorr   rE   r8   r   r^   rb   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r6   r   r   <module>r     s     	  % 4   G	 +
") ")J!($ !(J }<3

@AHq?hP"2
V(,
^&F
$(Y
N>
T2B1A  		s   B BB