U
    hâËdJ  ã                   @   s€   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 dZ
ede
ƒZG dd	„ d	ƒZd
d„ Zddd„Zedkr|eƒ  dS )z:Module for displaying information about Numba's gdb set upé    )Ú
namedtupleN)Údedent)Úconfigz4binary_loc, extension_loc, py_ver, np_ver, supportedÚ	_gdb_infoc                   @   sZ   e Zd ZdZdd„ Zddd„Zedd„ ƒZed	d
„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ ZdS )Ú_GDBTestWrapperzmWraps the gdb binary and has methods for checking what the gdb binary
    has support for (Python and NumPy).c                 C   s,   t j}|d kr"dt j› �}t|ƒ‚|| _d S )Nz.No valid binary could be found for gdb named: )r   Z
GDB_BINARYÚ
ValueErrorÚ_gdb_binary)ÚselfÚ
gdb_binaryÚmsg© r   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/misc/numba_gdbinfo.pyÚ__init__   s
    z_GDBTestWrapper.__init__r   c                 C   sH   | j dg}|D ]}| d¡ | |¡ q| ddg¡ tj|dddd�S )Nz-qz-exÚqTé
   )Úcapture_outputÚtimeoutÚtext)r
   ÚappendÚextendÚ
subprocessÚrun)r	   ÚcmdZgdb_callÚxr   r   r   Ú_run_cmd   s    


ÿz_GDBTestWrapper._run_cmdc                 C   s   | j S )N)r   ©r	   r   r   r   r
   #   s    z_GDBTestWrapper.gdb_binaryc                 C   s
   |j dkS )Nr   )Ú
returncode)ÚclsÚstatusr   r   r   Úsuccess'   s    z_GDBTestWrapper.successc                 C   s   |   ¡ S )zChecks that gdb will launch ok©r   r   r   r   r   Úcheck_launch+   s    z_GDBTestWrapper.check_launchc                 C   s   d}|   |f¡S )NzUpython from __future__ import print_function; import sys; print(sys.version_info[:2])r    ©r	   r   r   r   r   Úcheck_python/   s    z_GDBTestWrapper.check_pythonc                 C   s   d}|   |f¡S )Nztpython from __future__ import print_function; import types; import numpy; print(isinstance(numpy, types.ModuleType))r    r"   r   r   r   Úcheck_numpy4   s    z_GDBTestWrapper.check_numpyc                 C   s   d}|   |f¡S )Nzapython from __future__ import print_function; import types; import numpy;print(numpy.__version__)r    r"   r   r   r   Úcheck_numpy_version:   s    z#_GDBTestWrapper.check_numpy_versionN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úpropertyr
   Úclassmethodr   r!   r#   r$   r%   r   r   r   r   r      s   
	

r   c               
   C   s†  d} d}d}d}d}zFt ƒ }| ¡ }| |¡sRd|j› d|j› d|j› �}t|ƒ‚|j} W n, tk
r† } zd|› �} W 5 d}~X Y nºX | ¡ }| |¡�r@t	 
d	|j ¡ ¡}	|	dk	�r@|	 ¡ \}
}|
› d
|› �}d}| ¡ }| |¡�r@d|j ¡ k�r@|j ¡ dk�r@d}d}| ¡ }| |¡�r@d|j ¡ k�r@|j ¡ }|�rX|�rRd}nd}nd}d}tj tj t¡|¡}t| ||||ƒS )zEPrints information to stdout about the gdb setup that Numba has foundNFzNo Python supportzNo NumPy supportzgdb at 'z#' does not appear to work.
stdout: z	
stderr: z+Testing gdb binary failed. Reported Error: z\((\d+),\s+(\d+)\)Ú.TÚ	TracebackÚTrueÚUnknownz!Full (Python and NumPy supported)z'Partial (Python only, no NumPy support)ÚNonezgdb_print_extension.py)r   r!   r   r
   ÚstdoutÚstderrr   Ú	Exceptionr#   ÚreÚmatchÚstripÚgroupsr$   r%   ÚosÚpathÚjoinÚdirnameÚ__file__r   )Z	gdb_stateZgdb_has_pythonZgdb_has_numpyZgdb_python_versionZgdb_python_numpy_versionZgdb_wrapperr   r   ÚeZversion_matchZpymajorZpyminorZprint_ext_supportedZprint_ext_fileZprint_ext_pathr   r   r   Úcollect_gdbinfoA   sZ    

ÿ
ÿ ÿr>   é-   c                 C   s²   t ƒ }tdƒ d| › d�}t|d|jf ƒ t|d|jf ƒ t|d|jf ƒ t|d|jf ƒ t|d|jf ƒ td	ƒ td
ƒ td|j› d�ƒ tdƒ d}tt|ƒƒ dS )z;Displays the information collected by collect_gdbinfo.
    zP--------------------------------------------------------------------------------z%-zs : %-szBinary locationzPrint extension locationzPython versionzNumPy versionz Numba printing extension supportÚ zTTo load the Numba gdb printing extension, execute the following from the gdb prompt:z
source Ú
a  
    =============================================================
    IMPORTANT: Before sharing you should remove any information
    in the above that you wish to keep private e.g. paths.
    =============================================================
    N)r>   ÚprintZ
binary_locZextension_locZpy_verZnp_verÚ	supportedr   )Zsep_posZgdb_infoÚfmtÚwarnr   r   r   Údisplay_gdbinfo…   s    rF   Ú__main__)r?   )r)   Úcollectionsr   r8   r4   r   Útextwrapr   Znumbar   Ú_fieldsr   r   r>   rF   r&   r   r   r   r   Ú<module>   s   
3D
