o
    *ѹgPU                     @   s  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mZ zd dlZdZ	W n e
eeefy5   dZ	Y nw edg dZh dZh dZd	d
 Zdd Zdd Zdd ZdGddZdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Z d)d* Z!d+d, Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&dGd5d6Z'd7d8 Z(d9d: Z)d;d< Z*d=d> Z+d?, Z-d@dA Z.dBdC Z/dDdE Z0e1dFkre0  dS dS )H    N)
namedtupleTF	SystemEnv)torch_versionis_debug_buildcuda_compiled_versiongcc_versionclang_versioncmake_versionoslibc_versionpython_versionpython_platformis_cuda_availablecuda_runtime_versioncuda_module_loadingnvidia_driver_versionnvidia_gpu_modelscudnn_versionpip_versionpip_packagesconda_packageship_compiled_versionhip_runtime_versionmiopen_runtime_versioncaching_allocator_configis_xnnpack_availablecpu_info>   numpyZsoumithZcudatoolkitZmagmaoptreeZmkltritontorch>   r   ZonnxZmypyZflake8r   r   r    c           	      C   sz   t | tu rdnd}tj| tjtj|d}| \}}|j}t dkr&d}nt	 }|
|}|
|}|| | fS )z%Return (return-code, stdout, stderr).TF)stdoutstderrshellwin32ZoemN)typestr
subprocessPopenPIPEcommunicate
returncodeget_platformlocalegetpreferredencodingdecodestrip)	commandr#   pZ
raw_outputZraw_errrcencoutputerr r7   [/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/torch/utils/collect_env.pyrunG   s   



r9   c                 C   s   | |\}}}|dkrdS |S )zIRun command using run_lambda; reads and returns entire output if rc is 0.r   Nr7   
run_lambdar1   r3   out_r7   r7   r8   run_and_read_allW   s   r>   c                 C   s<   | |\}}}|dkrdS t ||}|du rdS |dS )zIRun command using run_lambda, returns the first regex match if it exists.r   N   )researchgroup)r;   r1   regexr3   r<   r=   matchr7   r7   r8   run_and_parse_first_match_   s   
rE   c                 C   s(   | |\}}}|dkrdS | dd S )zKRun command using run_lambda and returns first line if output is not empty.r   N
)splitr:   r7   r7   r8   run_and_return_first_linei   s   rH   c                    sR    d u rt  tjdd}t| d|}|d u r|S d fdd| D S )NZ	CONDA_EXEcondaz{} listrF   c                 3   s4    | ]   d st fddD r V  qdS )#c                 3       | ]}| v V  qd S Nr7   .0nameliner7   r8   	<genexpr>}       z/get_conda_packages.<locals>.<genexpr>.<genexpr>N)
startswithanyrN   patternsrP   r8   rR   y   s    
z%get_conda_packages.<locals>.<genexpr>)DEFAULT_CONDA_PATTERNSr
   environgetr>   formatjoin
splitlines)r;   rX   rI   r<   r7   rW   r8   get_conda_packagesq   s   r_   c                 C      t | ddS )Nzgcc --versionzgcc (.*)rE   r;   r7   r7   r8   get_gcc_version      rc   c                 C   r`   )Nzclang --versionzclang version (.*)ra   rb   r7   r7   r8   get_clang_version   rd   re   c                 C   r`   )Nzcmake --versionz
cmake (.*)ra   rb   r7   r7   r8   get_cmake_version   rd   rf   c                 C   s,   t  dkrd}t| |dS t }t| |dS )Ndarwinzkextstat | grep -i cudazcom[.]nvidia[.]CUDA [(](.*?)[)]zDriver Version: (.*?) )r,   rE   get_nvidia_smi)r;   cmdsmir7   r7   r8   get_nvidia_driver_version   s   
rk   c                 C   s   t  dkstr5ttjdr5tjjd ur5tr3tj r3tjd tjjd ur0d	tj
dj S d S d S t }td}| |d \}}}|dkrLd S t|d|S )Nrg   hipz ({})r    z \(UUID: .+?\)z -L)r,   TORCH_AVAILABLEhasattrr    versionrl   cudais_availableZget_device_namer\   Zget_device_propertiesZgcnArchNamerh   r@   compilesub)r;   rj   Z
uuid_regexr3   r<   r=   r7   r7   r8   get_gpu_info   s   &

