§
    ŠŠtjR  ã                   ó
  — d dl Z d dlZd dlmZ d dlZ	 d dlmZ dZn# e	$ r dZdZY nw xY wd dl
mZ de j        fd„Zde j        fd	„Zde j        fd
„Zdeddfd„Zdedefd„Zde j        fd„Zde j        fd„Zde j        fd„Zdee         fd„Z	 	 	 	 d$dedededz  dedz  dedz  dedeeef         fd„Z G d„ d¦  «        Z G d„ d¦  «        Z	 d%deez  dee         dz  dee edf         z  fd„Z!	 d&d ed!ed"edefd#„ZdS )'é    N)ÚAny)ÚruntimeTF)Ú_get_device_indexÚreturnc                  óÐ  — 	 dd l } t          j        t          |                      d¦  «        d         ¦  «        ¦  «        }ni# t
          t          f$ rU t          j        dk    r.t          j        dt          j
        j        d         › d�¦  «        }nt          j        d¦  «        }Y nw xY w|j        |_        |j        |_        |j        |_        |j        |_        |j        |_        |S )Nr   Úamdhip64Úwin32Ú	amdhip64_ú.dllzlibamdhip64.so)Úrocm_sdkÚctypesÚCDLLÚstrÚfind_librariesÚImportErrorÚ
