Ë
    L²jÑZ  ã                   ó6  — 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$                  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<                  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jD                  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jZ                  z  d%e+e   d&dfd'„Z.d$eejZ                  z  d&e+e   fd(„Z/d&ee0ee+e   f      fd)„Z1d+d*„Z2y),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#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                   óD   — e Zd Zdej                  j
                  defd„Zy)úDeviceInterface.deviceÚdeviceÚreturnc                 ó   — t         ‚©N©ÚNotImplementedError©Úclsr   s     ú]/var/www/html/ia-enhanced/venv/lib/python3.12/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Ñ!3ð 	&¸ô 	&r   r   c                   ó    — e Zd Zdededefd„Zy)ú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y)ú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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   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   >   sp   „ ñ	ð 
ð	&˜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                 ó8   — | j                   j                  |«      S r   )r@   r<   r   s     r   r<   z%DeviceInterface.get_device_properties‚   s   € à�z‰z×/Ñ/°Ó7Ð7r   c                 ó   — t         ‚r   r   r6   s    r   Úget_compute_capabilityz&DeviceInterface.get_compute_capability†   rB   r   Úincluding_emulationc                 ó   — t         ‚r   r   ©ra   s    r   Úis_bf16_supportedz!DeviceInterface.is_bf16_supportedŠ   rB   r   Údtypec                 óN   — |t         j                  k7  xs | j                  |«      S r   )r"   Úbfloat16rd   ©r   re   ra   s      r   Úis_dtype_supportedz"DeviceInterface.is_dtype_supportedŽ   s$   € ð œŸ™Ñ&ÒT¨#×*?Ñ*?Ð@SÓ*TÐTr   c                 ó   — t         ‚r   r   r6   s    r   Úmemory_allocatedz DeviceInterface.memory_allocated”   rB   r   c                  ó   — y)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   € ð r   c                 ó:   — | j                  «       st        d«      ‚y)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    s!   € ð ×$Ñ$Ô&ÜÐPÓQÐQð '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™Lò "ó ð"ð ð"˜5Ÿ<™<ð "¨Dò "ó ð"ð ð" Sð "¸ð "È#ð "ÐRVò "ó ð"ð ð" 3ð "¨3ò "ó ð"ð ñ"˜EŸK™K×.Ñ.ð "¸$ò "ó ð"ð ñ8¨5¯;©;×+=Ñ+=ð 8Èò 8ó ð8ð ñ" u§{¡{×'9Ñ'9ð "ÀSò "ó ð"ð ñ"¨tð "Àò "ó ð"ð à=BñUØ—K‘KðUØ6:ðUà	òUó ðUð
 ñ" §¡×!3Ñ!3ð "¸sò "ó ð"ð ñ %§+¡+×"4Ñ"4ð Àò ó ðð ñ
