a
    .=icA                     @   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m	Z	 zd dl
Z
dZW n eeeefyv   dZY n0 e	dg 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$d% Zd&d' Z d(d) Z!d*d+ Z"d,d- Z#d.d/ Z$d0d1 Z%d2d3 Z&d4d5 Z'd6d7 Z(d8d9 Z)d:* Z+d;d< Z,d=d> Z-d?d@ Z.e/dAkr~e.  dS )B    )print_functionN)
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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_availablec                 C   sf   t j| t jt jdd}| \}}|j}t dkr8d}nt }||}||}||	 |	 fS )z%Returns (return-code, stdout, stderr)T)stdoutstderrshellwin32Zoem)

subprocessPopenPIPEcommunicate
returncodeget_platformlocalegetpreferredencodingdecodestrip)commandp
raw_outputZraw_errrcencoutputerr r1   h/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/torch/utils/collect_env.pyrun1   s    



r3   c                 C   s   | |\}}}|dkrdS |S )zIRuns command using run_lambda; reads and returns entire output if rc is 0r   Nr1   
run_lambdar*   r-   out_r1   r1   r2   run_and_read_all@   s    r8   c                 C   s<   | |\}}}|dkrdS t ||}|du r2dS |dS )zIRuns command using run_lambda, returns the first regex match if it existsr   N   )researchgroup)r5   r*   regexr-   r6   r7   matchr1   r1   r2   run_and_parse_first_matchH   s    r?   c                 C   s(   | |\}}}|dkrdS | dd S )zKRuns command using run_lambda and returns first line if output is not emptyr   N
)splitr4   r1   r1   r2   run_and_return_first_lineR   s    rB   c                 C   sB   t jdd}t| | d}|d u r*|S ddd | D S )NZ	CONDA_EXEcondaz listr@   c                 3   s2   | ]*   d st fdddD r V  qdS )#c                 3   s   | ]}| v V  qd S Nr1   .0nameliner1   r2   	<genexpr>d   s   z/get_conda_packages.<locals>.<genexpr>.<genexpr>>   ZmklnumpytorchZcudatoolkitZsoumithZmagmaN)
startswithanyrG   r1   rI   r2   rK   `   s   
z%get_conda_packages.<locals>.<genexpr>)r   environgetr8   join
splitlines)r5   rC   r6   r1   r1   r2   get_conda_packagesZ   s    
rU   c                 C   s   t | ddS )Nzgcc --versionzgcc (.*)r?   r5   r1   r1   r2   get_gcc_versionr   s    rX   c                 C   s   t | ddS )Nzclang --versionzclang version (.*)rV   rW   r1   r1   r2   get_clang_versionu   s    rY   c                 C   s   t | ddS )Nzcmake --versionz
cmake (.*)rV   rW   r1   r1   r2   get_cmake_versiony   s    rZ   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%   r?   get_nvidia_smi)r5   cmdsmir1   r1   r2   get_nvidia_driver_version}   s    
r_   c                 C   s   t  dks&trDttjdrDtjjd urDtr@tj r@tjd S d S t	 }t
d}| |d \}}}|dkrrd S t
|d|S )Nr[   hipz \(UUID: .+?\)z -Lr    )r%   TORCH_AVAILABLEhasattrrM   versionr`   cudais_availableZget_device_namer\   r:   compilesub)r5   r^   Z
uuid_regexr-   r6   r7   r1   r1   r2   get_gpu_info   s    &
ri   c                 C   s   t | ddS )Nznvcc --versionzrelease .+ V(.*)rV   rW   r1   r1   r2   get_running_cuda_version   s    rj   c                 C   s(  t  dkrDtjdd}tjdd}tj|dd}d||}nt  d	krTd
}nd}| |\}}}t|dks|dkr|dkrtjd}|durtj|rtj	|S dS t
 }	|dD ]&}
tj	|
}
tj|
r|	|
 q|	sdS tt|	}t|dkr|d S d|}d|S )zQThis will return a list of libcudnn.so; it's hard to tell which one is being usedr   
