U
    •Ê¹j•T  ã                   @   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k
rl   dZ	Y nX eddddd	d
ddddddddddddddddddddgƒ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d5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Zd?d@„ ZdAdB„ Z dCdD„ Z!dEdF„ Z"dGdH„ Z#dIdJ„ Z$dKdL„ Z%dMdN„ Z&dOdP„ Z'dQd„ Z(dRdS„ Z)dT *¡ Z+dUdV„ Z,dWdX„ Z-dYdZ„ Z.e/d[k�r²e.ƒ  dS )\é    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_infoc           	      C   sz   t | ƒtkrdnd}tj| tjtj|d�}| ¡ \}}|j}tƒ dkrLd}nt 	¡ }| 
|¡}| 
|¡}|| ¡ | ¡ fS )z%Returns (return-code, stdout, stderr)TF)ÚstdoutÚstderrÚshellÚwin32Úoem)ÚtypeÚstrÚ
subprocessÚPopenÚPIPEÚcommunicateÚ
returncodeÚget_platformÚlocaleÚgetpreferredencodingÚdecodeÚstrip)	Úcommandr   ÚpÚ
raw_outputZraw_errÚrcÚencÚoutputÚerr© r5   úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/utils/collect_env.pyÚrun2   s    
 ÿ


r7   c                 C   s   | |ƒ\}}}|dkrdS |S )zIRuns command using run_lambda; reads and returns entire output if rc is 0r   Nr5   ©Ú
run_lambdar.   r1   ÚoutÚ_r5   r5   r6   Úrun_and_read_allB   s    r<   c                 C   s<   | |ƒ\}}}|dkrdS t  ||¡}|dkr2dS | d¡S )zIRuns command using run_lambda, returns the first regex match if it existsr   Né   )ÚreÚsearchÚgroup)r9   r.   Úregexr1   r:   r;   Úmatchr5   r5   r6   Úrun_and_parse_first_matchJ   s    rC   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Ú
)Úsplitr8   r5   r5   r6   Úrun_and_return_first_lineT   s    rF   c                 C   sB   t j dd¡}t| d |¡ƒ}|d kr*|S d dd„ | ¡ D ƒ¡S )NZ	CONDA_EXEÚcondaz{} listrD   c                 3   s2   | ]*‰ ˆ   d ¡st‡ fdd„dD ƒƒrˆ V  qdS )ú#c                 3   s   | ]}|ˆ kV  qd S ©Nr5   ©Ú.0Úname©Úliner5   r6   Ú	<genexpr>f   s   ÿz/get_conda_packages.<locals>.<genexpr>.<genexpr>>   ÚtorchÚmagmaÚtritonÚcudatoolkitÚsoumithÚmklÚnumpyN)Ú
startswithÚany©rK   r5   rM   r6   rO   b   s   
þýz%get_conda_packages.<locals>.<genexpr>)r
   ÚenvironÚgetr<   ÚformatÚjoinÚ
splitlines)r9   rG   r:   r5   r5   r6   Úget_conda_packages\   s    
þr_   c                 C   s   t | ddƒS )Nzgcc --versionzgcc (.*)©rC   ©r9   r5   r5   r6   Úget_gcc_versiont   s    rb   c                 C   s   t | ddƒS )Nzclang --versionzclang version (.*)r`   ra   r5   r5   r6   Úget_clang_versionw   s    rc   c                 C   s   t | ddƒS )Nzcmake --versionz
cmake (.*)r`   ra   r5   r5   r6   Úget_cmake_version{   s    rd   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)   rC   Úget_nvidia_smi)r9   ÚcmdÚsmir5   r5   r6   Úget_nvidia_driver_version   s    
ÿri   c                 C   s€   t ƒ dks&trDttjdƒrDtjjd k	rDtr@tj ¡ r@tj d ¡S d S t	ƒ }t
 d¡}| |d ƒ\}}}|dkrrd S t
 |d|¡S )Nre   Úhipz \(UUID: .+?\)z -Lr   Ú )r)   ÚTORCH_AVAILABLEÚhasattrrP   Úversionrj   ÚcudaÚis_availableZget_device_namerf   r>   ÚcompileÚsub)r9   rh   Z
