§
    ŠŠtj�\  ã                   ó¢  — U d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZ ddlZddlmZ eegef         dz  ed<   ej                             ¦   «         rdd	lmZ ndZi Zeeef         ed
<   i Zeeef         ed<    G d„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Zeegef         dz  ed<   ej                             ¦   «         rddlmZ  ndZ  G d„ de¦  «        Z!eegef         dz  ed<   ej"                             ¦   «         rddlm#Z$ ndZ$ G d„ de¦  «        Z%e	 G d„ d¦  «        ¦   «         Z& 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#a,d$eej-        z  d%e+e         d&dfd'„Z.d$eej-        z  d&e+e         fd(„Z/d&ee0ee+e         f                  fd)„Z1d+d*„Z2dS ),a  
Device abstraction layer for TorchDynamo and Inductor backends.

This module provides a unified interface for different hardware backends (CUDA, XPU,
CPU, MPS, MTIA) through a common device interface. Key components include:

- DeviceInterface: Base class defining the common API for all device types
- Device-specific implementations: CudaInterface, XpuInterface, CpuInterface, MpsInterface, MtiaInterface
- Device registration system for managing available backends
- Worker APIs for multi-processing scenarios
- Stream and event management across different devices
- Device property caching for worker processes

The abstraction layer enables device-agnostic code in TorchDynamo while allowing
specialized implementations for each hardware backend's unique features.
é    N©Ú
namedtuple)ÚCallableÚIterable)Ú	dataclass)ÚAnyÚLiteral©Úhas_torch_tpuÚget_cuda_stream)Ú_cuda_getCurrentRawStreamÚ caching_worker_device_propertiesÚcaching_worker_current_devicesc            	       óœ  — e Zd ZdZ G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d	¦  «        Zed
e	fd„¦   «         Z
edej        j        d
dfd„¦   «         Zede	d
e	fd„¦   «         Zede	d
e	fd„¦   «         Zed
e	fd„¦   «         Zed
efd„¦   «         Zedej        d
efd„¦   «         Zed
ej        fd„¦   «         Zedej        d
dfd„¦   «         Zede	de	de	d
dfd„¦   «         Zede	d
e	fd„¦   «         Zed'dej        j        d
dfd„¦   «         Zed'dej        j        d
efd„¦   «         Zed'dej        j        d
efd„¦   «         Zed(d ed
efd!„¦   «         Ze	 d(d"ej        d ed
efd#„¦   «         Z ed'dej        j        d
e	fd$„¦   «         Z!ed'dej        j        d
efd%„¦   «         Z"ed'dej        j        d
d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                   ó2   — e Zd Zdej        j        defd„ZdS )úDeviceInterface.deviceÚdeviceÚreturnc                 ó   — t           ‚©N©ÚNotImplementedError©Úclsr   s     ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/device_interface.pyÚ__new__zDeviceInterface.device.__new__/   s   € Ý%Ð%ó    N)Ú__name__Ú
__module__Ú__qualname__ÚtorchÚtypesÚDevicer   r   © r   r   r   r   .   s;   € € € € € ð	& ¤Ô!3ð 	&¸ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&r   r   c                   ó"   — e Zd Zdededefd„ZdS )úDeviceInterface.EventÚargsÚkwargsr   c                 ó    — t          d¦  «        ‚)NzYEvent should be inherited from torch.Event, otherwise, it couldn't be captured by dynamo.r   ©r   r(   r)   s      r   r   zDeviceInterface.Event.__new__3   s   € Ý%Økñô ð r   N©r   r    r!   r   r   r%   r   r   ÚEventr'   2   ó=   € € € € € ð	 ð 	¨sð 	°sð 	ð 	ð 	ð 	ð 	ð 	r   r-   c                   ó"   — e Zd Zdededefd„ZdS )úDeviceInterface.Streamr(   r)   r   c                 ó    — t          d¦  «        ‚)Nz[Stream should be inherited from torch.Stream, otherwise, it couldn't be captured by dynamo.r   r+   s      r   r   zDeviceInterface.Stream.__new__9   s   € Ý%Ømñô ð r   Nr,   r%   r   r   ÚStreamr0   8   r.   r   r2   c                   ó„   — e Zd ZdZededdfd„¦   «         Zedefd„¦   «         Zeddej	        j
        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   r   Nc                 ó   — t           ‚r   r   ©r   s    r   Ú
set_devicez!DeviceInterface.Worker.set_deviceF   ó   € å%Ð%r   c                  ó   — t           ‚r   r   r%   r   r   Úcurrent_devicez%DeviceInterface.Worker.current_deviceJ   r8   r   c                 ó   — t           ‚r   r   r6   s    r   Úget_device_propertiesz,DeviceInterface.Worker.get_device_propertiesN   r8   r   r   )r   r    r!   Ú__doc__ÚstaticmethodÚintr7   r:   r"   r#   r$   r   r<   r%   r   r   ÚWorkerr4   >   s«   € € € € € ð	ð 	ð 
ð	&˜sð 	& tð 	&ð 	&ð 	&ñ 
Œð	&ð 
ð	& ð 	&ð 	&ð 	&ñ 
Œð	&ð 
ð	&ð 	&¨%¬+Ô*<ð 	&Èð 	&ð 	&ð 	&ñ 
Œð	&ð 	&ð 	&r   r@   r   c                  ó   — t           ‚r   r   r%   r   r   r:   zDeviceInterface.current_deviceR   ó   € å!Ð!r   Nc                 ó   — t           ‚r   r   r6   s    r   r7   zDeviceInterface.set_deviceV   rB   r   c                 ó   — t           ‚r   r   r6   s    r   Úmaybe_exchange_devicez%DeviceInterface.maybe_exchange_deviceZ   rB   r   c                 ó   — t           ‚r   r   r6   s    r   Úexchange_devicezDeviceInterface.exchange_device^   rB   r   c                  ó   — t           ‚r   r   r%   r   r   Údevice_countzDeviceInterface.device_countb   rB   r   c                  ó   — t           ‚r   r   r%   r   r   Úis_availablezDeviceInterface.is_availablef   rB   r   Ústreamc                 ó   — t           ‚r   r   ©rL   s    r   rL   zDeviceInterface.streamj   rB   r   c                  ó   — t           ‚r   r   r%   r   r   Úcurrent_streamzDeviceInterface.current_streamn   rB   r   c                 ó   — t           ‚r   r   rN   s    r   Ú
set_streamzDeviceInterface.set_streamr   rB   r   Ú	stream_idÚdevice_indexÚdevice_typec                 ó   — t           ‚r   r   )rS   rT   rU   s      r   Ú_set_stream_by_idz!DeviceInterface._set_stream_by_idv   rB   r   Ú
device_idxc                 ó   — t           ‚r   r   ©rX   s    r   Úget_raw_streamzDeviceInterface.get_raw_streamz   rB   r   c                 ó   — t           ‚r   r   r6   s    r   ÚsynchronizezDeviceInterface.synchronize~   rB   r   c                 ó6   — | j                              |¦  «        S r   )r@   r<   r   s     r   r<   z%DeviceInterface.get_device_properties‚   s   € àŒz×/Ò/°Ñ7Ô7Ð7r   c                 ó   — t           ‚r   r   r6   s    r   Úget_compute_capabilityz&DeviceInterface.get_compute_capability†   rB   r   FÚincluding_emulationc                 ó   — t           ‚r   r   ©ra   s    r   Úis_bf16_supportedz!DeviceInterface.is_bf16_supportedŠ   rB   r   Údtypec                 óL   — |t           j        k    p|                      |¦  «        S r   )r"   Úbfloat16rd   ©r   re   ra   s      r   Úis_dtype_supportedz"DeviceInterface.is_dtype_supportedŽ   s%   € ð �œÒ&ÐT¨#×*?Ò*?Ð@SÑ*TÔ*TÐTr   c                 ó   — t           ‚r   r   r6   s    r   Úmemory_allocatedz DeviceInterface.memory_allocated”   rB   r   c                 ó   — dS )z’
        Returns True if the device has Triton support, False otherwise, even if
        the appropriate Triton backend is not available.
        Fr%   r6   s    r   Úis_triton_capablez!DeviceInterface.is_triton_capable˜   s	   € ð ˆur   c                 óL   — |                       ¦   «         st          d¦  «        ‚dS )aH  
        Raises a `RuntimeError` with the appropriate human-readable instructions
        to resolve the issue if Triton is not available for the given device, or
        the default device if `device` is `None`.

        The caller should ensure the presence of the 'triton' package before
        calling this method.
        z/This device is not capable of supporting TritonN)rm   ÚRuntimeErrorr   s     r   Úraise_if_triton_unavailablez+DeviceInterface.raise_if_triton_unavailable    s4   € ð ×$Ò$Ñ&Ô&ð 	RÝÐPÑQÔQÐQð	Rð 	Rr   r   ©F)$r   r    r!   r=   r   r-   r2   r@   r>   r?   r:   r"   r#   r$   r7   rE   rG   rI   ÚboolrK   r   rL   rP   rR   rW   r[   r]   Úclassmethodr<   r`   rd   re   ri   rk   rm   rp   r%   r   r   r   r   (   sŒ  € € € € € ðð ð