IndexErrorÚsysÚplatformÚtorchÚversionÚhipÚhipGetErrorStringÚcuGetErrorStringÚhipModuleLoadDataÚcuModuleLoadDataÚhipModuleGetFunctionÚcuModuleGetFunctionÚhipModuleLaunchKernelÚcuLaunchKernelÚhipFuncSetAttributeÚcuFuncSetAttribute)r   Úlibs     úO/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/cuda/_utils.pyÚ_get_hip_runtime_libraryr$      sà   € ð	0àˆˆˆåŒk�#˜h×5Ò5°jÑAÔAÀ!ÔDÑEÔEÑFÔFˆˆøÝ�Ð$ð 0ð 0ð 0ÝŒ<˜7Ò"Ð"Ý”+ÐD­%¬-Ô*;¸AÔ*>ÐDÐDÐDÑEÔEˆCˆCå”+Ð.Ñ/Ô/ˆCøøð	0øøøð Ô0€CÔØÔ0€CÔØ!Ô6€CÔØÔ2€CÔØ Ô4€CÔØ€Js   ‚>A ÁA#B'Â&B'c                  ór   — t           j        dk    rt          j        d¦  «        S t          j        d¦  «        S )Nr	   z
nvcuda.dllzlibcuda.so.1)r   r   r   r   © ó    r#   Ú_get_cuda_libraryr(   -   s/   € Ý
„|�wÒÐÝŒ{˜<Ñ(Ô(Ð(åŒ{˜>Ñ*Ô*Ð*r'   c                  ó\   — t           j        j        rt          ¦   «         S t	          ¦   «         S ©N)r   r   r   r$   r(   r&   r'   r#   Ú_get_gpu_runtime_libraryr+   5   s'   € Ý„}Ôð #Ý'Ñ)Ô)Ð)å Ñ"Ô"Ð"r'   Úresultc                 ó  — | dk    rd S t          j        ¦   «         }t          ¦   «         }|                     | t          j        |¦  «        ¦  «         |j        �|j                             ¦   «         nd}t          d|› �¦  «        ‚)Nr   úUnknown CUDA errorúCUDA error: )r   Úc_char_pr+   r   ÚbyrefÚvalueÚdecodeÚRuntimeError)r,   Úerr_strÚlibcudaÚerror_messages       r#   Ú_check_cudar8   =   s„   € Ø�‚{€{ØˆÝŒoÑÔ€GÝ&Ñ(Ô(€GØ×Ò˜V¥V¤\°'Ñ%:Ô%:Ñ;Ô;Ð;à")¤-Ð";ˆŒ×ÒÑÔÐÐAUð õ Ð5 mÐ5Ð5Ñ
6Ô
6Ð6r'   c                 óp  — t           st          d¦  «        ‚| ^}}|t          j        j        k    rVt          j        |¦  «        \  }}t          |t          ¦  «        r|                     ¦   «         }t          d|› d|› d�¦  «        ‚t          |¦  «        dk    rdS t          |¦  «        dk    r|d         S |S )a  Check a cuda.bindings (cuda-python) call result for errors.

    All cuda.bindings runtime calls return ``(error, *outputs)``.  This
    helper unpacks the tuple, raises on non-success, and returns the
    outputs (``None`` for zero outputs, scalar for one, tuple otherwise).
    zcuda.bindings is not availabler/   z (ú)r   Né   )
Ú_HAS_CUDA_BINDINGSr4   Ú_cuda_bindings_runtimeÚcudaError_tÚcudaSuccessÚcudaGetErrorStringÚ
isinstanceÚbytesr3   Úlen)r,   ÚerrÚoutÚ_r5   s        r#   Ú_check_cuda_bindingsrG   I   sÎ   € õ ð =ÝÐ;Ñ<Ô<Ð<Ø€I€Cˆ#àÝ!Ô-Ô9ò	:ð 	:õ #Ô5Øñô ñ 	ˆˆ7õ
 �g�uÑ%Ô%ð 	'Ø—n’nÑ&Ô&ˆGÝÐ;¨#Ð;Ð;°Ð;Ð;Ð;Ñ<Ô<Ð<Ý
ˆ3�x„x�1‚}€}ØˆtÝ
ˆ3�x„x�1‚}€}Ø�1ŒvˆØ€Jr'   c                  ó¤  — 	 dd l } t          j        t          |                      d¦  «        d         ¦  «        ¦  «        }n—# t
          t          f$ rƒ t          j        dk    r\d 	                    dt          j        j        d         dt          j        j        d         g¦  «        }t          j        d|› d�¦  «        }nt          j        d¦  «        }Y nw xY w|j        |_        |j        |_        |j        |_        |j        |_        |j        |_        |j        |_        |j        |_        |j        |_        |j        |_        |j        |_         |S )	Nr   Úhiprtcr	   Ú Ú0é   r   zlibhiprtc.so)!r   r   r   r   r   r   r   r   r   Újoinr   r   r   ÚhiprtcGetErrorStringÚnvrtcGetErrorStringÚhiprtcCreateProgramÚnvrtcCreateProgramÚhiprtcDestroyProgramÚnvrtcDestroyProgramÚhiprtcCompileProgramÚnvrtcCompileProgramÚhiprtcGetCodeSizeÚnvrtcGetCUBINSizeÚhiprtcGetCodeÚnvrtcGetCUBINÚhiprtcGetProgramLogSizeÚnvrtcGetProgramLogSizeÚhiprtcGetProgramLogÚnvrtcGetProgramLogÚhiprtcAddNameExpressionÚnvrtcAddNameExpressionÚhiprtcGetLoweredNameÚnvrtcGetLoweredName)r   r"   Úversion_strs      r#   Ú_get_hiprtc_libraryrc   f   sA  € ð.àˆˆˆåŒk�#˜h×5Ò5°hÑ?Ô?ÀÔBÑCÔCÑDÔDˆˆøÝ�Ð$ð .ð .ð .ÝŒ<˜7Ò"Ð"ØŸ'š'Ø•e”mÔ'¨Ô*¨Cµ´Ô1BÀ1Ô1EÐFñô ˆKõ ”+Ð8 {Ð8Ð8Ð8Ñ9Ô9ˆCˆCå”+˜nÑ-Ô-ˆCøøð.øøøð "Ô6€CÔØ Ô4€CÔØ!Ô6€CÔØ!Ô6€CÔØÔ1€CÔØÔ)€CÔØ!$Ô!<€CÔØ Ô4€CÔØ!$Ô!<€CÔØ!Ô6€CÔØ€Js   ‚>A ÁBCÃCc                  ó"  — t          t          j        j                             d¦  «        d         ¦  «        } t
          j        dk    rd| › d�g}nd| › �dg}|D ](}	 t          j        |¦  «        c S # t          $ r Y Œ%w xY wt          d¦  «        ‚)	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_libraryrn   ƒ   s½   € Ý�œÔ*×0Ò0°Ñ5Ô5°aÔ8Ñ9Ô9€MÝ