R°·±×1CÑ1Cð 
RÈtò 
Ró ñ
Rr   r   c            	       óV   — 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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ÚindexNr   c                 ó.   — || _         || _        d| _        y )Néÿÿÿÿ)rv   ÚidxÚprev_idx)Úselfrv   rw   s      r   Ú__init__zDeviceGuard.__init__¸   s   € ð !1ˆÔØˆŒØˆ�r   c                 ór   — | j                   �+| j                  j                  | j                   «      | _        y y r   )rz   rv   rG   r{   )r|   s    r   Ú	__enter__zDeviceGuard.__enter__¿   s-   € Ø�8‰8ÐØ ×1Ñ1×AÑAÀ$Ç(Á(ÓKˆD�Mð  r   ÚtypeÚvalueÚ	tracebackFc                 óp   — | j                   �*| j                  j                  | j                  «      | _         y)NF)rz   rv   rE   r{   )r|   r€   r�   r‚   s       r   Ú__exit__zDeviceGuard.__exit__Ã   s+   € Ø�8‰8ÐØ×,Ñ,×BÑBÀ4Ç=Á=ÓQˆDŒHØr   ©r   N)r   r    r!   r=   r€   r   r?   r}   r   r   r	   r„   r%   r   r   ru   ru   ®   sX   „ ñðØ $ _Ñ 5ðØ>AÀD¹jðà	óóLð˜Sð ¨ð ¸ð ÀÈÁô r   ru   c                   ót  — 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	ej                  j4                  «      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#y)Ú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y)úCudaInterface.Workerr   r   Nc                 ó   — | t         d<   y ©NÚcuda©r   r6   s    r   r7   zCudaInterface.Worker.set_deviceÓ   ó   € à5;Ô*¨6Ò2r   c                  ó`   — dt         v r	t         d   S t        j                  j                  «       S r‹   )r   r"   rŒ   r:   r%   r   r   r:   z#CudaInterface.Worker.current_device×   ó)   € àÔ7Ñ7Ü5°fÑ=Ð=Ü—:‘:×,Ñ,Ó.Ð.r   c                 óä  — | �\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Ústrr"   r   r€   rw   r‡   r@   r:   r   ÚrangerŒ   rI   r<   ©r   ÚiÚdevice_props      r   r<   z*CudaInterface.Worker.get_device_propertiesÝ   óÎ   € àÐ!Ü˜f¤cÔ*Ü"Ÿ\™\¨&Ó1�FØ!Ÿ;™;¨&Ò0Ð0Ð0Ü˜f¤e§l¡lÔ3Ø#Ÿ\™\�FØˆ~Ü&×-Ñ-×<Ñ<Ó>�àÔ=Ñ=ô #¤5§:¡:×#:Ñ#:Ó#<Ó=öàô —J‘J×4Ñ4°QÕ7ð�ð ð <GÔ0°Ñ8ä3°FÑ;¸FÑCÐCùòó   Â0&C-r   ©r   r    r!   r>   r?   r7   r:   r"   r#   r$   r   r<   r%   r   r   r@   r‰   Ò   óm   „ Ø	ð	<˜sð 	< tò 	<ó 
ð	<ð 
ð	/ ò 	/ó 
ð	/ð
 
ñ	D¨%¯+©+×*<Ñ*<ð 	DÈò 	Dó 
ñ	Dr   r@   r   c                  ó>   — t         j                  j                  «       S r   )r"   rŒ   rK   r%   r   r   rK   zCudaInterface.is_available  s   € ä�z‰z×&Ñ&Ó(Ð(r   Nr   c                 ó  — t         j                  j                  €*t         j                  j	                  | «      \  }}|dz  |z   S t         j                  j                  | «      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  sh   € ä�=‰=×ÑÐ$ÜŸ™×9Ñ9¸&ÓA‰JˆE�3Ø˜2‘: Ñ#Ð#ä—:‘:×3Ñ3°FÓ;×GÑG×MÑMÈcÐSTÓUÐVWÑXÐXr   c                 ó–   — t         j                  j                  d uxs, t         j                  j	                  | «      j
                  dk\  S )Né   )r"   r¡   r¢   rŒ   r<   r¦   r6   s    r   rm   zCudaInterface.is_triton_capable  s>   € ô �M‰M×Ñ TÐ)ò CÜ�z‰z×/Ñ/°Ó7×=Ñ=ÀÑBð	