&ð &ð &ð &ð &ñ &ô &ð &ðð ð ð ð ñ ô ð ðð ð ð ð ñ ô ð ð&ð &ð &ð &ð &ñ &ô &ð &ð( ð"˜Cð "ð "ð "ñ „\ð"ð ð"˜5œ;Ô-ð "°$ð "ð "ð "ñ „\ð"ð ð" cð "¨cð "ð "ð "ñ „\ð"ð ð" ð "¨ð "ð "ð "ñ „\ð"ð ð"˜#ð "ð "ð "ñ „\ð"ð ð"˜$ð "ð "ð "ñ „\ð"ð ð"�u”|ð "¨ð "ð "ð "ñ „\ð"ð ð"˜EœLð "ð "ð "ñ „\ð"ð ð"˜5œ<ð "¨Dð "ð "ð "ñ „\ð"ð ð" Sð "¸ð "È#ð "ÐRVð "ð "ð "ñ „\ð"ð ð" 3ð "¨3ð "ð "ð "ñ „\ð"ð ð"ð "˜EœKÔ.ð "¸$ð "ð "ð "ñ „\ð"ð ð8ð 8¨5¬;Ô+=ð 8Èð 8ð 8ð 8ñ „[ð8ð ð"ð " u¤{Ô'9ð "ÀSð "ð "ð "ñ „\ð"ð ð"ð "¨tð "Àð "ð "ð "ñ „\ð"ð à=BðUð UØ”KðUØ6:ðUà	ðUð Uð Uñ „[ðUð
 ð"ð " ¤Ô!3ð "¸sð "ð "ð "ñ „\ð"ð ðð  %¤+Ô"4ð Àð ð ð ñ „\ðð ð
Rð 
R°´Ô1Cð 
RÈtð 
Rð 
Rð 
Rñ „[ð
Rð 
Rð 
Rr   r   c            	       ód   — e Zd ZdZdee         dedz  ddfd„Zdd„Zde	d	e	d
e	de
d         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ÚindexNr   c                 ó0   — || _         || _        d| _        d S )Néÿÿÿÿ)rv   ÚidxÚprev_idx)Úselfrv   rw   s      r   Ú__init__zDeviceGuard.__init__¸   s   € ð !1ˆÔØˆŒØˆŒˆˆr   c                 ó`   — | j         �&| j                             | j         ¦  «        | _        d S d S r   )rz   rv   rG   r{   )r|   s    r   Ú	__enter__zDeviceGuard.__enter__¿   s0   € ØŒ8ÐØ Ô1×AÒAÀ$Ä(ÑKÔKˆDŒMˆMˆMð  Ðr   ÚtypeÚvalueÚ	tracebackFc                 ó\   — | j         �$| j                             | j        ¦  «        | _         dS )NF)rz   rv   rE   r{   )r|   r€   r�   r‚   s       r   Ú__exit__zDeviceGuard.__exit__Ã   s)   € ØŒ8ÐØÔ,×BÒBÀ4Ä=ÑQÔQˆDŒHØˆur   ©r   N)r   r    r!   r=   r€   r   r?   r}   r   r   r	   r„   r%   r   r   ru   ru   ®   sŸ   € € € € € ðð ðØ $ _Ô 5ðØ>AÀD¹jðà	ðð ð ð ðLð Lð Lð Lð˜Sð ¨ð ¸ð ÀÈÄð ð ð ð ð ð r   ru   c                   ól  — 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	ej        j        ¦  «        Ze	defd„¦   «         Ze	d
dej        j        dee z  fd„¦   «         Z!e	d
dej        j        defd„¦   «         Z"e	d
dej        j        ddfd	„¦   «         Z#dS )ÚCudaInterfacec                   ó€   — e Zd Zededdfd„¦   «         Zedefd„¦   «         Zeddej        j	        de
fd„¦   «         ZdS )úCudaInterface.Workerr   r   Nc                 ó   — | t           d<   d S ©NÚcuda©r   r6   s    r   r7   zCudaInterface.Worker.set_deviceÓ   ó   € à5;Õ*¨6Ñ2Ð2Ð2r   c                  ój   — dt           v rt           d         S t          j                             ¦   «         S r‹   )r   r"   rŒ   r:   r%   r   r   r:   z#CudaInterface.Worker.current_device×   ó-   € àÕ7Ð7Ð7Ý5°fÔ=Ð=Ý”:×,Ò,Ñ.Ô.Ð.r   c                 óÖ  — | �mt          | t          ¦  «        r7t          j        | ¦  «        } | j        dk    rt          d| j        › d�¦  «        ‚t          | t          j        ¦  «        r| j        } | €t          j         	                    ¦   «         } dt          vr?d„ t          t          j                             ¦   «         ¦  «        D ¦   «         }|t          d<   t          d         |          S )NrŒ   z"Expected device type 'cuda', got 'ú'c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r%   )r"   rŒ   r<   ©Ú.0Úis     r   ú
<listcomp>z>CudaInterface.Worker.get_device_properties.<locals>.<listcomp>ì   ó8   € ð ð ð àõ ”J×4Ò4°QÑ7Ô7ðð ð r   )Ú
isinstanceÚstrr"   r   r€   ÚAssertionErrorrw   r‡   r@   r:   r   ÚrangerŒ   rI   ©r   Údevice_props     r   r<   z*CudaInterface.Worker.get_device_propertiesÝ   óì   € àÐ!Ý˜f¥cÑ*Ô*ð Ý"œ\¨&Ñ1Ô1�FØ”{ fÒ,Ð,Ý,ØOÀÄÐOÐOÐOñô ð õ ˜f¥e¤lÑ3Ô3ð *Ø#œ\�FØˆ~Ý&Ô-×<Ò<Ñ>Ô>�àÕ=Ð=Ð=ðð å"¥5¤:×#:Ò#:Ñ#<Ô#<Ñ=Ô=ðñ ô �ð <GÕ0°Ñ8å3°FÔ;¸FÔCÐCr   r   ©r   r    r!   r>   r?   r7   r:   r"   r#   r$   r   r<   r%   r   r   r@   r‰   Ò   ó¨   € € € € € Ø	ð	<˜sð 	< tð 	<ð 	<ð 	<ñ 
Œð	<ð 
ð	/ ð 	/ð 	/ð 	/ñ 
Œð	/ð
 
ð	Dð 	D¨%¬+Ô*<ð 	DÈð 	Dð 	Dð 	Dñ 
Œð	Dð 	Dð 	Dr   r@   r   c                  ó>   — t           j                             ¦   «         S r   )r"   rŒ   rK   r%   r   r   rK   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   )r"   ÚversionÚhiprŒ   Úget_device_capabilityr<   ÚgcnArchNameÚsplit)r   ÚmajorÚmins      r   r`   z$CudaInterface.get_compute_capability  se   € åŒ=ÔÐ$Ýœ×9Ò9¸&ÑAÔA‰JˆE�3Ø˜2‘: Ñ#Ð#å”:×3Ò3°FÑ;Ô;ÔG×MÒMÈcÐSTÑUÔUÐVWÔXÐXr   c                 óx   — t           j        j        d up't           j                             | ¦  «        j        dk    S )Né   )r"   r§   r¨   rŒ   r<   r¬   r6   s    r   rm   zCudaInterface.is_triton_capable  s7   € õ ŒMÔ TÐ)ð CÝŒz×/Ò/°Ñ7Ô7Ô=ÀÒBð	
r   c                 ó`  — ddl m} t                               | ¦  «        s<t          j                             | ¦  «        } ||t          j        ¦   «         ¦  «        ‚dd l	}t          j
        j        �d|j        j        vrt          d¦  «        ‚d S d|j        j        vrt          d¦  «        ‚d S )Nr   )ÚGPUTooOldForTritonÚamdz'triton not built with the 'amd' backendÚnvidiaz*triton not built with the 'nvidia' backend)Útorch._inductor.excr±   r‡   rm   r"   rŒ   r<   ÚinspectÚcurrentframeÚtriton.backendsr§   r¨   Úbackendsro   )r   r±   Údevice_propsÚtritons       r   rp   z)CudaInterface.raise_if_triton_unavailable  sÁ   € à:Ð:Ð:Ð:Ð:Ð:å×.Ò.¨vÑ6Ô6ð 	KÝ œ:×;Ò;¸FÑCÔCˆLØ$Ð$ \µ7Ô3GÑ3IÔ3IÑJÔJÐJàÐÐÐåŒ=ÔÐ(Ø˜FœOÔ4Ð4Ð4Ý"Ð#LÑMÔMÐMð 5Ð4à˜Vœ_Ô5Ð5Ð5ÝÐKÑLÔLÐLð 6Ð5r   r   )$r   r    r!   r"   rŒ   r   r-   r2   r@   r>   r:   r7   rI   rL   rP   rR   rW   r]   r<   r   r[   Ú_exchange_devicerG   Ú_maybe_exchange_devicerE   rk   rd   rr   rK   r#   r$   r?   rš   r`   rm   rp   r%   r   r   r‡   r‡   É   sb  € € € € € ØŒZÔ€Fð ŒJÔ€EØŒZÔ€Fð Dð  Dð  Dð  Dð  Dñ  Dô  Dð  DðD "�\ %¤*Ô";Ñ<Ô<€NØ�˜eœjÔ3Ñ4Ô4€JØ�< ¤
