Ë
    g^(ha:  ã                   ó´  — U d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
 ddlZe	eegef      ed<   ej                  j                  «       rddlmZ ndZe
ej&                  eedf   Zi Zeeef   ed<   i Zeeef   ed	<    G d
„ d«      Z G d„ d«      Z G d„ de«      Ze	eegef      ed<   ej8                  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"i Z#eee$e   f   ed<   da%de
eej&                  f   de$e   fd„Z&de
eej&                  f   de$e   fd „Z'dee(ee$e   f      fd!„Z)d"„ Z*y)#aî  
Device abstraction layer for TorchDynamo and Inductor backends.

This module provides a unified interface for different hardware backends (CUDA, XPU,
CPU, MPS) 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
- 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)ÚIterable)Ú	dataclass)ÚAnyÚCallableÚOptionalÚUnionÚ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
„ «       Z	ede
fd„«       Zededefd„«       Zededefd„«       Zed„ «       Zedefd„«       Zedej                  fd„«       Zed„ «       Zedej                  fd„«       Zedededefd„«       Zededefd„«       Zed$de
fd„«       Zed$de
fd„«       Zed$de
fd„«       Zed%defd „«       Ze	 d%d!ej:                  dedefd"„«       Zed$de
de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                   ó   — e Zd Zdefd„Zy)úDeviceInterface.deviceÚdevicec                 ó   — t         ‚©N©ÚNotImplementedError©Úclsr   s     ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/device_interface.pyÚ__new__zDeviceInterface.device.__new__0   s   € Ü%Ð%ó    N)Ú__name__Ú
__module__Ú__qualname__Ú	_device_tr   © r   r   r   r   /   s   „ ð	& ô 	&r   r   c                   ó   — e Zd Zd„ Zy)úDeviceInterface.Eventc                 ó   — t        d«      ‚)NzYEvent should be inherited from torch.Event, otherwise, it couldn't be captured by dynamo.r   ©r   ÚargsÚkwargss      r   r   zDeviceInterface.Event.__new__4   s   € Ü%Økóð r   N©r   r   r   r   r   r   r   ÚEventr!   3   ó   „ ó	r   r'   c                   ó   — e Zd Zd„ Zy)úDeviceInterface.Streamc                 ó   — 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__:   s   € Ü%Ømóð r   Nr&   r   r   r   ÚStreamr*   9   r(   r   r,   c                   óT   — e Zd ZdZedefd„«       Zedefd„«       Zeddefd„«       Z	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   c                 ó   — t         ‚r   r   ©r   s    r   Ú
set_devicez!DeviceInterface.Worker.set_deviceG   ó   € ä%Ð%r   Úreturnc                  ó   — t         ‚r   r   r   r   r   Úcurrent_devicez%DeviceInterface.Worker.current_deviceK   r2   r   Nc                 ó   — t         ‚r   r   r0   s    r   Úget_device_propertiesz,DeviceInterface.Worker.get_device_propertiesO   r2   r   r   )
r   r   r   Ú__doc__ÚstaticmethodÚintr1   r5   r   r7   r   r   r   ÚWorkerr.   ?   sX   „ ñ	ð 
ð	&˜sò 	&ó 
ð	&ð 
ð	& ò 	&ó 
ð	&ð 
ñ	&¨)ò 	&ó 
ñ	&r   r;   c                  ó   — t         ‚r   r   r   r   r   r5   zDeviceInterface.current_deviceS   ó   € ä!Ð!r   c                 ó   — t         ‚r   r   r0   s    r   r1   zDeviceInterface.set_deviceW   r=   r   r3   c                 ó   — t         ‚r   r   r0   s    r   Úmaybe_exchange_devicez%DeviceInterface.maybe_exchange_device[   r=   r   c                 ó   — t         ‚r   r   r0   s    r   Úexchange_devicezDeviceInterface.exchange_device_   r=   r   c                  ó   — t         ‚r   r   r   r   r   Údevice_countzDeviceInterface.device_countc   r=   r   c                  ó   — t         ‚r   r   r   r   r   Úis_availablezDeviceInterface.is_availableg   r=   r   Ústreamc                 ó   — t         ‚r   r   ©rG   s    r   rG   zDeviceInterface.streamk   r=   r   c                  ó   — t         ‚r   r   r   r   r   Úcurrent_streamzDeviceInterface.current_streamo   r=   r   c                 ó   — t         ‚r   r   rI   s    r   Ú
set_streamzDeviceInterface.set_streams   r=   r   Ú	stream_idÚdevice_indexÚdevice_typec                 ó   — t         ‚r   r   )rN   rO   rP   s      r   Ú_set_stream_by_idz!DeviceInterface._set_stream_by_idw   r=   r   Ú
device_idxc                 ó   — t         ‚r   r   ©rS   s    r   Úget_raw_streamzDeviceInterface.get_raw_stream{   r=   r   Nc                 ó   — t         ‚r   r   r0   s    r   ÚsynchronizezDeviceInterface.synchronize   r=   r   c                 ó8   — | j                   j                  |«      S r   )r;   r7   r   s     r   r7   z%DeviceInterface.get_device_propertiesƒ   s   € à�z‰z×/Ñ/°Ó7Ð7r   c                 ó   — t         ‚r   r   r0   s    r   Úget_compute_capabilityz&DeviceInterface.get_compute_capability‡   r=   r   Úincluding_emulationc                 ó   — t         ‚r   r   ©r\   s    r   Úis_bf16_supportedz!DeviceInterface.is_bf16_supported‹   r=   r   Údtypec                 óN   — |t         j                  k7  xs | j                  |«      S r   )ÚtorchÚbfloat16r_   ©r   r`   r\   s      r   Úis_dtype_supportedz"DeviceInterface.is_dtype_supported�   s$   € ð œŸ™Ñ&ÒT¨#×*?Ñ*?Ð@SÓ*TÐTr   c                 ó   — t         ‚r   r   r0   s    r   Úmemory_allocatedz DeviceInterface.memory_allocated•   r=   r   r   ©F) r   r   r   r8   r   r'   r,   r;   r9   r5   r   r1   r:   r@   rB   rD   ÚboolrF   rb   rG   rK   rM   rR   rV   rX   Úclassmethodr7   r[   r_   r`   re   rg   r   r   r   r   r   )   s4  „ ñ÷
&ñ &÷ñ ÷ñ ÷&ñ &ð( ñ"ó ð"ð ð"˜9ò "ó ð"ð ð" cð "¨cò "ó ð"ð ð" ð "¨ò "ó ð"ð ñ"ó ð"ð ð"˜$ò "ó ð"ð ð"�u—|‘|ò "ó ð"ð ñ"ó ð"ð ð"˜5Ÿ<™<ò "ó ð"ð ð" Sð "¸ð "È#ò "ó ð"ð ð" 3ð "¨3ò "ó ð"ð ñ"˜Iò "ó ð"ð ñ8¨9ò 8ó ð8ð ñ" yò "ó ð"ð ñ"¨tò "ó ð"ð à=BñUØ—K‘KðUØ6:ðUà	òUó ðUð
 ñ" ð "°cò "ó ñ"r   r   c                   óJ   — e Zd ZdZdee   dee   ddfd„Zd„ Z	de
d	e
d
e
fd„Z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Úindexr3   Nc                 ó.   — || _         || _        d| _        y )Néÿÿÿÿ)rm   ÚidxÚprev_idx)Úselfrm   rn   s      r   Ú__init__zDeviceGuard.__init__¤   s   € ð !1ˆÔØˆŒØˆ�r   c                 ór   — | j                   �+| j                  j                  | j                   «      | _        y y r   )rq   rm   rB   rr   )rs   s    r   Ú	__enter__zDeviceGuard.__enter__«   s-   € Ø�8‰8ÐØ ×1Ñ1×AÑAÀ$Ç(Á(ÓKˆD�Mð  r   ÚtypeÚvalueÚ	tracebackc                 óp   — | j                   �*| j                  j                  | j                  «      | _         y©NF)rq   rm   r@   rr   )rs   rw   rx   ry   s       r   Ú__exit__zDeviceGuard.__exit__¯   s+   € Ø�8‰8ÐØ×,Ñ,×BÑBÀ4Ç=Á=ÓQˆDŒHØr   )r   r   r   r8   rw   r   r   r:   rt   rv   r   r|   r   r   r   rl   rl   š   sM   „ ñðØ $ _Ñ 5ðØ>FÀs¹mðà	óòLð˜Sð ¨ð ¸ô r   rl   c                   óº  — e Zd Zej                  j
                  Zej                  j                  Zej                  j                  Z G d„ d«      Z e	ej                  j                  «      Z
 e	ej                  j                  «      Z e	ej                  j                  «      Z e	ej                  j                  «      Z e	ej                  j                  «      Z e	ej                  j                  «      Z e	ej                  j                   «      Z e	ej                  j"                  «      Z e	ej                  j$                  «      Z e	e«      Z e	ej                  j*                  «      Z e	ej                  j.                  «      Z e	ej                  j2                  «      Z e	ej                  j4                  «      Ze	defd„«       Ze	ddefd„«       Zy)	ÚCudaInterfacec                   óP   — e Zd Zedefd„«       Zedefd„«       Zeddefd„«       Zy)úCudaInterface.Workerr   c                 ó   — | t         d<   y ©NÚcuda©r   r0   s    r   r1   zCudaInterface.Worker.set_device¾   s   € à5;Ô*¨6Ò2r   r3   c                  ó`   — dt         v r	t         d   S t        j                  j                  «       S r‚   )r   rb   rƒ   r5   r   r   r   r5   z#CudaInterface.Worker.current_deviceÂ   s)   € àÔ7Ñ7Ü5°fÑ=Ð=Ü—:‘:×,Ñ,Ó.Ð.r   Nc                 óä  — | �\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Ústrrb   r   rw   rn   r~   r;   r5   r   Úrangerƒ   rD   r7   ©r   ÚiÚdevice_props      r   r7   z*CudaInterface.Worker.get_device_propertiesÈ   sÎ   € àÐ!Ü˜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   r9   r:   r1   r5   r   r7   r   r   r   r;   r€   ½   sT   „ Ø	ð	<˜sò 	<ó 