r   c                 óx  — ddl m} t        j                  | «      s:t        j
                  j                  | «      } ||t        j                  «       «      ‚dd l	}t        j                  j                  �$d|j                  j                  vrt        d«      ‚y d|j                  j                  vrt        d«      ‚y )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Ü Ÿ:™:×;Ñ;¸FÓCˆLÙ$ \´7×3GÑ3GÓ3IÓJÐJãä�=‰=×ÑÐ(Ø˜FŸO™O×4Ñ4Ñ4Ü"Ð#LÓMÐMð 5à˜VŸ_™_×5Ñ5Ñ5ÜÐKÓLÐLð 6r   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‡   É   sý  „ Ø�Z‰Z×Ñ€Fð �J‰J×Ñ€EØ�Z‰Z×Ñ€F÷Dñ Dñ> " %§*¡*×";Ñ";Ó<€NÙ˜eŸj™j×3Ñ3Ó4€JÙ §
¡
× 7Ñ 7Ó8€LÙ˜%Ÿ*™*×+Ñ+Ó,€FÙ! %§*¡*×";Ñ";Ó<€NÙ˜eŸj™j×3Ñ3Ó4€JÙ$ U§Z¡Z×%AÑ%AÓBÐÙ˜uŸz™z×5Ñ5Ó6€KÙ(¨¯©×)IÑ)IÓJÐÙ! /Ó2€NÙ" 5§:¡:×#>Ñ#>Ó?€OÙ(¨¯©×)JÑ)JÓKÐÙ# E§J¡J×$?Ñ$?Ó@ÐÙ$ U§Z¡Z×%AÑ%AÓBÐð ð)˜$ò )ó ð)ð ñY u§{¡{×'9Ñ'9ð YÀSÈ3ÁYò Yó ðYð ñ
 %§+¡+×"4Ñ"4ð 
Àò 
ó ð
ð ñM¨E¯K©K×,>Ñ,>ð MÈ$ò Mó ñMr   r‡   Úget_mtia_stream)Ú_mtia_getCurrentRawStreamc                   ón  — 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	ej                  j4                  «      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"y)Ú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y)úMtiaInterface.Workerr   r   Nc                 ó   — | t         d<   y ©NÚmtiar�   r6   s    r   r7   zMtiaInterface.Worker.set_device3  rŽ   r   c                  ó`   — dt         v r	t         d   S t        j                  j                  «       S r¾   )r   r"   r¿   r:   r%   r   r   r:   z#MtiaInterface.Worker.current_device7  r�   r   c                 óä  — | �\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“   r"   r   r€   rw   rº   r@   r:   r   r”   r¿   rI   r<   r•   s      r   r<   z*MtiaInterface.Worker.get_device_properties=  r˜   r™   r   rš   r%   r   r   r@   r¼   2  r›   r   r@   r   c                  óB   — t         j                  j                  «       } | S r   )r"   r¿   rK   )Úrets    r   rK   zMtiaInterface.is_availablea  s   € ä�j‰j×%Ñ%Ó'ˆØˆ
r   Nr   c                 óD   — t         j                  j                  | «      }|S r   )r"   r¿   r£   ©r   Úccs     r   r`   z$MtiaInterface.get_compute_capabilityf  s   € ä�Z‰Z×-Ñ-¨fÓ5ˆØˆ	r   c                  ó   — y©NTr%   r6   s    r   rm   zMtiaInterface.is_triton_capablek  ó   € àr   c                 óR   — dd l }d|j                  j                  vrt        d«      ‚y )Nr   r¿   z(triton not built with the 'mtia' backend©r±   r²   ro   ©r   r´   s     r   rp   z)MtiaInterface.raise_if_triton_unavailableo  s(   € ãà˜Ÿ™×1Ñ1Ñ1ÜÐIÓJÐJð 2r   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º   ,  só  „ Ø�Z‰Z×Ñ€FØ�J‰J×Ñ€EØ�Z‰Z×Ñ€F÷Dñ Dñ> " %§*¡*×";Ñ";Ó<€NÙ˜eŸj™j×3Ñ3Ó4€JÙ §
¡
× 7Ñ 7Ó8€LÙ˜%Ÿ*™*×+Ñ+Ó,€FÙ! %§*¡*×";Ñ";Ó<€NÙ˜eŸj™j×3Ñ3Ó4€JÙ$ U§Z¡Z×%AÑ%AÓBÐÙ˜uŸz™z×5Ñ5Ó6€KÙ(¨¯©×)IÑ)IÓJÐÙ! /Ó2€NÙ" 5§:¡:×#>Ñ#>Ó?€OÙ(¨¯©×)JÑ)JÓKÐÙ# E§J¡J×$?Ñ$?Ó@ÐÙ$ U§Z¡Z×%AÑ%AÓBÐð ð˜$ò ó ðð ñ u§{¡{×'9Ñ'9ð ÀSò ó ðð ñ %§+¡+×"4Ñ"4ð Àò ó ðð ñK¨E¯K©K×,>Ñ,>ð KÈ$ò Kó ñKr   rº   Úget_xpu_stream)Ú_xpu_getCurrentRawStreamc                   óR  — 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j8                  j:                  defd„«       Ze	ddedefd	„«       Z e	ddej8                  j:                  defd
„«       Z!e	ddej8                  j:                  ddfd„«       Z"y)Ú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y)úXpuInterface.Workerr   r   Nc                 ó   — | t         d<   y ©NÚxpur�   r6   s    r   r7   zXpuInterface.Worker.set_device…  s   € à4:Ô*¨5Ò1r   c                  ó`   — dt         v r	t         d   S t        j                  j                  «       S rÔ   )r   r"   rÕ   r:   r%   r   r   r:   z"XpuInterface.Worker.current_device‰  s)   € àÔ6Ñ6Ü5°eÑ<Ð<Ü—9‘9×+Ñ+Ó-Ð-r   c                 óä  — | �\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“   r"   r   r€   rw   rÐ   r@   r:   r   r”   rÕ   rI   r<   r•   s      r   r<   z)XpuInterface.Worker.get_device_properties�  sÎ   € àÐ!Ü˜f¤cÔ*Ü"Ÿ\™\¨&Ó1�FØ!Ÿ;™;¨%Ò/Ð/Ð/Ü˜f¤e§l¡lÔ3Ø#Ÿ\™\�FØˆ~Ü%×,Ñ,×;Ñ;Ó=�àÔ<Ñ<ô #¤5§9¡9×#9Ñ#9Ó#;Ó<öàô —I‘I×3Ñ3°AÕ6ð�ð ð ;FÔ0°Ñ7ä3°EÑ:¸6ÑBÐBùòr™   r   rš   r%   r   r   r@   rÒ   „  sm   „ Ø	ð	;˜sð 	; tò 	;ó 
ð	;ð 
ð	. ò 	.ó 
ð	.ð
 
