o
    hT                     @   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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"d/d0 Z#d1d2 Z$d3d4 Z%d5d6 Z&d7d8 Z'd9d: Z(d;d< Z)d=* Z+d>d? Z,d@dA Z-dBdC Z.e/dDkre.  dS dS )E    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u rdnd}tj| tjtj|d}| \}}|j}t dkr&d}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_outputraw_errrcencoutputerr r6   M/var/www/html/ai/venv/lib/python3.10/site-packages/torch/utils/collect_env.pyrun2   s   



r8   c                 C   s   | |\}}}|dkrdS |S )zIRuns command using run_lambda; reads and returns entire output if rc is 0r   Nr6   
run_lambdar.   r2   out_r6   r6   r7   run_and_read_allB   s   r=   c                 C   s<   | |\}}}|dkrdS t ||}|du rdS |dS )zIRuns command using run_lambda, returns the first regex match if it existsr   N   )researchgroup)r:   r.   regexr2   r;   r<   matchr6   r6   r7   run_and_parse_first_matchJ   s   
rD   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
)splitr9   r6   r6   r7   run_and_return_first_lineT   s   rG   c                 C   sB   t jdd}t| d|}|d u r|S ddd | D S )N	CONDA_EXEcondaz{} listrE   c                 3   s4    | ]   d st fdddD r V  qdS )#c                 3       | ]}| v V  qd S Nr6   .0nameliner6   r7   	<genexpr>f   
    
z/get_conda_packages.<locals>.<genexpr>.<genexpr>>   mklmagmanumpytorchtritonsoumithcudatoolkitN)
startswithanyrN   r6   rP   r7   rR   b   s    
z%get_conda_packages.<locals>.<genexpr>)r
   environgetr=   formatjoin
splitlines)r:   rI   r;   r6   r6   r7   get_conda_packages\   s   
rc   c                 C      t | ddS )Nzgcc --versionzgcc (.*)rD   r:   r6   r6   r7   get_gcc_versiont      rg   c                 C   rd   )Nzclang --versionzclang version (.*)re   rf   r6   r6   r7   get_clang_versionw   rh   ri   c                 C   rd   )Nzcmake --versionz
cmake (.*)re   rf   r6   r6   r7   get_cmake_version{   rh   rj   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)   rD   get_nvidia_smi)r:   cmdsmir6   r6   r7   get_nvidia_driver_version   s   
ro   c                 C   s   t  dkstr"ttjdr"tjjd ur"tr tj r tjd S d S t	 }t
d}| |d \}}}|dkr9d S t
|d|S )Nrk   hipz \(UUID: .+?\)z -Lr    )r)   TORCH_AVAILABLEhasattrrW   versionrp   cudais_availableget_device_namerl   r?   compilesub)r:   rn   
uuid_regexr2   r;   r<   r6   r6   r7   get_gpu_info   s   &
r{   c                 C   rd   )Nznvcc --versionzrelease .+ V(.*)re   rf   r6   r6   r7   get_running_cuda_version   rh   r|   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 )zQThis will return a list of libcudnn.so; it's hard to tell which one is being usedr    
SYSTEMROOT
C:\Windows	CUDA_PATHz%CUDA_PATH%System32wherez{} /R "{}\bin" cudnn*.dllrk   z ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revr   r>   CUDNN_LIBRARYNrE   z!Probably one of the following:
{})r)   r
   r^   r_   pathra   r`   lenisfilerealpathsetrF   addsorted)r:   system_root	cuda_path	where_cmd	cudnn_cmdr2   r;   r<   l	files_setfnfilesresultr6   r6   r7   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    r}   r~   PROGRAMFILESzC:\Program FileszNVIDIA CorporationNVSMIr   z"{}")r)   r
   r^   r_   r   ra   existsr`   )rn   r   program_files_rootlegacy_pathnew_pathsmiscandidate_smir6   r6   r7   rl      s   

