
    Ph                        U d dl Z d dlmZmZmZmZmZmZmZm	Z	 d dl
Z
d dlmZmZ eeegef      ed<   e
j                   j#                         rd dlmZ ndZe	e
j*                  eedf   Zi Zeeef   ed<   i Zeeef   ed<    G d d	e      Z G d
 de      Z G d de      Zi Zeeee   f   ed<   dedee   fdZdedee   fdZ deeeee   f      fdZ! ede       y)    N)AnyCallableDictIterableOptionalTupleTypeUnion)
_EventBase_StreamBaseget_cuda_stream)_cuda_getCurrentRawStream caching_worker_device_propertiescaching_worker_current_devicesc                        e Zd Z fdZ xZS )DeviceInterfaceMetac                    |d   }d|v r2t        j                  |d         rt        |d   t              sJ d       d|v r2t        j                  |d         rt        |d   t              sJ d       t        |   | g|i |S )N   Eventz>DeviceInterface member Event should be inherit from _EventBaseStreamz@DeviceInterface member Stream should be inherit from _StreamBase)inspectisclass
issubclassr   r   super__new__)metaclsargskwargsclass_member	__class__s       iC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/device_interface.pyr   zDeviceInterfaceMeta.__new__   s    Awl"??<#89jW%z? POP  |#??<#9:zX&@ RQR  ww8888    )__name__
__module____qualname__r   __classcell__)r    s   @r!   r   r      s    
9 
9r"   r   c                   ^   e Zd ZdZ G d d      Z G d d      Zed        Zedefd       Z	ed        Z
ed	efd
       Zedej                  fd       Zed        Zedej                  fd       Zedededefd       Zed        Zeddefd       Zeddefd       Zeddefd       Zy)DeviceInterfacez
    This is a simple device runtime interface for Inductor. It enables custom
    backends to be integrated with Inductor in a device-agnostic semantic.
    c                       e Zd ZdefdZy)DeviceInterface.devicedevicec                     t               NNotImplementedError)clsr+   s     r!   r   zDeviceInterface.device.__new__)   s    %''r"   N)r#   r$   r%   	_device_tr    r"   r!   r+   r*   (   s    	( 	(r"   r+   c                   T    e Zd ZdZedefd       Zedefd       Zeddefd       Z	y)	DeviceInterface.Workera  
        Worker API to query device properties that will work in multi processing
        workers that cannot use the GPU APIs (due to processing fork() and
        initialization time issues). Properties are recorded in the main process
        before we fork the workers.
        r+   c                     t               r-   r.   r+   s    r!   
set_devicez!DeviceInterface.Worker.set_device4       %''r"   returnc                      t               r-   r.   r2   r"   r!   current_devicez%DeviceInterface.Worker.current_device8   r8   r"   Nc                     t               r-   r.   r6   s    r!   get_device_propertiesz,DeviceInterface.Worker.get_device_properties<   r8   r"   r-   )
r#   r$   r%   __doc__staticmethodintr7   r;   r1   r=   r2   r"   r!   Workerr4   ,   sX    	 
	(s 	( 
	( 
	( 	( 
	( 
	() 	( 
	(r"   rA   c                      t               r-   r.   r2   r"   r!   r;   zDeviceInterface.current_device@       !##r"   c                     t               r-   r.   r6   s    r!   r7   zDeviceInterface.set_deviceD   rC   r"   c                      t               r-   r.   r2   r"   r!   device_countzDeviceInterface.device_countH   rC   r"   r9   c                      t               r-   r.   r2   r"   r!   is_availablezDeviceInterface.is_availableL   rC   r"   streamc                     t               r-   r.   rI   s    r!   rI   zDeviceInterface.streamP   rC   r"   c                      t               r-   r.   r2   r"   r!   current_streamzDeviceInterface.current_streamT   rC   r"   c                     t               r-   r.   rK   s    r!   
set_streamzDeviceInterface.set_streamX   rC   r"   	stream_iddevice_indexdevice_typec                     t               r-   r.   )rP   rQ   rR   s      r!   _set_stream_by_idz!DeviceInterface._set_stream_by_id\   rC   r"   c                      t               r-   r.   r2   r"   r!   get_raw_streamzDeviceInterface.get_raw_stream`   rC   r"   Nc                     t               r-   r.   r6   s    r!   synchronizezDeviceInterface.synchronized   rC   r"   c                     t               r-   r.   r6   s    r!   r=   z%DeviceInterface.get_device_propertiesh   rC   r"   c                     t               r-   r.   r6   s    r!   get_compute_capabilityz&DeviceInterface.get_compute_capabilityl   rC   r"   r-   )r#   r$   r%   r>   r+   rA   r?   r;   r1   r7   rF   boolrH   torchr   rI   rM   rO   r@   rT   rV   rX   r=   r[   r2   r"   r!   r(   r(   "   sY   
( (( (( $ $ $9 $ $ $ $ $$ $ $ $u|| $ $ $ $ $5<< $ $ $S $ $# $ $ $ $ $I $ $ $i $ $ $y $ $r"   r(   )	metaclassc                      e Zd Zej                  j
                  Zej                  j                  Zej                  j                  Z G d d      Z e	ej                  j                        Z
 e	ej                  j                        Z e	ej                  j                        Z e	ej                  j                        Z e	ej                  j                        Z e	ej                  j                        Z e	ej                  j                         Z e	ej                  j"                        Z e	ej                  j$                        Z e	e      Ze	defd       Ze	ddefd       Zy)	CudaInterfacec                   P    e Zd Zedefd       Zedefd       Zeddefd       Zy)CudaInterface.Workerr+   c                     | t         d<   y Ncuda)r   r6   s    r!   r7   zCudaInterface.Worker.set_devicez   s    5;*62r"   r9   c                  `    dt         v r	t         d   S t        j                  j                         S rd   )r   r]   re   r;   r2   r"   r!   r;   z#CudaInterface.Worker.current_device~   s)    775f==::,,..r"   Nc                    | \t        | t              r&t        j                  |       } | j                  dk(  sJ t        | t        j                        r| j
                  } | t        j                  j                         } dt        vrZt        t        j                  j                               D cg c]!  }t        j                  j                  |      # }}|t        d<   t        d   |    S c c}w rd   )
isinstancestrr]   r+   typeindexr`   rA   r;   r   rangere   rF   r=   )r+   idevice_props      r!   r=   z*CudaInterface.Worker.get_device_properties   s    !fc*"\\&1F!;;&000fell3#\\F~&--<<>== #5::#:#:#<== JJ44Q7=   <G083F;FCCs   0&C-r-   )	r#   r$   r%   r?   r@   r7   r;   r1   r=   r2   r"   r!   rA   rb   y   sT    		<s 	< 
	< 
	/ 	/ 
	/
 
	D) 	D 
	Dr"   rA   r9   c                  >    t         j                  j                         S r-   )r]   re   rH   r2   r"   r!   rH   zCudaInterface.is_available   s    zz&&((r"   Nr+   c                 V    t         j                  j                  |       \  }}|dz  |z   S )N
   )r]   re   get_device_capability)r+   majormins      r!   r[   z$CudaInterface.get_compute_capability   s)    ZZ55f=
srzCr"   r-   )r#   r$   r%   r]   re   r+   r   r   rA   r?   r;   r7   rF   rI   rM   rO   rT   rX   r=   r   rV   r\   rH   r1   r[   r2   r"   r!   r`   r`   q   s5   ZZF JJEZZFD D> "%**";";<Nejj334J

 7 78L%**++,F!%**";";<Nejj334J$UZZ%A%ABuzz556K()I)IJ!/2N )$ ) )  y    r"   r`   device_interfacesr+   device_interfacec                     |t         | <   y r-   )ru   )r+   rv   s     r!   register_interface_for_devicerx      s     0fr"   r9   c                 @    | t         v r	t         |    S t        d|        )NzNo interface for device )ru   r/   r6   s    r!   get_interface_for_devicerz      s)    "" ((
 8A
BBr"   c                  *    t         j                         S r-   )ru   itemsr2   r"   r!    get_registered_device_interfacesr}      s    ""$$r"   re   )"r   typingr   r   r   r   r   r   r	   r
   r]   torch._streambaser   r   r@   __annotations__re   _is_compiledtorch._Cr   r   r+   ri   r1   r   r   rj   r   r(   r`   ru   rx   rz   r}   r2   r"   r!   <module>r      s(    N N N  5(C5#:./ /::EO%,,S$./	 46  $sCx. 513 S#X 39$ 9L$ 3 L$^: O : z 79 4T/223 81# 1oAV 1CS CT/-B C%(5d?>S9S3T*U % fm 4r"   