Ô 7Ñ8Ô8€LØˆ\˜%œ*Ô+Ñ,Ô,€FØ!�\ %¤*Ô";Ñ<Ô<€NØ�˜eœjÔ3Ñ4Ô4€JØ$˜ U¤ZÔ%AÑBÔBÐØ�,˜uœzÔ5Ñ6Ô6€KØ(˜L¨¬Ô)IÑJÔJÐØ!�\ /Ñ2Ô2€NØ"�l 5¤:Ô#>Ñ?Ô?€OØ(˜L¨¬Ô)JÑKÔKÐØ#�| E¤JÔ$?Ñ@Ô@ÐØ$˜ U¤ZÔ%AÑBÔBÐð ð)˜$ð )ð )ð )ñ „\ð)ð ðYð Y u¤{Ô'9ð YÀSÈ3ÁYð Yð Yð Yñ „\ðYð ð
ð 
 %¤+Ô"4ð 
Àð 
ð 
ð 
ñ „\ð
ð ðMð M¨E¬KÔ,>ð MÈ$ð Mð Mð Mñ „\ðMð Mð Mr   r‡   Úget_mtia_stream)Ú_mtia_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	ej        j        ¦  «        Z e	ej        j        ¦  «        Ze	defd„¦   «         Ze	d
dej        j        defd„¦   «         Z e	d
dej        j        defd„¦   «         Z!e	d
dej        j        ddfd	„¦   «         Z"dS )ÚMtiaInterfacec                   ó€   — e Zd Zededdfd„¦   «         Zedefd„¦   «         Zeddej        j	        de
fd„¦   «         ZdS )úMtiaInterface.Workerr   r   Nc                 ó   — | t           d<   d S ©NÚmtiar�   r6   s    r   r7   zMtiaInterface.Worker.set_device6  rŽ   r   c                  ój   — dt           v rt           d         S t          j                             ¦   «         S rÄ   )r   r"   rÅ   r:   r%   r   r   r:   z#MtiaInterface.Worker.current_device:  r�   r   c                 óÖ  — | �mt          | t          ¦  «        r7t          j        | ¦  «        } | j        dk    rt          d| j        › d�¦  «        ‚t          | t          j        ¦  «        r| j        } | €t          j         	                    ¦   «         } dt          vr?d„ t          t          j                             ¦   «         ¦  «        D ¦   «         }|t          d<   t          d         |          S )NrÅ   z"Expected device type 'mtia', got 'r’   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r%   )r"   rÅ   r<   r”   s     r   r—   z>MtiaInterface.Worker.get_device_properties.<locals>.<listcomp>O  r˜   r   )r™   rš   r"   r   r€   r›   rw   rÀ   r@   r:   r   rœ   rÅ   rI   r�   s     r   r<   z*MtiaInterface.Worker.get_device_properties@  rŸ   r   r   r    r%   r   r   r@   rÂ   5  r¡   r   r@   r   c                  óB   — t           j                             ¦   «         } | S r   )r"   rÅ   rK   )Úrets    r   rK   zMtiaInterface.is_availableg  s   € åŒj×%Ò%Ñ'Ô'ˆØˆ
r   Nr   c                 óD   — t           j                             | ¦  «        }|S r   )r"   rÅ   r©   ©r   Úccs     r   r`   z$MtiaInterface.get_compute_capabilityl  s   € åŒZ×-Ò-¨fÑ5Ô5ˆØˆ	r   c                 ó   — dS ©NTr%   r6   s    r   rm   zMtiaInterface.is_triton_capableq  ó   € àˆtr   c                 óH   — dd l }d|j        j        vrt          d¦  «        ‚d S )Nr   rÅ   z(triton not built with the 'mtia' backend©r·   r¸   ro   ©r   rº   s     r   rp   z)MtiaInterface.raise_if_triton_unavailableu  s5   € àÐÐÐà˜œÔ1Ð1Ð1ÝÐIÑJÔJÐJð 2Ð1r   r   )#r   r    r!   r"   rÅ   r   r-   r2   r@   r>   r:   r7   rI   rL   rP   rR   rW   r]   r<   r½   r[   r»   rG   r¼   rE   rk   rd   rr   rK   r#   r$   r   r`   rm   rp   r%   r   r   rÀ   rÀ   /  sU  € € € € € ØŒZÔ€FØŒJÔ€EØŒZÔ€Fð Dð  Dð  Dð  Dð  Dñ  Dô  Dð  DðD "�\ %¤*Ô";Ñ<Ô<€NØ�˜eœjÔ3Ñ4Ô4€JØ�< ¤
Ô 7Ñ8Ô8€LØˆ\˜%œ*Ô+Ñ,Ô,€FØ!�\ %¤*Ô";Ñ<Ô<€NØ�˜eœjÔ3Ñ4Ô4€JØ$˜ U¤ZÔ%AÑBÔBÐØ�,˜uœzÔ5Ñ6Ô6€KØ(˜L¨¬Ô)IÑJÔJÐØ!�\ /Ñ2Ô2€NØ"�l 5¤:Ô#>Ñ?Ô?€OØ(˜L¨¬Ô)JÑKÔKÐØ#�| E¤JÔ$?Ñ@Ô@ÐØ$˜ U¤ZÔ%AÑBÔBÐð ð˜$ð ð ð ñ „\ðð ðð  u¤{Ô'9ð ÀSð ð ð ñ „\ðð ðð  %¤+Ô"4ð Àð ð ð ñ „\ðð ðKð K¨E¬KÔ,>ð KÈ$ð Kð Kð Kñ „\ðKð Kð K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	ej        j        ¦  «        Ze	defd„¦   «         Ze	ddej        j        defd„¦   «         Ze	dd	edefd
„¦   «         Z e	ddej        j        defd„¦   «         Z!e	ddej        j        ddfd„¦   «         Z"dS )ÚXpuInterfacec                   ó€   — e Zd Zededdfd„¦   «         Zedefd„¦   «         Zeddej        j	        de
fd„¦   «         ZdS )úXpuInterface.Workerr   r   Nc                 ó   — | t           d<   d S ©NÚxpur�   r6   s    r   r7   zXpuInterface.Worker.set_device‹  s   € à4:Õ*¨5Ñ1Ð1Ð1r   c                  ój   — dt           v rt           d         S t          j                             ¦   «         S rÛ   )r   r"   rÜ   r:   r%   r   r   r:   z"XpuInterface.Worker.current_device�  s-   € àÕ6Ð6Ð6Ý5°eÔ<Ð<Ý”9×+Ò+Ñ-Ô-Ð-r   c                 óÖ  — | �mt          | t          ¦  «        r7t          j        | ¦  «        } | j        dk    rt          d| j        › d�¦  «        ‚t          | t          j        ¦  «        r| j        } | €t          j         	                    ¦   «         } dt          vr?d„ t          t          j                             ¦   «         ¦  «        D ¦   «         }|t          d<   t          d         |          S )NrÜ   z!Expected device type 'xpu', got 'r’   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r%   )r"   rÜ   r<   r”   s     r   r—   z=XpuInterface.Worker.get_device_properties.<locals>.<listcomp>¤  s8   € ð ð ð àõ ”I×3Ò3°AÑ6Ô6ðð ð r   )r™   rš   r"   r   r€   r›   rw   r×   r@   r:   r   rœ   rÜ   rI   r�   s     r   r<   z)XpuInterface.Worker.get_device_properties•  sì   € àÐ!Ý˜f¥cÑ*Ô*ð Ý"œ\¨&Ñ1Ô1�FØ”{ eÒ+Ð+Ý,ØNÀÄÐNÐNÐNñô ð õ ˜f¥e¤lÑ3Ô3ð *Ø#œ\�FØˆ~Ý%Ô,×;Ò;Ñ=Ô=�àÕ<Ð<Ð<ðð å"¥5¤9×#9Ò#9Ñ#;Ô#;Ñ<Ô<ðñ ô �ð ;FÕ0°Ñ7å3°EÔ:¸6ÔBÐBr   r   r    r%   r   r   r@   rÙ   Š  s¨   € € € € € Ø	ð	;˜sð 	; tð 	;ð 	;ð 	;ñ 
Œð	;ð 
ð	. ð 	.ð 	.ð 	.ñ 
Œð	.ð
 
