o
    iT                     @   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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 r4   f/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torch/utils/collect_env.pyrun2   s   



r6   c                 C   s   | |\}}}|dkrdS |S )zIRuns command using run_lambda; reads and returns entire output if rc is 0r   Nr4   
run_lambdar-   r0   out_r4   r4   r5   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)r8   r-   regexr0   r9   r:   matchr4   r4   r5   run_and_parse_first_matchJ   s   
rB   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
)splitr7   r4   r4   r5   run_and_return_first_lineT   s   rE   c                 C   sB   t jdd}t| d|}|d u r|S ddd | D S )NZ	CONDA_EXEcondaz{} listrC   c                 3   s4    | ]   d st fdddD r V  qdS )#c                 3       | ]}| v V  qd S Nr4   .0nameliner4   r5   	<genexpr>f   
    
z/get_conda_packages.<locals>.<genexpr>.<genexpr>>   ZmagmaZsoumithZcudatoolkittorchZmkltritonnumpyN)
startswithanyrK   r4   rM   r5   rO   b   s    
z%get_conda_packages.<locals>.<genexpr>)r
   environgetr;   formatjoin
splitlines)r8   rF   r9   r4   r4   r5   get_conda_packages\   s   
r\   c                 C      t | ddS )Nzgcc --versionzgcc (.*)rB   r8   r4   r4   r5   get_gcc_versiont      r`   c                 C   r]   )Nzclang --versionzclang version (.*)r^   r_   r4   r4   r5   get_clang_versionw   ra   rb   c                 C   r]   )Nzcmake --versionz
cmake (.*)r^   r_   r4   r4   r5   get_cmake_version{   ra   rc   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(   rB   get_nvidia_smi)r8   cmdsmir4   r4   r5   get_nvidia_driver_version   s   
rh   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 )Nrd   hipz \(UUID: .+?\)z -Lr    )r(   TORCH_AVAILABLEhasattrrQ   versionri   cudais_availableZget_device_namere   r=   compilesub)r8   rg   Z
uuid_regexr0   r9   r:   r4   r4   r5   get_gpu_info   s   &
rr   c                 C   r]   )Nznvcc --versionzrelease .+ V(.*)r^   r_   r4   r4   r5   get_running_cuda_version   ra   rs   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:\WindowsZ	CUDA_PATHz%CUDA_PATH%System32wherez{} /R "{}\bin" cudnn*.dllrd   z ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revr   r<   ZCUDNN_LIBRARYNrC   z!Probably one of the following:
{})r(   r
   rW   rX   pathrZ   rY   lenisfilerealpathsetrD   addsorted)r8   system_rootZ	cuda_pathZ	where_cmdZ	cudnn_cmdr0   r9   r:   lZ	files_setfnfilesresultr4   r4   r5   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    rt   ru   ZPROGRAMFILESzC:\Program FileszNVIDIA CorporationZNVSMIrv   z"{}")r(   r
   rW   rX   rx   rZ   existsrY   )rg   r   Zprogram_files_rootZlegacy_pathnew_pathZsmisZcandidate_smir4   r4   r5   re      s   

re   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   rj   rj   linuxZlscpur    zwmic cpu get Name,Manufacturer,Family,Architecture,ProcessorType,DeviceID,        CurrentClockSpeed,MaxClockSpeed,L2CacheSize,L2CacheSpeed,Revision /VALUErd   z"sysctl -n machdep.cpu.brand_stringNoner   )r(   )r8   r0   r9   r3   r   r4   r4   r5   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    cygwinrd   )sysplatformrT   r4   r4   r4   r5   r(   +  s   r(   c                 C   r]   )Nzsw_vers -productVersionz(.*)r^   r_   r4   r4   r5   get_mac_version8  ra   r   c                 C   sB   t jdd}t j|ddd}t j|dd}t| d||S )Nrt   ru   rv   ZWbemZwmicZfindstrz!{} os get Caption | {} /v Caption)r
   rW   rX   rx   rZ   r;   rY   )r8   r   Zwmic_cmdZfindstr_cmdr4   r4   r5   get_windows_version<  s   r   c                 C   r]   )Nzlsb_release -azDescription:\t(.*)r^   r_   r4   r4   r5   get_lsb_versionC  ra   r   c                 C   r]   )Nzcat /etc/*-releasezPRETTY_NAME="(.*)"r^   r_   r4   r4   r5   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   rd   zmacOS {} ({})r   z{} ({}))r   r   r(   r   r   rY   r   r   )r8   r   r   rm   Zdescr4   r4   r5   get_osL  s$   r   c                  C   s   dd l } |   S Nr   r   r   r4   r4   r5   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(   rZ   libc_verr   r4   r4   r5   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=freezerC   c                 3   s*    | ] t  fd ddD r V  qdS )c                 3   rH   rI   r4   rJ   rM   r4   r5   rO     rP   zCget_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>.<genexpr>>   rR   rQ   ZmypyrS   Zflake8N)rU   rV   r4   rM   r5   rO   }  s    
z9get_pip_packages.<locals>.run_with_pip.<locals>.<genexpr>)r;   rZ   r[   )pipr9   r_   r4   r5   run_with_pip{  s   
z&get_pip_packages.<locals>.run_with_pipr   3Zpip3r   z-mpip)r   rm   
executable)r8   r   r   r9   r4   r_   r5   get_pip_packagesv  s   r   c                  C   s   t jdd} | S )NZPYTORCH_CUDA_ALLOC_CONFrj   )r
   rW   rX   )Z	ca_configr4   r4   r5   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_LOADINGrj   r   )rk   rQ   rn   ro   initr
   rW   rX   )configr4   r4   r5   get_cuda_module_loading_config  s
   
r   c                  C   s   t rdd l} t| jjjS dS )Nr   r   )rk   Ztorch.backends.xnnpackr"   backendsZxnnpackenabled)rQ   r4   r4   r5   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 )%Nri   r   c                    s"    fdd| D }|r|d S dS )Nc                    s$   g | ]} |v r| d dd qS )Nr<   )rsplit)rK   sprefixr4   r5   
<listcomp>  s   $ z;get_env_info.<locals>.get_version_or_na.<locals>.<listcomp>r   r   r4   )cfgr   Z_lstr4   r   r5   get_version_or_na  s   z'get_env_info.<locals>.get_version_or_narC   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   r4   )$r6   r   rk   rQ   __version__r"   rm   debugrn   ro   rl   ri   Z_CZ_show_configrD   r   replacer   rY   maxsize
bit_lengthr   rs   r   rr   rh   r   r\   r   r   r`   rb   rc   r   r   r   )r8   r   Zpip_list_outputversion_strZdebug_mode_strZcuda_available_strZcuda_version_strr   r   r   r   r   sys_versionr4   r4   r5   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 rI   keys)dctreplacementkeyr4   r4   r5   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   r4   r4   r5   replace_bools  s   
z!pretty_str.<locals>.replace_bools	[prepend]c                    s&   |  d} fdd|D }d|S )NrC   c                    s   g | ]} | qS r4   r4   )rK   rN   tagr4   r5   r     s    z/pretty_str.<locals>.prepend.<locals>.<listcomp>)rD   rZ   )textr   linesZupdated_linesr4   r   r5   prepend  s   

