
    sg-                        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      Z G d de      Zeeegef      ed<   e
j>                  j#                         rd dlm Z! ndZ! G d de      Z"i Z#eeee   f   ed<   da$de	ee
j*                  f   dee   fdZ%de	ee
j*                  f   dee   fdZ&deeeee   f      fdZ'd Z(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       Q/var/www/html/venv/lib/python3.12/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e
de
fd	       Zed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e
de
fd       Zeddef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_device6       %%r"   returnc                      t         r-   r.   r2   r"   r!   current_devicez%DeviceInterface.Worker.current_device:   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_deviceB       !!r"   c                     t         r-   r.   r6   s    r!   r7   zDeviceInterface.set_deviceF   rC   r"   r9   c                     t         r-   r.   r6   s    r!   maybe_exchange_devicez%DeviceInterface.maybe_exchange_deviceJ   rC   r"   c                     t         r-   r.   r6   s    r!   exchange_devicezDeviceInterface.exchange_deviceN   rC   r"   c                      t         r-   r.   r2   r"   r!   device_countzDeviceInterface.device_countR   rC   r"   c                      t         r-   r.   r2   r"   r!   is_availablezDeviceInterface.is_availableV   rC   r"   streamc                     t         r-   r.   rM   s    r!   rM   zDeviceInterface.streamZ   rC   r"   c                      t         r-   r.   r2   r"   r!   current_streamzDeviceInterface.current_stream^   rC   r"   c                     t         r-   r.   rO   s    r!   
set_streamzDeviceInterface.set_streamb   rC   r"   	stream_iddevice_indexdevice_typec                     t         r-   r.   )rT   rU   rV   s      r!   _set_stream_by_idz!DeviceInterface._set_stream_by_idf   rC   r"   
device_idxc                     t         r-   r.   )rY   s    r!   get_raw_streamzDeviceInterface.get_raw_streamj   rC   r"   Nc                     t         r-   r.   r6   s    r!   synchronizezDeviceInterface.synchronizen   rC   r"   c                     t         r-   r.   r6   s    r!   r=   z%DeviceInterface.get_device_propertiesr   rC   r"   c                     t         r-   r.   r6   s    r!   get_compute_capabilityz&DeviceInterface.get_compute_capabilityv   rC   r"   including_emulationc                     t         r-   r.   ra   s    r!   is_bf16_supportedz!DeviceInterface.is_bf16_supportedz   rC   r"   r-   F)r#   r$   r%   r>   r+   rA   r?   r;   r1   r7   r@   rF   rH   rJ   boolrL   torchr   rM   rQ   rS   rX   r[   r]   r=   r`   rd   r2   r"   r!   r(   r(   $   s   
& && &( " " "9 " " "c "c " " " " " " " " "$ " " "u|| " " " " "5<< " " "S " "# " " "3 "3 " " "I " " "i " " "y " " "t " "r"   r(   )	metaclassc                   J    e Zd ZdZdee   dee   ddfdZd Z	de
d	e
d
e
fdZy)DeviceGuarda_  
    This class provides a context manager for device switching. This is a stripped
    down version of torch.{device_name}.device.

    The context manager changes the current device to the given device index
    on entering the context and restores the original device on exiting.
    The device is switched using the provided device interface.
    device_interfaceindexr9   Nc                 .    || _         || _        d| _        y )N)rk   idxprev_idx)selfrk   rl   s      r!   __init__zDeviceGuard.__init__   s     !1r"   c                 r    | j                   +| j                  j                  | j                         | _        y y r-   )ro   rk   rH   rp   )rq   s    r!   	__enter__zDeviceGuard.__enter__   s-    88 11AA$((KDM  r"   typevalue	tracebackc                 p    | j                   *| j                  j                  | j                        | _         y)NF)ro   rk   rF   rp   )rq   ru   rv   rw   s       r!   __exit__zDeviceGuard.__exit__   s+    88,,BB4==QDHr"   )r#   r$   r%   r>   r	   r(   r   r@   rr   rt   r   ry   r2   r"   r!   rj   rj      sM     $_ 5>Fsm	LS   r"   rj   c                      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	ej                  j*                        Z e	ej                  j.                        Z e	ej                  j2                        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_device   s    5;*62r"   r9   c                  `    dt         v r	t         d   S t        j                  j                         S r   )r   rg   r   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 r   )
isinstancestrrg   r+   ru   rl   r{   rA   r;   r   ranger   rJ   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   0&C-r-   	r#   r$   r%   r?   r@   r7   r;   r1   r=   r2   r"   r!   rA   r}      sT    		<s 	< 
	< 
	/ 	/ 
	/
 
	D) 	D 
	Dr"   rA   r9   c                  >    t         j                  j                         S r-   )rg   r   rL   r2   r"   r!   rL   zCudaInterface.is_available   s    zz&&((r"   Nr+   c                    t         j                  j                  *t         j                  j	                  |       \  }}|dz  |z   S t         j                  j                  |       j                  j                  dd      d   S )N
   :   r   )rg   versionhipr   get_device_capabilityr=   gcnArchNamesplit)r+   majormins      r!   r`   z$CudaInterface.get_compute_capability   sh    ==$99&AJE32:##::33F;GGMMcSTUVWXXr"   r-   )r#   r$   r%   rg   r   r+   r   r   rA   r?   r;   r7   rJ   rM   rQ   rS   rX   r]   r=   r   r[   _exchange_devicerH   _maybe_exchange_devicerF   rd   rf   rL   r1   r`   r2   r"   r!   r{   r{      sv   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"5::#>#>?O()J)JK$UZZ%A%AB )$ ) ) Yy Y Yr"   r{   get_xpu_stream)_xpu_getCurrentRawStreamc                   f   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	ej                  j*                        Z e	ej                  j.                        Ze	defd       Ze	d
