ó
    0VðiÄL  ã                   ó
  • S SK r S SKrS SKJrJrJr  S SKrS SKJr	  S\ R                  4S jrS\ R                  4S jrS\ R                  4S jrS\SS4S	 jrS\ R                  4S
 jrS\ R                  4S jrS\ R                  4S jrS\\   4S jr    S S\S\S\\   S\\   S\\   S\S\\\4   4S jjr " S S5      r " S S5      r S!S\\\4   S\\\      S\\\\S4   4   4S jjr S"S\S\S\S\4S jjrg)#é    N)ÚAnyÚOptionalÚUnion)Ú_get_device_indexÚreturnc                  óp  • [         R                  S:X  a6  [        R                  " S[        R
                  R                  S    S35      n O[        R                  " S5      n U R                  U l        U R                  U l
        U R                  U l        U R                  U l        U R                  U l        U $ )NÚwin32Ú	amdhip64_r   ú.dllzlibamdhip64.so)ÚsysÚplatformÚctypesÚCDLLÚtorchÚversionÚhipÚhipGetErrorStringÚcuGetErrorStringÚhipModuleLoadDataÚcuModuleLoadDataÚhipModuleGetFunctionÚcuModuleGetFunctionÚhipModuleLaunchKernelÚcuLaunchKernelÚhipFuncSetAttributeÚcuFuncSetAttribute)Úlibs    ÚVD:\a\ltx-desktop-ci\ltx-desktop-ci\python-embed\Lib\site-packages\torch\cuda\_utils.pyÚ_get_hip_runtime_libraryr      s�   € Ü
