ó
    CC˜jÈb  ã                   ó\  • % S r SSKrSSKrSSKJr  SSKJrJr  SSKJ	r	  SSK
JrJr  SSKrSSKJr  \\/\4   S-  \S'   \R$                  R'                  5       (       a  SS	KJr  OSr0 r\\\4   \S
'   0 r\\\4   \S'    " S S5      r " S S5      r " S S\5      r\\/\4   S-  \S'   \R<                  R'                  5       (       a  SSKJr   OSr  " S S\5      r!\\/\4   S-  \S'   \RD                  R'                  5       (       a  SSKJ#r$  OSr$ " S S\5      r%\	 " S S5      5       r& " S S\5      r' " S S\5      r( " S  S!\5      r)0 r*\\\+\   4   \S"'   S#q,S$\\RZ                  -  S%\+\   S&S4S' jr.S$\\RZ                  -  S&\+\   4S( jr/S&\\0\\+\   4      4S) jr1S+S* jr2g),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            	       ó  • \ rS rSrSr " S S5      r " S S5      r " S S5      r " S	 S
5      r\	S\
4S j5       r\	S\R                  R                  SS4S j5       r\	S\
S\
4S j5       r\	S\
S\
4S j5       r\	S\
4S j5       r\	S\4S j5       r\	S\R                  S\4S j5       r\	S\R                  4S j5       r\	S\R                  SS4S j5       r\	S\
S\
S\
SS4S j5       r\	S\
S\
4S j5       r\	S(S\R                  R                  SS4S jj5       r\S(S\R                  R                  S\4S jj5       r\	S(S\R                  R                  S\4S jj5       r\	S)S \S\4S! jj5       r\ S)S"\R@                  S \S\4S# jj5       r!\	S(S\R                  R                  S\
4S$ jj5       r"\	S(S\R                  R                  S\4S% jj5       r#\S(S\R                  R                  SS4S& jj5       r$S'r%g)*ÚDeviceInterfaceé(   z’
This is a simple device runtime interface for Inductor. It enables custom
backends to be integrated with Inductor in a device-agnostic semantic.
c                   óN   • \ rS rSrS\R
                  R                  S\4S jrSr	g)ÚDeviceInterface.deviceé.   ÚdeviceÚreturnc                 ó   • [         e©N©ÚNotImplementedError©Úclsr   s     Ú¬C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\torch/_dynamo/device_interface.pyÚ__new__ÚDeviceInterface.device.__new__/   s   € Ü%Ð%ó    © N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚtorchÚtypesÚDevicer   r   Ú__static_attributes__r"   r!   r   r   r   .   s   † ð	& §¡×!3Ñ!3ð 	&¸÷ 	&r!   r   c                   ó*   • \ rS rSrS\S\S\4S jrSrg)ÚDeviceInterface.Eventé2   ÚargsÚkwargsr   c                 ó   • [        S5      e)NzYEvent should be inherited from torch.Event, otherwise, it couldn't be captured by dynamo.r   ©r   r.   r/   s      r   r   ÚDeviceInterface.Event.__new__3   s   € Ü%Økóð r!   r"   N©r#   r$   r%   r&   r   r   r*   r"   r!   r   ÚEventr,   2   ó   † ð	 ð 	¨sð 	°s÷ 	r!   r4   c                   ó*   • \ rS rSrS\S\S\4S jrSrg)ÚDeviceInterface.Streamé8   r.   r/   r   c                 ó   • [        S5      e)Nz[Stream should be inherited from torch.Stream, otherwise, it couldn't be captured by dynamo.r   r1   s      r   r   ÚDeviceInterface.Stream.__new__9   s   € Ü%Ømóð r!   r"   Nr3   r"   r!   r   ÚStreamr7   8   r5   r!   r;   c                   ó”   • \ rS rSrSr\S\SS4S j5       r\S\4S j5       r\S
S\	R                  R                  S\4S jj5       rS	rg)ÚDeviceInterface.Workeré>   zò
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                 ó   • [         er   r   ©r   s    r   Ú
set_deviceÚ!DeviceInterface.Worker.set_deviceF   ó   € ä%Ð%r!   c                  ó   • [         er   r   r"   r!   r   Úcurrent_deviceÚ%DeviceInterface.Worker.current_deviceJ   rC   r!   c                 ó   • [         er   r   r@   s    r   Úget_device_propertiesÚ,DeviceInterface.Worker.get_device_propertiesN   rC   r!   r"   r   )r#   r$   r%   r&   Ú__doc__ÚstaticmethodÚintrA   rE   r'   r(   r)   r   rH   r*   r"   r!   r   ÚWorkerr=   >   sp   † ñ	ð 
ð	&˜sð 	& tó 	&ó 
ð	&ð 
ð	& ó 	&ó 
ð	&ð 
ñ	&¨%¯+©+×*<Ñ*<ð 	&Èô 	&ó 
ó	&r!   rM   r   c                  ó   • [         er   r   r"   r!   r   rE   ÚDeviceInterface.current_deviceR   ó   € ä!Ð!r!   Nc                 ó   • [         er   r   r@   s    r   rA   ÚDeviceInterface.set_deviceV   rP   r!   c                 ó   • [         er   r   r@   s    r   Úmaybe_exchange_deviceÚ%DeviceInterface.maybe_exchange_deviceZ   rP   r!   c                 ó   • [         er   r   r@   s    r   Úexchange_deviceÚDeviceInterface.exchange_device^   rP   r!   c                  ó   • [         er   r   r"   r!   r   Údevice_countÚDeviceInterface.device_countb   rP   r!   c                  ó   • [         er   r   r"   r!   r   Úis_availableÚDeviceInterface.is_availablef   rP   r!   Ústreamc                 ó   • [         er   r   ©r_   s    r   r_   ÚDeviceInterface.streamj   rP   r!   c                  ó   • [         er   r   r"   r!   r   Úcurrent_streamÚDeviceInterface.current_streamn   rP   r!   c                 ó   • [         er   r   ra   s    r   Ú
set_streamÚDeviceInterface.set_streamr   rP   r!   Ú	stream_idÚdevice_indexÚdevice_typec                 ó   • [         er   r   )ri   rj   rk   s      r   Ú_set_stream_by_idÚ!DeviceInterface._set_stream_by_idv   rP   r!   Ú
device_idxc                 ó   • [         er   r   ©ro   s    r   Úget_raw_streamÚDeviceInterface.get_raw_streamz   rP   r!   c                 ó   • [         er   r   r@   s    r   ÚsynchronizeÚDeviceInterface.synchronize~   rP   r!   c                 ó8   • U R                   R                  U5      $ r   )rM   rH   r   s     r   rH   Ú%DeviceInterface.get_device_properties‚   s   € à�z‰z×/Ñ/°Ó7Ð7r!   c                 ó   • [         er   r   r@   s    r   Úget_compute_capabilityÚ&DeviceInterface.get_compute_capability†   rP   r!   Úincluding_emulationc                 ó   • [         er   r   ©r|   s    r   Úis_bf16_supportedÚ!DeviceInterface.is_bf16_supportedŠ   rP   r!   Údtypec                 óX   • U[         R                  :g  =(       d    U R                  U5      $ r   )r'   Úbfloat16r   ©r   r�   r|   s      r   Úis_dtype_supportedÚ"DeviceInterface.is_dtype_supportedŽ   s$   € ð œŸ™Ñ&×T¨#×*?Ñ*?Ð@SÓ*TÐTr!   c                 ó   • [         er   r   r@   s    r   Úmemory_allocatedÚ DeviceInterface.memory_allocated”   rP   r!   c                 ó   • g)zz
Returns True if the device has Triton support, False otherwise, even if
the appropriate Triton backend is not available.
Fr"   r@   s    r   Úis_triton_capableÚ!DeviceInterface.is_triton_capable˜   s   € ð r!   c                 óJ   • SSK Jn  U R                  5       (       d  U" S5      eg)aò  
Raises a `TritonUnavailableError` with human-readable instructions if
the Triton backend for the given device (or the default device if
`device` is `None`) is not built. Implementations may raise a
different, more specific error when the device itself is not
Triton-capable (e.g. CUDA raises `GPUTooOldForTriton`), so callers
that only want an availability answer should check
`is_triton_capable()` first.

The caller should ensure the presence of the 'triton' package before
calling this method.
r   ©ÚTritonUnavailableErrorz/This device is not capable of supporting TritonN)Útorch._dynamo.excr�   r‹   )r   r   r�   s      r   Úraise_if_triton_unavailableÚ+DeviceInterface.raise_if_triton_unavailable    s+   € õ 	=à×$Ñ$×&Ñ&Ù(ØAóð ð 'r!   r"   r   ©F)&r#   r$   r%   r&   rJ   r   r4   r;   rM   rK   rL   rE   r'   r(   r)   rA   rT   rW   rZ   Úboolr]   r   r_   rd   rg   rm   rr   ru   ÚclassmethodrH   rz   r   r�   r…   rˆ   r‹   r‘   r*   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ð Àô ó ðð ñ°·±×1CÑ1Cð Ètô ó ór!   r   c            	       ód   • \ rS rSrSrS\\   S\S-  SS4S jrSS jr	S	\
S
\
S\
S\S   4S jrSrg)ÚDeviceGuardé¶   aG  
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                 ó*   • Xl         X l        SU l        g )Néÿÿÿÿ©r™   ÚidxÚprev_idx)Úselfr™   rš   s      r   Ú__init__ÚDeviceGuard.__init__À   s   € ð !1ÔØŒØˆ�r!   c                 ót   • U R                   b+  U R                  R                  U R                   5      U l        g g r   )rž   r™   rW   rŸ   )r    s    r   Ú	__enter__ÚDeviceGuard.__enter__Ç   s-   € Ø�8‰8ÑØ ×1Ñ1×AÑAÀ$Ç(Á(ÓKˆD�Mð  r!   ÚtypeÚvalueÚ	tracebackFc                 ór   • U R                   b*  U R                  R                  U R                  5      U l         g)NF)rž   r™   rT   rŸ   )r    r¦   r§   r¨   s       r   Ú__exit__ÚDeviceGuard.__exit__Ë   s+   € Ø�8‰8ÑØ×,Ñ,×BÑBÀ4Ç=Á=ÓQˆDŒHØr!   r�   ©r   N)r#   r$   r%   r&   rJ   r¦   r   rL   r¡   r¤   r   r	   rª   r*   r"   r!   r   r—   r—   ¶   sX   † ñðØ $ _Ñ 5ðØ>AÀD¹jðà	ôôLð˜Sð ¨ð ¸ð ÀÈÁ÷ r!   r—   c                   óŠ  • \ rS rSr\R
                  R                  r\R
                  R                  r\R
                  R                  r " S S5      r	\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                   5      r\
" \R
                  R"                  5      r\
" \R
                  R$                  5      r\
" \R
                  R&                  5      r\
" \5      r\
" \R
                  R,                  5      r\
" \R
                  R0                  5      r\
" \R
                  R4                  5      r\
" \R
                  R6                  5      r\
S\4S j5       r\
SS\R<                  R>                  S\ \!-  4S jj5       r"\
SS\R<                  R>                  S\4S	 jj5       r#\
SS\R<                  R>                  SS4S
 jj5       r$Sr%g)ÚCudaInterfaceéÑ   c                   ó�   • \ rS rSr\S\SS4S j5       r\S\4S j5       r\S	S\R                  R                  S\4S jj5       rSrg)