defd       Ze	ddedefd	       Zy)XpuInterfacec                   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)XpuInterface.Workerr+   c                     | t         d<   y Nxpur   r6   s    r!   r7   zXpuInterface.Worker.set_device   s    4:*51r"   r9   c                  `    dt         v r	t         d   S t        j                  j                         S r   )r   rg   r   r;   r2   r"   r!   r;   z"XpuInterface.Worker.current_device   s)    665e<<99++--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 r   )r   r   rg   r+   ru   rl   r   rA   r;   r   r   r   rJ   r=   r   s      r!   r=   z)XpuInterface.Worker.get_device_properties   s    !fc*"\\&1F!;;%///fell3#\\F~%,,;;=<< #599#9#9#;< II33A6  ;F073E:6BBr   r-   r   r2   r"   r!   rA   r      sT    		;s 	; 
	; 
	. 	. 
	.
 
	C) 	C 
	Cr"   rA   r9   c                  >    t         j                  j                         S r-   )rg   r   rL   r2   r"   r!   rL   zXpuInterface.is_available  s    yy%%''r"   Nr+   c                 D    t         j                  j                  |       }|S r-   )rg   r   r   )r+   ccs     r!   r`   z#XpuInterface.get_compute_capability  s    YY,,V4	r"   ra   c                 >    t         j                  j                         S r-   )rg   r   rd   rc   s    r!   rd   zXpuInterface.is_bf16_supported  s    yy**,,r"   r-   re   )r#   r$   r%   rg   r   r+   r   r   rA   r?   r;   r7   rJ   rM   rQ   rS   rX   r]   r=   r   r[   r   rH   r   rF   rf   rL   r1   r`   rd   r2   r"   r!   r   r      s|   YYFIIOOEYYFC C> "%))":":;Neii223J		 6 67L%))**+F!%))":":;Neii223J$UYY%@%@Auyy445K()H)HI!.1N"599#=#=>O()I)IJ ($ ( ( y   -t - - -r"   r   device_interfacesFr+   rk   c                 `    t        | t        j                        rt        |       } |t        | <   y r-   )r   rg   r+   r   r   )r+   rk   s     r!   register_interface_for_devicer   (  s&     &%,,'V 0fr"   r9   c                     t        | t        j                        rt        |       } t        s
t                | t        v r	t        |    S t        d|        )NzNo interface for device )r   rg   r+   r   _device_initializedinit_device_regr   r/   r6   s    r!   get_interface_for_devicer   0  sI    &%,,'V"" ((
 8A
BBr"   c                  J    t         s
t                t        j                         S r-   )r   r   r   itemsr2   r"   r!    get_registered_device_interfacesr   :  s    ""$$r"   c                  D   t        dt               t        t        j                  j                               D ]  } t        d|  t                t        dt               t        t        j                  j                               D ]  } t        d|  t                day )Nr   zcuda:r   zxpu:T)	r   r{   r   rg   r   rJ   r   r   r   )r   s    r!   r   r   @  s    !&-85::**,- B%aSk=AB "%6599))+, @%QCj,?@ r"   ))r   typingr   r   r   r   r   r   r	   r
   rg   torch._streambaser   r   r@   __annotations__r   _is_compiledtorch._Cr   r   r+   r   r1   r   r   ru   r   r(   rj   r{   r   r   r   r   r   r   r   r   r   r   r2   r"   r!   <module>r      s    N N N  5 (C5#:./ /::EO%,,S$./	 46  $sCx. 513 S#X 39$ 9X" 3 X"v 6@YO @YF 3%*-. .99CN=-? =-@ 79 4T/223 8 1#u||#$18<_8M1CU3+<%= C$BW C%(5d?>S9S3T*U %
r"   