„|�wÒÐà-�}Ð-Ð-Ð-ð
ˆ
ˆ
ð
 +˜=Ð*Ð*Øð
ˆ
ð ð ð ˆð	Ý”;˜xÑ(Ô(Ð(Ð(Ð(øÝð 	ð 	ð 	ØˆHð	øøøå
Ð4Ñ
5Ô
5Ð5s   ÁA2Á2
A?Á>A?c                  ó\   — t           j        j        rt          ¦   «         S t	          ¦   «         S r*   )r   r   r   rc   rn   r&   r'   r#   Ú_get_gpu_rtc_libraryrp   –   s)   € õ „}Ôð $Ý"Ñ$Ô$Ð$å!Ñ#Ô#Ð#r'   c                  ó†   ‡— ddl m} m} dhŠˆfd„|D ¦   «         }t          j        j        r|                     | ¦  «         |S )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-constexprc                 ó   •— g | ]}|‰v¯|‘Œ	S r&   r&   )Ú.0ÚflagÚnvrtc_unsupported_flagss     €r#   ú
<listcomp>z1_get_gpu_rtc_compatible_flags.<locals>.<listcomp>­   s+   ø€ ð ð ð Ø¨dÐ:QÐ.QÐ.QˆÐ.QÐ.QÐ.Qr'   )Útorch.utils.cpp_extensionrr   rs   r   r   r   Úextend)rr   rs   Úcompatible_flagsrw   s      @r#   Ú_get_gpu_rtc_compatible_flagsr|   Ÿ   s~   ø€ ð PÐOÐOÐOÐOÐOÐOÐOð 	#ðÐð
ð ð ð Ø*ðñ ô Ðõ „}Ôð 4Ø×ÒÐ 2Ñ3Ô3Ð3àÐr'   Úkernel_sourceÚkernel_nameÚcompute_capabilityÚcuda_include_dirsÚnvcc_optionsÚauto_pchc           
      ó	  ‡‡— ddl }t          ¦   «         ŠdŠdt          ddfˆˆfd„}|                      d¦  «        }|€V|j                             |j                             ¦   «         ¦  «        }	|j        j        r	|	j	        › }n|	j
        › |	j        › �}g }
|j        j        r+|
                     d|› �                     ¦   «         ¦  «         n*|
                     d|› �                     ¦   «         ¦  «         dd	lm}  |d
¦  «        }|D ],}|
                     d|› �                     ¦   «         ¦  «         Œ-|r/|D ],}|
                     d|› �                     ¦   «         ¦  «         Œ-|rRt          |j        j        ¦  «        dk     rt!          d|j        j        › �¦  «        ‚|€g }|                     d¦  «         |r-|D ]*}|
                     |                     d¦  «        ¦  «         Œ+t#          ¦   «         }|
                     d„ |D ¦   «         ¦  «         t'          |