ð	<ð 
ð	/ ò 	/ó 
ð	/ð
 
ñ	D¨)ò 	Dó 
ñ	Dr   r;   r3   c                  ó>   — t         j                  j                  «       S r   )rb   rƒ   rF   r   r   r   rF   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   )rb   ÚversionÚhiprƒ   Úget_device_capabilityr7   Ú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   r   )r   r   r   rb   rƒ   r   r'   r,   r;   r9   r5   r1   rD   rG   rK   rM   rR   rX   r7   r	   rV   Ú_exchange_devicerB   Ú_maybe_exchange_devicer@   rg   r_   ri   rF   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 yò Yó ñYr   r~   Úget_xpu_stream)Ú_xpu_getCurrentRawStreamc                   óž  — e Zd Zej                  j
                  Zej                  j                  Zej                  j                  Z G d„ d«      Z e	ej                  j                  «      Z
 e	ej                  j                  «      Z e	ej                  j                  «      Z e	ej                  j                  «      Z e	ej                  j                  «      Z e	ej                  j                  «      Z e	ej                  j                   «      Z e	ej                  j"                  «      Z e	ej                  j$                  «      Z e	e«      Z e	ej                  j*                  «      Z e	ej                  j.                  «      Z e	ej                  j2                  «      Ze	defd„«       Ze	d
