
    Ph+                        U d Z ddlmZ ddlmZmZmZmZ ddlZg dZ	ee
   ed<    G d d      Z e       Zeej                  j                  ef   Zd	ej"                  d
efdZd	ej"                  d
efdZd	ej"                  d
efdZed	ej"                  d
ed   fd       Zeded
ed   fd       Zded
ej"                  fdZdeded
dfdZdej2                  ded
dfdZded
efdZded
ej                  j                  fdZy)zWUtilities for eliminating boilerplate code to handle abstract streams with
CPU device.
    )contextmanager)	GeneratorListUnioncastN)CPUStreamType
new_streamcurrent_streamdefault_stream
use_device
use_stream
get_devicewait_streamrecord_streamis_cudaas_cuda__all__c                       e Zd Zy)r   N)__name__
__module____qualname__     qC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/distributed/pipeline/sync/stream.pyr   r      s    r   r   devicereturnc                 j    | j                   dk7  rt        S t        j                  j	                  |       S )z3Creates a new stream for either CPU or CUDA device.cuda)type	CPUStreamtorchr   Streamr   s    r   r	   r	      s)    {{f::V$$r   c                 j    | j                   dk7  rt        S t        j                  j	                  |       S )z@:func:`torch.cuda.current_stream` for either CPU or CUDA device.r   )r   r    r!   r   r
   r#   s    r   r
   r
   &   )    {{f::$$V,,r   c                 j    | j                   dk7  rt        S t        j                  j	                  |       S )z@:func:`torch.cuda.default_stream` for either CPU or CUDA device.r   )r   r    r!   r   r   r#   s    r   r   r   -   r%   r   )NNNc              #      K   | j                   dk7  rd yt        j                  j                  |       5  d ddd       y# 1 sw Y   yxY ww)z8:func:`torch.cuda.device` for either CPU or CUDA device.r   N)r   r!   r   r   r#   s    r   r   r   4   s:      {{f			6	" 
#	"	"s   4AA	AA	Astreamc              #      K   t        |       sd yt        j                  j                  t	        |             5  d ddd       y# 1 sw Y   yxY ww)z8:func:`torch.cuda.stream` for either CPU or CUDA stream.N)r   r!   r   r(   r   r(   s    r   r   r   ?   s9      6?			76?	+ 
,	+	+s   9AA	 	A	AAc                 l    t        |       rt        |       j                  S t        j                  d      S )z(Gets the device from CPU or CUDA stream.cpu)r   r   r   r!   r*   s    r   r   r   J   s(    vv%%%<<r   sourcetargetc                     t        |      rIt        |       r$t        |       j                  t        |             yt        |      j                          yy)z:meth:`torch.cuda.Stream.wait_stream` for either CPU or CUDA stream. It
    makes the source stream wait until the target stream completes work queued.
    N)r   r   r   synchronize)r-   r.   s     r   r   r   Q   s?     v6?FO''8 FO'') r   tensorc                     t        |      rJ| j                  dg      j                  | j                               } | j	                  t        |             yy)zA:meth:`torch.Tensor.record_stream` for either CPU or CUDA stream.r   N)r   	new_emptyset__typed_storager   r   )r1   r(   s     r   r   r   `   sJ    v !!1#&++F,A,A,CD 	WV_- r   c                     | t         uS )z<Returns ``True`` if the given stream is a valid CUDA stream.)r    r*   s    r   r   r   q   s    ""r   c                 J    t        t        j                  j                  |       S )z5Casts the given stream as :class:`torch.cuda.Stream`.)r   r!   r   r"   r*   s    r   r   r   v   s    

!!6**r   )__doc__
contextlibr   typingr   r   r   r   r!   r   str__annotations__r   r    r   r"   AbstractStreamr   r	   r
   r   r   r   r   r   Tensorr   boolr   r   r   r   r   <module>r@      sp   & / / ,c ,
	 	
 O	 uzz((-78%u|| % %-5<< -N --5<< -N - u|| 	2B(C   ~ )4D*E  ~ %,, 
* 
* 
*4 
*.%,, . .4 ."#N #t #
+N +uzz'8'8 +r   