¦  «        }t)          j        |z  |
Ž }t)          j        ¦   «         } |‰                     t)          j        |¦  «        ||› d�                     ¦   «         ddd¦  «        ¦  «         |                     d¦  «        } |‰                     ||¦  «        ¦  «         ‰                     |||¦  «        }|‰k    r“t)          j        ¦   «         }‰                     |t)          j        |¦  «        ¦  «         t)          j        |j        ¦  «        }‰                     ||¦  «         tA          d|j         !                    ¦   «         › �¦  «        ‚t)          j        ¦   «         } |‰ "                    |t)          j        |¦  «        ¦  «        ¦  «         t)          j        |j        ¦  «        } |‰ #                    ||¦  «        ¦  «         t)          j        ¦   «         } |‰ $                    ||t)          j        |¦  «        ¦  «        ¦  «         |j        �|j         !                    ¦   «         }nd}‰ %                    t)          j        |¦  «        ¦  «         |j&        |fS )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                 óò   •— | ‰k    rot          j        ¦   «         }‰                     | t          j        |¦  «        ¦  «         |j        �|j                             ¦   «         nd}t          d|› �¦  «        ‚d S )Nr.   r/   )r   r0   rO   r1   r2   r3   r4   )r,   r5   r7   ÚNVRTC_SUCCESSÚlibnvrtcs      €€r#   Úcheck_nvrtcz#_nvrtc_compile.<locals>.check_nvrtcØ   s„   ø€ Ø�]Ò"Ð"Ý”oÑ'Ô'ˆGØ×(Ò(¨µ´¸gÑ1FÔ1FÑGÔGÐGð ”=Ð,ð ”×$Ò$Ñ&Ô&Ð&à)ð õ
 Ð=¨mÐ=Ð=Ñ>Ô>Ð>ð #Ð"r'   úutf-8z--offload-arch=z--gpu-architecture=sm_)Úinclude_pathsrh   z-Iz12.8zPCH requires CUDA 12.8+, got z--pchc                 ó8   — g | ]}|                      d ¦  «        ‘ŒS )rˆ   )Úencode)ru   rv   s     r#   rx   z"_nvrtc_compile.<locals>.<listcomp>  s$   € ÐLÐLÐL¨T�D—K’K Ñ(Ô(ÐLÐLÐLr'   z.cuzKernel compilation failed:
