o
    X۷i5                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	e	j
jjjZes4d dl
mZ dd Zdd Zdd	 ZG d
d dZG dd dZddddZdd Zdd ZdS )    )annotationsN)
pathfinderc              
   C  s6   z|  W S  |y } z
t |W  Y d }~S d }~ww N)repr)funcerrorse r	   D/home/ubuntu/vllm_env/lib/python3.10/site-packages/cupyx/_runtime.py_eval_or_error   s   r   c              	   C  s.   z	t | }W |jS  t jtfy   Y d S w r   )r   load_nvidia_dynamic_libDynamicLibNotFoundErrorRuntimeErrorabs_path)lib_name	loaded_dlr	   r	   r
   _load_and_get_path   s   r   c                 C  sV   t | t |ks
J g }tt | D ]}|| |  |t |k r(|||  q|S r   )lenrangeappend)ver_seqpath_seqresultir	   r	   r
   _version_and_path'   s   r   c                   @  s$   e Zd Zdd Zdd Zdd ZdS )_InstallInfoc                 C  s`   |   }|d ur#tj|d}ttj|dttj|dd}nd d d}|| _|| _d S )Nz.datalibinclude)r   r   )_get_cupy_package_rootospathjoin_dir_or_nonecupy_package_root
data_paths)selfr#   	data_rootr$   r	   r	   r
   __init__5   s   
z_InstallInfo.__init__c                 C  s"   || j vrtd|| j | S )NzInvalid data type: {})r$   
ValueErrorformat)r%   	data_typer	   r	   r
   get_data_pathF   s   

z_InstallInfo.get_data_pathc                 C  s0   zt t}W n
 ty   Y d S w tj|S r   )inspectgetfilecupy	TypeErrorr   r    dirname)r%   	cupy_pathr	   r	   r
   r   K   s   z#_InstallInfo._get_cupy_package_rootN)__name__
__module____qualname__r'   r+   r   r	   r	   r	   r
   r   1   s    r   c                   @  s   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&ddddZ'dd Z(dS )_RuntimeInfoNTfullc                  s^  || _ tj| _tstj | _ntj	 | _tstj
 | _ntj | _ttjj | _tjj rZz
dd l}|jj}W n tyN   dd l}|j}Y nw |  jd| d7  _ttjjjtjjj| _ttjjjtjjj| _ttjjt| _|rtstd| _ d| _!|rtdd t| _!tstd| _"zdd	l#m$  t fd
dt| _%|rtstd| _&W n	 ty   Y nw tdd t| _'|rtstd| _(tdd t| _)|rtstd| _*d| _+|rtdd t| _+tstd| _,tdd t| _-|rtstd| _.zdd l/m  m0} | | _1W n
 ty   Y nw tsJztjj23 }W n ty7   d }Y nw |d u rAd| _4n	ttjj5| | _4tj6drj|rctj7d tsbtd| _8nd| _9| j9| _:zddl;m<} | | _9|= }|dkrd}|| _:W n
 ty   Y nw tjj> | _?zdd l@m  mA} | | _BW n
 ty   Y nw zddl;mC}	 |	= | _DW n
 ty   Y nw |rtstd| _Ezddl;mF}
 |
 | _GW n
 ty   Y nw |rtstd| _HtjIjJ| _Kz
dd lL}|j| _MW n
 ty   Y nw tNjOjP| _Qzdd lR}|jOjP| _SW d S  ty.   Y d S w )Nr   z (CUDA Python: )cudartz(available)c                   S     t jjt jj S r   )r.   cudacublas
getVersiondeviceget_cublas_handler	   r	   r	   r
   <lambda>       
z'_RuntimeInfo.__init__.<locals>.<lambda>r<   cufftc                     s      S r   )r=   r	   rB   r	   r
   r@      s    rC   c                   S     t jj S r   )r.   r;   curandr=   r	   r	   r	   r
   r@          rE   c                   S  rD   r   )r.   r;   cusolver_getVersionr	   r	   r	   r
   r@      rF   rG   c                   S  r:   r   )r.   r;   cusparser=   r>   get_cusparse_handler	   r	   r	   r
   r@      rA   rI   c                   S  rD   r   )r.   r;   nvrtcr=   r	   r	   r	   r
   r@      rF   rK   z(NVRTC unavailable)ncclz/(not loaded; try `import cupy.cuda.nccl` first))rL   z	(unknown))cutensorrM   )