uuid_regexr1   r:   r;   r5   r5   r6   Úget_gpu_infoˆ   s    &
rs   c                 C   s   t | ddƒS )Nznvcc --versionzrelease .+ V(.*)r`   ra   r5   r5   r6   Úget_running_cuda_version–   s    rt   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r²tj d¡}|dk	r®tj |¡r®tj 	|¡S dS t
ƒ }	| d¡D ]&}
tj 	|
¡}
tj |
¡rÂ|	 |
¡ qÂ|	sòdS 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*.dllre   z ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revr   r=   ZCUDNN_LIBRARYNrD   z!Probably one of the following:
{})r)   r
   rZ   r[   Úpathr]   r\   ÚlenÚisfileÚrealpathÚsetrE   ÚaddÚsorted)r9   Úsystem_rootZ	cuda_pathZ	where_cmdZ	cudnn_cmdr1   r:   r;   ÚlZ	files_setÚfnÚfilesÚresultr5   r5   r6   Ú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    ru   rv   ZPROGRAMFILESzC:\Program FileszNVIDIA CorporationZNVSMIrw   z"{}")r)   r
   rZ   r[   ry   r]   Úexistsr\   )rh   r€   Zprogram_files_rootZlegacy_pathÚnew_pathZsmisZcandidate_smir5   r5   r6   rf   ¿   s    

rf   c                 C   sp   d\}}}t ƒ dkr$| dƒ\}}}n2t ƒ dkr>| dƒ\}}}nt ƒ dkrV| dƒ\}}}d}|d	krh|}n|}|S )
N)r   rk   rk   ÚlinuxZlscpur    zšwmic cpu get Name,Manufacturer,Family,Architecture,ProcessorType,DeviceID,        CurrentClockSpeed,MaxClockSpeed,L2CacheSize,L2CacheSpeed,Revision /VALUEre   z"sysctl -n machdep.cpu.brand_stringÚNoner   )r)   )r9   r1   r:   r4   r   r5   r5   r6   Úget_cpu_info  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 )Nrˆ   r    Úcygwinre   )ÚsysÚplatformrW   r5   r5   r5   r6   r)   +  s    r)   c                 C   s   t | ddƒS )Nzsw_vers -productVersionz(.*)r`   ra   r5   r5   r6   Úget_mac_version8  s    rŽ   c                 C   sB   t j dd¡}t j |ddd¡}t j |dd¡}t| d ||¡ƒS )Nru   rv   rw   ZWbemZwmicZfindstrz!{} os get Caption | {} /v Caption)r
   rZ   r[   ry   r]   r<   r\   )r9   r€   Zwmic_cmdZfindstr_cmdr5   r5   r6   Úget_windows_version<  s    r�   c                 C   s   t | ddƒS )Nzlsb_release -azDescription:\t(.*)r`   ra   r5   r5   r6   Úget_lsb_versionC  s    r�   c                 C   s   t | ddƒS )Nzcat /etc/*-releasezPRETTY_NAME="(.*)"r`   ra   r5   r5   r6   Úcheck_release_fileG  s    ÿr‘   c                 C   sª   ddl m} tƒ }|dks"|dkr*t| ƒS |dkrTt| ƒ}|d krFd S d ||ƒ ¡S |dkr¦t| ƒ}|d k	rzd ||ƒ ¡S t| ƒ}|d k	r˜d ||ƒ ¡S d ||ƒ ¡S |S )	Nr   )Úmachiner    r‹   re   zmacOS {} ({})rˆ   z{} ({}))r�   r’   r)   r�   rŽ   r\   r�   r‘   )r9   r’   r�   rn   Údescr5   r5   r6   Úget_osL  s$    r”   c                  C   s   dd l } |   ¡ S ©Nr   ©r�   r–   r5   r5   r6   Úget_python_platformj  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–   r5   r5   r6   Úget_libc_versiono  s    
r›   c                    s8   ‡ fdd„}t jd dkrdnd}|t jdgƒ}||fS )z_Returns `pip list` output. Note: will also find conda-installed pytorch
    and numpy packages.c                    s*   t ˆ | ddg ƒ}d dd„ | ¡ D ƒ¡S )NÚlistz--format=freezerD   c                 3   s(   | ] ‰ t ‡ fd d„dD ƒƒrˆ V  qdS )c                 3   s   | ]}|ˆ kV  qd S rI   r5   rJ   rM   r5   r6   rO   €  s   ÿzCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>>   rP   rR   ÚmypyÚflake8rV   N)rX   rY   r5   rM   r6   rO   }  s
   þþz9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)r<   r]   r^   )Úpipr:   ra   r5   r6   Úrun_with_pip{  s    
þz&get_pip_packages.<locals>.run_with_pipr   Ú3Zpip3rŸ   z-mpip)rŒ   rn   Ú
executable)r9   r    r   r:   r5   ra   r6   Úget_pip_packagesv  s    r£   c                  C   s   t j dd¡} | S )NZPYTORCH_CUDA_ALLOC_CONFrk   )r
   rZ   r[   )Z	ca_configr5   r5   r6   Úget_cachingallocator_config’  s    r¤   c                  C   s2   t r*tj ¡ r*tj ¡  tj dd¡} | S dS d S )NZCUDA_MODULE_LOADINGrk   r˜   )rl   rP   ro   rp   Úinitr
   rZ   r[   )Úconfigr5   r5   r6   Úget_cuda_module_loading_config—  s
    
