o
    <&iW                     @   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>   optreetritontorchZsoumithZcudatoolkitZmklZmagmanumpy>   r   Zonnxr   r   Zmypyr    Zflake8c           	      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oem)typestr
subprocessPopenPIPEcommunicate
returncodeget_platformlocalegetpreferredencodingdecodestrip)	commandr#   p
raw_outputZraw_errrcencoutputerr r8   BC:\wamp64\www\opt\env\Lib\site-packages\torch/utils/collect_env.pyrunG   s   



r:   c                 C   s   | |\}}}|dkrdS |S )zIRun command using run_lambda; reads and returns entire output if rc is 0.r   Nr8   
run_lambdar1   r4   out_r8   r8   r9   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   regexr4   r=   r>   matchr8   r8   r9   run_and_parse_first_match_   s   
rF   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;   r8   r8   r9   run_and_return_first_linei   s   rI   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{} listrG   c                 3   s4    | ]   d st fddD r V  qdS )#c                 3       | ]}| v V  qd S Nr8   .0nameliner8   r9   	<genexpr>}       z/get_conda_packages.<locals>.<genexpr>.<genexpr>N)
startswithanyrO   patternsrQ   r9   rS   y   s    
z%get_conda_packages.<locals>.<genexpr>)DEFAULT_CONDA_PATTERNSr
   environgetr?   formatjoin