rJ   )'Ú
torch.cudarp   rg   r‹   rh   Úget_device_propertiesÚcurrent_devicer   r   ÚgcnArchNameÚmajorÚminorÚappendry   r‰   r   ÚAssertionErrorr|   rz   rC   r   r0   Úc_void_prQ   r1   r_   rU   Úc_size_tr[   Úcreate_string_bufferr2   r]   r4   r3   rW   rY   ra   rS   Úraw)r}   r~   r   r€   r�   r‚   r   r‡   Úsource_bytesÚpropsÚoptionsr‰   Úcuda_include_pathsÚ	cuda_pathÚ	directoryÚoptionÚnvrtc_compatible_flagsÚnum_optionsÚoptions_arrayÚprogÚc_kernel_nameÚresÚlog_sizeÚlogÚbinary_sizeÚbinaryÚc_mangled_nameÚmangled_namer…   r†   s                               @@r#   Ú_nvrtc_compiler«   ·   sð  øø€ ð0 ÐÐÐõ $Ñ%Ô%€Hð €Mð	?�Cð 	? Dð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð !×'Ò'¨Ñ0Ô0€Lð Ð!Ø”
×0Ò0°´×1JÒ1JÑ1LÔ1LÑMÔMˆØŒ=Ôð 	?Ø$)Ô$5Ð!7ÐÐà$)¤KÐ!>°´Ð!>Ð!>Ðð €GØ„}Ôð OØ�ŠÐ=Ð);Ð=Ð=×DÒDÑFÔFÑGÔGÐGÐGà�ŠÐDÐ0BÐDÐD×KÒKÑMÔMÑNÔNÐNð 8Ð7Ð7Ð7Ð7Ð7à&˜ vÑ.Ô.ÐØ'ð 2ð 2ˆ	Ø�ŠÐ'˜IÐ'Ð'×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ð1ð ð 6Ø*ð 	6ð 	6ˆIØ�NŠNÐ+ 	Ð+Ð+×2Ò2Ñ4Ô4Ñ5Ô5Ð5Ð5ð ð %ÝˆuŒ}Ô!Ñ"Ô" VÒ+Ð+Ý Ð!UÀÄÔASÐ!UÐ!UÑVÔVÐVØÐØˆLØ×Ò˜GÑ$Ô$Ð$ð ð 3Ø"ð 	3ð 	3ˆFØ�NŠN˜6Ÿ=š=¨Ñ1Ô1Ñ2Ô2Ð2Ð2å:Ñ<Ô<ÐØ‡N‚NÐLÐLÐ5KÐLÑLÔLÑMÔMÐMõ �g‘,”,€KÝ”_ {Ñ2°WÐ=€Mõ Œ?ÑÔ€DØ€KØ×#Ò#ÝŒL˜ÑÔØØÐÐÐ×&Ò&Ñ(Ô(ØØØñ	
ô 	
ñ	ô 	ð 	ð  ×&Ò& wÑ/Ô/€MØ€K�×/Ò/°°mÑDÔDÑEÔEÐEð ×
&Ò
& t¨[¸-Ñ
HÔ
H€Cð ˆmÒÐå”?Ñ$Ô$ˆØ×'Ò'¨­f¬l¸8Ñ.DÔ.DÑEÔEÐEÝÔ)¨(¬.Ñ9Ô9ˆØ×#Ò# D¨#Ñ.Ô.Ð.ÝÐN¸#¼)×:JÒ:JÑ:LÔ:LÐNÐNÑOÔOÐOõ ”/Ñ#Ô#€KØ€K�×*Ò*¨4µ´¸kÑ1JÔ1JÑKÔKÑLÔLÐLÝÔ(¨Ô):Ñ;Ô;€FØ€K�×&Ò& t¨VÑ4Ô4Ñ5Ô5Ð5õ ”_Ñ&Ô&€NØ€KØ×$Ò$ T¨=½&¼,À~Ñ:VÔ:VÑWÔWñô ð ð ÔÐ'Ø%Ô+×2Ò2Ñ4Ô4ˆˆàˆà× Ò ¥¤¨dÑ!3Ô!3Ñ4Ô4Ð4ð Œ:�|Ð#Ð#r'   c                   ó8   — e Zd Zdej        ddfd„Zdeddfd„ZdS )Ú_CudaModuleÚmoduler   Nc                 ó"   — || _         i | _        d S r*   )Ú_moduleÚ_kernels)Úselfr®   s     r#   Ú__init__z_CudaModule.__init__J  s   € ØˆŒØ02ˆŒˆˆr'   ÚnameÚ_CudaKernelc           	      ó   — || j         v r| j         |         S ddlm}  |¦   «         }t          j        ¦   «         }	 t          |                     t          j        |¦  «        | j        | 	                    d¦  «        ¦  «        ¦  «         t          || j        ¦  «        }|| j         |<   |S # t          $ r}t          d|› d�¦  «        |‚d }~ww xY w)Nr   )r+   rˆ   zNo kernel named 'z' in this module)r±   Útorch.cuda._utilsr+   r   r”   r8   r   r1   r°   r‹   rµ   r4   ÚAttributeError)r²   r´   r+   r6   ÚfuncÚkernelrD   s          r#   Ú__getattr__z_CudaModule.__getattr__N  sù   € Ø�4”=Ð Ð Ø”= Ô&Ð&ð 	?Ð>Ð>Ð>Ð>Ð>à*Ð*Ñ,Ô,ˆåŒÑ Ô ˆð	VÝØ×+Ò+Ý”L Ñ&Ô&¨¬°d·k²kÀ'Ñ6JÔ6Jñô ñô ð õ
 !  t¤|Ñ4Ô4ˆFØ"(ˆDŒM˜$ÑØˆMøåð 	Vð 	Vð 	VÝ Ð!K°TÐ!KÐ!KÐ!KÑLÔLÐRUÐUøøøøð	Vøøøs   »A.B* Â*
CÂ4CÃC)Ú__name__Ú
__module__Ú__qualname__r   r”   r³   r   r»   r&   r'   r#   r­   r­   I  sb   € € € € € ð3˜vœð 3°4ð 3ð 3ð 3ð 3ðV ð V¨ð Vð Vð Vð Vð Vð Vr'   r­   c                   ó¦   — e Zd ZdZdej        dej        ddfd„Z	 	 	 	 	 dd	eeeef         d
eeeef         de	dz  dede
dz  ddfd„Zdeddfd„ZdS )rµ   zT
    Represents a compiled CUDA kernel that can be called with PyTorch tensors.
    r¹   r®   r   Nc                 ó0   — || _         || _        d| _        d S )Nr   )r¹   r®   Ú_max_shared_mem_bytes)r²   r¹   r®   s      r#   r³   z_CudaKernel.__init__l  s   € ØˆŒ	ØˆŒØ%&ˆÔ"Ð"Ð"r'   ©r;   r;   r;   r   ÚgridÚblockÚargsÚ
