U
    9%eT                     @   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re.  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/Darija-Ai-API/env/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>>   magmasoumithmkltorchnumpycudatoolkittritonN)
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hasattrrS   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rtjd}|dk	rtj|rtj	|S dS t
 }	|dD ]&}
tj	|
}
tj|
r|	|
 q|	sd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    zwmic 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rt| }|d k	rzd|| S t| }|d k	rd|| 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>>   rS   rT   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   rS   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xnnpackenabled)rS   r5   r5   r6   r     s    c                  C   sD  t } t| \}}trtj}ttjj}ttj	 }tjj}t
tjdrTtjjd krbd } }}	qd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   rS   __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rtj s|r|D ]}	d |	< q| jd krd 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   rS   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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 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   rS   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   rS   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