ð	Cð 	C¨%¬+Ô*<ð 	CÈð 	Cð 	Cð 	Cñ 
Œð	Cð 	Cð 	Cr   r@   r   c                  ó>   — t           j                             ¦   «         S r   )r"   rÜ   rK   r%   r   r   rK   zXpuInterface.is_available»  s   € åŒy×%Ò%Ñ'Ô'Ð'r   Nr   c                 óD   — t           j                             | ¦  «        }|S r   )r"   rÜ   r©   rÌ   s     r   r`   z#XpuInterface.get_compute_capability¿  s   € åŒY×,Ò,¨VÑ4Ô4ˆØˆ	r   Fra   c                 ó>   — t           j                             ¦   «         S r   )r"   rÜ   rd   rc   s    r   rd   zXpuInterface.is_bf16_supportedÄ  s   € åŒy×*Ò*Ñ,Ô,Ð,r   c                 ó   — dS rÏ   r%   r6   s    r   rm   zXpuInterface.is_triton_capableÈ  rÐ   r   c                 óH   — dd l }d|j        j        vrt          d¦  «        ‚d S )Nr   Úintelz)triton not built with the 'intel' backendrÒ   rÓ   s     r   rp   z(XpuInterface.raise_if_triton_unavailableÌ  s5   € àÐÐÐà˜&œ/Ô2Ð2Ð2ÝÐJÑKÔKÐKð 3Ð2r   r   rq   )#r   r    r!   r"   rÜ   r   r-   r2   r@   r>   r:   r7   rI   rL   rP   rR   rW   r]   r<   rÔ   r[   r»   rG   r¼   rE   rk   rr   rK   r#   r$   r   r`   rd   rm   rp   r%   r   r   r×   r×   „  sr  € € € € € ØŒYÔ€FØŒIŒO€EØŒYÔ€Fð Cð  Cð  Cð  Cð  Cñ  Cô  Cð  CðD "�\ %¤)Ô":Ñ;Ô;€NØ�˜eœiÔ2Ñ3Ô3€JØ�< ¤	Ô 6Ñ7Ô7€LØˆ\˜%œ)Ô*Ñ+Ô+€FØ!�\ %¤)Ô":Ñ;Ô;€NØ�˜eœiÔ2Ñ3Ô3€JØ$˜ U¤YÔ%@ÑAÔAÐØ�,˜uœyÔ4Ñ5Ô5€KØ(˜L¨¬Ô)HÑIÔIÐØ!�\ .Ñ1Ô1€NØ"�l 5¤9Ô#=Ñ>Ô>€OØ(˜L¨¬Ô)IÑJÔJÐØ#�| E¤IÔ$>Ñ?Ô?Ðð ð(˜$ð (ð (ð (ñ „\ð(ð ðð  u¤{Ô'9ð ÀSð ð ð ñ „\ðð ð-ð -¨tð -Àð -ð -ð -ñ „\ð-ð ðð  %¤+Ô"4ð Àð ð ð ñ „\ðð ðLð L¨E¬KÔ,>ð LÈ$ð Lð Lð Lñ „\ðLð Lð Lr   r×   c                   ó   — e Zd ZU eed<   dS )ÚCpuDevicePropertiesÚmulti_processor_countN)r   r    r!   r?   Ú__annotations__r%   r   r   rç   rç   Ô  s   € € € € € € àÐÐÑÐÐr   rç   c                   ó   — e Zd Z G d„ dej        ¦  «        Z G d„ d¦  «        Zedefd„¦   «         Zeddedefd	„¦   «         Z	eddej
        j        defd„¦   «         Zededefd„¦   «         Zedefd„¦   «         Zeddej
        j        dd