splitlines)r<   rY   rJ   r=   r8   rX   r9   get_conda_packagesq   s   r`   c                 C      t | ddS )Nzgcc --versionzgcc (.*)rF   r<   r8   r8   r9   get_gcc_version      rd   c                 C   ra   )Nzclang --versionzclang version (.*)rb   rc   r8   r8   r9   get_clang_version   re   rf   c                 C   ra   )Nzcmake --versionz
cmake (.*)rb   rc   r8   r8   r9   get_cmake_version   re   rg   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,   rF   get_nvidia_smi)r<   cmdsmir8   r8   r9   get_nvidia_driver_version   s   
rl   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 )Nrh   hipz ({})r    z \(UUID: .+?\)z -L)r,   TORCH_AVAILABLEhasattrr   versionrm   cudais_availableZget_device_namer]   Zget_device_propertiesZgcnArchNameri   rA   compilesub)r<   rk   Z
uuid_regexr4   r=   r>   r8   r8   r9   get_gpu_info   s   &

rv   c                 C   ra   )Nznvcc --versionzrelease .+ V(.*)rb   rc   r8   r8   r9   get_running_cuda_version   re   rw   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*.dllrh   z ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revr   r@   ZCUDNN_LIBRARYNrG   z!Probably one of the following:
{})r,   r
   r[   r\   pathr^   r]   lenisfilerealpathsetrH   addsorted)r<   system_rootZ	cuda_pathZ	where_cmdZ	cudnn_cmdr4   r=   r>   lZ	files_setfnfilesresultr8   r8   r9   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$   rx   ry   ZPROGRAMFILESzC:\Program FileszNVIDIA CorporationZNVSMIrz   z"{}")r,   r
   r[   r\   r|   r^   existsr]   )rk   r   Zprogram_files_rootZlegacy_pathnew_pathZsmisZcandidate_smir8   r8   r9   ri      s   

ri   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   rn   rn   linuxZlscpur$   zwmic cpu get Name,Manufacturer,Family,Architecture,ProcessorType,DeviceID,        CurrentClockSpeed,MaxClockSpeed,L2CacheSize,L2CacheSpeed,Revision /VALUErh   z"sysctl -n machdep.cpu.brand_stringNoner   )r,   )r<   r4   r=   r7   r   r8   r8   r9   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$   cygwinrh   )sysplatformrU   r8   r8   r8   r9   r,   8  s   r,   c                 C   ra   )Nzsw_vers -productVersionz(.*)rb   rc   r8   r8   r9   get_mac_versionE  re   r   c                 C   sB   t jdd}t j|ddd}t j|dd}t| d||S )Nrx   ry   rz   ZWbemZwmicZfindstrz!{} os get Caption | {} /v Caption)r
   r[   r\   r|   r^   r?   r]   )r<   r   Zwmic_cmdZfindstr_cmdr8   r8   r9   get_windows_versionI  s   r   c                 C   ra   )Nzlsb_release -azDescription:\t(.*)rb   rc   r8   r8   r9   get_lsb_versionP  re   r   c                 C   ra   )Nzcat /etc/*-releasezPRETTY_NAME="(.*)"rb   rc   r8   r8   r9   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   rh   zmacOS {} ({})r   z{} ({}))r   r   r,   r   r   r]   r   r   )r<   r   r   rq   descr8   r8   r9   get_osY  s$   r   c                  C   s   dd l } |   S Nr   r   r   r8   r8   r9   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   r8   r8   r9   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=freezerG   c                 3   s*    | ] t  fd dD r V  qdS )c                 3   rL   rM   r8   rN   rQ   r8   r9   rS     rT   zCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>N)rV   rW   rX   rQ   r9   rS     s    
z9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)r?   r^   r_   )pipr=   rY   r<   r8   r9   run_with_pip  s   z&get_pip_packages.<locals>.run_with_pipr   3Zpip3r   z-mpip)DEFAULT_PIP_PATTERNSr   rq   
executable)r<   rY   r   r   r=   r8   r   r9   get_pip_packages  s   r   c                  C   s   t jdd} | S )NZPYTORCH_CUDA_ALLOC_CONFrn   )r
   r[   r\   )Z	ca_configr8   r8   r9   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_LOADINGrn   r   )ro   r   rr   rs   initr
   r[   r\   )configr8   r8   r9   get_cuda_module_loading_config  s
   
r   c                  C   s   t rdd l} t| jjjS dS )Nr   r   )ro   Ztorch.backends.xnnpackr&   backendsZxnnpackenabled)r   r8   r8   r9   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 )%Nrm   r   c                    s"    fdd| D }|r|d S dS )Nc                    s$   g | ]} |v r| d dd qS )Nr@   )rsplit)rO   sprefixr8   r9   
<listcomp>  s   $ z;get_env_info.<locals>.get_version_or_na.<locals>.<listcomp>r   r   r8   )cfgr   Z_lstr8   r   r9   get_version_or_na  s   z'get_env_info.<locals>.get_version_or_narG   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   r8   )$r:   r   ro   r   __version__r&   rq   debugrr   rs   rp   rm   Z_CZ_show_configrH   r   replacer`   r   r]   maxsize
bit_lengthr   rw   r   rv   rl   r   r   r   rd   rf   rg   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   r8   r8   r9   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 rM   keys)dctreplacementkeyr8   r8   r9   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   r8   r8   r9   replace_bools  s   
z!pretty_str.<locals>.replace_bools	[prepend]c                    s&   |  d} fdd|D }d|S )NrG   c                    s   g | ]} | qS r8   r8   )rO   rR   tagr8   r9   r     s    z/pretty_str.<locals>.prepend.<locals>.<listcomp>)rH   r^   )textr   linesZupdated_linesr8   r   r9   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   r8   r8   r9   replace_if_empty  s   z$pretty_str.<locals>.replace_if_emptyc                 S   s(   | d urt | ddkrd| S | S )NrG   r@   z
{}
)r}   rH   r]   )stringr8   r8   r9   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 rM   r8   )rO   fieldZmutable_dictr8   r9   rS   4  s    
zpretty_str.<locals>.<genexpr>zNo CUDAr   r   r   r   z[{}] z[conda] r   )r   )r   r   )r   )r   r8   )_asdictr   allro   r   rr   rs   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   r8   r   r9   
pretty_str  s@   








r   c                   C   s
   t t S rM   )r   r   r8   r8   r8   r9   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 r8   )r
   r|   r^   )rO   dumpZminidump_dirr8   r9   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   ro   rp   r   r   r   ZDEFAULT_MINIDUMP_DIRr   r   r
   r|   r   listdirmaxgetctimedatetimefromtimestampstrftimer]   r"   )r6   dumpsZlatestctimeZcreation_timemsgr8   r   r9   mainV  s    

r   __main__rM   )2r   r-   rA   r'   r   r
   collectionsr   r   ro   ImportError	NameErrorAttributeErrorOSErrorr   rZ   r   r:   r?   rF   rI   r`   rd   rf   rg   rl   rv   rw   r   ri   r   r,   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   r   r   __name__r8   r8   r8   r9   <module>   sh   

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