SYSTEMROOT
C:\WindowsZ	CUDA_PATHz%CUDA_PATH%System32wherez{} /R "{}\bin" cudnn*.dllr[   z ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revr   r9   ZCUDNN_LIBRARYNr@   z!Probably one of the following:
{})r%   r   rQ   rR   pathrS   formatlenisfilerealpathsetrA   addlistsorted)r5   system_rootZ	cuda_pathZ	where_cmdZ	cudnn_cmdr-   r6   r7   lZ	files_setfnfilesresultr1   r1   r2   get_cudnn_version   s4    


r}   c                  C   s|   d} t  dkrxtjdd}tjdd}tj|dd| }tj|d	| }||g}|D ]}tj|rXd
|}  qxqX| S )Nz
nvidia-smir   rk   rl   ZPROGRAMFILESzC:\Program FileszNVIDIA CorporationZNVSMIrm   z"{}")r%   r   rQ   rR   ro   rS   existsrp   )r^   rx   Zprogram_files_rootZlegacy_pathnew_pathZsmisZcandidate_smir1   r1   r2   r\      s    

r\   c                   C   sJ   t jdrdS t jdr dS t jdr0dS t jdr@dS t jS d S )Nlinuxr   cygwinr[   )sysplatformrN   r1   r1   r1   r2   r%      s    r%   c                 C   s   t | ddS )Nzsw_vers -productVersionz(.*)rV   rW   r1   r1   r2   get_mac_version   s    r   c                 C   sB   t jdd}t j|ddd}t j|dd}t| d||S )Nrk   rl   rm   ZWbemZwmicZfindstrz!{} os get Caption | {} /v Caption)r   rQ   rR   ro   rS   r8   rp   )r5   rx   Zwmic_cmdZfindstr_cmdr1   r1   r2   get_windows_version   s    r   c                 C   s   t | ddS )Nzlsb_release -azDescription:\t(.*)rV   rW   r1   r1   r2   get_lsb_version   s    r   c                 C   s   t | ddS )Nzcat /etc/*-releasezPRETTY_NAME="(.*)"rV   rW   r1   r1   r2   check_release_file   s    r   c                 C   s   ddl m} t }|dks"|dkr*t| S |dkrTt| }|d u rFd S d|| S |dkrt| }|d urzd|| S t| }|d urd|| S d|| S |S )	Nr   )machiner   r   r[   zmacOS {} ({})r   z{} ({}))r   r   r%   r   r   rp   r   r   )r5   r   r   rd   descr1   r1   r2   get_os   s$    r   c                  C   s   dd l } |   S Nr   r   r   r1   r1   r2   get_python_platform  s    r   c                  C   s$   dd l } t dkrdS d|  S )Nr   r   N/A-)r   r%   rS   libc_verr   r1   r1   r2   get_libc_version  s    
r   c                    s8    fdd}t jd dkrdnd}|t jd }||fS )z_Returns `pip list` output. Note: will also find conda-installed pytorch
    and numpy packages.c                    s(   t  |  d}ddd | D S )Nz list --format=freezer@   c                 3   s(   | ]  t  fd ddD r V  qdS )c                 3   s   | ]}| v V  qd S rE   r1   rF   rI   r1   r2   rK   "  s   zCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>>   rL   ZmypyrM   N)rO   rP   r1   rI   r2   rK     s
   z9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)r8   rS   rT   )pipr6   rW   r1   r2   run_with_pip  s    
z&get_pip_packages.<locals>.run_with_pipr   3Zpip3r   z -mpip)r   rd   
executable)r5   r   r   r6   r1   rW   r2   get_pip_packages  s    r   c                  C   s   t jdd} | S )NZPYTORCH_CUDA_ALLOC_CONFra   )r   rQ   rR   )Z	ca_configr1   r1   r2   get_cachingallocator_config2  s    r   c                  C   s"   t rdd l} t| jjjS dS d S )Nr   r   )rb   Ztorch.backends.xnnpackstrbackendsZxnnpackenabled)rM   r1   r1   r2   r   6  s    r   c                  C   sB  t } t| \}}trtj}ttjj}ttj	 }tjj}t
tjdrTtjjd u rbd } }}	qtj d}
dd |
D d }dd |
D d }	d}tjj}nd } } }}d } }}	tjdd}t||d	|tj d
 t ||t| t| t| t| |||	||t| t| t t| t| t| t  t! dS )Nr`   r   r@   c                 S   s$   g | ]}d |v r| ddd qS )zHIP RuntimeNr9   rsplitrG   sr1   r1   r2   
<listcomp>J      z get_env_info.<locals>.<listcomp>r   c                 S   s$   g | ]}d |v r| ddd qS )ZMIOpenNr9   r   r   r   r1   r1   r2   r   K  r    z{} ({}-bit runtime)r9   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r
   r   r   )"r3   r   rb   rM   __version__r   rd   debugre   rf   rc   r`   Z_CZ_show_configrA   r   replacer   rp   maxsize
bit_lengthr   rj   ri   r_   r}   rU   r   r   rX   rY   rZ   r   r   )r5   r   Zpip_list_outputversion_strZdebug_mode_strZcuda_available_strZcuda_version_strr   r   r   cfgsys_versionr1   r1   r2   get_env_info=  sT    
r   a  
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}
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}

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rtj s|r|D ]}	d |	< q| jd u rd d< |  |  | d  d< | d  d<  d  r| d d| j	 d<  d r| d d d< t
jf i  S ) NCould not collectc                 S   s(   |   D ]}| | d urq|| |< q| S rE   keys)dctreplacementkeyr1   r1   r2   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   r1   r1   r2   replace_bools  s    

z!pretty_str.<locals>.replace_bools	[prepend]c                    s&   |  d} fdd|D }d|S )Nr@   c                    s   g | ]} | qS r1   r1   )rG   rJ   tagr1   r2   r     r   z/pretty_str.<locals>.prepend.<locals>.<listcomp>)rA   rS   )textr   linesZupdated_linesr1   r   r2   prepend  s    
zpretty_str.<locals>.prependNo relevant packagesc                 S   s   | d urt | dkr|S | S r   )rq   )r   r   r1   r1   r2   replace_if_empty  s    z$pretty_str.<locals>.replace_if_emptyc                 S   s(   | d ur$t | ddkr$d| S | S )Nr@   r9   z
{}
)rq   rA   rp   )stringr1   r1   r2   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 rE   r1   )rG   fieldZmutable_dictr1   r2   rK     s   zpretty_str.<locals>.<genexpr>zNo CUDANoner   r   r   z[{}] z[conda] )r   )r   r   )r   )r   )_asdictr   allrb   rM   re   rf   r   rp   r   env_info_fmt)
Zenvinfor   r   r   r   r   Zdynamic_cuda_fieldsZall_cuda_fieldsZall_dynamic_cuda_fields_missingr   r1   r   r2   
pretty_str  s>    









r   c                   C   s
   t t S rE   )r   r   r1   r1   r1   r2   get_pretty_env_info  s    r   c                     s   t d t } t |  trttdrttjdrtjjj tj	dkrt
j r fddt
 D }t|t
jjd}t
j|}tj|d}d	||d
 }t |tjd d S )Nz%Collecting environment information...utils_crash_handlerr   c                    s   g | ]}t j |qS r1   )r   ro   rS   )rG   dumpZminidump_dirr1   r2   r     r   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   rb   rc   rM   r   r   ZDEFAULT_MINIDUMP_DIRr   r   r   ro   r~   listdirmaxgetctimedatetimefromtimestampstrftimerp   r   )r/   dumpsZlatestctimeZcreation_timemsgr1   r   r2   main  s    

r   __main__)0
__future__r   r   r&   r:   r    r   r   collectionsr   rM   rb   ImportError	NameErrorAttributeErrorOSErrorr   r3   r8   r?   rB   rU   rX   rY   rZ   r_   ri   rj   r}   r\   r%   r   r   r   r   r   r   r   r   r   r   r   r)   r   r   r   r   __name__r1   r1   r1   r2   <module>   sX   

	%1J