shared_memÚstreamc                 ót  — ddl }|j        j                             ¦   «         }|sg }g }g }	|D �]l}
t	          |
|j        ¦  «        r”|
j        s*|
j        r|
                     ¦   «         st          d¦  «        ‚t          j        |
                     ¦   «         ¦  «        }|                     |¦  «         |	                     t          j        |¦  «        ¦  «         Œ¬t	          |
t          ¦  «        r<t          j        |
¦  «        }|	                     t          j        |¦  «        ¦  «         Œýt	          |
t"          ¦  «        r=t          j        |
¦  «        }|	                     t          j        |¦  «        ¦  «         �ŒOt'          dt)          |
¦  «        › �¦  «        ‚t          j        t+          |	¦  «        z  ¦   «         }t-          |	¦  «        D ]'\  }}
t          j        |
t          j        ¦  «        ||<   Œ(|€ddl}|j                             ¦   «         }|dk    rD| j        dk    s|| j        k    r.| j        dk    rdn
d| j        › d�}t7          d	|› d
|› d�¦  «        ‚t9          |                     | j        |d         |d         |d         |d         |d         |d         ||j        |d¦  «        ¦  «         dS )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.r;   rL   ) r   rh   Ú_utilsr+   rA   ÚTensorÚis_cudaÚis_cpuÚ	is_pinnedÚ
ValueErrorr   r”   Údata_ptrr’   r1   rg   Úc_intÚfloatÚc_doubleÚ	TypeErrorÚtyperC   Ú	enumerateÚcastrŒ   Úcurrent_streamrÁ   r4   r8   r   r¹   Ú_as_parameter_)r²   rÃ   rÄ   rÅ   rÆ   rÇ   r   r6   Úprocessed_argsÚc_argsÚargÚptrrÑ   rÓ   Úc_args_arrayÚiÚconfigured_msgs                    r#   Ú__call__z_CudaKernel.__call__q  sö  € ð& 	ˆˆˆà”*Ô#×<Ò<Ñ>Ô>ˆàð 	ØˆDð 13ˆØˆàð 	Kñ 	KˆCÝ˜#˜uœ|Ñ,Ô,ð KØ”{ð ¨C¬Jð ¸3¿=º=¹?¼?ð Ý$ØYñô ð õ ”o c§l¢l¡n¤nÑ5Ô5�Ø×%Ò% cÑ*Ô*Ð*Ø—’�fœl¨3Ñ/Ô/Ñ0Ô0Ð0Ð0Ý˜C¥Ñ%Ô%ð Kåœ SÑ)Ô)�à—’�fœl¨5Ñ1Ô1Ñ2Ô2Ð2Ð2Ý˜C¥Ñ'Ô'ð Kå!œ?¨3Ñ/Ô/�à—’�fœl¨8Ñ4Ô4Ñ5Ô5Ð5Ñ5åÐ I½dÀ3¹i¼iÐ IÐ IÑJÔJÐJõ œ­#¨f©+¬+Ñ5Ñ8Ô8ˆÝ Ñ'Ô'ð 	@ð 	@‰FˆAˆsÝ$œk¨#­v¬Ñ?Ô?ˆL˜‰OˆOð ˆ>àÐÐÐà”Z×.Ò.Ñ0Ô0ˆFð ˜Ò"Ð"ØÔ&¨!Ò+Ð+¨z¸DÔ<VÒ/VÐ/Vð Ô-°Ò2Ð2ð !Ð àJ˜TÔ7ÐJÐJÐJð õ
 ð3 :ð 3ð 3Ø%ð3ð 3ð 3ñô ð õ 	Ø×"Ò"Ø”	Ø�Q”Ø�Q”Ø�Q”Ø�a”Ø�a”Ø�a”ØØÔ%ØØñô ñ	