fd„¦   «         Zeddej
        j        defd„¦   «         Zeddej
        j        dd
fd„¦   «         Zd
S )ÚCpuInterfacec                   óB   — e Zd Zd
deddfd„Zdedefd„Zddeddfd	„ZdS )úCpuInterface.EventTÚenable_timingr   Nc                 ó   — d| _         d S )Ng        ©Útime)r|   rî   s     r   r}   zCpuInterface.Event.__init__Ü  s   € ØˆDŒIˆIˆIr   Úotherc                 ó&   — |j         | j         z
  dz  S )Niè  rð   )r|   rò   s     r   Úelapsed_timezCpuInterface.Event.elapsed_timeß  s   € Ø”J ¤Ñ*¨dÑ2Ð2r   rL   c                 ó6   — t          j        ¦   «         | _         d S r   )rñ   Úperf_counter)r|   rL   s     r   ÚrecordzCpuInterface.Event.recordâ  s   € ÝÔ)Ñ+Ô+ˆDŒIˆIˆIr   )Tr   )	r   r    r!   rr   r}   r   Úfloatrô   r÷   r%   r   r   r-   rí   Û  s„   € € € € € ð	ð 	¨$ð 	¸$ð 	ð 	ð 	ð 	ð	3 cð 	3¨eð 	3ð 	3ð 	3ð 	3ð	,ð 	, ð 	,°ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,r   r-   c                   óF   — e Zd Ze	 ddej        j        defd„¦   «         ZdS )úCpuInterface.WorkerNr   r   c                 óP   — dd l }|                     ¦   «         }t          |¦  «        S ©Nr   )ÚmultiprocessingÚ	cpu_countrç   )r   rý   rþ   s      r   r<   z)CpuInterface.Worker.get_device_propertiesç  s/   € ð #Ð"Ð"Ð"à'×1Ò1Ñ3Ô3ˆIÝ& yÑ1Ô1Ð1r   r   )	r   r    r!   r>   r"   r#   r$   rç   r<   r%   r   r   r@   rú   æ  sO   € € € € € Ø	à)-ð	2ð 	2Ø”KÔ&ð	2à ð	2ð 	2ð 	2ñ 
