§
    ­˜ºh¯0  ã                   ó|  — d dl Z d dlZd dlmZmZmZ d dlZd dlmZ	 de j
        fd„Zdeddfd„Zde j
        fd„Z	 	 	 	 dd
ededee         dedee         dee         defd„Z G d„ d¦  «        Z G d„ d¦  «        Z	 ddeeef         deee                  deeeedf         f         fd„Z	 ddedededefd„ZdS ) é    N)ÚAnyÚOptionalÚUnion)Ú_get_device_indexÚreturnc                  ór   — t           j        dk    rt          j        d¦  «        S t          j        d¦  «        S )NÚwin32z
nvcuda.dllzlibcuda.so.1©ÚsysÚplatformÚctypesÚCDLL© ó    úY/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/torch/cuda/_utils.pyÚ_get_cuda_libraryr      s/   € Ý
„|�wÒÐÝŒ{˜<Ñ(Ô(Ð(åŒ{˜>Ñ*Ô*Ð*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   ÚcuGetErrorStringÚbyrefÚvalueÚdecodeÚRuntimeError)r   Úerr_strÚlibcudaÚerror_messages       r   Ú_check_cudar       s„   € Ø�‚{€{ØˆÝŒoÑÔ€GÝÑ!Ô!€GØ×Ò˜V¥V¤\°'Ñ%:Ô%:Ñ;Ô;Ð;à")¤-Ð";ˆŒ×ÒÑÔÐÐAUð õ Ð5 mÐ5Ð5Ñ
6Ô
6Ð6r   c                  ór   — t           j        dk    rt          j        d¦  «        S t          j        d¦  «        S )Nr	   znvrtc64_120_0.dllzlibnvrtc.sor
   r   r   r   Ú_get_nvrtc_libraryr"       s2   € õ „|�wÒÐÝŒ{Ð.Ñ/Ô/Ð/åŒ{˜=Ñ)Ô)Ð)r   Ú Úkernel_sourceÚkernel_nameÚcompute_capabilityÚheader_codeÚcuda_include_dirsÚnvcc_optionsc           
      ó˜  ‡‡— ddl }t          ¦   «         ŠdŠdt          ddfˆˆfd„}|                      ¦   «                              d¦  «        sd| › �} |r	|dz   | z   }n| }|                     d	¦  «        }	|€A|j                             |j                             ¦   «         ¦  «        }
|
j	        › |
j
        › �}g }|                     d
|› �                     ¦   «         ¦  «         |r/|D ],}|                     d|› �                     ¦   «         ¦  «         Œ-|r-|D ]*}|                     |                     d	¦  «        ¦  «         Œ+ddlm} d„ |D ¦   «         }|                     d„ |D ¦   «         ¦  «         t          |¦  «        }t!          j        |z  |Ž }t!          j        ¦   «         } |‰                     t!          j        |¦  «        |	|› d�                     ¦   «         ddd¦  «        ¦  «         ‰                     |||¦  «        }|‰k    r“t!          j        ¦   «         }‰                     |t!          j        |¦  «        ¦  «         t!          j        |j        ¦  «        }‰                     ||¦  «         t7          d|j                             ¦   «         › �¦  «        ‚t!          j        ¦   «         } |‰                     |t!          j        |¦  «        ¦  «        ¦  «         t!          j        |j        ¦  «        } |‰                     ||¦  «        ¦  «         ‰                     t!          j        |¦  «        ¦  «         |j        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.
        header_code (str, optional): Additional header code to prepend to the kernel source
        cuda_include_dirs (list, None): List of directories containing CUDA headers
        nvcc_options (list, None): Additional options to pass to NVRTC

    Returns:
        str: The compiled PTX code
    r   Nr   r   c                 óò   •— | ‰k    rot          j        ¦   «         }‰                     | t          j        |¦  «        ¦  «         |j        �|j                             ¦   «         nd}t          d|› �¦  «        ‚d S )Nr   r   )r   r   ÚnvrtcGetErrorStringr   r   r   r   )r   r   r   ÚNVRTC_SUCCESSÚlibnvrtcs      €€r   Úcheck_nvrtcz#_nvrtc_compile.<locals>.check_nvrtcJ   s„   ø€ Ø�]Ò"Ð"Ý”oÑ'Ô'ˆGØ×(Ò(¨µ´¸gÑ1FÔ1FÑGÔGÐGð ”=Ð,ð ”×$Ò$Ñ&Ô&Ð&à)ð õ
 Ð=¨mÐ=Ð=Ñ>Ô>Ð>ð #Ð"r   z
