
    קg-                        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                                        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                                        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(dS )    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                 Z   |d         }d|v r?t          j        |d                   rt          |d         t                    s
J d            d|v r?t          j        |d                   rt          |d         t                    s
J d             t                      j        | g|R 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       Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/device_interface.pyr   zDeviceInterfaceMeta.__new__   s    Awl""?<#899 PjW%z? ? P POP P P |##?<#9:: RzX&@ @ R RQR R R uwww8888888    )__name__
__module____qualname__r   __classcell__)r    s   @r!   r   r      s8        
9 
9 
9 
9 
9 
9 
9 
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dS ) 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dS )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                   h    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	dS )	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   .   s        	 	 
	&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"   F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                   X    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dS )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                 0    || _         || _        d| _        d S )N)rk   idxprev_idx)selfrk   rl   s      r!   __init__zDeviceGuard.__init__   s     !1r"   c                 `    | j         &| j                            | j                   | _        d S d S r-   )ro   rk   rH   rp   )rq   s    r!   	__enter__zDeviceGuard.__enter__   s0    8 1AA$(KKDMMM  r"   typevalue	tracebackc                 \    | j         $| j                            | j                  | _         dS )NF)ro   rk   rF   rp   )rq   ru   rv   rw   s       r!   __exit__zDeviceGuard.__exit__   s)    8,BB4=QQDHur"   )r#   r$   r%   r>   r	   r(   r   r@   rr   rt   r   ry   r2   r"   r!   rj   rj      s          $_ 5>Fsm	   L L 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        j                  Ze	defd            Ze	ddefd            ZdS )	CudaInterfacec                   d    e Zd Zedefd            Zedefd            Zeddefd            ZdS )CudaInterface.Workerr+   c                     | t           d<   d S Ncudar   r6   s    r!   r7   zCudaInterface.Worker.set_device   s    5;*6222r"   r9   c                  j    dt           v rt           d         S t          j                                        S r   )r   rg   r   r;   r2   r"   r!   r;   z#CudaInterface.Worker.current_device   s-    7775f==:,,...r"   Nc                    | Wt          | t                    r!t          j        |           } | j        dk    sJ t          | t          j                  r| j        } | t          j                                        } dt          vr?d t          t          j                                                  D             }|t          d<   t          d         |          S )Nr   c                 L    g | ]!}t           j                            |          "S r2   )rg   r   r=   .0is     r!   
<listcomp>z>CudaInterface.Worker.get_device_properties.<locals>.<listcomp>   s8        J44Q77  r"   )
isinstancestrrg   r+   ru   rl   r{   rA   r;   r   ranger   rJ   r+   device_props     r!   r=   z*CudaInterface.Worker.get_device_properties   s    !fc** 1"\&11F!;&0000fel33 *#\F~&-<<>>=== "5:#:#:#<#<==   <G083F;FCCr"   r-   	r#   r$   r%   r?   r@   r7   r;   r1   r=   r2   r"   r!   rA   r}      s        		<s 	< 	< 	< 
	< 
	/ 	/ 	/ 	/ 
	/
 
	D 	D) 	D 	D 	D 
	D 	D 	Dr"   rA   r9   c                  >    t           j                                        S r-   )rg   r   rL   r2   r"   r!   rL   zCudaInterface.is_available   s    z&&(((r"   Nr+   c                     t           j        j        *t           j                            |           \  }}|dz  |z   S t           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   se    =$99&AAJE32:##:33F;;GMMcSTU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{      s       ZF JEZFD D D D D D D D> "\%*";<<Nej344J<
 788L\%*+,,F!\%*";<<Nej344J$UZ%ABB,uz566K(L)IJJ!\/22N"l5:#>??O(L)JKK$UZ%ABB )$ ) ) ) \) Y Yy Y Y Y \Y Y Yr"   r{   get_xpu_stream)_xpu_getCurrentRawStreamc                      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dS )XpuInterfacec                   d    e Zd Zedefd            Zedefd            Zeddefd            ZdS )XpuInterface.Workerr+   c                     | t           d<   d S Nxpur   r6   s    r!   r7   zXpuInterface.Worker.set_device   s    4:*5111r"   r9   c                  j    dt           v rt           d         S t          j                                        S r   )r   rg   r   r;   r2   r"   r!   r;   z"XpuInterface.Worker.current_device   s-    6665e<<9++---r"   Nc                    | Wt          | t                    r!t          j        |           } | j        dk    sJ t          | t          j                  r| j        } | t          j                                        } dt          vr?d t          t          j                                                  D             }|t          d<   t          d         |          S )Nr   c                 L    g | ]!}t           j                            |          "S r2   )rg   r   r=   r   s     r!   r   z=XpuInterface.Worker.get_device_properties.<locals>.<listcomp>   s8        I33A66  r"   )r   r   rg   r+   ru   rl   r   rA   r;   r   r   r   rJ   r   s     r!   r=   z)XpuInterface.Worker.get_device_properties   s    !fc** 0"\&11F!;%////fel33 *#\F~%,;;==<<< "59#9#9#;#;<<   ;F073E:6BBr"   r-   r   r2   r"   r!   rA   r      s        		;s 	; 	; 	; 
	; 
	. 	. 	. 	. 
	.
 
	C 	C) 	C 	C 	C 
	C 	C 	Cr"   rA   r9   c                  >    t           j                                        S r-   )rg   r   rL   r2   r"   r!   rL   zXpuInterface.is_available  s    y%%'''r"   Nr+   c                 D    t           j                            |           }|S r-   )rg   r   r   )r+   ccs     r!   r`   z#XpuInterface.get_compute_capability  s    Y,,V44	r"   Fra   c                 >    t           j                                        S r-   )rg   r   rd   rc   s    r!   rd   zXpuInterface.is_bf16_supported  s    y**,,,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       YFIOEYFC C C C C C C C> "\%)":;;Nei233J<	 677L\%)*++F!\%)":;;Nei233J$UY%@AA,uy455K(L)HII!\.11N"l59#=>>O(L)IJJ ($ ( ( ( \(  y    \ - -t - - - - \- - -r"   r   device_interfacesFr+   rk   c                 l    t          | t          j                  rt          |           } |t          | <   d S r-   )r   rg   r+   r   r   )r+   rk   s     r!   register_interface_for_devicer   (  s4     &%,'' 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  sc    &%,'' V """ ((
AAA
B
BBr"   c                  ^    t           st                       t                                          S r-   )r   r   r   itemsr2   r"   r!    get_registered_device_interfacesr   :  s(     ""$$$r"   c                  v   t          dt                     t          t          j                                                  D ]} t          d|  t                     t          dt                     t          t          j                                                  D ]} t          d|  t                     dad S )Nr   zcuda:r   zxpu:T)	r   r{   r   rg   r   rJ   r   r   r   )r   s    r!   r   r   @  s    !&-8885:**,,-- B B%kakk=AAAA!%66659))++,, @ @%jQjj,????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 N N N N N N N N N N N N N N N N N  5 5 5 5 5 5 5 5 (C5#:./ / / /: EEEEEEEO%,S$./	 46  $sCx. 5 5 513 S#X 3 3 39 9 9 9 9$ 9 9 9X" X" X" X" X" 3 X" X" X" X"v       6@Y @Y @Y @Y @YO @Y @Y @YF 3%*-. . . .9 CCCCCCCN=- =- =- =- =-? =- =- =-@ 79 4T/223 8 8 8 1#u|#$18<_8M1 1 1 1CU3+<%= C$BW C C C C%(5d?>S9S3T*U % % % %
 
 
 
 
r"   