Œð	2ð 	2ð 	2r   r@   r   c                  ó   — dS rÏ   r%   r%   r   r   rK   zCpuInterface.is_availableð  rÐ   r   Fra   c                 ó   — dS rÏ   r%   rc   s    r   rd   zCpuInterface.is_bf16_supportedô  rÐ   r   Nr   c                 ó   — dS ©NÚ r%   r6   s    r   r`   z#CpuInterface.get_compute_capabilityø  ó   € àˆrr   rX   c                 ó   — dS rü   r%   rZ   s    r   r[   zCpuInterface.get_raw_streamü  ó   € àˆqr   c                  ó   — dS rü   r%   r%   r   r   r:   zCpuInterface.current_device   r  r   c                 ó   — d S r   r%   r6   s    r   r]   zCpuInterface.synchronize  s   € àˆr   c                 ó   — dS rÏ   r%   r6   s    r   rm   zCpuInterface.is_triton_capable  rÐ   r   c                 óH   — dd l }d|j        j        vrt          d¦  «        ‚d S )Nr   Úcpuz'triton not built with the 'cpu' backendrÒ   rÓ   s     r   rp   z(CpuInterface.raise_if_triton_unavailable  s5   € àÐÐÐà˜œÔ0Ð0Ð0ÝÐHÑIÔIÐIð 1Ð0r   rq   r   )r   r    r!   r"   r-   r@   r>   rr   rK   rd   r#   r$   rš   r`   r   r?   r[   r:   r]   rm   rp   r%   r   r   rë   rë   Ù  s   € € € € € ð,ð ,ð ,ð ,ð ,�”ñ ,ô ,ð ,ð2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð ð˜$ð ð ð ñ „\ðð ðð ¨tð Àð ð ð ñ „\ðð ðð  u¤{Ô'9ð ÀSð ð ð ñ „\ðð ð 3ð ¨3ð ð ð ñ „\ðð ð˜Cð ð ð ñ „\ðð ðð ˜EœKÔ.ð ¸$ð ð ð ñ „\ðð ðð  %¤+Ô"4ð Àð ð ð ñ „\ðð ðJð J¨E¬KÔ,>ð JÈ$ð Jð Jð Jñ „\ðJð Jð Jr   rë   c                   ó   — e Zd Zeddedefd„¦   «         Ze	 ddej        dedefd„¦   «         Z	edefd„¦   «         Z
edefd„¦   «         Zedd
ej        j        defd„¦   «         Zedd
ej        j        dd	fd„¦   «         Z G d„ d¦  «        Zd	S )ÚMpsInterfaceFra   r   c                 ó   — dS rÏ   r%   rc   s    r   rd   zMpsInterface.is_bf16_supported  rÐ   r   re   c                 ó>   — |t           j        t           j        fv rdS dS )NFT)r"   Úfloat64Ú
complex128rh   s      r   ri   zMpsInterface.is_dtype_supported  s#   € ð •U”]¥EÔ$4Ð5Ð5Ð5Ø�5Øˆtr   c                  óH   — t           j        j                             ¦   «         S r   )r"   r¸   ÚmpsrK   r%   r   r   rK   zMpsInterface.is_available!  s   € åŒ~Ô!×.Ò.Ñ0Ô0Ð0r   c                  ó   — dS rü   r%   r%   r   r   r:   zMpsInterface.current_device%  r  r   Nr   c                 ó   — dS r  r%   r6   s    r   r`   z#MpsInterface.get_compute_capability)  r  r   c                 óB   — t           j                             ¦   «          d S r   )r"   r  r]   r6   s    r   r]   zMpsInterface.synchronize-  s   € åŒ	×ÒÑÔÐÐÐr   c                   ó`   — e Zd Zeddej        j        defd„¦   «         Zede	fd„¦   «         Z
dS )úMpsInterface.WorkerNr   r   c                 óx   —  t          ddg¦  «        t          j        j                             ¦   «         ¦  «        S )NÚMPSPropertiesrè   )r   r"   r¸   r  Úget_core_countr6   s    r   r<   z)MpsInterface.Worker.get_device_properties3  s8   € àI•:˜oÐ0GÐ/HÑIÔIÝ”Ô"×1Ò1Ñ3Ô3ñô ð r   c                  ó   — dS rü   r%   r%   r   r   r:   z"MpsInterface.Worker.current_device9  ó   € à�1r   r   ©r   r    r!   r>   r"   r#   r$   r   r<   r?   r:   r%   r   r   r@   r  2  óq   € € € € € Ø	ð	ð 	¨%¬+Ô*<ð 	Èð 	ð 	ð 	ñ 
Œð	ð
 