ô 	
ð 	
ð 	
ð 	
r'   Úshared_mem_bytesc                 ó|  — |dk     r	|| _         d S t          ¦   «         }t          j                             ¦   «         }t          j        j        r|j        dk    rdnd}nt          |dd¦  «        }||k    rt          d|› d|› d�¦  «        ‚d	}t          |                     | j        ||¦  «        ¦  «         || _         d S )
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   rh   r�   r   r   r�   Úgetattrr4   r8   r!   r¹   )r²   râ   r6   Údevice_propsÚmax_shared_memÚ+cudaFuncAttributeMaxDynamicSharedMemorySizes         r#   Úset_shared_memory_configz$_CudaKernel.set_shared_memory_configÒ  s  € Ø˜iÒ'Ð'à)9ˆDÔ&ØˆFå*Ñ,Ô,ˆõ ”z×7Ò7Ñ9Ô9ˆåŒ=Ôð 		ð &Ô1°XÒ=Ð=��À:ð ˆNõ %ØÐ=¸uñô ˆNð ˜nÒ,Ð,ÝðGÐ,<ð Gð GØ!/ðGð Gð Gñô ð ð 78Ð3ÝØ×&Ò&Ø”	Ø;Ø ñô ñ	
ô 	
ð 	
ð &6ˆÔ"Ð"Ð"r'   )rÂ   rÂ   Nr   N)r¼   r½   r¾   Ú__doc__r   r”   r³   Útuplerg   Úlistr   rá   rë   r&   r'   r#   rµ   rµ   g  sû   € € € € € ðð ð'˜Vœ_ð '°f´oð 'È$ð 'ð 'ð 'ð 'ð &/Ø&/Ø ØØ!ð_
ð _
à�C˜˜c�MÔ"ð_
ð �S˜#˜s�]Ô#ð_
ð �T‰kð	_
ð
 ð_
ð �d‘
ð_
ð 
ð_
ð _
ð _
ð _
ðB(6¸ð (6Àð (6ð (6ð (6ð (6ð (6ð (6r'   rµ   ÚptxÚkernel_namesc           
      ó‚  — ddl }t          ¦   «         }t          | t          ¦  «        r|                      d¦  «        } t          j        ¦   «         }|j                             ¦   «         }|5  t          | 
                    t          j        |¦  «        | ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |st          |¦  «        S i }|D ]q}t          j        ¦   «         }t          |                     t          j        |¦  «        ||                     d¦  «        ¦  «        ¦  «         t          ||¦  «        ||<   Œr|S )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   Nrˆ   )rŒ   r+   rA   r   r‹   r   r”   rh   rØ   r8   r   r1   r­   r   rµ   )	rï   rð   r   r6   r®   rÇ   Úkernelsr´   r¹   s	            r#   Ú_cuda_load_moduleró   ý  s‘  € ð  ÐÐÐõ 'Ñ(Ô(€Gõ �#•sÑÔð "Ø�jŠj˜Ñ!Ô!ˆõ Œ_ÑÔ€FàŒZ×&Ò&Ñ(Ô(€FØ	ð Ið IÝ�G×,Ò,­V¬\¸&Ñ-AÔ-AÀ3ÑGÔGÑHÔHÐHðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Ið ð #Ý˜6Ñ"Ô"Ð"ð €GØð 2ð 2ˆÝŒÑ Ô ˆÝØ×'Ò'Ý”˜TÑ"Ô" F¨D¯KªK¸Ñ,@Ô,@ñô ñ	