ÚCudaInterface.WorkeréÚ   r   r   Nc                 ó   • U [         S'   g ©NÚcuda©r   r@   s    r   rA   ÚCudaInterface.Worker.set_deviceÛ   ó   € à5;Ô*¨6Ò2r!   c                  ód   • S[         ;   a	  [         S   $ [        R                  R                  5       $ r´   )r   r'   rµ   rE   r"   r!   r   rE   Ú#CudaInterface.Worker.current_deviceß   ó)   € àÔ7Ó7Ü5°fÑ=Ð=Ü—:‘:×,Ñ,Ó.Ð.r!   c                 ó8  • U b  [        U [        5      (       a?  [        R                  " U 5      n U R                  S:w  a  [        SU R                   S35      e[        U [        R                  5      (       a  U R                  n U c  [        R                  R                  5       n S[        ;  a]  [        [        R                  R                  5       5       Vs/ s H"  n[        R                  R                  U5      PM$     nnU[        S'   [        S   U    $ s  snf )Nrµ   z"Expected device type 'cuda', got 'Ú')Ú
isinstanceÚstrr'   r   r¦   ÚAssertionErrorrš   r®   rM   rE   r   Úrangerµ   rZ   rH   ©r   ÚiÚdevice_props      r   rH   Ú*CudaInterface.Worker.get_device_propertieså   óð   € àÑ!Ü˜f¤c×*Ñ*Ü"Ÿ\š\¨&Ó1�FØ—{‘{ fÓ,Ü,Ø@ÀÇÁÀÈQÐOóð ô ˜f¤e§l¡l×3Ñ3Ø#Ÿ\™\�FØ‰~Ü&×-Ñ-×<Ñ<Ó>�àÔ=Ó=ô #¤5§:¡:×#:Ñ#:Ó#<Ô=óâ=˜ô —J‘J×4Ñ4°QÖ7Ù=ð ð ð <GÔ0°Ñ8ä3°FÑ;¸FÑCÐCùòó   Ã)Dr"   r   ©r#   r$   r%   r&   rK   rL   rA   rE   r'   r(   r)   r   rH   r*   r"   r!   r   rM   r±   Ú   óm   † Ø	ð	<˜sð 	< tó 	<ó 
ð	<ð 
ð	/ ó 	/ó 
ð	/ð
 
ñ	D¨%¯+©+×*<Ñ*<ð 	DÈô 	Dó 
ó	Dr!   rM   r   c                  ó>   • [         R                  R                  5       $ r   )r'   rµ   r]   r"   r!   r   r]   ÚCudaInterface.is_available  s   € ä�z‰z×&Ñ&Ó(Ð(r!   Nr   c                 ó  • [         R                  R                  c)  [         R                  R	                  U 5      u  pUS-  U-   $ [         R                  R                  U 5      R                  R                  SS5      S   $ )Né
   Ú:é   r   )r'   ÚversionÚhiprµ   Úget_device_capabilityrH   ÚgcnArchNameÚsplit)r   ÚmajorÚmins      r   rz   Ú$CudaInterface.get_compute_capability  sf   € ä�=‰=×ÑÑ$ÜŸ™×9Ñ9¸&ÓA‰JˆEØ˜2‘: Ñ#Ð#ä—:‘:×3Ñ3°FÓ;×GÑG×MÑMÈcÐSTÓUÐVWÑXÐXr!   c                 ó    • [         R                  R                  S L=(       d,    [        R                  R                  U 5      R                  S:¬  $ )Né   )r'   rÐ   rÑ   r®   rM   rH   rÕ   r@   s    r   r‹   ÚCudaInterface.is_triton_capable  s@   € ô �M‰M×Ñ TÐ)÷ MÜ×#Ñ#×9Ñ9¸&ÓA×GÑGÈ1ÑLð	
r!   c                 óŽ  • SSK Jn  SSKJn  [        R                  U 5      (       d;  [        R                  R                  U 5      nU" U[        R                  " 5       5      eSS Kn[        R                  R                  b#  SUR                  R                  ;  a  U" S5      eg SUR                  R                  ;  a  U" S5      eg )Nr   rŽ   )ÚGPUTooOldForTritonÚamdz'triton not built with the 'amd' backendÚnvidiaz*triton not built with the 'nvidia' backend)r�   r�   Útorch._inductor.excrÜ   r®   r‹   r'   rµ   rH   ÚinspectÚcurrentframeÚtriton.backendsrÐ   rÑ   Úbackends)r   r�   rÜ   Údevice_propsÚtritons        r   r‘   Ú)CudaInterface.raise_if_triton_unavailable#  sœ   € å<Ý:ä×.Ñ.¨v×6Ñ6Ü Ÿ:™:×;Ñ;¸FÓCˆLÙ$ \´7×3GÒ3GÓ3IÓJÐJãä�=‰=×ÑÑ(Ø˜FŸO™O×4Ñ4Ó4Ù,Ð-VÓWÐWð 5à˜VŸ_™_×5Ñ5Ó5Ù(Ð)UÓVÐVð 6r!   r"   r   )&r#   r$   r%   r&   r'   rµ   r   r4   r;   rM   rK   rE   rA   rZ   r_   rd   rg   rm   ru   rH   r   rr   Ú_exchange_devicerW   Ú_maybe_exchange_devicerT   rˆ   r   r”   r]   r(   r)   rL   r¿   rz   r‹   r‘   r*   r"   r!   r   r®   r®   Ñ   sþ  † Ø�Z‰Z×Ñ€Fð �J‰J×Ñ€EØ�Z‰Z×Ñ€F÷ Dñ  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ð 
Àô 
ó ð
ð ñW¨E¯K©K×,>Ñ,>ð WÈ$ô Wó óWr!   r®   Úget_mtia_stream)Ú_mtia_getCurrentRawStreamc                   ó„  • \ rS rSr\R
                  R                  r\R
                  R                  r\R
                  R                  r " S S5      r	\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                   5      r\
" \R
                  R"                  5      r\
" \R
                  R$                  5      r\
" \R
                  R&                  5      r\
" \5      r\
" \R
                  R,                  5      r\
" \R
                  R0                  5      r\
" \R
                  R4                  5      r\
" \R
                  R6                  5      r\
S\4S j5       r\
SS\R<                  R>                  S\ 4S jj5       r!\
SS\R<                  R>                  S\4S	 jj5       r"\
SS\R<                  R>                  SS4S
 jj5       r#Sr$g)ÚMtiaInterfacei<  c                   ó�   • \ rS rSr\S\SS4S j5       r\S\4S j5       r\S	S\R                  R                  S\4S jj5       rSrg)
ÚMtiaInterface.WorkeriB  r   r   Nc                 ó   • U [         S'   g ©NÚmtiar¶   r@   s    r   rA   ÚMtiaInterface.Worker.set_deviceC  r¸   r!   c                  ód   • S[         ;   a	  [         S   $ [        R                  R                  5       $ rð   )r   r'   rñ   rE   r"   r!   r   rE   Ú#MtiaInterface.Worker.current_deviceG  r»   r!   c                 ó8  • U b  [        U [        5      (       a?  [        R                  " U 5      n U R                  S:w  a  [        SU R                   S35      e[        U [        R                  5      (       a  U R                  n U c  [        R                  R                  5       n S[        ;  a]  [        [        R                  R                  5       5       Vs/ s H"  n[        R                  R                  U5      PM$     nnU[        S'   [        S   U    $ s  snf )Nrñ   z"Expected device type 'mtia', got 'r½   )r¾   r¿   r'   r   r¦   rÀ   rš   rì   rM   rE   r   rÁ   rñ   rZ   rH   rÂ   s      r   rH   Ú*MtiaInterface.Worker.get_device_propertiesM  rÆ   rÇ   r"   r   rÈ   r"   r!   r   rM   rî   B  rÉ   r!   rM   r   c                  óB   • [         R                  R                  5       n U $ r   )r'   rñ   r]   )Úrets    r   r]   ÚMtiaInterface.is_availablet  s   € ä�j‰j×%Ñ%Ó'ˆØˆ
r!   Nr   c                 óD   • [         R                  R                  U 5      nU$ r   )r'   rñ   rÒ   ©r   Úccs     r   rz   Ú$MtiaInterface.get_compute_capabilityy  s   € ä�Z‰Z×-Ñ-¨fÓ5ˆØˆ	r!   c                 ó   • g©NTr"   r@   s    r   r‹   ÚMtiaInterface.is_triton_capable~  ó   € àr!   c                 ó\   • SS K nSSKJn  SUR                  R                  ;  a  U" S5      eg )Nr   rŽ   rñ   z(triton not built with the 'mtia' backend©râ   r�   r�   rã   ©r   rå   r�   s      r   r‘   Ú)MtiaInterface.raise_if_triton_unavailable‚  s+   € ãå<à˜Ÿ™×1Ñ1Ó1Ù(Ð)SÓTÐTð 2r!   r"   r   )%r#   r$   r%   r&   r'   rñ   r   r4   r;   rM   rK   rE   rA   rZ   r_   rd   rg   rm   ru   rH   ré   rr   rç   rW   rè   rT   rˆ   r   r”   r]   r(   r)   r   rz   r‹   r‘   r*   r"   r!   r   rì   rì   <  sô  † Ø�Z‰Z×Ñ€FØ�J‰J×Ñ€EØ�Z‰Z×Ñ€F÷ Dñ  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ð Àô ó ðð ñU¨E¯K©K×,>Ñ,>ð UÈ$ô Uó óUr!   rì   Úget_xpu_stream)Ú_xpu_getCurrentRawStreamc                   ól  • \ rS rSr\R
                  R                  r\R
                  R                  r\R
                  R                  r " S S5      r	\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                  5      r\
" \R
                  R                   5      r\
" \R
                  R"                  5      r\
" \R
                  R$                  5      r\
" \R
                  R&                  5      r\
" \5      r\
" \R
                  R,                  5      r\
" \R
                  R0                  5      r\
" \R
                  R4                  5      r\
S\4S j5       r\
SS\R:                  R<                  S\4S jj5       r \
SS	\S\4S
 jj5       r!\
SS\R:                  R<                  S\4S jj5       r"\
SS\R:                  R<                  SS4S jj5       r#Sr$g)ÚXpuInterfacei“  c                   ó�   • \ rS rSr\S\SS4S j5       r\S\4S j5       r\S	S\R                  R                  S\4S jj5       rSrg)
ÚXpuInterface.Workeri™  r   r   Nc                 ó   • U [         S'   g ©NÚxpur¶   r@   s    r   rA   ÚXpuInterface.Worker.set_deviceš  s   € à4:Ô*¨5Ò1r!   c                  ód   • S[         ;   a	  [         S   $ [        R                  R                  5       $ r  )r   r'   r  rE   r"   r!   r   rE   Ú"XpuInterface.Worker.current_devicež  s)   € àÔ6Ó6Ü5°eÑ<Ð<Ü—9‘9×+Ñ+Ó-Ð-r!   c                 ó8  • U b  [        U [        5      (       a?  [        R                  " U 5      n U R                  S:w  a  [        SU R                   S35      e[        U [        R                  5      (       a  U R                  n U c  [        R                  R                  5       n S[        ;  a]  [        [        R                  R                  5       5       Vs/ s H"  n[        R                  R                  U5      PM$     nnU[        S'   [        S   U    $ s  snf )Nr  z!Expected device type 'xpu', got 'r½   )r¾   r¿   r'   r   r¦   rÀ   rš   r	  rM   rE   r   rÁ   r  rZ   rH   rÂ   s      r   rH   Ú)XpuInterface.Worker.get_device_properties¤  sð   € àÑ!Ü˜f¤c×*Ñ*Ü"Ÿ\š\¨&Ó1�FØ—{‘{ eÓ+Ü,Ø?ÀÇÁ¸}ÈAÐNóð ô ˜f¤e§l¡l×3Ñ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   rM   r  ™  sm   † Ø	ð	;˜sð 	; tó 	;ó 
ð	;ð 
ð	. ó 	.ó 
ð	.ð
 
ñ	C¨%¯+©+×*<Ñ*<ð 	CÈô 	Có 
ó	Cr!   rM   r   c                  ó>   • [         R                  R                  5       $ r   )r'   r  r]   r"   r!   r   r]   ÚXpuInterface.is_availableÊ  s   € ä�y‰y×%Ñ%Ó'Ð'r!   Nr   c                 óD   • [         R                  R                  U 5      nU$ r   )r'   r  rÒ   rû   s     r   rz   Ú#XpuInterface.get_compute_capabilityÎ  s   € ä�Y‰Y×,Ñ,¨VÓ4ˆØˆ	r!   r|   c                 ó>   • [         R                  R                  5       $ r   )r'   r  r   r~   s    r   r   ÚXpuInterface.is_bf16_supportedÓ  s   € ä�y‰y×*Ñ*Ó,Ð,r!   c                 ó   • grÿ   r"   r@   s    r   r‹   ÚXpuInterface.is_triton_capable×  r  r!   c                 ó\   • SS K nSSKJn  SUR                  R                  ;  a  U" S5      eg )Nr   rŽ   Úintelz)triton not built with the 'intel' backendr  r  s      r   r‘   Ú(XpuInterface.raise_if_triton_unavailableÛ  s+   € ãå<à˜&Ÿ/™/×2Ñ2Ó2Ù(Ð)TÓUÐUð 3r!   r"   r   r“   )%r#   r$   r%   r&   r'   r  r   r4   r;   rM   rK   rE   rA   rZ   r_   rd   rg   rm   ru   rH   r  rr   rç   rW   rè   rT   rˆ   r”   r]   r(   r)   r   rz   r   r‹   r‘   r*   r"   r!   r   r	  r	  “  sÿ  † Ø�Y‰Y×Ñ€FØ�I‰I�O‰O€EØ�Y‰Y×Ñ€F÷ Cñ  CñD " %§)¡)×":Ñ":Ó;€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ð Àô ó ðð ñV¨E¯K©K×,>Ñ,>ð VÈ$ô Vó óVr!   r	  c                   ó    • \ rS rSr% \\S'   Srg)ÚCpuDevicePropertiesiå  Úmulti_processor_countr"   N)r#   r$   r%   r&   rL   Ú__annotations__r*   r"   r!   r   r   r   å  s   ‡ àÖr!   r   c                   óÞ  • \ rS rSr " S S\R
                  5      r " S S5      r\S\4S j5       r	\SS\S\4S	 jj5       r
\SS\R                  R                  S\4S jj5       r\S\S\4S j5       r\S\4S j5       r\SS\R                  R                  SS
4S jj5       r\SS\R                  R                  S\4S jj5       r\SS\R                  R                  SS
4S jj5       rSrg
)ÚCpuInterfaceiê  c                   óR   • \ rS rSrSS\SS4S jjrS\S\4S jrSS\SS4S	 jjr	S
r
g)ÚCpuInterface.Eventiì  Úenable_timingr   Nc                 ó   • SU l         g )Ng        ©Útime)r    r'  s     r   r¡   ÚCpuInterface.Event.__init__í  s	   € ØˆD�Ir!   Úotherc                 ó:   • UR                   U R                   -
  S-  $ )Niè  r)  )r    r,  s     r   Úelapsed_timeÚCpuInterface.Event.elapsed_timeð  s   € Ø—J‘J §¡Ñ*¨dÑ2Ð2r!   r_   c                 ó8   • [         R                  " 5       U l         g r   )r*  Úperf_counter)r    r_   s     r   ÚrecordÚCpuInterface.Event.recordó  s   € Ü×)Ò)Ó+ˆD�Ir!   r)  )Tr   )r#   r$   r%   r&   r”   r¡   r   Úfloatr.  r2  r*   r"   r!   r   r4   r&  ì  s@   † ñ	¨$ð 	¸$õ 	ð	3 cð 	3¨eô 	3ñ	, ð 	,°÷ 	,ð 	,r!   r4   c                   ó^   • \ rS rSr\ SS\R                  R                  S\4S jj5       r	Sr
g)ÚCpuInterface.Workeri÷  Nr   r   c                 ó@   • SS K nUR                  5       n[        U5      $ ©Nr   )ÚmultiprocessingÚ	cpu_countr   )r   r9  r:  s      r   rH   Ú)CpuInterface.Worker.get_device_propertiesø  s    € ó #à'×1Ñ1Ó3ˆIÜ& yÓ1Ð1r!   r"   r   )r#   r$   r%   r&   rK   r'   r(   r)   r   rH   r*   r"   r!   r   rM   r6  ÷  s1   † Ø	à)-ñ	2Ø—K‘K×&Ñ&ð	2à ô	2ó 
ó	2r!   rM   r   c                  ó   • grÿ   r"   r"   r!   r   r]   ÚCpuInterface.is_available  r  r!   r|   c                 ó   • grÿ   r"   r~   s    r   r   ÚCpuInterface.is_bf16_supported  r  r!   Nr   c                 ó   • g©NÚ r"   r@   s    r   rz   Ú#CpuInterface.get_compute_capability	  ó   € àr!   ro   c                 ó   • gr8  r"   rq   s    r   rr   ÚCpuInterface.get_raw_stream  ó   € àr!   c                  ó   • gr8  r"   r"   r!   r   rE   ÚCpuInterface.current_device  rG  r!   c                 ó   • g r   r"   r@   s    r   ru   ÚCpuInterface.synchronize  s   € àr!   c                 ó   • grÿ   r"   r@   s    r   r‹   ÚCpuInterface.is_triton_capable  r  r!   c                 ó\   • SS K nSSKJn  SUR                  R                  ;  a  U" S5      eg )Nr   rŽ   Úcpuz'triton not built with the 'cpu' backendr  r  s      r   r‘   Ú(CpuInterface.raise_if_triton_unavailable  s+   € ãå<à˜Ÿ™×0Ñ0Ó0Ù(Ð)RÓSÐSð 1r!   r"   r“   r   )r#   r$   r%   r&   r'   r4   rM   rK   r”   r]   r   r(   r)   r¿   rz   r   rL   rr   rE   ru   r‹   r‘   r*   r"   r!   r   r$  r$  ê  sJ  † ô,�—‘ô ,÷2ñ 2ð ð˜$ó ó ðð ñ¨tð Àô ó ðð ñ u§{¡{×'9Ñ'9ð ÀSô ó ðð ð 3ð ¨3ó ó ðð ð˜Có ó ðð ñ˜EŸK™K×.Ñ.ð ¸$ô ó ðð ñ %§+¡+×"4Ñ"4ð Àô ó ðð ñT¨E¯K©K×,>Ñ,>ð TÈ$ô Tó óTr!   r$  c                   óB  • \ rS rSr\SS\S\4S jj5       r\ SS\R                  S\S\4S jj5       r
\S\4S j5       r\S\4S j5       r\SS
\R                  R                  S\4S jj5       r\SS
\R                  R                  SS	4S jj5       r " S S5      rSrg	)ÚMpsInterfacei'  r|   r   c                 ó   • grÿ   r"   r~   s    r   r   ÚMpsInterface.is_bf16_supported(  r  r!   r�   c                 óN   • U[         R                  [         R                  4;   a  gg)NFT)r'   Úfloat64Ú
complex128r„   s      r   r…   ÚMpsInterface.is_dtype_supported,  s!   € ð ”U—]‘]¤E×$4Ñ$4Ð5Ó5ØØr!   c                  óR   • [         R                  R                  R                  5       $ r   )r'   rã   Úmpsr]   r"   r!   r   r]   ÚMpsInterface.is_available4  s   € ä�~‰~×!Ñ!×.Ñ.Ó0Ð0r!   c                  ó   • gr8  r"   r"   r!   r   rE   ÚMpsInterface.current_device8  rG  r!   Nr   c                 ó   • grA  r"   r@   s    r   rz   Ú#MpsInterface.get_compute_capability<  rD  r!   c                 ó@   • [         R                  R                  5         g r   )r'   rZ  ru   r@   s    r   ru   ÚMpsInterface.synchronize@  s   € ä�	‰	×ÑÕr!   c                   ót   • \ rS rSr\SS\R                  R                  S\4S jj5       r	\S\
4S j5       rSrg)	ÚMpsInterface.WorkeriE  Nr   r   c                 ót   • [        SS/5      " [        R                  R                  R	                  5       5      $ )NÚMPSPropertiesr!  )r   r'   rã   rZ  Úget_core_countr@   s    r   rH   Ú)MpsInterface.Worker.get_device_propertiesF  s0   € ä˜oÐ0GÐ/HÔIÜ—‘×"Ñ"×1Ñ1Ó3óð r!   c                  ó   • gr8  r"   r"   r!   r   rE   Ú"MpsInterface.Worker.current_deviceL  ó   € àr!   r"   r   ©r#   r$   r%   r&   rK   r'   r(   r)   r   rH   rL   rE   r*   r"   r!   r   rM   rc  E  óG   † Ø	ñ	¨%¯+©+×*<Ñ*<ð 	Èô 	ó 
ð	ð
 
ð	 ó 	ó 
ó	r!   rM   r"   r“   r   )r#   r$   r%   r&   rK   r”   r   r•   r'   r�   r…   r]   rL   rE   r(   r)   r¿   rz   ru   rM   r*   r"   r!   r   rR  rR  '  sí   † Øñ¨tð Àô ó ðð à=BñØ—K‘KðØ6:ðà	ôó ðð ð1˜$ó 1ó ð1ð ð˜Có ó ðð ñ u§{¡{×'9Ñ'9ð ÀSô ó ðð ñ ˜EŸK™K×.Ñ.ð  ¸$ô  ó ð ÷	ô 	r!   rR  c                   óú   • \ rS rSr\SS\S\4S jj5       r\ SS\R                  S\S\4S jj5       r
\S\4S j5       r\S\4S j5       r\SS
\R                  R                  S\4S jj5       r " S S5      rSrg	)ÚTpuInterfaceiQ  r|   r   c                 ó   • grÿ   r"   r~   s    r   r   ÚTpuInterface.is_bf16_supportedR  r  r!   r�   c                 ó¢   • U[         R                  [         R                  [         R                  [         R                  [         R
                  4;  $ r   )r'   rV  Ú	complex32Ú	complex64rW  Úhalfr„   s      r   r…   ÚTpuInterface.is_dtype_supportedV  s;   € ð Ü�M‰MÜ�O‰OÜ�O‰OÜ×ÑÜ�J‰Jð
ñ 
ð 	
r!   c                  ó   • [        5       $ r   r
   r"   r!   r   r]   ÚTpuInterface.is_availableb  s
   € ä‹Ðr!   c                  ó   • gr8  r"   r"   r!   r   rE   ÚTpuInterface.current_devicef  rG  r!   Nr   c                 ó   • grA  r"   r@   s    r   rz   Ú#TpuInterface.get_compute_capabilityj  rD  r!   c                   ót   • \ rS rSr\SS\R                  R                  S\4S jj5       r	\S\
4S j5       rSrg)	ÚTpuInterface.Workerio  Nr   r   c                 ó(   • [        SS/5      " S5      $ )NÚTPUPropertiesr!  rÏ   r   r@   s    r   rH   Ú)TpuInterface.Worker.get_device_propertiesp  s   € ä˜oÐ0GÐ/HÔIØóð r!   c                  ó   • gr8  r"   r"   r!   r   rE   Ú"TpuInterface.Worker.current_devicev  rj  r!   r"   r   rk  r"   r!   r   rM   r}  o  rl  r!   rM   r"   r“   r   )r#   r$   r%   r&   rK   r”   r   r•   r'   r�   r…   r]   rL   rE   r(   r)   r¿   rz   rM   r*   r"   r!   r   rn  rn  Q  sÁ   † Øñ¨tð Àô ó ðð à=Bñ	
Ø—K‘Kð	
Ø6:ð	
à	ô	
ó ð	
ð ð˜$ó ó ðð ð˜Có ó ðð ñ u§{¡{×'9Ñ'9ð ÀSô ó ð÷	ô 	r!   rn  Údevice_interfacesFr   r™   r   c                 ól   • [        U [        R                  5      (       a  U R                  n U[        U '   g r   )r¾   r'   r   r¦   rƒ  )r   r™   s     r   Úregister_interface_for_devicer…    s)   € ô �&œ%Ÿ,™,×'Ñ'Ø—‘ˆØ 0Ô�fÒr!   c                 óÄ   • [        U [        R                  5      (       a  U R                  n [        (       d
  [        5         U [        ;   a	  [        U    $ [        SU  35      e)NzNo interface for device )r¾   r'   r   r¦   Ú_device_initializedÚinit_device_regrƒ  r   r@   s    r   Úget_interface_for_devicer‰  ‡  sO   € Ü�&œ%Ÿ,™,×'Ñ'Ø—‘ˆßÒÜÔØÔ"Ó"Ü  Ñ(Ð(Ü
Ð 8¸¸ÐAÓ
BÐBr!   c                  óT   • [         (       d
  [        5         [        R                  5       $ r   )r‡  rˆ  rƒ  Úitemsr"   r!   r   Ú get_registered_device_interfacesrŒ  ‘  s   € ßÒÜÔÜ×"Ñ"Ó$Ð$r!   c                  óN  • [        S[        5        [        [        R                  R                  5       5       H  n [        SU  3[        5        M     [        S[        5        [        [        R                  R                  5       5       H  n [        SU  3[        5        M     [        S[        5        [        [        R                  R                  5       5       H  n [        SU  3[        5        M     [        S[        5        [        S[        5        [        S	[        5        S
qg )Nrµ   zcuda:r  zxpu:rñ   zmtia:rO  rZ  ÚtpuT)r…  r®   rÁ   r'   rµ   rZ   r	  r  rì   rñ   r$  rR  rn  r‡  )rÃ   s    r   rˆ  rˆ  —  sÎ   € ä! &¬-Ô8Ü”5—:‘:×*Ñ*Ó,Ö-ˆÜ%¨¨a¨S k´=ÖAñ .ô " %¬Ô6Ü”5—9‘9×)Ñ)Ó+Ö,ˆÜ%¨¨Q¨C j´,Ö?ñ -ô " &¬-Ô8Ü”5—:‘:×*Ñ*Ó,Ö-ˆÜ%¨¨a¨S k´=ÖAñ .ô " %¬Ô6Ü! %¬Ô6Ü! %¬Ô6àÑr!   r¬   )3rJ   rà   r*  Úcollectionsr   Úcollections.abcr   r   Údataclassesr   Útypingr   r	   r'   Útorch.utils._pallasr   rL   r"  rµ   Ú_is_compiledÚtorch._Cr   r   r   Údictr¿   r   r   r—   r®   rñ   rê   ré   rì   r  r  r  r	  r   r$  rR  rn  rƒ  r¦   r‡  r   r…  r‰  ÚtuplerŒ  rˆ  r"   r!   r   Ú<module>r˜     s  ðòó" Û Ý "ß .Ý !ß ã Ý -ð ˜3˜% ˜*Ñ%¨Ñ,Ó ,Ø‡:�:×Ñ×ÑÞEà€Oð 46Ð   $ s¨C x¡.Ó 5Ø13Ð   S¨# X¡Ó 3÷Kñ K÷\ñ ô6aW�Oô aWðH ˜3˜% ˜*Ñ%¨Ñ,Ó ,Ø‡:�:×Ñ×ÑÞEà€OôMU�Oô MUð` ˜#˜ ˜Ñ$ tÑ+Ó +Ø‡9�9×Ñ×ÑÞCà€NôOV�?ô OVðd ÷ð ó ðô:T�?ô :Tôz'�?ô 'ô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!   