r§   c                  C   s"   t rdd l} t| jjjƒS dS d S )Nr   r˜   )rl   Ztorch.backends.xnnpackr#   ÚbackendsZxnnpackZenabled)rP   r5   r5   r6   r      s    c                  C   sD  t } t| ƒ\}}trœtj}ttjjƒ}ttj 	¡ ƒ}tjj}t
tjdƒrTtjjd krbd } }}	q¸dd„ }
tj ¡  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!ƒ t"ƒ t#| ƒd�S )Nrj   r˜   c                    s"   ‡ fdd„| D ƒ}|r|d S dS )Nc                    s$   g | ]}ˆ |kr|  d d¡d ‘qS )Nr=   éÿÿÿÿ)Úrsplit)rK   Ús©Úprefixr5   r6   Ú
<listcomp>´  s      z;get_env_info.<locals>.get_version_or_na.<locals>.<listcomp>r   r˜   r5   )Úcfgr­   Z_lstr5   r¬   r6   Úget_version_or_na³  s    z'get_env_info.<locals>.get_version_or_narD   zHIP RuntimeZMIOpenú 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	   r   r   r   )$r7   r£   rl   rP   Ú__version__r#   rn   Údebugro   rp   rm   rj   Z_CZ_show_configrE   rŒ   Úreplacer   r\   ÚmaxsizeÚ
bit_lengthr—   rt   r§   rs   ri   r…   r_   r”   r›   rb   rc   rd   r¤   r   rŠ   )r9   r   Zpip_list_outputÚversion_strZdebug_mode_strZcuda_available_strZcuda_version_strr   r   r   r°   r¯   Úsys_versionr5   r5   r6   Úget_env_info§  sZ    


ç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< dddg}|dg }t‡ fdd„|D ƒƒ}tr¦tj ¡ s¦|r¦|D ]}	dˆ |	< q†| jd kr¦dˆ d< |ˆ ƒ‰ |ˆ ƒ‰ |ˆ d ƒˆ d< |ˆ d ƒˆ d< ˆ d � rú|ˆ d d | j	¡ƒˆ d< ˆ d �r|ˆ d dƒˆ d< | j
ˆ d< tjf ˆ ŽS )"NúCould not collectc                 S   s(   |   ¡ D ]}| | d k	rq|| |< q| S rI   ©Úkeys)ÚdctÚreplacementÚkeyr5   r5   r6   Úreplace_nones   s
    
z!pretty_str.<locals>.replace_nonesÚYesÚNoc                 S   s<   |   ¡ D ].}| | dkr"|| |< q| | dkr|| |< q| S )NTFr»   )r½   ÚtrueÚfalser¿   r5   r5   r6   Úreplace_bools  s    

z!pretty_str.<locals>.replace_boolsú	[prepend]c                    s&   |   d¡}‡ fdd„|D ƒ}d |¡S )NrD   c                    s   g | ]}ˆ | ‘qS r5   r5   )rK   rN   ©Útagr5   r6   r®     s     z/pretty_str.<locals>.prepend.<locals>.<listcomp>)rE   r]   )ÚtextrÈ   ÚlinesZupdated_linesr5   rÇ   r6   Úprepend  s    
zpretty_str.<locals>.prependúNo relevant packagesc                 S   s   | d k	rt | ƒdkr|S | S r•   )rz   )rÉ   r¾   r5   r5   r6   Úreplace_if_empty  s    z$pretty_str.<locals>.replace_if_emptyc                 S   s(   | d k	r$t |  d¡ƒdkr$d | ¡S | S )NrD   r=   z
{}
)rz   rE   r\   )Ústringr5   r5   r6   Úmaybe_start_on_next_line  s    
z,pretty_str.<locals>.maybe_start_on_next_liner   r   r   r   c                 3   s   | ]}ˆ | d kV  qd S rI   r5   )rK   Úfield©Zmutable_dictr5   r6   rO   ,  s    zpretty_str.<locals>.<genexpr>zNo CUDAr‰   r   r   r   z[{}] z[conda] r   )rº   )rÁ   rÂ   )rÆ   )rÌ   )Ú_asdictr   Úallrl   rP   ro   rp   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Ð   r5   rÑ   r6   Ú
pretty_strÿ  sF    



ÿý
ÿ



ÿ
ÿ
rÕ   c                   C   s
   t tƒ ƒS rI   )rÕ   r¹   r5   r5   r5   r6   Úget_pretty_env_infoJ  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r´t
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 r5   )r
   ry   r]   )rK   Údump©Zminidump_dirr5   r6   r®   V  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Ö   rl   rm   rP   r×   rØ   ZDEFAULT_MINIDUMP_DIRrŒ   r�   r
   ry   r†   ÚlistdirÚmaxÚgetctimeÚdatetimeÚfromtimestampÚstrftimer\   r   )r3   ÚdumpsZlatestÚctimeZcreation_timeÚmsgr5   rÚ   r6   ÚmainN  s    

ÿræ   Ú__main__)0rà   r*   r>   r$   rŒ   r
   Úcollectionsr   rP   rl   ÚImportErrorÚ	NameErrorÚAttributeErrorÚOSErrorr   r7   r<   rC   rF   r_   rb   rc   rd   ri   rs   rt   r…   rf   rŠ   r)   rŽ   r�   r�   r‘   r”   r—   r›   r£   r¤   r§   r   r¹   r-   rÔ   rÕ   rÖ   ræ   Ú__name__r5   r5   r5   r6   Ú<module>   sŽ   
ç
	%[	7!K