ru   c                 C   r`   )Nznvcc --versionzrelease .+ V(.*)ra   rb   r7   r7   r8   get_running_cuda_version   rd   rv   c                 C   s"  t  dkr"tjdd}tjdd}tj|dd}d||}n
t  d	kr*d
}nd}| |\}}}t|dksA|dkrY|dkrYtjd}|durWtj|rWtj	|S dS t
 }	|dD ]}
tj	|
}
tj|
rt|	|
 qa|	sydS t|	}t|dkr|d S d|}d|S )zHReturn a list of libcudnn.so; it's hard to tell which one is being used.r$   
SYSTEMROOT
C:\WindowsZ	CUDA_PATHz%CUDA_PATH%System32wherez{} /R "{}\bin" cudnn*.dllrg   z ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revr   r?   ZCUDNN_LIBRARYNrF   z!Probably one of the following:
{})r,   r
   rZ   r[   pathr]   r\   lenisfilerealpathsetrG   addsorted)r;   system_rootZ	cuda_pathZ	where_cmdZ	cudnn_cmdr3   r<   r=   lZ	files_setfnfilesresultr7   r7   r8   get_cudnn_version   s6   




r   c                  C   s~   d} t  dkr=tjdd}tjdd}tj|dd| }tj|d	| }||g}|D ]}tj|r<d
|}  | S q,| S )Nz
nvidia-smir$   rw   rx   ZPROGRAMFILESzC:\Program FileszNVIDIA CorporationZNVSMIry   z"{}")r,   r
   rZ   r[   r{   r]   existsr\   )rj   r   Zprogram_files_rootZlegacy_pathnew_pathZsmisZcandidate_smir7   r7   r8   rh      s   

rh   c                 C   sr   d\}}}t  dkr| d\}}}nt  dkr| d\}}}nt  dkr+| d\}}}d}|d	kr5|}|S |}|S )
N)r   rm   rm   linuxZlscpur$   zwmic cpu get Name,Manufacturer,Family,Architecture,ProcessorType,DeviceID,        CurrentClockSpeed,MaxClockSpeed,L2CacheSize,L2CacheSpeed,Revision /VALUErg   z"sysctl -n machdep.cpu.brand_stringNoner   )r,   )r;   r3   r<   r6   r   r7   r7   r8   get_cpu_info'  s   



r   c                   C   sF   t jdrdS t jdrdS t jdrdS t jdr dS t jS )Nr   r$   cygwinrg   )sysplatformrT   r7   r7   r7   r8   r,   8  s   r,   c                 C   r`   )Nzsw_vers -productVersionz(.*)ra   rb   r7   r7   r8   get_mac_versionE  rd   r   c                 C   sB   t jdd}t j|ddd}t j|dd}t| d||S )Nrw   rx   ry   ZWbemZwmicZfindstrz!{} os get Caption | {} /v Caption)r
   rZ   r[   r{   r]   r>   r\   )r;   r   Zwmic_cmdZfindstr_cmdr7   r7   r8   get_windows_versionI  s   r   c                 C   r`   )Nzlsb_release -azDescription:\t(.*)ra   rb   r7   r7   r8   get_lsb_versionP  rd   r   c                 C   r`   )Nzcat /etc/*-releasezPRETTY_NAME="(.*)"ra   rb   r7   r7   r8   check_release_fileT  s   r   c                 C   s   ddl m} t }|dks|dkrt| S |dkr*t| }|d u r#d S d|| S |dkrSt| }|d ur=d|| S t| }|d urLd|| S d|| S |S )	Nr   )machiner$   r   rg   zmacOS {} ({})r   z{} ({}))r   r   r,   r   r   r\   r   r   )r;   r   r   rp   descr7   r7   r8   get_osY  s$   r   c                  C   s   dd l } |   S Nr   r   r   r7   r7   r8   get_python_platformw  s   r   c                  C   s$   dd l } t dkrdS d|  S )Nr   r   N/A-)r   r,   r]   libc_verr   r7   r7   r8   get_libc_version|  s   
r   c                    sF    du rt   fdd}tjd dkrdnd}|tjdg}||fS )	zZReturn `pip list` output. Note: will also find conda-installed pytorch and numpy packages.Nc                    s.   t | ddg }d fdd| D S )Nlistz--format=freezerF   c                 3   s*    | ] t  fd dD r V  qdS )c                 3   rK   rL   r7   rM   rP   r7   r8   rR     rS   zCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>N)rU   rV   rW   rP   r8   rR     s    
z9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)r>   r]   r^   )pipr<   rX   r;   r7   r8   run_with_pip  s   z&get_pip_packages.<locals>.run_with_pipr   3Zpip3r   z-mpip)DEFAULT_PIP_PATTERNSr   rp   
executable)r;   rX   r   r   r<   r7   r   r8   get_pip_packages  s   r   c                  C   s   t jdd} | S )NZPYTORCH_CUDA_ALLOC_CONFrm   )r
   rZ   r[   )Z	ca_configr7   r7   r8   get_cachingallocator_config  s   r   c                  C   s.   t rtj rtj  tjdd} | S dS )NZCUDA_MODULE_LOADINGrm   r   )rn   r    rq   rr   initr
   rZ   r[   )configr7   r7   r8   get_cuda_module_loading_config  s
   
r   c                  C   s   t rdd l} t| jjjS dS )Nr   r   )rn   Ztorch.backends.xnnpackr&   backendsZxnnpackenabled)r    r7   r7   r8   r     s   r   c               	   C   s  t } t| \}}trNtj}ttjj}ttj	 }tjj}t
tjdr*tjjd u r1d } }}	n+dd }
tj d}|
|d}|
|d}	d}tjj}nd } } }}d } }}	tjdd}t| }td$i d	|d
|dd|tj d dt d|d|dt| dt dt| dt| dt| d|d|d|	d|d|d|dt| dt dt| dt| d t | d!t! d"t" d#t#| S )%Nrl   r   c                    s"    fdd| D }|r|d S dS )Nc                    s$   g | ]} |v r| d dd qS )Nr?   )rsplit)rN   sprefixr7   r8   
<listcomp>  s   $ z;get_env_info.<locals>.get_version_or_na.<locals>.<listcomp>r   r   r7   )cfgr   Z_lstr7   r   r8   get_version_or_na  s   z'get_env_info.<locals>.get_version_or_narF   zHIP RuntimeZMIOpen r   r   r   z{} ({}-bit runtime)r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r	   r   r   r   r7   )$r9   r   rn   r    __version__r&   rp   debugrq   rr   ro   rl   Z_CZ_show_configrG   r   replacer_   r   r\   maxsize
bit_lengthr   rv   r   ru   rk   r   r   r   rc   re   rf   r   r   r   )r;   r   Zpip_list_outputversion_strZdebug_mode_strZcuda_available_strZcuda_version_strr   r   r   r   r   sys_versionr   r7   r7   r8   get_env_info  s   


	
r   aP  
PyTorch version: {torch_version}
Is debug build: {is_debug_build}
CUDA used to build PyTorch: {cuda_compiled_version}
ROCM used to build PyTorch: {hip_compiled_version}

OS: {os}
GCC version: {gcc_version}
Clang version: {clang_version}
CMake version: {cmake_version}
Libc version: {libc_version}

Python version: {python_version}
Python platform: {python_platform}
Is CUDA available: {is_cuda_available}
CUDA runtime version: {cuda_runtime_version}
CUDA_MODULE_LOADING set to: {cuda_module_loading}
GPU models and configuration: {nvidia_gpu_models}
Nvidia driver version: {nvidia_driver_version}
cuDNN version: {cudnn_version}
HIP runtime version: {hip_runtime_version}
MIOpen runtime version: {miopen_runtime_version}
Is XNNPACK available: {is_xnnpack_available}

CPU:
{cpu_info}

Versions of relevant libraries:
{pip_packages}
{conda_packages}
c           
         s*  ddd}ddd}dd	d
}d dd}dd }|    || j d< g d}|dg }t fdd|D }trRtj sR|rR|D ]}	d |	< qB| jd u rRd d< |  |  | d  d< | d  d<  d r{| d d| j	 d<  d r| d d d< | j
 d< tjd!i  S )"NCould not collectc                 S   s(   |   D ]}| | d urq|| |< q| S rL   keys)dctreplacementkeyr7   r7   r8   replace_nones  s
   
z!pretty_str.<locals>.replace_nonesYesNoc                 S   s<   |   D ]}| | du r|| |< q| | du r|| |< q| S )NTFr   )r   truefalser   r7   r7   r8   replace_bools  s   
z!pretty_str.<locals>.replace_bools	[prepend]c                    s&   |  d} fdd|D }d|S )NrF   c                    s   g | ]} | qS r7   r7   )rN   rQ   tagr7   r8   r     s    z/pretty_str.<locals>.prepend.<locals>.<listcomp>)rG   r]   )textr   linesZupdated_linesr7   r   r8   prepend  s   

zpretty_str.<locals>.prependNo relevant packagesc                 S   s   | d urt | dkr|S | S r   )r|   )r   r   r7   r7   r8   replace_if_empty  s   z$pretty_str.<locals>.replace_if_emptyc                 S   s(   | d urt | ddkrd| S | S )NrF   r?   z
{}
)r|   rG   r\   )stringr7   r7   r8   maybe_start_on_next_line!  s   
z,pretty_str.<locals>.maybe_start_on_next_liner   )r   r   r   r   c                 3   s    | ]	} | d u V  qd S rL   r7   )rN   fieldZmutable_dictr7   r8   rR   4  s    
zpretty_str.<locals>.<genexpr>zNo CUDAr   r   r   r   z[{}] z[conda] r   )r   )r   r   )r   )r   r7   )_asdictr   allrn   r    rq   rr   r   r\   r   r   env_info_fmt)
Zenvinfor   r   r   r   r   Zdynamic_cuda_fieldsZall_cuda_fieldsZall_dynamic_cuda_fields_missingr   r7   r   r8   
pretty_str  s@   








r   c                   C   s
   t t S rL   )r   r   r7   r7   r7   r8   get_pretty_env_infoR  s   
r   c                     s   t d t } t |  tr\ttdr^ttjdr`tjjj tj	dkrbt
j rd fddt
 D }t|t
jjd}t
j|}tj|d}d	||d
 }t |tjd d S d S d S d S d S d S )Nz%Collecting environment information...utils_crash_handlerr   c                    s   g | ]	}t j |qS r7   )r
   r{   r]   )rN   dumpZminidump_dirr7   r8   r   ^  s    zmain.<locals>.<listcomp>)r   z%Y-%m-%d %H:%M:%Sz.
*** Detected a minidump at {} created on {}, zKif this is related to your bug please include it when you file a report ***)file)printr   rn   ro   r    r   r   ZDEFAULT_MINIDUMP_DIRr   r   r
   r{   r   listdirmaxgetctimedatetimefromtimestampstrftimer\   r"   )r5   dumpsZlatestctimeZcreation_timemsgr7   r   r8   mainV  s    

r   __main__rL   )2r   r-   r@   r'   r   r
   collectionsr   r    rn   ImportError	NameErrorAttributeErrorOSErrorr   rY   r   r9   r>   rE   rH   r_   rc   re   rf   rk   ru   rv   r   rh   r   r,   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   r   r   __name__r7   r7   r7   r8   <module>   sh   

	%[
	9!K