ñ	C¨%¯+©+×*<Ñ*<ð 	CÈò 	Có 
ñ	Cr   r@   r   c                  ó>   — t         j                  j                  «       S r   )r"   rÕ   rK   r%   r   r   rK   zXpuInterface.is_available²  s   € ä�y‰y×%Ñ%Ó'Ð'r   Nr   c                 óD   — t         j                  j                  | «      }|S r   )r"   rÕ   r£   rÅ   s     r   r`   z#XpuInterface.get_compute_capability¶  s   € ä�Y‰Y×,Ñ,¨VÓ4ˆØˆ	r   ra   c                 ó>   — t         j                  j                  «       S r   )r"   rÕ   rd   rc   s    r   rd   zXpuInterface.is_bf16_supported»  s   € ä�y‰y×*Ñ*Ó,Ð,r   c                  ó   — yrÈ   r%   r6   s    r   rm   zXpuInterface.is_triton_capable¿  rÉ   r   c                 óR   — dd l }d|j                  j                  vrt        d«      ‚y )Nr   Úintelz)triton not built with the 'intel' backendrË   rÌ   s     r   rp   z(XpuInterface.raise_if_triton_unavailableÃ  s(   € ãà˜&Ÿ/™/×2Ñ2Ñ2ÜÐJÓKÐKð 3r   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Ð   ~  sþ  „ Ø�Y‰Y×Ñ€FØ�I‰I�O‰O€EØ�Y‰Y×Ñ€F÷Cñ Cñ> " %§)¡)×":Ñ":Ó;€NÙ˜eŸi™i×2Ñ2Ó3€JÙ §	¡	× 6Ñ 6Ó7€LÙ˜%Ÿ)™)×*Ñ*Ó+€FÙ! %§)¡)×":Ñ":Ó;€NÙ˜eŸi™i×2Ñ2Ó3€JÙ$ U§Y¡Y×%@Ñ%@ÓAÐÙ˜uŸy™y×4Ñ4Ó5€KÙ(¨¯©×)HÑ)HÓIÐÙ! .Ó1€NÙ" 5§9¡9×#=Ñ#=Ó>€OÙ(¨¯©×)IÑ)IÓJÐÙ# E§I¡I×$>Ñ$>Ó?Ðð ð(˜$ò (ó ð(ð ñ u§{¡{×'9Ñ'9ð ÀSò ó ðð ñ-¨tð -Àò -ó ð-ð ñ %§+¡+×"4Ñ"4ð Àò ó ðð ñL¨E¯K©K×,>Ñ,>ð LÈ$ò Ló ñLr   rÐ   c                   ó   — e Zd ZU eed<   y)Ú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y	)ÚCpuInterfacec                   ó@   — 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y)úCpuInterface.EventÚenable_timingr   Nc                 ó   — d| _         y )Ng        ©Útime)r|   ræ   s     r   r}   zCpuInterface.Event.__init__Ó  s	   € ØˆD�Ir   Úotherc                 ó:   — |j                   | j                   z
  dz  S )Niè  rè   )r|   rê   s     r   Úelapsed_timezCpuInterface.Event.elapsed_timeÖ  s   € Ø—J‘J §¡Ñ*¨dÑ2Ð2r   rL   c                 ó6   — t        j                  «       | _         y r   )ré   Úperf_counter)r|   rL   s     r   ÚrecordzCpuInterface.Event.recordÙ  s   € Ü×)Ñ)Ó+ˆD�Ir   )Tr   )	r   r    r!   rr   r}   r   Úfloatrì   rï   r%   r   r   r-   rå   Ò  s;   „ ñ	¨$ð 	¸$ó 	ð	3 cð 	3¨eó 	3ñ	, ð 	,°ô 	,r   r-   c                   óR   — e Zd Ze	 ddej
                  j                  defd„«       Zy)úCpuInterface.WorkerNr   r   c                 ó@   — dd l }|j                  «       }t        |«      S ©Nr   )ÚmultiprocessingÚ	cpu_countrß   )r   rõ   rö   s      r   r<   z)CpuInterface.Worker.get_device_propertiesÞ  s    € ó #à'×1Ñ1Ó3ˆIÜ& yÓ1Ð1r   r   )	r   r    r!   r>   r"   r#   r$   rß   r<   r%   r   r   r@   rò   Ý  s1   „ Ø	à)-ñ	2Ø—K‘K×&Ñ&ð	2à ò	2ó 
ñ	2r   r@   r   c                   ó   — yrÈ   r%   r%   r   r   rK   zCpuInterface.is_availableç  rÉ   r   ra   c                  ó   — yrÈ   r%   rc   s    r   rd   zCpuInterface.is_bf16_supportedë  rÉ   r   Nr   c                  ó   — y©NÚ r%   r6   s    r   r`   z#CpuInterface.get_compute_capabilityï  ó   € àr   rX   c                  ó   — yrô   r%   rZ   s    r   r[   zCpuInterface.get_raw_streamó  ó   € àr   c                   ó   — yrô   r%   r%   r   r   r:   zCpuInterface.current_device÷  rþ   r   c                  ó   — y r   r%   r6   s    r   r]   zCpuInterface.synchronizeû  s   € àr   c                  ó   — yrÈ   r%   r6   s    r   rm   zCpuInterface.is_triton_capableÿ  rÉ   r   c                 óR   — dd l }d|j                  j                  vrt        d«      ‚y )Nr   Úcpuz'triton not built with the 'cpu' backendrË   rÌ   s     r   rp   z(CpuInterface.raise_if_triton_unavailable  s(   € ãà˜Ÿ™×0Ñ0Ñ0ÜÐHÓIÐIð 1r   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ã   Ð  sJ  „ ô,�—‘ô ,÷2ñ 2ð ð˜$ò ó ðð ñ¨tð Àò ó ðð ñ u§{¡{×'9Ñ'9ð ÀSò ó ðð ð 3ð ¨3ò ó ðð ð˜Cò ó ðð ñ˜EŸK™K×.Ñ.ð ¸$ò ó ðð ñ %§+¡+×"4Ñ"4ð Àò ó ðð ñJ¨E¯K©K×,>Ñ,>ð 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y)ÚMpsInterfacera   r   c                  ó   — yrÈ   r%   rc   s    r   rd   zMpsInterface.is_bf16_supported  rÉ   r   re   c                 óJ   — |t         j                  t         j                  fv ryy)NFT)r"   Úfloat64Ú
complex128rh   s      r   ri   zMpsInterface.is_dtype_supported  s!   € ð ”U—]‘]¤E×$4Ñ$4Ð5Ñ5ØØr   c                  óR   — t         j                  j                  j                  «       S r   )r"   r²   ÚmpsrK   r%   r   r   rK   zMpsInterface.is_available  s   € ä�~‰~×!Ñ!×.Ñ.Ó0Ð0r   c                   ó   — yrô   r%   r%   r   r   r:   zMpsInterface.current_device  rþ   r   Nr   c                  ó   — yrú   r%   r6   s    r   r`   z#MpsInterface.get_compute_capability   rü   r   c                 ó@   — t         j                  j                  «        y r   )r"   r  r]   r6   s    r   r]   zMpsInterface.synchronize$  s   € ä�	‰	×ÑÕr   c                   óf   — e Zd Zeddej
                  j                  defd„«       Zede	fd„«       Z