rl   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   rq   rq   linuxlscpur    zwmic cpu get Name,Manufacturer,Family,Architecture,ProcessorType,DeviceID,        CurrentClockSpeed,MaxClockSpeed,L2CacheSize,L2CacheSpeed,Revision /VALUErk   z"sysctl -n machdep.cpu.brand_stringNoner   )r)   )r:   r2   r;   r5   r   r6   r6   r7   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    cygwinrk   )sysplatformr[   r6   r6   r6   r7   r)   +  s   r)   c                 C   rd   )Nzsw_vers -productVersionz(.*)re   rf   r6   r6   r7   get_mac_version8  rh   r   c                 C   sB   t jdd}t j|ddd}t j|dd}t| d||S )Nr}   r~   r   Wbemwmicfindstrz!{} os get Caption | {} /v Caption)r
   r^   r_   r   ra   r=   r`   )r:   r   wmic_cmdfindstr_cmdr6   r6   r7   get_windows_version<  s   r   c                 C   rd   )Nzlsb_release -azDescription:\t(.*)re   rf   r6   r6   r7   get_lsb_versionC  rh   r   c                 C   rd   )Nzcat /etc/*-releasezPRETTY_NAME="(.*)"re   rf   r6   r6   r7   check_release_fileG  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   rk   zmacOS {} ({})r   z{} ({}))r   r   r)   r   r   r`   r   r   )r:   r   r   rt   descr6   r6   r7   get_osL  s$   r   c                  C   s   dd l } |   S Nr   r   r   r6   r6   r7   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)   ra   libc_verr   r6   r6   r7   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=freezerE   c                 3   s*    | ] t  fd ddD r V  qdS )c                 3   rK   rL   r6   rM   rP   r6   r7   rR     rS   zCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>>   mypyrV   rW   flake8rX   N)r\   r]   r6   rP   r7   rR   }  s    
z9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)r=   ra   rb   )pipr;   rf   r6   r7   run_with_pip{  s   
z&get_pip_packages.<locals>.run_with_pipr   3pip3r   z-mpip)r   rt   
executable)r:   r   r   r;   r6   rf   r7   get_pip_packagesv  s   r   c                  C   s   t jdd} | S )NPYTORCH_CUDA_ALLOC_CONFrq   )r
   r^   r_   )	ca_configr6   r6   r7   get_cachingallocator_config  s   r   c                  C   s.   t rtj rtj  tjdd} | S dS )NCUDA_MODULE_LOADINGrq   r   )rr   rW   ru   rv   initr
   r^   r_   )configr6   r6   r7   get_cuda_module_loading_config  s
   
r   c                  C   s   t rdd l} t| jjjS dS )Nr   r   )rr   torch.backends.xnnpackr#   backendsxnnpackenabled)rW   r6   r6   r7   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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t| dt| dt dt| dt| d t | d!t! d"t" d#t#| S )%Nrp   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prefixr6   r7   
<listcomp>  s   $ z;get_env_info.<locals>.get_version_or_na.<locals>.<listcomp>r   r   r6   )cfgr   _lstr6   r   r7   get_version_or_na  s   z'get_env_info.<locals>.get_version_or_narE   zHIP Runtime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   r6   )$r8   r   rr   rW   __version__r#   rt   debugru   rv   rs   rp   _C_show_configrF   r   replacer   r`   maxsize
bit_lengthr   r|   r   r{   ro   r   rc   r   r   rg   ri   rj   r   r   r   )r:   r   pip_list_outputversion_strdebug_mode_strcuda_available_strcuda_version_strr   r   r   r   r   sys_versionr6   r6   r7   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keyr6   r6   r7   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   r6   r6   r7   replace_bools  s   
z!pretty_str.<locals>.replace_bools	[prepend]c                    s&   |  d} fdd|D }d|S )NrE   c                    s   g | ]} | qS r6   r6   )rN   rQ   tagr6   r7   r     s    z/pretty_str.<locals>.prepend.<locals>.<listcomp>)rF   ra   )textr   linesupdated_linesr6   r   r7   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   r6   r6   r7   replace_if_empty  s   z$pretty_str.<locals>.replace_if_emptyc                 S   s(   | d urt | ddkrd| S | S )NrE   r>   z
{}
)r   rF   r`   )stringr6   r6   r7   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   r6   )rN   fieldmutable_dictr6   r7   rR   ,  s    
zpretty_str.<locals>.<genexpr>zNo CUDAr   r   r   r   z[{}] z[conda] r   )r   )r   r   )r   )r   r6   )_asdictr   allrr   rW   ru   rv   r   r`   r   r   env_info_fmt)
envinfor   r   r   r   r   dynamic_cuda_fieldsall_cuda_fieldsall_dynamic_cuda_fields_missingr   r6   r   r7   
pretty_str  s@   








r  c                   C   s
   t t S rL   )r  r   r6   r6   r6   r7   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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 r6   )r
   r   ra   )rN   dumpminidump_dirr6   r7   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  rr   rs   rW   r  r  DEFAULT_MINIDUMP_DIRr   r   r
   r   r   listdirmaxgetctimedatetimefromtimestampstrftimer`   r   )r4   dumpslatestctimecreation_timemsgr6   r	  r7   mainN  s    

r  __main__)0r  r*   r?   r$   r   r
   collectionsr   rW   rr   ImportError	NameErrorAttributeErrorOSErrorr   r8   r=   rD   rG   rc   rg   ri   rj   ro   r{   r|   r   rl   r   r)   r   r   r   r   r   r   r   r   r   r   r   r   r-   r   r  r  r  __name__r6   r6   r6   r7   <module>   sd   
	%[	7!K