cusparselt
cusparseLt)T_fullr.   __version__cupy_versionis_hipr;   get_cuda_path	cuda_path_environmentget_rocm_pathget_nvcc_path	nvcc_pathget_hipcc_pathstrdriverget_build_versioncuda_build_version_is_cuda_pythoncuda.bindingsbindingsImportErrorr   runtimedriverGetVersionCUDARuntimeErrorcuda_driver_versionruntimeGetVersioncuda_runtime_versionget_local_runtime_version	Exceptioncuda_local_runtime_versionr   cuda_local_runtime_pathcublas_versioncublas_path	cupy.cudarC   cufft_version
cufft_pathcurand_versioncurand_pathcusolver_versioncusolver_pathcusparse_versioncusparse_pathnvrtc_version
nvrtc_pathcupy.cuda.thrustthrustthrust_versionrK   r=   cuda_extra_include_dirs$_get_include_dir_from_conda_or_wheel_can_attempt_preload_preload_library	nccl_pathnccl_build_versionnccl_runtime_versioncupy_backends.cuda.libsrL   get_versioncubcub_build_versioncupy.cuda.jitifyjitifyjitify_build_versionrM   cutensor_versioncutensor_pathrN   cusparselt_versioncusparselt_path_utilcython_build_vercython_build_versionCythoncython_versionnumpyversionfull_versionnumpy_versionscipyscipy_version)r%   r7   r;   cuda_versionr{   rx   rL   r   r   rM   rN   r   r   r	   rB   r
   r'      s0  
















z_RuntimeInfo.__init__c                 C  sv  | j }dt fdt fd| jfdtsdndfd| jfd| jfd	| jfd
| jfd| j	ftr0dnd| j
fd| jfd| jfd| j d| j dfg}|rXtsX|d| j dfg7 }|d| jfg7 }d| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfg	}|rtsd| jfd| jfd | jfd!| jfd"| jfd#| jfg}|t ||7 }n||7 }|d$| j!fd%| j"fg7 }|rts|d&| j#fg7 }|d'| j$fg7 }|rts|d(| j%fg7 }|d)| j&fg7 }|rts|d*| j'fg7 }d+}zt(j)j*+ }W n& t(j)j*j,y  } zd,|j-d+ vrt./d-|  W Y d }~nd }~ww t0|D ]i}t(j)1|W}t(j)j*2|}	d.3||	d/ 4 f}
d03||j5f}trnz|	d1 4 }W n t6ye   d2t7|	d3  }Y nw d43||f}nd53||j8f}||
||g7 }W d    n	1 sw   Y  q%t9d6d7 |D d8 }d9t7| d: }t:; }|D ]\}}|<|3|| q|= S );NOSzPython VersionzCuPy VersionzCuPy PlatformzNVIDIA CUDAzAMD ROCmzNumPy VersionzSciPy VersionzCython Build VersionzCython Runtime Versionz	CUDA Rootz
HIPCC PATHz	NVCC PATHzCUDA Build VersionzCUDA Driver VersionzCUDA Runtime Versionz (linked to CuPy) / z (locally installed)zCUDA Runtime PathzCUDA Extra Include DirszcuBLAS VersionzcuFFT VersionzcuRAND VersionzcuSOLVER VersionzcuSPARSE VersionzNVRTC VersionzThrust VersionzCUB Build VersionzJitify Build VersionzcuBLAS Pathz
cuFFT PathzcuRAND PathzcuSOLVER PathzcuSPARSE Pathz
NVRTC PathzNCCL Build VersionzNCCL Runtime Versionz	NCCL PathzcuTENSOR VersionzcuTENSOR PathzcuSPARSELt Build VersionzcuSPARSELt Pathr   ErrorNoDevicez!Failed to detect number of GPUs: zDevice {} NamenamezDevice {} PCI Bus IDgcnArchNamegfxgcnArchzDevice {} ArchzDevice {} Compute Capabilityc                 S  s   g | ]}t |d  qS )r   )r   ).0rr	   r	   r
   
<listcomp>  s    z(_RuntimeInfo.__str__.<locals>.<listcomp>   z{:z}: {}
)>rP   platformpython_versionrR   rS   r   r   r   r   rU   rY   r^   rf   rh   rk   rl   r}   rm   rp   rr   rt   rv   rx   r|   r   r   rn   rq   rs   ru   rw   ry   r   r   r   r   r   r   r   r   r.   r;   rc   getDeviceCountre   argswarningswarnr   DevicegetDevicePropertiesr)   decode
pci_bus_idKeyErrorr[   compute_capabilitymaxioStringIOwritegetvalue)r%   r7   recordsctk_lib_versctk_lib_pathsdevice_countr   	device_idr>   propsr   pci_busarchwidthfmtskvr	   r	   r
   __str__3  s   



z_RuntimeInfo.__str__))r2   r3   r4   rR   rU   rY   r^   rf   rh   rk   rl   rm   rn   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   r'   r   r	   r	   r	   r
   r5   S   sP     0r5   Tr6   c                 C  s
   t | dS )Nr6   )r5   r6   r	   r	   r
   get_runtime_info  s   
r   c                   C  s   t  S r   )r   r	   r	   r	   r
   get_install_info  s   r   c                 C  s   t j| r| S dS )z$Returns None if path does not exist.N)r   r    isdir)r    r	   r	   r
   r"     s   r"   )
__future__r   r,   r   r   r   r   r   r.   cupy_backendsr;   apirc   rS   r   r   r   r   r   r5   r   r   r"   r	   r	   r	   r
   <module>   s,    
	
"  Q