y)úMpsInterface.WorkerNr   r   c                 ót   —  t        ddg«      t        j                  j                  j	                  «       «      S )NÚMPSPropertiesrà   )r   r"   r²   r  Úget_core_countr6   s    r   r<   z)MpsInterface.Worker.get_device_properties*  s2   € àI”:˜oÐ0GÐ/HÓIÜ—‘×"Ñ"×1Ñ1Ó3óð r   c                   ó   — yrô   r%   r%   r   r   r:   z"MpsInterface.Worker.current_device0  ó   € àr   r   ©r   r    r!   r>   r"   r#   r$   r   r<   r?   r:   r%   r   r   r@   r  )  óG   „ Ø	ñ	¨%¯+©+×*<Ñ*<ð 	Èò 	ó 
ð	ð
 
ð	 ò 	ó 
ñ	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    sí   „ Øñ¨tð Àò ó ðð à=BñØ—K‘KðØ6:ðà	òó ðð ð1˜$ò 1ó ð1ð ð˜Cò ó ðð ñ u§{¡{×'9Ñ'9ð ÀSò ó ðð ñ ˜EŸK™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y)ÚTpuInterfacera   r   c                  ó   — yrÈ   r%   rc   s    r   rd   zTpuInterface.is_bf16_supported6  rÉ   r   re   c                 ó    — |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_supported:  s;   € ð Ü�M‰MÜ�O‰OÜ�O‰OÜ×ÑÜ�J‰Jð
ð 
ð 	
r   c                  ó   — t        «       S r   r
   r%   r   r   rK   zTpuInterface.is_availableF  s
   € ä‹Ðr   c                   ó   — yrô   r%   r%   r   r   r:   zTpuInterface.current_deviceJ  rþ   r   Nr   c                  ó   — yrú   r%   r6   s    r   r`   z#TpuInterface.get_compute_capabilityN  rü   r   c                   óf   — e Zd Zeddej
                  j                  defd„«       Zede	fd„«       Z
y)úTpuInterface.WorkerNr   r   c                 ó(   —  t        ddg«      d«      S )NÚTPUPropertiesrà   r    r   r6   s    r   r<   z)TpuInterface.Worker.get_device_propertiesT  s   € àI”:˜oÐ0GÐ/HÓIØóð r   c                   ó   — yrô   r%   r%   r   r   r:   z"TpuInterface.Worker.current_deviceZ  r  r   r   r  r%   r   r   r@   r#  S  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  5  sÁ   „ Øñ¨tð Àò ó ðð à=Bñ	
Ø—K‘Kð	
Ø6:ð	
à	ò	
ó ð	
ð ð˜$ò ó ðð ð˜Cò ó ðð ñ u§{¡{×'9Ñ'9ð ÀSò ó ð÷	ò 	r   r  Údevice_interfacesFr   rv   r   c                 ób   — t        | t        j                  «      r| j                  } |t        | <   y r   )r’   r"   r   r€   r'  )r   rv   s     r   Úregister_interface_for_devicer)  c  s&   € ô �&œ%Ÿ,™,Ô'Ø—‘ˆØ 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_devicer-  k  sI   € Ü�&œ%Ÿ,™,Ô'Ø—‘ˆÝÜÔØÔ"Ñ"Ü  Ñ(Ð(Ü
Ð 8¸¸ÐAÓ
BÐBr   c                  óJ   — t         s
t        «        t        j                  «       S r   )r+  r,  r'  Úitemsr%   r   r   Ú get_registered_device_interfacesr0  u  s   € ÝÜÔÜ×"Ñ"Ó$Ð$r   c                  óB  — t        dt        «       t        t        j                  j                  «       «      D ]  } t        d| › �t        «       Œ t        dt        «       t        t        j                  j                  «       «      D ]  } t        d| › �t        «       Œ t        dt        «       t        t        j                  j                  «       «      D ]  } t        d| › �t        «       Œ t        dt        «       t        dt        «       t        d	t        «       d
ay )NrŒ   zcuda:rÕ   zxpu:r¿   zmtia:r  r  ÚtpuT)r)  r‡   r”   r"   rŒ   rI   rÐ   rÕ   rº   r¿   rã   r  r  r+  )r–   s    r   r,  r,  {  sã   € ä! &¬-Ô8Ü”5—:‘:×*Ñ*Ó,Ó-ò BˆÜ%¨¨a¨S k´=ÕAðBô " %¬Ô6Ü”5—9‘9×)Ñ)Ó+Ó,ò @ˆÜ%¨¨Q¨C j´,Õ?ð@ô " &¬-Ô8Ü”5—:‘:×*Ñ*Ó,Ó-ò BˆÜ%¨¨a¨S k´=ÕAðBô " %¬Ô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€   r+  r   r)  r-  Útupler0  r,  r%   r   r   ú<module>r<     s   ðòó" Û Ý "ß .Ý !ß ã Ý -ð ˜3˜% ˜*Ñ%¨Ñ,Ó ,Ø‡:�:×ÑÔÞEà€Oð 46Ð   $ s¨C x¡.Ó 5Ø13Ð   S¨# X¡Ó 3÷CRñ CR÷Lñ ô6YM�Oô YMðx ˜3˜% ˜*Ñ%¨Ñ,Ó ,Ø‡:�:×ÑÔÞEà€OôHK�Oô HKðV ˜#˜ ˜Ñ$ tÑ+Ó +Ø‡9�9×ÑÔÞCà€NôJL�?ô JLðZ ÷ð ó ðô8J�?ô 8Jôv'�?ô 'ôT'�?ô 'ðT 79Ð �4˜˜T /Ñ2Ð2Ñ3Ó 8ØÐ ð1Ø�%—,‘,Ñð1Ø26°Ñ2Gð1à	ó1ðC S¨5¯<©<Ñ%7ð C¸DÀÑ<Qó Cð%¨(°5¸¸dÀ?Ñ>SÐ9SÑ3TÑ*Uó %ôr   