ð	 ð 	ð 	ð 	ñ 
Œð	ð 	ð 	r   r@   rq   r   )r   r    r!   r>   rr   rd   rs   r"   re   ri   rK   r?   r:   r#   r$   rš   r`   r]   r@   r%   r   r   r  r    sm  € € € € € Øðð ¨tð Àð ð ð ñ „\ðð à=Bðð Ø”KðØ6:ðà	ðð ð ñ „[ðð ð1˜$ð 1ð 1ð 1ñ „\ð1ð ð˜Cð ð ð ñ „\ðð ðð  u¤{Ô'9ð ÀSð ð ð ñ „\ðð ð ð  ˜EœKÔ.ð  ¸$ð  ð  ð  ñ „\ð ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	r   r  c                   óê   — e Zd Zeddedefd„¦   «         Ze	 ddej        dedefd„¦   «         Z	edefd„¦   «         Z
edefd„¦   «         Zedd
ej        j        defd„¦   «         Z G d„ d¦  «        Zd	S )ÚTpuInterfaceFra   r   c                 ó   — dS rÏ   r%   rc   s    r   rd   zTpuInterface.is_bf16_supported?  rÐ   r   re   c                 óx   — |t           j        t           j        t           j        t           j        t           j        fvS r   )r"   r  Ú	complex32Ú	complex64r  Úhalfrh   s      r   ri   zTpuInterface.is_dtype_supportedC  s0   € ð ÝŒMÝŒOÝŒOÝÔÝŒJð
ð 
ð 	
r   c                  ó   — t          ¦   «         S r   r
   r%   r   r   rK   zTpuInterface.is_availableO  s   € å‰ŒÐr   c                  ó   — dS rü   r%   r%   r   r   r:   zTpuInterface.current_deviceS  r  r   Nr   c                 ó   — dS r  r%   r6   s    r   r`   z#TpuInterface.get_compute_capabilityW  r  r   c                   ó`   — e Zd Zeddej        j        defd„¦   «         Zede	fd„¦   «         Z