‡|�|�wÓÜ�kŠk˜I¤e§m¡m×&7Ñ&7¸Ñ&:Ð%;¸4Ð@ÓA‰ä�kŠkÐ*Ó+ˆØ×0Ñ0€CÔØ×0Ñ0€CÔØ!×6Ñ6€CÔØ×2Ñ2€CÔØ ×4Ñ4€CÔØ€Jó    c                  ó‚   • [         R                  S:X  a  [        R                  " S5      $ [        R                  " S5      $ )Nr	   z
nvcuda.dllzlibcuda.so.1)r   r   r   r   © r    r   Ú_get_cuda_libraryr#      s,   € Ü
‡|�|�wÓÜ�{Š{˜<Ó(Ð(ä�{Š{˜>Ó*Ð*r    c                  óh   • [         R                  R                  (       a
  [        5       $ [	        5       $ ©N)r   r   r   r   r#   r"   r    r   Ú_get_gpu_runtime_libraryr&       s!   € Ü‡}�}××Ü'Ó)Ð)ä Ó"Ð"r    Úresultc                 ó  • U S:X  a  g [         R                  " 5       n[        5       nUR                  U [         R                  " U5      5        UR
                  b  UR
                  R                  5       OSn[        SU 35      e)Nr   úUnknown CUDA errorúCUDA error: )r   Úc_char_pr&   r   ÚbyrefÚvalueÚdecodeÚRuntimeError)r'   Úerr_strÚlibcudaÚerror_messages       r   Ú_check_cudar3   (   sn   € Ø�ƒ{ØÜ�oŠoÓ€GÜ&Ó(€GØ×Ñ˜V¤V§\¢\°'Ó%:Ô;à")§-¡-Ñ";ˆ�‰×ÑÔÐAUð ô ˜ m _Ð5Ó
6Ð6r    c                  óz  • [         R                  S:X  af  SR                  S[        R                  R
                  S   S[        R                  R
                  S   /5      n [        R                  " SU  S35      nO[        R                  " S5      nUR                  Ul	        UR                  Ul        UR                  Ul        UR                  Ul        UR                   Ul        UR$                  Ul        UR(                  Ul        UR,                  Ul        UR0                  Ul        UR4                  Ul        U$ )	Nr	   Ú Ú0r   é   Úhiprtcr   zlibhiprtc.so)r   r   Újoinr   r   r   r   r   ÚhiprtcGetErrorStringÚnvrtcGetErrorStringÚhiprtcCreateProgramÚnvrtcCreateProgramÚhiprtcDestroyProgramÚnvrtcDestroyProgramÚhiprtcCompileProgramÚnvrtcCompileProgramÚhiprtcGetCodeSizeÚnvrtcGetPTXSizeÚhiprtcGetCodeÚnvrtcGetPTXÚhiprtcGetProgramLogSizeÚnvrtcGetProgramLogSizeÚhiprtcGetProgramLogÚnvrtcGetProgramLogÚhiprtcAddNameExpressionÚnvrtcAddNameExpressionÚhiprtcGetLoweredNameÚnvrtcGetLoweredName)Úversion_strr   s     r   Ú_get_hiprtc_libraryrO   4   sû   € Ü
‡|�|�wÓØ—g‘g˜s¤E§M¡M×$5Ñ$5°aÑ$8¸#¼u¿}¹}×?PÑ?PÐQRÑ?SÐTÓUˆÜ�kŠk˜F ; -¨tÐ4Ó5‰ä�kŠk˜.Ó)ˆð "×6Ñ6€CÔØ ×4Ñ4€CÔØ!×6Ñ6€CÔØ!×6Ñ6€CÔØ×/Ñ/€CÔØ×'Ñ'€C„OØ!$×!<Ñ!<€CÔØ ×4Ñ4€CÔØ!$×!<Ñ!<€CÔØ!×6Ñ6€CÔØ€Jr    c                  ó*  • [        [        R                  R                  R	                  S5      S   5      n [
        R                  S:X  a  SU  S3/nOSU  3S/nU H  n [        R                  " U5      s  $    [        S5      e! [         a     M6  f = f)	NÚ.r   r	   Únvrtc64_z0_0.dllzlibnvrtc.so.zlibnvrtc.soz Could not find any NVRTC library)
Úintr   r   ÚcudaÚsplitr   r   r   r   ÚOSError)Úmajor_versionÚ
nvrtc_libsÚlib_names      r   Ú_get_nvrtc_libraryrZ   I   s�   € ÜœŸ™×*Ñ*×0Ñ0°Ó5°aÑ8Ó9€MÜ
‡|�|�wÓà�}�o WÐ-ð
‰
ð
 ˜=˜/Ð*Øð
ˆ
ó ˆð	Ü—;’;˜xÓ(Ò(ñ ô
 Ð4Ó
5Ð5øô ó 	Úð	ús   ÁBÂ
BÂBc                  óh   • [         R                  R                  (       a
  [        5       $ [	        5       $ r%   )r   r   r   rO   rZ   r"   r    r   Ú_get_gpu_rtc_libraryr\   \   s#   € ô ‡}�}××Ü"Ó$Ð$ä!Ó#Ð#r    c                  ó¸   • SSK Jn Jn  S1nU Vs/ s H  o3U;  d  M
  UPM     nn[        R                  R
                  (       a  UR                  U 5        U$ s  snf )z�
Get HIPCC/NVCC flags that are compatible with NVRTC compilation.

Returns:
    List of HIPCC/NVCC flags that can be safely used with NVRTC.
r   )ÚCOMMON_HIPCC_FLAGSÚCOMMON_NVCC_FLAGSz--expt-relaxed-constexpr)Útorch.utils.cpp_extensionr^   r_   r   r   r   Úextend)r^   r_   Únvrtc_unsupported_flagsÚflagÚcompatible_flagss        r   Ú_get_gpu_rtc_compatible_flagsre   e   sc   € ÷ Pð 	#ðÐñ +óÚ*�Ð:QÑ.Q�Ñ*ð ð ô ‡}�}××Ø×ÑÐ 2Ô3àÐùòs
   �	A�AÚkernel_sourceÚkernel_nameÚcompute_capabilityÚcuda_include_dirsÚnvcc_optionsÚauto_pchc           
      ó~	  ^^• SSK n[        5       mSmS[        SS4UU4S jjnU R                  S5      nUcv  UR                  R                  UR                  R                  5       5      n	UR                  R                  (       a  U	R                   nOU	R                   U	R                   3n/ n
UR                  R                  (       a#  U
R                  SU 3R                  5       5        O"U
R                  SU 3R                  5       5        SS	KJn  U" S
5      nU H%  nU
R                  SU 3R                  5       5        M'     U(       a+  U H%  nU
R                  SU 3R                  5       5        M'     U(       a@  [        UR                  R                  5      S:¼  d   S5       eUc  / nUR                  S5        U(       a)  U H#  nU
R                  UR                  S5      5        M%     [!        5       nU
R#                  U Vs/ s H  nUR                  S5      PM     sn5        [%        U
5      n[&        R(                  U-  " U
6 n[&        R*                  " 5       nU" TR-                  [&        R.                  " U5      UU S3R                  5       SSS5      5        UR                  S5      nU" TR1                  UU5      5        TR3                  UUU5      nUT:w  a“  [&        R4                  " 5       nTR7                  U[&        R.                  " U5      5        [&        R8                  " UR:                  5      nTR=                  UU5        [?        SUR:                  RA                  5        35      e[&        R4                  " 5       nU" TRC                  U[&        R.                  " U5      5      5        [&        R8                  " UR:                  5      nU" TRE                  UU5      5        [&        R(                  " 5       nU" TRG                  UU[&        R.                  " U5      5      5        UR:                  b  UR:                  RA                  5       nOSnTRI                  [&        R.                  " U5      5        UR                  R                  (       a  URJ                  OUR:                  nUU4$ s  snf )a•  
Compiles a CUDA kernel using NVRTC and returns the PTX code.

Args:
    kernel_source (str): The CUDA kernel source code as a string
    kernel_name (str): The name of the kernel function to compile
    compute_capability (str, None): The compute capability to target (e.g., "86").
                                       If None, will detect from current device.
    cuda_include_dirs (list, None): List of directories containing CUDA headers
    nvcc_options (list, None): Additional options to pass to NVRTC
    auto_pch (bool): Enable automatic precompiled headers (CUDA 12.8+)

Returns:
    Tuple[bytes, str]: The compiled PTX code and mangled kernel name
r   Nr'   r   c                 óö   >• U T:w  ar  [         R                  " 5       nTR                  U [         R                  " U5      5        UR                  b  UR                  R                  5       OSn[        SU 35      eg )Nr)   r*   )r   r+   r;   r,   r-   r.   r/   )r'   r0   r2   ÚNVRTC_SUCCESSÚlibnvrtcs      €€r   Úcheck_nvrtcÚ#_nvrtc_compile.<locals>.check_nvrtcž   so   ø€ Ø�]Ó"Ü—o’oÓ'ˆGØ×(Ñ(¨´·²¸gÓ1FÔGð —=‘=Ñ,ð —‘×$Ñ$Ô&à)ð ô
  ¨m¨_Ð=Ó>Ð>ð #r    úutf-8z--offload-arch=z--gpu-architecture=sm_)Úinclude_pathsrT   z-Iz12.8zPCH requires CUDA 12.8+z--pchz.cuzKernel compilation failed:
r5   )&Ú
torch.cudar\   rS   ÚencoderT   Úget_device_propertiesÚcurrent_devicer   r   ÚgcnArchNameÚmajorÚminorÚappendr`   rs   Ústrre   ra   Úlenr   r+   Úc_void_pr=   r,   rK   rA   Úc_size_trG   Úcreate_string_bufferr-   rI   r/   r.   rC   rE   rM   r?   Úraw) rf   rg   rh   ri   rj   rk   r   rp   Úsource_bytesÚpropsÚoptionsrs   Úcuda_include_pathsÚ	cuda_pathÚ	directoryÚoptionÚnvrtc_compatible_flagsrc   Únum_optionsÚoptions_arrayÚprogÚc_kernel_nameÚresÚlog_sizeÚlogÚptx_sizeÚptxÚc_mangled_nameÚmangled_nameÚ	ptx_bytesrn   ro   s                                  @@r   Ú_nvrtc_compiler–   }   sù  ù€ ó0 ô $Ó%€Hð €Mð	?œCð 	? D÷ 	?ð 	?ð !×'Ñ'¨Ó0€Lð Ñ!Ø—
‘
×0Ñ0°·±×1JÑ1JÓ1LÓMˆØ�=‰=××Ø$)×$5Ñ$5Ð#6Ñà$)§K¡K =°·±°Ð!>Ðð €GØ‡}�}××Ø�‰˜Ð);Ð(<Ð=×DÑDÓFÕGà�‰Ð/Ð0BÐ/CÐD×KÑKÓMÔNõ 8á& vÓ.ÐÛ'ˆ	Ø�‰˜˜I˜;Ð'×.Ñ.Ó0Ö1ñ (ö Û*ˆIØ�N‰N˜R 	˜{Ð+×2Ñ2Ó4Ö5ñ +ö Ü�5—=‘=×%Ñ%Ó&¨&Ó0ÐKÐ2KÓKÐ0ØÑØˆLØ×Ñ˜GÔ$ö Û"ˆFØ�N‰N˜6Ÿ=™=¨Ó1Ö2ñ #ô ;Ó<ÐØ‡N�NÑ5KÓLÒ5K¨T�D—K‘K Ö(Ñ5KÑLÔMô �g“,€KÜ—_‘_ {Ò2°WÐ=€Mô �?Š?Ó€DÙØ×#Ñ#Ü�LŠL˜ÓØØˆm˜3Ð×&Ñ&Ó(ØØØó	
ô	ð  ×&Ñ& wÓ/€MÙ�×/Ñ/°°mÓDÔEð ×
&Ñ
& t¨[¸-Ó
H€Cð ˆmÓä—?’?Ó$ˆØ×'Ñ'¨¬f¯lªl¸8Ó.DÔEÜ×)Ò)¨(¯.©.Ó9ˆØ×#Ñ# D¨#Ô.ÜÐ9¸#¿)¹)×:JÑ:JÓ:LÐ9MÐNÓOÐOô �ŠÓ €HÙ�×(Ñ(¨¬v¯|ª|¸HÓ/EÓFÔGÜ
×
%Ò
% h§n¡nÓ
5€CÙ�×$Ñ$ T¨3Ó/Ô0ô —_’_Ó&€NÙØ×$Ñ$ T¨=¼&¿,º,À~Ó:VÓWôð ×ÑÑ'Ø%×+Ñ+×2Ñ2Ó4‰àˆà× Ñ ¤§¢¨dÓ!3Ô4ð
 !Ÿ=™=×,×,�—’°#·)±)€IØ�lÐ"Ð"ùòs Ms   ÈR:c                   óL   • \ rS rSrS\R
                  SS4S jrS\SS4S jrS	r	g)
Ú_CudaModulei  Úmoduler   Nc                 ó   • Xl         0 U l        g r%   )Ú_moduleÚ_kernels)Úselfr™   s     r   Ú__init__Ú_CudaModule.__init__  s   € ØŒØ02ˆ�r    ÚnameÚ_CudaKernelc           	      ó¤  • XR                   ;   a  U R                   U   $ SSKJn  U" 5       n[        R                  " 5       n [        UR                  [        R                  " U5      U R                  UR                  S5      5      5        [        X@R                  5      nXPR                   U'   U$ ! [         a  n[        SU S35      UeS nAff = f)Nr   )r&   rr   zNo kernel named 'z' in this module)rœ   Útorch.cuda._utilsr&   r   r~   r3   r   r,   r›   ru   r¡   r/   ÚAttributeError)r�   r    r&   r1   ÚfuncÚkernelÚerrs          r   Ú__getattr__Ú_CudaModule.__getattr__  s¹   € Ø—=‘=Ó Ø—=‘= Ñ&Ð&õ 	?á*Ó,ˆä�ŠÓ ˆð	VÜØ×+Ñ+Ü—L’L Ó&¨¯©°d·k±kÀ'Ó6Jóôô
 ! §|¡|Ó4ˆFØ"(�M‰M˜$ÑØˆMøäó 	VÜ Ð#4°T°FÐ:JÐ!KÓLÐRUÐUûð	Vús   ÁA-B0 Â0
CÂ:C
Ã
C)rœ   r›   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r~   rž   r|   r¨   Ú__static_attributes__r"   r    r   r˜   r˜     s/   † ð3˜vŸ™ð 3°4ô 3ðV ð V¨÷ Vr    r˜   c                   ó¼   • \ rS rSrSrS\R                  S\R                  SS4S jr     SS\\	\	\	4   S	\\	\	\	4   S
\
\   S\	S\
\   SS4S jjrS\	SS4S jrSrg)r¡   i.  zL
Represents a compiled CUDA kernel that can be called with PyTorch tensors.
r¥   r™   r   Nc                 ó*   • Xl         X l        SU l        g )Nr   )r¥   r™   Ú_max_shared_mem_bytes)r�   r¥   r™   s      r   rž   Ú_CudaKernel.__init__3  s   € ØŒ	ØŒØ%&ˆÕ"r    ÚgridÚblockÚargsÚ
shared_memÚstreamc                 ó¨  • SSK nUR                  R                  R                  5       nU(       d  / n/ n/ n	U GHv  n
[	        X¦R
                  5      (       až  U
R                  (       d1  U
R                  (       a  U
R                  5       (       d  [        S5      e[        R                  " U
R                  5       5      nUR                  U5        U	R                  [        R                  " U5      5        M¼  [	        U
[        5      (       a>  [        R                   " U
5      nU	R                  [        R                  " U5      5        GM  [	        U
["        5      (       a>  [        R$                  " U
5      nU	R                  [        R                  " U5      5        GMb  ['        S[)        U
5       35      e   [        R                  [+        U	5      -  " 5       n[-        U	5       H,  u  pú[        R.                  " U
[        R                  5      Xï'   M.     Uc  SSKnUR                  R3                  5       nUS:¼  aS  U R4                  S:X  d  X@R4                  :”  a4  U R4                  S:X  a  SOSU R4                   S3n[7        S	U S
U S35      e[9        UR;                  U R<                  US   US   US   US   US   US   UUR>                  US5      5        g)a¶  
Call the compiled CUDA kernel

Args:
    grid (tuple): Grid dimensions (grid_x, grid_y, grid_z)
    block (tuple): Block dimensions (block_x, block_y, block_z)
    args (list): List of arguments to pass to the kernel.
                 PyTorch tensor arguments will be automatically converted to pointers.
    shared_mem (int): Shared memory size in bytes
    stream (torch.cuda.Stream): CUDA stream to use. If None, uses current stream.
r   Nz?All tensor arguments must be CUDA tensors or pinned CPU tensorszUnsupported argument type: é À  znot configuredzonly z bytes configuredzKernel requires z' bytes of shared memory (>= 48KB), but ze. Call kernel.set_shared_memory_config(shared_mem) after compilation and before launching the kernel.é   r7   ) r   rT   Ú_utilsr&   Ú
isinstanceÚTensorÚis_cudaÚis_cpuÚ	is_pinnedÚ
ValueErrorr   r~   Údata_ptrr{   r,   rS   Úc_intÚfloatÚc_doubleÚ	TypeErrorÚtyper}   Ú	enumerateÚcastrt   Úcurrent_streamr±   r/   r3   r   r¥   Ú_as_parameter_)r�   r³   r´   rµ   r¶   r·   r   r1   Úprocessed_argsÚc_argsÚargÚptrrÃ   rÅ   Úc_args_arrayÚiÚconfigured_msgs                    r   Ú__call__Ú_CudaKernel.__call__8  sT  € ó& 	à—*‘*×#Ñ#×<Ñ<Ó>ˆæØˆDð 13ˆØˆäˆCÜ˜#Ÿ|™|×,Ñ,Ø—{—{¨C¯J¯J¸3¿=¹=¿?¹?Ü$ØYóð ô —o’o c§l¡l£nÓ5�Ø×%Ñ% cÔ*Ø—‘œfŸlšl¨3Ó/Ö0Ü˜C¤×%Ñ%äŸš SÓ)�à—‘œfŸlšl¨5Ó1×2Ü˜C¤×'Ñ'ä!Ÿ?š?¨3Ó/�à—‘œfŸlšl¨8Ó4×5äÐ"=¼dÀ3»i¸[Ð IÓJÐJñ+ ô0 Ÿ™¬#¨f«+Ò5Ó8ˆÜ Ö'‰FˆAÜ$Ÿkšk¨#¬v¯©Ó?ˆL‹Oñ (ð ‰>ãà—Z‘Z×.Ñ.Ó0ˆFð ˜Ó"Ø×&Ñ&¨!Ó+¨z×<VÑ<VÓ/Vð ×-Ñ-°Ó2ñ !à˜T×7Ñ7Ð8Ð8IÐJð ô
 Ø" : ,ð /Ø%Ð&ð '3ð3óð ô 	Ø×"Ñ"Ø—	‘	Ø�Q‘Ø�Q‘Ø�Q‘Ø�a‘Ø�a‘Ø�a‘ØØ×%Ñ%ØØóõ	
r    Úshared_mem_bytesc                 óz  • US:  a  Xl         g [        5       n[        R                  R	                  5       n[        R
                  R                  (       a  UR                  S:w  a  SOSnO[        USS5      nX:”  a  [        SU SU S35      eS	n[        UR                  U R                  UU5      5        Xl         g )
Nr¹   Úgfx950i   i € Úshared_memory_per_block_optinzRequested shared memory (z bytes) exceeds device limit (z= bytes). Consider reducing block size or shared memory usage.é   )r±   r&   r   rT   rv   r   r   rx   Úgetattrr/   r3   r   r¥   )r�   rÕ   r1   Údevice_propsÚmax_shared_memÚ+cudaFuncAttributeMaxDynamicSharedMemorySizes         r   Úset_shared_memory_configÚ$_CudaKernel.set_shared_memory_config™  sÑ   € Ø˜iÓ'à)9Ô&Øä*Ó,ˆô —z‘z×7Ñ7Ó9ˆä�=‰=××ð &×1Ñ1°XÓ=‘À:ñ ô %ØÐ=¸uóˆNð Ó,ÜØ+Ð,<Ð+=ð >!Ø!/Ð 0ð 1GðGóð ð 78Ð3ÜØ×&Ñ&Ø—	‘	Ø;Ø óô	
ð &6Õ"r    )r±   r¥   r™   )©rº   rº   rº   rà   Nr   N)rª   r«   r¬   r­   Ú__doc__r   r~   rž   ÚtuplerS   r   Úlistr   rÓ   rÞ   r®   r"   r    r   r¡   r¡   .  s²   † ñð'˜VŸ_™_ð '°f·o±oð 'È$ô 'ð &/Ø&/Ø#ØØ $ñ_
à�C˜˜c�MÑ"ð_
ð �S˜#˜s�]Ñ#ð_
ð �t‰nð	_
ð
 ð_
ð ˜‘ð_
ð 
õ_
ðB(6¸ð (6À÷ (6r    r¡   r’   Úkernel_namesc           
      ó\  • SSK n[        5       n[        U [        5      (       a  U R	                  S5      n [
        R                  " 5       nUR                  R                  5       nU   [        UR                  [
        R                  " U5      U 5      5        SSS5        U(       d  [        U5      $ 0 nU Hc  n[
        R                  " 5       n[        UR                  [
        R                  " U5      XGR	                  S5      5      5        [        X„5      Xg'   Me     U$ ! , (       d  f       N�= f)a  
Loads a CUDA module from PTX code and returns a module object that can access kernels.

Args:
    ptx (bytes or str): The PTX code to load
    kernel_names (list, optional): List of kernel names to extract from the module.
                                  If None, will return a module object with __getattr__.

Returns:
    object: If kernel_names is None, returns a module object with __getattr__ to access kernels.
           If kernel_names is provided, returns a dict mapping kernel names to _CudaKernel objects.
r   Nrr   )rt   r&   r¼   r|   ru   r   r~   rT   rÊ   r3   r   r,   r˜   r   r¡   )	r’   rä   r   r1   r™   r·   Úkernelsr    r¥   s	            r   Ú_cuda_load_modulerç   Ä  së   € ó  ô 'Ó(€Gô �#”s×ÑØ�j‰j˜Ó!ˆô �_Š_Ó€Fà�Z‰Z×&Ñ&Ó(€FÚ	Ü�G×,Ñ,¬V¯\ª\¸&Ó-AÀ3ÓGÔH÷ 
ö Ü˜6Ó"Ð"ð €GÛˆÜ�ŠÓ ˆÜØ×'Ñ'Ü—’˜TÓ" F¯K©K¸Ó,@óô	
ô
 $ DÓ1ˆ‹ñ ð €N÷! 
�ús   Á&0DÄ
D+ÚdeviceÚoptionalÚ	allow_cpuc                 ó  • [        U [        5      (       a  U $ [        U [        5      (       a  [        R                  " U 5      n [        U [        R                  5      (       aD  U(       a  U R
                  S;  a  [        SU  35      eOU R
                  S:w  a  [        SU  35      e[        R                  R                  5       (       d5  [        U [        R                  R                  5      (       a  U R                  $ [        XU5      $ )a�  Get the device index from :attr:`device`, which can be a torch.device object, a Python integer, or ``None``.

If :attr:`device` is a torch.device object, returns the device index if it
is a CUDA device. Note that for a CUDA device without a specified index,
i.e., ``torch.device('cuda')``, this will return the current default CUDA
device if :attr:`optional` is ``True``. If :attr:`allow_cpu` is ``True``,
CPU devices will be accepted and ``-1`` will be returned in this case.

If :attr:`device` is a Python integer, it is returned as is.

If :attr:`device` is ``None``, this will return the current default CUDA
device if :attr:`optional` is ``True``.
)rT   Úcpuz(Expected a cuda or cpu device, but got: rT   z!Expected a cuda device, but got: )r¼   rS   r|   r   rè   rÇ   rÁ   ÚjitÚis_scriptingrT   ÚidxÚ_torch_get_device_index)rè   ré   rê   s      r   r   r   ô  sÉ   € ô  �&œ#×ÑØˆÜ�&œ#×ÑÜ—’˜fÓ%ˆÜ�&œ%Ÿ,™,×'Ñ'ÞØ�{‰{ /Ó1Ü Ð#KÈFÈ8Ð!TÓUÐUð 2à�[‰[˜FÓ"ÜÐ@ÀÀÐIÓJÐJÜ�9‰9×!Ñ!×#Ñ#Ü�fœeŸj™j×/Ñ/×0Ñ0Ø—:‘:ÐÜ" 6°YÓ?Ð?r    )NNNFr%   )FF)r   r   Útypingr   r   r   r   Útorch._utilsr   rð   r   r   r#   r&   rS   r3   rO   rZ   r\   rã   r|   re   Úboolrâ   Úbytesr–   r˜   r¡   Údictrç   r"   r    r   Ú<module>rö      s¤  ðÛ Û 
ß 'Ñ 'ã õ Fð
 &§+¡+ô 
ð+˜6Ÿ;™;ô +ð# &§+¡+ô #ð	7˜ð 	7 ô 	7ð˜VŸ[™[ô ð*6˜FŸK™Kô 6ð&$˜fŸk™kô $ð t¨C¡yô ð6 )-Ø(,Ø#'ØñP#ØðP#àðP#ð ! ™ðP#ð   ‘~ð	P#ð
 ˜4‘.ðP#ð ðP#ð ˆ5�#ˆ:ÑõP#÷fVñ V÷<S6ñ S6ðn AEñ-Ø	ˆs�EˆzÑ	ð-Ø*2°4¸±9Ñ*=ð-à
ˆ;˜˜S -Ð/Ñ0Ð0Ñ1õ-ðb <Añ@Øð@Øð@Ø48ð@àö@r    