defd„«       Ze	ddedefd	„«       Zy)ÚXpuInterfacec                   óP   — e Zd Zedefd„«       Zedefd„«       Zeddefd„«       Zy)úXpuInterface.Workerr   c                 ó   — | t         d<   y ©NÚxpur„   r0   s    r   r1   zXpuInterface.Worker.set_device  s   € à4:Ô*¨5Ò1r   r3   c                  ó`   — dt         v r	t         d   S t        j                  j                  «       S r¤   )r   rb   r¥   r5   r   r   r   r5   z"XpuInterface.Worker.current_device
  s)   € àÔ6Ñ6Ü5°eÑ<Ð<Ü—9‘9×+Ñ+Ó-Ð-r   Nc                 óä  — | �\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ˆ   rb   r   rw   rn   r    r;   r5   r   r‰   r¥   rD   r7   rŠ   s      r   r7   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¢     sT   „ Ø	ð	;˜sò 	;ó 
ð	;ð 
ð	. ò 	.ó 
ð	.ð
 
ñ	C¨)ò 	Có 
ñ	Cr   r;   r3   c                  ó>   — t         j                  j                  «       S r   )rb   r¥   rF   r   r   r   rF   zXpuInterface.is_available3  s   € ä�y‰y×%Ñ%Ó'Ð'r   Nr   c                 óD   — t         j                  j                  | «      }|S r   )rb   r¥   r–   )r   Úccs     r   r[   z#XpuInterface.get_compute_capability7  s   € ä�Y‰Y×,Ñ,¨VÓ4ˆØˆ	r   r\   c                 ó>   — t         j                  j                  «       S r   )rb   r¥   r_   r^   s    r   r_   zXpuInterface.is_bf16_supported<  s   € ä�y‰y×*Ñ*Ó,Ð,r   r   rh   )r   r   r   rb   r¥   r   r'   r,   r;   r9   r5   r1   rD   rG   rK   rM   rR   rX   r7   r�   rV   r›   rB   rœ   r@   rg   ri   rF   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×$>Ñ$>Ó?Ðð ð(˜$ò (ó ð(ð ñ yò ó ðð ñ-¨tð -Àò -ó ñ-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­   A  s   … àÔr   r­   c                   óÒ   — e Zd Z G d„ dej                  «      Zedefd„«       Zeddefd„«       Zedde	de
fd	„«       Zedefd
„«       Zed„ «       Zedde	fd„«       Z G d„ d«      Zy)ÚCpuInterfacec                   ó(   — e Zd Zdd„Zdefd„Zdd„Zy)úCpuInterface.Eventc                 ó   — d| _         y )Ng        ©Útime)rs   Úenable_timings     r   rt   zCpuInterface.Event.__init__H  s	   € ØˆD�Ir   r3   c                 ó:   — |j                   | j                   z
  dz  S )Niè  rµ   )rs   Ú	end_events     r   Úelapsed_timezCpuInterface.Event.elapsed_timeK  s   € Ø—N‘N T§Y¡YÑ.°$Ñ6Ð6r   Nc                 ó6   — t        j                  «       | _         y r   )r¶   Úperf_counter)rs   rG   s     r   ÚrecordzCpuInterface.Event.recordN  s   € Ü×)Ñ)Ó+ˆD�Ir   )Tr   )r   r   r   rt   Úfloatrº   r½   r   r   r   r'   r³   G  s   „ ó	ð	7¨Uó 	7ô	,r   r'   r3   c                   ó   — y©NTr   r   r   r   rF   zCpuInterface.is_availableQ  ó   € àr   r\   c                  ó   — yrÀ   r   r^   s    r   r_   zCpuInterface.is_bf16_supportedU  rÁ   r   Nr   c                  ó   — y©NÚ r   r0   s    r   r[   z#CpuInterface.get_compute_capabilityY  ó   € àr   c                  ó   — y©Nr   r   rU   s    r   rV   zCpuInterface.get_raw_stream]  ó   € àr   c                   ó   — yrÈ   r   r   r   r   r5   zCpuInterface.current_devicea  rÉ   r   c                  ó   — y r   r   r0   s    r   rX   zCpuInterface.synchronizee  s   € àr   c                   ó$   — e Zd Zeddefd„«       Zy)úCpuInterface.WorkerNr   c                 ó@   — dd l }|j                  «       }t        |«      S rÈ   )ÚmultiprocessingÚ	cpu_countr­   )r   rÏ   rÐ   s      r   r7   z)CpuInterface.Worker.get_device_propertiesj  s   € ã"à'×1Ñ1Ó3ˆIÜ& yÓ1Ð1r   r   )r   r   r   r9   r   r7   r   r   r   r;   rÍ   i  s   „ Ø	ñ	2¨)ò 	2ó 
ñ	2r   r;   rh   r   )r   r   r   rb   r'   r9   ri   rF   r_   r   rˆ   r[   r:   rV   r5   rX   r;   r   r   r   r±   r±   F  s¾   „ ô,�—‘ô ,ð ð˜$ò ó ðð ñ¨tò ó ðð ñ yð ¸Cò ó ðð ð cò ó ðð ñó ðð ñ˜Iò ó ð÷2ò 2r   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„ «       Zedd	edefd
„«       Zedd	efd„«       Z G d„ d«      Zy)ÚMpsInterfacer\   r3   c                 óV   — t         j                  j                  j                  dd«      S )Né   r   )rb   ÚbackendsÚmpsÚis_macos_or_newerr^   s    r   r_   zMpsInterface.is_bf16_supporteds  s   € ä�~‰~×!Ñ!×3Ñ3°B¸Ó:Ð:r   r`   c                 óv   — |t         j                  k(  ry|t         j                  k7  xs | j                  |«      S r{   )rb   Úfloat64rc   r_   rd   s      r   re   zMpsInterface.is_dtype_supportedw  s3   € ð ”E—M‘MÒ!ØØœŸ™Ñ&ÒT¨#×*?Ñ*?Ð@SÓ*TÐTr   c                  óR   — t         j                  j                  j                  «       S r   )rb   rÕ   rÖ   rF   r   r   r   rF   zMpsInterface.is_available  s   € ä�~‰~×!Ñ!×.Ñ.Ó0Ð0r   c                   ó   — yrÈ   r   r   r   r   r5   zMpsInterface.current_deviceƒ  rÉ   r   Nr   c                  ó   — yrÄ   r   r0   s    r   r[   z#MpsInterface.get_compute_capability‡  rÆ   r   c                 ó@   — t         j                  j                  «        y r   )rb   rÖ   rX   r0   s    r   rX   zMpsInterface.synchronize‹  s   € ä�	‰	×ÑÕr   c                   ó4   — e Zd Zeddefd„«       Zed„ «       Zy)úMpsInterface.WorkerNr   c                 ó   — i S r   r   r0   s    r   r7   z)MpsInterface.Worker.get_device_properties�  s   € àˆIr   c                   ó   — yrÈ   r   r   r   r   r5   z"MpsInterface.Worker.current_device”  s   € àr   r   )r   r   r   r9   r   r7   r5   r   r   r   r;   rß   �  s/   „ Ø	ñ	¨)ò 	ó 
ð	ð 
ñ	ó 
ñ	r   r;   rh   r   )r   r   r   r9   ri   r_   rj   rb   r`   re   rF   r5   r   rˆ   r[   rX   r;   r   r   r   rÒ   rÒ   r  sÐ   „ Øñ;¨tð ;Àò ;ó ð;ð à=BñUØ—K‘KðUØ6:ðUà	òUó ðUð ð1˜$ò 1ó ð1ð ñó ðð ñ yð ¸Cò ó ðð ñ ˜Iò  ó ð ÷ò r   rÒ   Údevice_interfacesFr   rm   c                 ób   — t        | t        j                  «      r| j                  } |t        | <   y r   )r‡   rb   r   rw   râ   )r   rm   s     r   Úregister_interface_for_devicerä   �  s&   € ô �&œ%Ÿ,™,Ô'Ø—‘ˆØ 0Ô�fÒr   r3   c                 ó¬   — t        | t        j                  «      r| j                  } t        s
t        «        | t        v r	t        |    S t        d| › �«      ‚)NzNo interface for device )r‡   rb   r   rw   Ú_device_initializedÚinit_device_regrâ   r   r0   s    r   Úget_interface_for_devicerè   ¥  sI   € Ü�&œ%Ÿ,™,Ô'Ø—‘ˆÝÜÔØÔ"Ñ"Ü  Ñ(Ð(Ü
Ð 8¸¸ÐAÓ
BÐBr   c                  óJ   — t         s
t        «        t        j                  «       S r   )ræ   rç   râ   Úitemsr   r   r   Ú get_registered_device_interfacesrë   ¯  s   € ÝÜÔÜ×"Ñ"Ó$Ð$r   c                  ó„  — 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        «       da
y )Nrƒ   zcuda:r¥   zxpu:ÚcpurÖ   T)rä   r~   r‰   rb   rƒ   rD   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´,Õ?ð@ô " %¬Ô6Ü! %¬Ô6àÑr   )+r8   r¶   Úcollections.abcr   Údataclassesr   Útypingr   r   r   r   rb   r:   r¯   rƒ   Ú_is_compiledÚtorch._Cr
   r	   r   rˆ   r   r   Údictr   r   rl   r~   r¥   rž   r�   r    r­   r±   rÒ   râ   rw   ræ   rä   rè   Útuplerë   rç   r   r   r   ú<module>rõ      s½  ðòó" Ý $Ý !ß 1Ó 1ã ð ˜( C 5¨# :Ñ.Ñ/Ó /Ø‡:�:×ÑÔÞEà€Oà�%—,‘,  S¨$Ð.Ñ/€	ð 46Ð   $ s¨C x¡.Ó 5Ø13Ð   S¨# X¡Ó 3÷n"ñ n"÷bñ ô6AY�Oô AYðH ˜ 3 %¨ *Ñ-Ñ.Ó .Ø‡9�9×ÑÔÞCà€Nô>-�?ô >-ðB ÷ð ó ðô)2�?ô )2ôX$�?ô $ðN 79Ð �4˜˜T /Ñ2Ð2Ñ3Ó 8ØÐ ð1Ø�#�u—|‘|Ð#Ñ$ð1Ø8<¸_Ñ8Mó1ðC U¨3°·±Ð+<Ñ%=ð CÀ$ÀÑBWó Cð%¨(°5¸¸dÀ?Ñ>SÐ9SÑ3TÑ*Uó %ór   