extern "C"zextern "C" ú
úutf-8z--gpu-architecture=sm_z-I)ÚCOMMON_NVCC_FLAGSc                 ó   — g | ]
}|d k    ¯|‘ŒS )z--expt-relaxed-constexprr   ©Ú.0Úflags     r   ú
<listcomp>z"_nvrtc_compile.<locals>.<listcomp>y   s*   € ð ð ð Ø¨dÐ6PÒ.PÐ.PˆÐ.PÐ.PÐ.Pr   c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS )r1   )Úencoder4   s     r   r7   z"_nvrtc_compile.<locals>.<listcomp>|   s$   € ÐLÐLÐL¨T�D—K’K Ñ(Ô(ÐLÐLÐLr   z.cuzKernel compilation failed:
) Ú
torch.cudar"   ÚintÚstripÚ
startswithr9   ÚcudaÚget_device_propertiesÚcurrent_deviceÚmajorÚminorÚappendÚtorch.utils.cpp_extensionr2   ÚextendÚlenr   r   Úc_void_pÚnvrtcCreateProgramr   ÚnvrtcCompileProgramÚc_size_tÚnvrtcGetProgramLogSizeÚcreate_string_bufferr   ÚnvrtcGetProgramLogr   r   ÚnvrtcGetPTXSizeÚnvrtcGetPTXÚnvrtcDestroyProgram)r$   r%   r&   r'   r(   r)   Útorchr/   Úfull_sourceÚsource_bytesÚpropsÚoptionsÚ	directoryÚoptionr2   Únvrtc_compatible_flagsÚnum_optionsÚoptions_arrayÚprogÚresÚlog_sizeÚlogÚptx_sizeÚptxr-   r.   s                           @@r   Ú_nvrtc_compilera   )   s¶  øø€ ð0 ÐÐÐõ "Ñ#Ô#€Hð €Mð	?�Cð 	? Dð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð ×ÒÑ Ô ×+Ò+¨LÑ9Ô9ð 6Ø5 mÐ5Ð5ˆð ð $Ø! DÑ(¨=Ñ8ˆˆà#ˆð ×%Ò% gÑ.Ô.€Lð Ð!Ø”
×0Ò0°´×1JÒ1JÑ1LÔ1LÑMÔMˆØ %¤Ð:¨U¬[Ð:Ð:Ðð €GØ‡N‚NÐ@Ð,>Ð@Ð@×GÒGÑIÔIÑJÔJÐJð ð 6Ø*ð 	6ð 	6ˆIØ�NŠNÐ+ 	Ð+Ð+×2Ò2Ñ4Ô4Ñ5Ô5Ð5Ð5ð ð 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˜ÑÔØØÐÐÐ×&Ò&Ñ(Ô(ØØØñ	
ô 	
ñ	ô 	ð 	ð ×
&Ò
& 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õ ŒÑ Ô €HØ€K�×(Ò(¨­v¬|¸HÑ/EÔ/EÑFÔFÑGÔGÐGÝ
Ô
% h¤nÑ
5Ô
5€CØ€K�×$Ò$ T¨3Ñ/Ô/Ñ0Ô0Ð0Ø× Ò ¥¤¨dÑ!3Ô!3Ñ4Ô4Ð4àŒ9Ð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 ©N)Ú_moduleÚ_kernels)Úselfrd   s     r   Ú__init__z_CudaModule.__init__¦   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   r1   zNo kernel named 'z' in this module)rh   Útorch.cuda._utilsr   r   rG   r    ÚcuModuleGetFunctionr   rg   r9   rl   r   ÚAttributeError)ri   rk   r   r   ÚfuncÚkernelÚerrs          r   Ú__getattr__z_CudaModule.__getattr__ª   sù   € Ø�4”=Ð Ð Ø”= Ô&Ð&ð 	8Ð7Ð7Ð7Ð7Ð7à#Ð#Ñ%Ô%ˆåŒÑ Ô ˆð	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   rG   rj   Ústrrt   r   r   r   rc   rc   ¥   sb   € € € € € ð3˜vœð 3°4ð 3ð 3ð 3ð 3ðV ð V¨ð Vð Vð Vð Vð Vð Vr   rc   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	e
         dede	e         ddfd„ZdS )rl   zT
    Represents a compiled CUDA kernel that can be called with PyTorch tensors.
    rq   rd   r   Nc                 ó"   — || _         || _        d S rf   )rq   rd   )ri   rq   rd   s      r   rj   z_CudaKernel.__init__Ç   s   € ØˆŒ	ØˆŒˆˆr   ©é   r|   r|   r   ÚgridÚblockÚargsÚ
