ó
    Eñi5W  ã                   óJ  • % 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JrJr  SSKr\\\/\4      \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'   \R<                  R'                  5       (       a  SSKJr   OSr  " S S\5      r!\\\/\4      \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(0 r)\\\*\   4   \S'   S q+S!\\\RX                  4   S"\*\   S#S4S$ jr-S!\\\RX                  4   S#\*\   4S% jr.S#\\/\\*\   4      4S& jr0S(S' jr1g))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ÚOptionalÚUnionÚ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     Ú[/home/mande/repo/quber/.venv/lib/python3.13/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é1   Ú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__2   s   € Ü%Økóð r    r!   N©r"   r#   r$   r%   r   r   r)   r!   r    r   ÚEventr+   1   ó   † ð	 ð 	¨sð 	°s÷ 	r    r3   c                   ó*   • \ rS rSrS\S\S\4S jrSrg)ÚDeviceInterface.Streamé7   r-   r.   r   c                 ó   • [        S5      e)Nz[Stream should be inherited from torch.Stream, otherwise, it couldn't be captured by dynamo.r   r0   s      r   r   ÚDeviceInterface.Stream.__new__8   s   € Ü%Ømóð r    r!   Nr2   r!   r    r   ÚStreamr6   7   r4   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_deviceE   ó   € ä%Ð%r    c                  ó   • [         er   r   r!   r    r   Úcurrent_deviceÚ%DeviceInterface.Worker.current_deviceI   rB   r    c                 ó   • [         er   r   r?   s    r   Úget_device_propertiesÚ,DeviceInterface.Worker.get_device_propertiesM   rB   r    r!   r   )r"   r#   r$   r%   Ú__doc__ÚstaticmethodÚintr@   rD   r&   r'   r(   r   rG   r)   r!   r    r   ÚWorkerr<   =   sp   † ñ	ð 
ð	&˜sð 	& tó 	&ó 
ð	&ð 
ð	& ó 	&ó 
ð	&ð 
ñ	&¨%¯+©+×*<Ñ*<ð 	&Èô 	&ó 
ó	&r    rL   r   c                  ó   • [         er   r   r!   r    r   rD   ÚDeviceInterface.current_deviceQ   ó   € ä!Ð!r    Nc                 ó   • [         er   r   r?   s    r   r@   ÚDeviceInterface.set_deviceU   rO   r    c                 ó   • [         er   r   r?   s    r   Úmaybe_exchange_deviceÚ%DeviceInterface.maybe_exchange_deviceY   rO   r    c                 ó   • [         er   r   r?   s    r   Úexchange_deviceÚDeviceInterface.exchange_device]   rO   r    c                  ó   • [         er   r   r!   r    r   Údevice_countÚDeviceInterface.device_counta   rO   r    c                  ó   • [         er   r   r!   r    r   Úis_availableÚDeviceInterface.is_availablee   rO   r    Ústreamc                 ó   • [         er   r   ©r^   s    r   r^   ÚDeviceInterface.streami   rO   r    c                  ó   • [         er   r   r!   r    r   Úcurrent_streamÚDeviceInterface.current_streamm   rO   r    c                 ó   • [         er   r   r`   s    r   Ú
set_streamÚDeviceInterface.set_streamq   rO   r    Ú	stream_idÚdevice_indexÚdevice_typec                 ó   • [         er   r   )rh   ri   rj   s      r   Ú_set_stream_by_idÚ!DeviceInterface._set_stream_by_idu   rO   r    Ú
device_idxc                 ó   • [         er   r   ©rn   s    r   Úget_raw_streamÚDeviceInterface.get_raw_streamy   rO   r    c                 ó   • [         er   r   r?   s    r   ÚsynchronizeÚDeviceInterface.synchronize}   rO   r    c                 ó8   • U R                   R                  U5      $ r   )rL   rG   r   s     r   rG   Ú%DeviceInterface.get_device_properties�   s   € à�z‰z×/Ñ/°Ó7Ð7r    c                 ó   • [         er   r   r?   s    r   Úget_compute_capabilityÚ&DeviceInterface.get_compute_capability…   rO   r    Úincluding_emulationc                 ó   • [         er   r   ©r{   s    r   Úis_bf16_supportedÚ!DeviceInterface.is_bf16_supported‰   rO   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“   rO   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                 óD   • U R                  5       (       d  [        S5      eg)a  
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)rŠ   ÚRuntimeErrorr   s     r   Úraise_if_triton_unavailableÚ+DeviceInterface.raise_if_triton_unavailableŸ   s$   € ð ×$Ñ$×&Ñ&ÜÐPÓQÐQð 'r    r!   r   ©F)&r"   r#   r$   r%   rI   r   r3   r:   rL   rJ   rK   rD   r&   r'   r(   r@   rS   rV   rY   Úboolr\   r   r^   rc   rf   rl   rq   rt   ÚclassmethodrG   ry   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ð Àô ó ðð ñ
R°·±×1CÑ1Cð 
RÈtô 
Ró ó
Rr    r   c            	       ód   • \ rS rSrSr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Úindexr   Nc                 ó*   • 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–   rV   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–   rS   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%   rI   r£   r   r	   rK   rž   r¡   r   r   r¨   r)   r!   r    r   r”   r”   ­   sX   † ñðØ $ _Ñ 5ðØ>FÀs¹mðà	ôô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   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   r@   ÚCudaInterface.Worker.set_deviceÒ   ó   € à5;Ô*¨6Ò2r    c                  ód   • S[         ;   a	  [         S   $ [        R                  R                  5       $ r²   )r   r&   r³   rD   r!   r    r   rD   Ú#CudaInterface.Worker.current_deviceÖ   ó)   € àÔ7Ó7Ü5°fÑ=Ð=Ü—:‘:×,Ñ,Ó.Ð.r    c                 ó
  • U bh  [        U [        5      (       a(  [        R                  " U 5      n U R                  S:X  d   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 r²   )Ú
isinstanceÚstrr&   r   r£   r—   r¬   rL   rD   r   Úranger³   rY   rG   ©r   ÚiÚdevice_props      r   rG   Ú*CudaInterface.Worker.get_device_propertiesÜ   ó×   € àÑ!Ü˜f¤c×*Ñ*Ü"Ÿ\š\¨&Ó1�FØ!Ÿ;™;¨&Ó0Ð0Ð0Ü˜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%   rJ   rK   r@   rD   r&   r'   r(   r   rG   r)   r!   r    r   rL   r¯   Ñ   óm   † Ø	ð	<˜sð 	< tó 	<ó 
ð	<ð 
ð	/ ó 	/ó 
ð	/ð
 
ñ	D¨%¯+©+×*<Ñ*<ð 	DÈô 	Dó 
ó	Dr    rL   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_capabilityrG   ÚgcnArchNameÚsplit)r   ÚmajorÚmins      r   ry   Ú$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³   rG   rÑ   r?   s    r   rŠ   ÚCudaInterface.is_triton_capable  s>   € ô �M‰M×Ñ TÐ)÷ CÜ�z‰z×/Ñ/°Ó7×=Ñ=ÀÑBð	
r    c                 óŽ  • 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  [        S5      eg SUR                  R                  ;  a  [        S5      eg )Nr   )ÚGPUTooOldForTritonÚamdz'triton not built with the 'amd' backendÚnvidiaz*triton not built with the 'nvidia' backend)Útorch._inductor.excrØ   r¬   rŠ   r&   r³   rG   ÚinspectÚcurrentframeÚtriton.backendsrÌ   rÍ   Úbackendsr�   )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Ü"Ð#LÓMÐMð 5à˜VŸ_™_×5Ñ5Ó5ÜÐKÓLÐLð 6r    r!   r   )'r"   r#   r$   r%   r&   r³   r   r3   r:   rL   rJ   rD   r@   rY   r^   rc   rf   rl   rt   rG   r   rq   Ú_exchange_devicerV   Ú_maybe_exchange_devicerS   r‡   r~   r‘   r\   r'   r(   r
   rK   r¼   ry   rŠ   rŽ   r)   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ÀUÈ3ÐPSÈ8Á_ô Yó ðYð ñ
 %§+¡+×"4Ñ"4ð 
Àô 
ó ð
ð ñM¨E¯K©K×,>Ñ,>ð MÈ$ô Mó óM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.Workeri2  r   r   Nc                 ó   • U [         S'   g ©NÚmtiar´   r?   s    r   r@   ÚMtiaInterface.Worker.set_device3  r¶   r    c                  ód   • S[         ;   a	  [         S   $ [        R                  R                  5       $ rì   )r   r&   rí   rD   r!   r    r   rD   Ú#MtiaInterface.Worker.current_device7  r¹   r    c                 ó
  • U bh  [        U [        5      (       a(  [        R                  " U 5      n U R                  S:X  d   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 rì   )r»   r¼   r&   r   r£   r—   rè   rL   rD   r   r½   rí   rY   rG   r¾   s      r   rG   Ú*MtiaInterface.Worker.get_device_properties=  rÂ   rÃ   r!   r   rÄ   r!   r    r   rL   rê   2  rÅ   r    rL   r   c                  óB   • [         R                  R                  5       n U $ r   )r&   rí   r\   )Úrets    r   r\   ÚMtiaInterface.is_availableb  s   € ä�j‰j×%Ñ%Ó'ˆØˆ
r    Nr   c                 óD   • [         R                  R                  U 5      nU$ r   )r&   rí   rÎ   ©r   Úccs     r   ry   Ú$MtiaInterface.get_compute_capabilityg  s   € ä�Z‰Z×-Ñ-¨fÓ5ˆØˆ	r    c                 ó   • g©NTr!   r?   s    r   rŠ   ÚMtiaInterface.is_triton_capablel  ó   € àr    c                 óV   • SS K nSUR                  R                  ;  a  [        S5      eg )Nr   rí   z(triton not built with the 'mtia' backend©rÞ   rß   r�   ©r   rá   s     r   rŽ   Ú)MtiaInterface.raise_if_triton_unavailablep  s(   € ãà˜Ÿ™×1Ñ1Ó1ÜÐIÓJÐJð 2r    r!   r   )%r"   r#   r$   r%   r&   rí   r   r3   r:   rL   rJ   rD   r@   rY   r^   rc   rf   rl   rt   rG   rå   rq   rã   rV   rä   rS   r‡   r~   r‘   r\   r'   r(   r   ry   rŠ   rŽ   r)   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                   ó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   r@   ÚXpuInterface.Worker.set_device†  s   € à4:Ô*¨5Ò1r    c                  ód   • S[         ;   a	  [         S   $ [        R                  R                  5       $ r	  )r   r&   r
  rD   r!   r    r   rD   Ú"XpuInterface.Worker.current_deviceŠ  s)   € àÔ6Ó6Ü5°eÑ<Ð<Ü—9‘9×+Ñ+Ó-Ð-r    c                 ó
  • U bh  [        U [        5      (       a(  [        R                  " U 5      n U R                  S:X  d   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 r	  )r»   r¼   r&   r   r£   r—   r  rL   rD   r   r½   r
  rY   rG   r¾   s      r   rG   Ú)XpuInterface.Worker.get_device_properties�  s×   € àÑ!Ü˜f¤c×*Ñ*Ü"Ÿ\š\¨&Ó1�FØ!Ÿ;™;¨%Ó/Ð/Ð/Ü˜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   rL   r  …  sm   † Ø	ð	;˜sð 	; tó 	;ó 
ð	;ð 
ð	. ó 	.ó 
ð	.ð
 
ñ	C¨%¯+©+×*<Ñ*<ð 	CÈô 	Có 
ó	Cr    rL   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   ry   Ú#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                 óV   • SS K nSUR                  R                  ;  a  [        S5      eg )Nr   Úintelz)triton not built with the 'intel' backendrÿ   r   s     r   rŽ   Ú(XpuInterface.raise_if_triton_unavailableÅ  s(   € ãà˜&Ÿ/™/×2Ñ2Ó2ÜÐJÓKÐKð 3r    r!   r   r�   )%r"   r#   r$   r%   r&   r
  r   r3   r:   rL   rJ   rD   r@   rY   r^   rc   rf   rl   rt   rG   r  rq   rã   rV   rä   rS   r‡   r‘   r\   r'   r(   r   ry   r~   rŠ   rŽ   r)   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                   ó    • \ rS rSr% \\S'   Srg)ÚCpuDevicePropertiesiÍ  Úmulti_processor_countr!   N)r"   r#   r$   r%   rK   Ú__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*  r.  r)   r!   r    r   r3   r"  Ô  s@   † ñ	¨$ð 	¸$õ 	ð	3 cð 	3¨eô 	3ñ	, ð 	,°÷ 	,ð 	,r    r3   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   r5  r6  s      r   rG   Ú)CpuInterface.Worker.get_device_propertiesà  s    € ó #à'×1Ñ1Ó3ˆIÜ& yÓ1Ð1r    r!   r   )r"   r#   r$   r%   rJ   r&   r'   r(   r  rG   r)   r!   r    r   rL   r2  ß  s1   † Ø	à)-ñ	2Ø—K‘K×&Ñ&ð	2à ô	2ó 
ó	2r    rL   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   ry   Ú#CpuInterface.get_compute_capabilityñ  ó   € àr    rn   c                 ó   • gr4  r!   rp   s    r   rq   ÚCpuInterface.get_raw_streamõ  ó   € àr    c                  ó   • gr4  r!   r!   r    r   rD   ÚCpuInterface.current_deviceù  rC  r    c                 ó   • g r   r!   r?   s    r   rt   ÚCpuInterface.synchronizeý  s   € àr    c                 ó   • grû   r!   r?   s    r   rŠ   ÚCpuInterface.is_triton_capable  rý   r    c                 óV   • SS K nSUR                  R                  ;  a  [        S5      eg )Nr   Úcpuz'triton not built with the 'cpu' backendrÿ   r   s     r   rŽ   Ú(CpuInterface.raise_if_triton_unavailable  s(   € ãà˜Ÿ™×0Ñ0Ó0ÜÐHÓIÐIð 1r    r!   r�   r   )r"   r#   r$   r%   r&   r3   rL   rJ   r‘   r\   r~   r'   r(   r¼   ry   r   rK   rq   rD   rt   rŠ   rŽ   r)   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                   ó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                 óV   • [         R                  R                  R                  SS5      $ )Né   r   )r&   rß   ÚmpsÚis_macos_or_newerr}   s    r   r~   ÚMpsInterface.is_bf16_supported  s   € ä�~‰~×!Ñ!×3Ñ3°B¸Ó:Ð:r    r€   c                 ó¢   • U[         R                  [         R                  4;   a  gU[         R                  :g  =(       d    U R	                  U5      $ r§   )r&   Úfloat64Ú
complex128r‚   r~   rƒ   s      r   r„   ÚMpsInterface.is_dtype_supported  s>   € ð ”U—]‘]¤E×$4Ñ$4Ð5Ó5ØØœŸ™Ñ&×T¨#×*?Ñ*?Ð@SÓ*TÐTr    c                  óR   • [         R                  R                  R                  5       $ r   )r&   rß   rQ  r\   r!   r    r   r\   ÚMpsInterface.is_available  s   € ä�~‰~×!Ñ!×.Ñ.Ó0Ð0r    c                  ó   • gr4  r!   r!   r    r   rD   ÚMpsInterface.current_device  rC  r    Nr   c                 ó   • gr=  r!   r?   s    r   ry   Ú#MpsInterface.get_compute_capability"  r@  r    c                 ó@   • [         R                  R                  5         g r   )r&   rQ  rt   r?   s    r   rt   Ú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.Workeri+  Nr   r   c                 ót   • [        SS/5      " [        R                  R                  R	                  5       5      $ )NÚMPSPropertiesr  )r   r&   rß   rQ  Úget_core_countr?   s    r   rG   Ú)MpsInterface.Worker.get_device_properties,  s0   € ä˜oÐ0GÐ/HÔIÜ—‘×"Ñ"×1Ñ1Ó3óð r    c                  ó   • gr4  r!   r!   r    r   rD   Ú"MpsInterface.Worker.current_device2  s   € àr    r!   r   )r"   r#   r$   r%   rJ   r&   r'   r(   r   rG   rK   rD   r)   r!   r    r   rL   ra  +  sG   † Ø	ñ	¨%¯+©+×*<Ñ*<ð 	Èô 	ó 
ð	ð
 
ð	 ó 	ó 
ó	r    rL   r!   r�   r   )r"   r#   r$   r%   rJ   r‘   r~   r’   r&   r€   r„   r\   rK   rD   r'   r(   r¼   ry   rt   rL   r)   r!   r    r   rN  rN    sò   † Øñ;¨tð ;Àô ;ó ð;ð à=BñUØ—K‘KðUØ6:ðUà	ôUó ðUð ð1˜$ó 1ó ð1ð ð˜Có ó ðð ñ u§{¡{×'9Ñ'9ð ÀSô ó ðð ñ ˜EŸK™K×.Ñ.ð  ¸$ô  ó ð ÷	ô 	r    rN  Údevice_interfacesFr   r–   r   c                 ól   • [        U [        R                  5      (       a  U R                  n U[        U '   g r   )r»   r&   r   r£   rh  )r   r–   s     r   Úregister_interface_for_devicerj  ;  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_regrh  r   r?   s    r   Úget_interface_for_devicern  C  sO   € Ü�&œ%Ÿ,™,×'Ñ'Ø—‘ˆßÒÜÔØÔ"Ó"Ü  Ñ(Ð(Ü
Ð 8¸¸ÐAÓ
BÐBr    c                  óT   • [         (       d
  [        5         [        R                  5       $ r   )rl  rm  rh  Úitemsr!   r    r   Ú get_registered_device_interfacesrq  M  s   € ßÒÜÔÜ×"Ñ"Ó$Ð$r    c                  ó.  • [        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	qg )
Nr³   zcuda:r
  zxpu:rí   zmtia:rK  rQ  T)rj  r¬   r½   r&   r³   rY   r  r
  rè   rí   r   rN  rl  )r¿   s    r   rm  rm  S  sÄ   € ä! &¬-Ô8Ü”5—:‘:×*Ñ*Ó,Ö-ˆÜ%¨¨a¨S k´=ÖAñ .ô " %¬Ô6Ü”5—9‘9×)Ñ)Ó+Ö,ˆÜ%¨¨Q¨C j´,Ö?ñ -ô " &¬-Ô8Ü”5—:‘:×*Ñ*Ó,Ö-ˆÜ%¨¨a¨S k´=ÖAñ .ô " %¬Ô6Ü! %¬Ô6àÑr    rª   )2rI   rÜ   r&  Úcollectionsr   Úcollections.abcr   r   Údataclassesr   Útypingr   r   r	   r
   r&   rK   r  r³   Ú_is_compiledÚtorch._Cr   r   r   Údictr¼   r   r   r”   r¬   rí   ræ   rå   rè   r
  r  r  r  r  r   rN  rh  r£   rl  r   rj  rn  Útuplerq  rm  r!   r    r   Ú<module>r{     s  ðòó" Û Ý "ß .Ý !ß 0Ó 0ã ð ˜( C 5¨# :Ñ.Ñ/Ó /Ø‡:�:×Ñ×ÑÞEà€Oð 46Ð   $ s¨C x¡.Ó 5Ø13Ð   S¨# X¡Ó 3÷CRñ CR÷Lñ ô6ZM�Oô ZMðz ˜( C 5¨# :Ñ.Ñ/Ó /Ø‡:�:×Ñ×ÑÞEà€OôIK�Oô IKðX ˜ 3 %¨ *Ñ-Ñ.Ó .Ø‡9�9×Ñ×ÑÞCà€NôKL�?ô KLð\ ÷ð ó ðô8J�?ô 8Jôv'�?ô 'ðT 79Ð �4˜˜T /Ñ2Ð2Ñ3Ó 8ØÐ ð1Ø�#�u—|‘|Ð#Ñ$ð1Ø8<¸_Ñ8Mð1à	ô1ðC U¨3°·±Ð+<Ñ%=ð CÀ$ÀÑBWô Cð%¨(°5¸¸dÀ?Ñ>SÐ9SÑ3TÑ*Uô %õr    