
    ^j                        d dl mZ d dlZd dlZd dlZd dlmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ erd dlmZ  G d d	      Z G d
 d      Z G d de      Zy)    )annotationsN)AnyTYPE_CHECKING)Tensor)TorchDispatchMode)	tree_iter)_POOL_HANDLEc                       e Zd ZdZddZddZy)_TrackedTensorInfo)weakrefcreation_traceback_pycreation_traceback_cppdeletion_traceback_pydata_ptrdevice_index_storage_data_ptrc                z    ddl m} dj                  t        j                         d d        _         |        _        d  _        |j                          _        |j                  j                   _        d fd}|j                         }|j                          _        t        j                  ||       _        y )Nr   )get_cpp_backtrace c                |    	 dj                  t        j                         d d       _        y # t        $ r Y y w xY w)Nr   )join	tracebackformat_stackr   	Exception)_selfs    b/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/utils/_cuda_debug.py
on_releasez/_TrackedTensorInfo.__init__.<locals>.on_release&   s;    -/WWY5K5K5Mcr5R-S* s   +/ 	;;)r   z!weakref.ref[torch.UntypedStorage]returnNone)torch.utilsr   r   r   r   r   r   r   r   deviceindexr   untyped_storager   r   ref)r   tensorr   r    storages   `    r   __init__z_TrackedTensorInfo.__init__   s    1%'WWY-C-C-Ecr-J%K"&7&9#15")"MM//	 ((*!(!1!1!3:A++Z;
    c                b    | j                         }|y|j                         | j                  k(  S )NF)r   r   r   )r   r)   s     r   is_alivez_TrackedTensorInfo.is_alive2   s/    ,,.?!T%;%;;;r+   Nr(   r   r!   r"   )r!   bool)__name__
__module____qualname__	__slots__r*   r-    r+   r   r   r      s    I
*<r+   r   c                  X    e Zd Zd
dZd
dZd
dZddZddZddZddZ		 	 	 	 	 	 ddZ
y	)_CUDAGraphInputLivenessTrackerc                L    i | _         t               | _        d | _        d | _        y N)_external_inputsset_internal_outputs_memory_snapshot_dispatch_moder   s    r   r*   z'_CUDAGraphInputLivenessTracker.__init__:   s$    ?A+.5=A:>r+   c                X    t        |       | _        | j                  j                          y r8   )_TensorTrackingModer=   	__enter__r>   s    r   startz$_CUDAGraphInputLivenessTracker.start@   s!    1$7%%'r+   c                l    | j                   (| j                   d c}| _         |j                  d d d        y y r8   )r=   __exit__)r   modes     r   stopz#_CUDAGraphInputLivenessTracker.stopD   s8    *(,(;(;T%D$%MM$d+ +r+   c                    |j                         }|| j                  vr(|| j                  vrt        |      | j                  |<   y y y r8   )r   r;   r9   r   r   r(   r   s      r   track_external_inputz3_CUDAGraphInputLivenessTracker.track_external_inputI   sI    ??$D222 5 55.@.HD!!(+ 6 3r+   c                x    |j                         }|| j                  vr| j                  j                  |       y y r8   )r   r9   r;   addrH   s      r   mark_internal_outputz3_CUDAGraphInputLivenessTracker.mark_internal_outputQ   s5    ??$4000""&&x0 1r+   c           
        | j                   j                         D cg c]&  }|j                         s| j                  ||      s|( }}|sy dd}dt	        |       dg}t        |d d d      D ]  \  }}|j                  d| d|j                  dd	       |j                   |d
|j                               |j                   |d|j                               |j                   |d|j                                t	        |      dkD  r!|j                  dt	        |      dz
   d       |j                   |ddj                  t        j                         d d                    t        dj                  |            c c}w )Nc                `    |r+d|  dt        j                  |j                         d       dS dS )Nz  z:
z    
r   )textwrapindentstrip)labeltbs     r   fmtz7_CUDAGraphInputLivenessTracker.check_alive.<locals>.fmt`   s1    MORwc(//"((*f"E!FbIWUWWr+   zCUDA graph replay detected z dead tensor(s).
      zDead tensor #z (data_ptr=z#xz):
zCreation Traceback (Python)zCreation Traceback (C++)zDeletion Traceback (Python)z
  ... and z more
zReplay Traceback (Python)r   )rS   strrT   z
str | Noner!   rY   )r9   valuesr-   _is_tensor_from_capture_poollen	enumerateappendr   r   r   r   r   r   r   RuntimeError)r   capture_poolideadrU   partsinfos          r   check_alivez*_CUDAGraphInputLivenessTracker.check_aliveV   su    **113
::<55aF 
 
 	X /s4yk9KLM bq1- 	YGAtLL=;t}}R6HMNLL:D<V<VWXLL79T9TUVLL:D<V<VWX		Y
 t9q=LL:c$i!m_G<=+RWWY5K5K5Mcr5R-ST	
 2775>**/
s   +Fc                    | j                   0t        j                  j                  j	                  |d      | _         | j                   S )NF)include_traces)r<   torchcudamemorymemory_snapshot)r   r`   s     r   _get_memory_snapshotz3_CUDAGraphInputLivenessTracker._get_memory_snapshotp   sD      ($)JJ$5$5$E$EU %F %D! $$$r+   c                    |j                   }|y|j                  }| j                  |      D ]9  }|d   |k7  r|d   D ]&  }|d   }||cxk  r||d   z   k  sn d|d   v s%  y ; y)	NFr$   blocksaddresssizeactivestateT)r   r   rl   )r   r(   r`   r$   
tensor_ptrmeminfoblockaddrs           r   r[   z;_CUDAGraphInputLivenessTracker._is_tensor_from_capture_poolw   s     $$>__
00> 		 Gx F* *  Y'J=f)== E'N2 		  r+   N)r!   r"   r.   )r`   r	   r!   r"   )r`   r	   r!   zlist[dict[str, Any]])r(   r   r`   r	   r!   r/   )r0   r1   r2   r*   rB   rF   rI   rL   re   rl   r[   r4   r+   r   r6   r6   9   sC    ?(,
I1
+4%(8D	r+   r6   c                  P    e Zd ZdZddZd	dZ	 	 d
	 	 	 	 	 	 	 	 	 ddZddZddZy)r@   Tc                    || _         y r8   )_tracker)r   trackers     r   r*   z_TensorTrackingMode.__init__   s	    r+   c                b    t        |      D ]!  }t        |t              s|j                  s! y y)NTF)r   
isinstancer   is_cudar   rZ   vs      r   _selects_cuda_dispatch_keyz._TensorTrackingMode._selects_cuda_dispatch_key   s.    6" 	A!V$	 r+   Nc                    |xs i }||g}t         j                  j                         r=| j                  |      r, ||i |}| j	                  |       | j                  |       |S  ||i |}|S r8   )rh   ri   is_current_stream_capturingr   _track_inputs_mark_outputs)r   functypesargskwargsinputsouts          r   __torch_dispatch__z&_TensorTrackingMode.__torch_dispatch__   s     2::1138W8W9
 ''Cv&s# 
 ''C
r+   c                    t        |      D ]^  }t        |t              r|j                         dk(  r'|j                  s|j                         sD| j                  j                  |       ` y )Nr   )r   r|   r   r   r}   	is_pinnedry   rI   r~   s      r   r   z!_TensorTrackingMode._track_inputs   sQ    6" 	6Aa(AJJLA,=yyAKKM2215		6r+   c                    t        |      D ];  }t        |t              s|j                  s!| j                  j                  |       = y r8   )r   r|   r   r}   ry   rL   r~   s      r   r   z!_TensorTrackingMode._mark_outputs   s8    6" 	6A!V$2215	6r+   )rz   r6   r!   r"   )rZ   objectr!   r/   )r4   N)
r   r   r   r   r   ztuple[object, ...]r   zdict[str, object] | Noner!   r   )rZ   r   r!   r"   )	r0   r1   r2   supports_higher_order_operatorsr*   r   r   r   r   r4   r+   r   r@   r@      sY    &*#  $&+/  !	
 ) 
&66r+   r@   )
__future__r   rP   r   r   typingr   r   rh   r   torch.utils._python_dispatchr   torch.utils._pytreer   
torch.cudar	   r   r6   r@   r4   r+   r   <module>r      sM    "    %   : ) '$< $<NO Od-6+ -6r+   