shared_memÚstreamc                 óà  — 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                             ¦   «         }t5          |                     | 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: r|   é   )rQ   r>   Ú_utilsr   Ú
isinstanceÚTensorÚis_cudaÚis_cpuÚ	is_pinnedÚ
ValueErrorr   rG   Údata_ptrrC   r   r;   Úc_intÚfloatÚc_floatÚ	TypeErrorÚtyperF   Ú	enumerateÚcastr:   Úcurrent_streamr    ÚcuLaunchKernelrq   Ú_as_parameter_)ri   r}   r~   r   r€   r�   rQ   r   Úprocessed_argsÚc_argsÚargÚptrrŒ   rŽ   Úc_args_arrayÚis                   r   Ú__call__z_CudaKernel.__call__Ë   sg  € ð& 	ˆˆˆà”*Ô#×5Ò5Ñ7Ô7ˆàð 	Øˆ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å œ.¨Ñ-Ô-�à—’�fœl¨7Ñ3Ô3Ñ4Ô4Ð4Ñ4åÐ 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åØ×"Ò"Ø”	Ø�Q”Ø�Q”Ø�Q”Ø�a”Ø�a”Ø�a”ØØÔ%ØØñô ñ	
ô 	
ð 	
ð 	
ð 	
r   )r{   r{   Nr   N)ru   rv   rw   Ú__doc__r   rG   rj   Útupler;   r   Úlistr   rœ   r   r   r   rl   rl   Â   sÚ   € € € € € ðð ð˜Vœ_ð °f´oð È$ð ð ð ð ð &/Ø&/Ø#ØØ $ðP
ð P
à�C˜˜c�MÔ"ðP
ð �S˜#˜s�]Ô#ðP
ð �tŒnð	P
ð
 ðP
ð ˜”ðP
ð 
ðP
ð P
ð P
ð P
ð P
ð P
r   rl   r`   Ú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   Nr1   )r:   r   r…   rx   r9   r   rG   r>   r“   r    ÚcuModuleLoadDatar   rc   ro   rl   )	r`   r    rQ   r   rd   r�   Úkernelsrk   rq   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FÚ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``.
    )r>   Úcpuz(Expected a cuda or cpu device, but got: r>   z!Expected a cuda device, but got: )r…   r;   rx   rQ   r¥   r�   rŠ   ÚjitÚis_scriptingr>   ÚidxÚ_torch_get_device_index)r¥   r¦   r§   s      r   r   r   N  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   )Nr#   NNrf   )FF)r   r   Útypingr   r   r   rQ   Útorch._utilsr   r­   r   r   r;   r    r"   rx   rŸ   Úbytesra   rc   rl   Údictr¤   Úboolr   r   r   ú<module>r³      sE  ðØ €€€Ø 
€
€
€
Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à €€€ð FÐ EÐ EÐ EÐ EÐ Eð+˜6œ;ð +ð +ð +ð +ð	7˜ð 	7 ð 	7ð 	7ð 	7ð 	7ð*˜FœKð *ð *ð *ð *ð )-ØØ(,Ø#'ðyð yØðyàðyð ! œðyð ð	yð
   ”~ðyð ˜4”.ðyð ðyð yð yð yðxVð Vð Vð Vð Vñ Vô Vð Vð:Y
ð Y
ð Y
ð Y
ð Y
ñ Y
ô Y
ð Y
ðz AEð-ð -Ø	ˆs�EˆzÔ	ð-Ø*2°4¸´9Ô*=ð-à
ˆ;˜˜S -Ð/Ô0Ð0Ô1ð-ð -ð -ð -ðb <Að@ð @Øð@Øð@Ø48ð@àð@ð @ð @ð @ð @ð @r   