zpretty_str.<locals>.prependNo relevant packagesc                 S   s   | d urt | dkr|S | S r   )ry   )r   r   r4   r4   r5   replace_if_empty  s   z$pretty_str.<locals>.replace_if_emptyc                 S   s(   | d urt | ddkrd| S | S )NrC   r<   z
{}
)ry   rD   rY   )stringr4   r4   r5   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 rI   r4   )rK   fieldZmutable_dictr4   r5   rO   ,  s    
zpretty_str.<locals>.<genexpr>zNo CUDAr   r   r   r   z[{}] z[conda] r   )r   )r   r   )r   )r   r4   )_asdictr   allrk   rQ   rn   ro   r   rY   r   r   env_info_fmt)
Zenvinfor   r   r   r   r   Zdynamic_cuda_fieldsZall_cuda_fieldsZall_dynamic_cuda_fields_missingr   r4   r   r5   
pretty_str  s@   








r   c                   C   s
   t t S rI   )r   r   r4   r4   r4   r5   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 r4   )r
   rx   rZ   )rK   dumpZminidump_dirr4   r5   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   rk   rl   rQ   r   r   ZDEFAULT_MINIDUMP_DIRr   r   r
   rx   r   listdirmaxgetctimedatetimefromtimestampstrftimerY   r   )r2   dumpsZlatestctimeZcreation_timemsgr4   r   r5   mainN  s    

r   __main__)0r   r)   r=   r#   r   r
   collectionsr   rQ   rk   ImportError	NameErrorAttributeErrorOSErrorr   r6   r;   rB   rE   r\   r`   rb   rc   rh   rr   rs   r   re   r   r(   r   r   r   r   r   r   r   r   r   r   r   r   r,   r   r   r   r   __name__r4   r4   r4   r5   <module>   sd   
	%[	7!K