dS )úTpuInterface.WorkerNr   r   c                 ó6   —  t          ddg¦  «        d¦  «        S )NÚTPUPropertiesrè   r¦   r   r6   s    r   r<   z)TpuInterface.Worker.get_device_properties]  s'   € àI•:˜oÐ0GÐ/HÑIÔIØñô ð r   c                  ó   — dS rü   r%   r%   r   r   r:   z"TpuInterface.Worker.current_devicec  r  r   r   r  r%   r   r   r@   r+  \  r  r   r@   rq   r   )r   r    r!   r>   rr   rd   rs   r"   re   ri   rK   r?   r:   r#   r$   rš   r`   r@   r%   r   r   r!  r!  >  s5  € € € € € Øðð ¨tð Àð ð ð ñ „\ðð à=Bð	
ð 	
Ø”Kð	
Ø6:ð	
à	ð	
ð 	
ð 	
ñ „[ð	
ð ð˜$ð ð ð ñ „\ðð ð˜Cð ð ð ñ „\ðð ðð  u¤{Ô'9ð ÀSð ð ð ñ „\ðð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	r   r!  Údevice_interfacesFr   rv   r   c                 ó\   — t          | t          j        ¦  «        r| j        } |t          | <   d S r   )r™   r"   r   r€   r/  )r   rv   s     r   Úregister_interface_for_devicer1  l  s0   € õ �&�%œ,Ñ'Ô'ð Ø”ˆØ 0Õ�fÑÐÐr   c                 ó¾   — t          | t          j        ¦  «        r| j        } t          st          ¦   «          | t          v rt          |          S t          d| › �¦  «        ‚)NzNo interface for device )r™   r"   r   r€   Ú_device_initializedÚinit_device_regr/  r   r6   s    r   Úget_interface_for_devicer5  t  s_   € Ý�&�%œ,Ñ'Ô'ð Ø”ˆÝð ÝÑÔÐØÕ"Ð"Ð"Ý  Ô(Ð(Ý
ÐA¸ÐAÐAÑ
BÔ
BÐBr   c                  ó^   — t           st          ¦   «          t                               ¦   «         S r   )r3  r4  r/  Úitemsr%   r   r   Ú get_registered_device_interfacesr8  ~  s(   € Ýð ÝÑÔÐÝ×"Ò"Ñ$Ô$Ð$r   c                  óª  — t          dt          ¦  «         t          t          j                             ¦   «         ¦  «        D ]} t          d| › �t          ¦  «         Œt          dt          ¦  «         t          t          j                             ¦   «         ¦  «        D ]} t          d| › �t          ¦  «         Œt          dt          ¦  «         t          t          j	                             ¦   «         ¦  «        D ]} t          d| › �t          ¦  «         Œt          dt          ¦  «         t          dt          ¦  «         t          d	t          ¦  «         d
ad S )NrŒ   zcuda:rÜ   zxpu:rÅ   zmtia:r  r  ÚtpuT)r1  r‡   rœ   r"   rŒ   rI   r×   rÜ   rÀ   rÅ   rë   r  r!  r3  )r–   s    r   r4  r4  „  s.  € å! &­-Ñ8Ô8Ð8Ý•5”:×*Ò*Ñ,Ô,Ñ-Ô-ð Bð BˆÝ% k¨a k kµ=ÑAÔAÐAÐAå! %­Ñ6Ô6Ð6Ý•5”9×)Ò)Ñ+Ô+Ñ,Ô,ð @ð @ˆÝ% j¨Q j jµ,Ñ?Ô?Ð?Ð?å! &­-Ñ8Ô8Ð8Ý•5”:×*Ò*Ñ,Ô,Ñ-Ô-ð Bð BˆÝ% k¨a k kµ=ÑAÔAÐAÐAå! %­Ñ6Ô6Ð6Ý! %­Ñ6Ô6Ð6Ý! %­Ñ6Ô6Ð6àÐÐÐr   r…   )3r=   rµ   rñ   Úcollectionsr   Úcollections.abcr   r   Údataclassesr   Útypingr   r	   r"   Útorch.utils._pallasr   r?   ré   rŒ   Ú_is_compiledÚtorch._Cr   r   r   Údictrš   r   r   ru   r‡   rÅ   r¾   r½   rÀ   rÜ   rÕ   rÔ   r×   rç   rë   r  r!  r/  r€   r3  r   r1  r5  Útupler8  r4  r%   r   r   ú<module>rD     se  ððð ð ð" €€€Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø -Ð -Ð -Ð -Ð -Ð -ð ˜3˜% ˜*Ô%¨Ñ,Ð ,Ð ,Ñ ,Ø„:×ÒÑÔð ØEÐEÐEÐEÐEÐEÐEà€Oð 46Ð   $ s¨C x¤.Ð 5Ð 5Ñ 5Ø13Ð   S¨# X¤Ð 3Ð 3Ñ 3ðCRð CRð CRð CRð CRñ CRô CRð CRðLð ð ð ð ñ ô ð ð6\Mð \Mð \Mð \Mð \M�Oñ \Mô \Mð \Mð~ ˜3˜% ˜*Ô%¨Ñ,Ð ,Ð ,Ñ ,Ø„:×ÒÑÔð ØEÐEÐEÐEÐEÐEÐEà€OðKKð KKð KKð KKð KK�Oñ KKô KKð KKð\ ˜#˜ ˜Ô$ tÑ+Ð +Ð +Ñ +Ø„9×ÒÑÔð ØCÐCÐCÐCÐCÐCÐCà€NðMLð MLð MLð MLð ML�?ñ MLô MLð MLð` ðð ð ð ð ñ ô ñ „ðð8Jð 8Jð 8Jð 8Jð 8J�?ñ 8Jô 8Jð 8Jðv'ð 'ð 'ð 'ð '�?ñ 'ô 'ð 'ðT'ð 'ð 'ð 'ð '�?ñ 'ô 'ð 'ðT 79Ð �4˜˜T /Ô2Ð2Ô3Ð 8Ð 8Ñ 8ØÐ ð1Ø�%”,Ñð1Ø26°Ô2Gð1à	ð1ð 1ð 1ð 1ðC S¨5¬<Ñ%7ð C¸DÀÔ<Qð Cð Cð Cð Cð%¨(°5¸¸dÀ?Ô>SÐ9SÔ3TÔ*Uð %ð %ð %ð %ðð ð ð ð ð r   