ô 	
ð 	
õ
 $ D¨&Ñ1Ô1ˆ�‰ˆØ€Ns   Á+6B-Â-B1Â4B1ÚdeviceÚoptionalÚ	allow_cpuc                 óÖ  — t          | t          ¦  «        r| S t          | t          ¦  «        rt          j        | ¦  «        } t          | t          j        ¦  «        r;|r| j        dvrt          d| › �¦  «        ‚n| j        dk    rt          d| › �¦  «        ‚t          j                             ¦   «         s&t          | t          j	        j        ¦  «        r| j
        S t          | ||¦  «        S )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``.
    )rh   Úcpuz(Expected a cuda or cpu device, but got: rh   z!Expected a cuda device, but got: )rA   rg   r   r   rô   rÕ   rÏ   ÚjitÚis_scriptingrh   ÚidxÚ_torch_get_device_index)rô   rõ   rö   s      r#   r   r   -  sî   € õ  �&�#ÑÔð ØˆÝ�&�#ÑÔð &Ý”˜fÑ%Ô%ˆÝ�&�%œ,Ñ'Ô'ð KØð 	KØŒ{ /Ð1Ð1Ý Ð!TÈFÐ!TÐ!TÑUÔUÐUð 2àŒ[˜FÒ"Ð"ÝÐIÀÐIÐIÑJÔJÐJÝŒ9×!Ò!Ñ#Ô#ð Ý�f�eœjÔ/Ñ0Ô0ð 	Ø”:ÐÝ" 6¨8°YÑ?Ô?Ð?r'   )NNNFr*   )FF)"r   r   Útypingr   r   Úcuda.bindingsr   r=   r<   r   Útorch._utilsr   rü   r   r$   r(   r+   rg   r8   rG   rc   rn   rp   rî   r   r|   Úboolrí   rB   r«   r­   rµ   Údictró   r&   r'   r#   ú<module>r     sF  ðØ €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à €€€ððð ð ð ð ð ð ÐÐøØð ð ð Ø!ÐØÐÐÐðøøøð
 FÐ EÐ EÐ EÐ EÐ Eð &¤+ð ð ð ð ð.+˜6œ;ð +ð +ð +ð +ð# &¤+ð #ð #ð #ð #ð	7˜ð 	7 ð 	7ð 	7ð 	7ð 	7ð ð ¨ð ð ð ð ð:˜Vœ[ð ð ð ð ð:6˜FœKð 6ð 6ð 6ð 6ð&$˜fœkð $ð $ð $ð $ð t¨C¤yð ð ð ð ð6 &*Ø%)Ø $ØðO$ð O$ØðO$àðO$ð ˜d™
ðO$ð ˜d‘{ð	O$ð
 ˜‘+ðO$ð ðO$ð ˆ5�#ˆ:ÔðO$ð O$ð O$ð O$ðdVð Vð Vð Vð Vñ Vô Vð Vð<S6ð S6ð S6ð S6ð S6ñ S6ô S6ð S6ðn 8<ð-ð -Ø	ˆu‰ð-Ø$(¨¤I°Ñ$4ð-à�4˜˜]Ð*Ô+Ñ+ð-ð -ð -ð -ðb <Að@ð @Øð@Øð@Ø48ð@àð@ð @ð @ð @ð @ð @s   ” �	)¨)