U
    iâËd­(  ã                   @   sò   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 d dlmZ d dlm	Z	 d dlZd dl
mZmZ d dlm  mZ d dlmZ d dlmZ d dlmZ e jd	fd
d„ZG dd„ deƒZG dd„ deƒZeG dd„ deƒƒZedkrîe ¡  dS )é    N©ÚCompletedProcess)ÚTemporaryDirectory)Úmock)ÚTestCaseÚ
linux_only)Ú	needs_gdb)Úcollect_gdbinfo)Ú_GDBTestWrapperé<   c                 C   s|   t j| t jt j|d�}t ||j¡}zH| ¡  | ¡ \}}|j	dkrZt
d|j	| ¡ f ƒ‚| ¡ | ¡ fW ¢S | ¡  X dS )N)ÚstdoutÚstderrÚenvr   z/process failed with code %s: stderr follows
%s
)NN)Ú
subprocessÚPopenÚPIPEÚ	threadingÚTimerÚkillÚcancelÚstartÚcommunicateÚ
returncodeÚAssertionErrorÚdecode)Úcmdliner   ÚtimeoutÚpopenZtimeout_timerÚoutÚerr© r    úM/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_cli.pyÚrun_cmd   s$    ý
ÿÿ
r"   c                   @   s0   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZd	S )
ÚTestCLIc              	   C   s@   t jddg}|  t¡�}t|ƒ W 5 Q R X |  dt|jƒ¡ d S )Nú-mÚnumbazprocess failed with code 1)ÚsysÚ
executableÚassertRaisesr   r"   ÚassertInÚstrÚ	exception)Úselfr   Zraisesr    r    r!   Útest_as_module_exit_code+   s    z TestCLI.test_as_module_exit_codec                 C   s*   t jdddg}t|ƒ\}}|  d|¡ d S )Nr$   r%   z-szSystem info©r&   r'   r"   r)   ©r,   r   ÚoÚ_r    r    r!   Útest_sysinfo_from_module2   s    z TestCLI.test_sysinfo_from_modulec           
      C   sj  t ƒ ��X}tj |d¡}tjddd|g}t|ƒ | j|› d�d�� |  tj 	|¡¡ W 5 Q R X | jdd��& t
|dƒ�}t |¡}W 5 Q R X W 5 Q R X ttjfttjfttjtjtjtjtjtjtjtjtjtjtjfttjtj tj!tj"tj#tj$tj%tj&ft'tj(tj)ft*tj+fi}| ,¡ D ]>\}}|D ].}	| j|	d	�� |  -||	 |¡ W 5 Q R X �q(�qW 5 Q R X d S )
Nztest_json_sysinfo.jsonr$   r%   z
--sys-jsonz exists)Úmsgz	json loadÚr)Úk).r   ÚosÚpathÚjoinr&   r'   r"   ZsubTestÚ
assertTrueÚexistsÚopenÚjsonÚloadÚintÚnsiZ
_cpu_countÚfloatZ_runtimer*   Ú_startZ
_start_utcZ_machineZ	_cpu_nameZ_platform_nameZ_os_nameZ_os_versionZ_python_compZ_python_implZ_python_versionZ_llvm_versionÚboolZ_cu_dev_initZ_svml_stateZ_svml_loadedZ_svml_operationalZ_llvm_svml_patchedZ_tbb_threadZ_openmp_threadZ_wkq_threadÚlistÚ_errorsÚ	_warningsÚdictZ_numba_env_varsÚitemsZassertIsInstance)
r,   Údr7   r   ÚfÚinfoZsafe_contentsÚtÚkeysr5   r    r    r!   Útest_json_sysinfo_from_module7   sd    
ÿÿõø
þÿÞ&z%TestCLI.test_json_sysinfo_from_modulec                 C   s6   t jdddg}t|ƒ\}}|  d|¡ |  d|¡ d S )Nr$   r%   ú-gzGDB infoz Numba printing extension supportr.   r/   r    r    r!   Útest_gdb_status_from_modulel   s    z#TestCLI.test_gdb_status_from_moduleN)Ú__name__Ú
__module__Ú__qualname__r-   r2   rM   r   rO   r    r    r    r!   r#   )   s
   5r#   c                   @   sT   e Z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S )ÚTestGDBCLIInfoc           	         sª   g ˆ _ dd„ }ˆ j  tj td|¡¡ d}ˆ j  t |d¡¡ ‡ fdd„}dd	„ }|d
|ƒ dd„ }|d|ƒ dd„ }|d|ƒ dd„ }|d|ƒ ˆ j D ]}| ¡  q˜d S )Nc                 S   s   d S ©Nr    ©r,   r    r    r!   Ú<lambda>   ó    z&TestGDBCLIInfo.setUp.<locals>.<lambda>Ú__init__z3numba.misc.numba_gdbinfo._GDBTestWrapper.gdb_binaryÚPATH_TO_GDBc                    s   ˆ j  tj t| |¡¡ d S rT   )Ú_patchesÚappendr   ÚpatchÚobjectr
   )ZfnstrÚfuncrU   r    r!   Ú_patch†   s    ÿz$TestGDBCLIInfo.setUp.<locals>._patchc                 S   s
   t ddƒS )NúCOMMAND STRINGr   r   rU   r    r    r!   Úmock_check_launchŠ   s    z/TestGDBCLIInfo.setUp.<locals>.mock_check_launchÚcheck_launchc                 S   s   t ddddd�S )Nr`   r   z(3, 2)Ú ©r   r   r   rU   r    r    r!   Úmock_check_python�   s    þz/TestGDBCLIInfo.setUp.<locals>.mock_check_pythonÚcheck_pythonc                 S   s   t ddddd�S )Nr`   r   ÚTruerc   rd   r   rU   r    r    r!   Úmock_check_numpy—   s    ÿz.TestGDBCLIInfo.setUp.<locals>.mock_check_numpyÚcheck_numpyc                 S   s   t ddddd�S )Nr`   r   ú1.15rc   rd   r   rU   r    r    r!   Úmock_check_numpy_version�   s    ÿz6TestGDBCLIInfo.setUp.<locals>.mock_check_numpy_versionÚcheck_numpy_version)rZ   r[   r   r\   r]   r
   r   )	r,   Z	mock_initÚbpathr_   ra   re   rh   rk   Úpr    rU   r!   ÚsetUpy   s$    ÿ




zTestGDBCLIInfo.setUpc                 C   s   | j D ]}| ¡  qd S rT   )rZ   Ústop)r,   rn   r    r    r!   ÚtearDown§   s    
zTestGDBCLIInfo.tearDownc                 C   sb   t ƒ }|  |jd¡ tj tj |j¡¡}|  |¡ |  |j	d¡ |  |j
d¡ |  d|j¡ d S )NrY   ú3.2rj   ÚFull)r	   ÚassertEqualÚ
binary_locr6   r7   r:   ÚabspathZextension_locr9   Úpy_verÚnp_verr)   Ú	supported)r,   Ú	collectedZextpr    r    r!   Ú
test_valid¬   s    
zTestGDBCLIInfo.test_validc              	   C   sJ   dd„ }t j td|¡�( tƒ }|  d|j¡ |  d|j¡ W 5 Q R X d S )Nc                 S   s
   t ddƒS )NZINVALID_BINARYé   r   rU   r    r    r!   Úmock_fn·   s    z3TestGDBCLIInfo.test_invalid_binary.<locals>.mock_fnrb   zTesting gdb binary failed.z,gdb at 'PATH_TO_GDB' does not appear to work)r   r\   r]   r
   r	   r)   ru   )r,   r}   rJ   r    r    r!   Útest_invalid_binaryµ   s    ÿz"TestGDBCLIInfo.test_invalid_binaryc              	   C   sJ   dd„ }t j td|¡�( tƒ }|  |jd¡ |  |jd¡ W 5 Q R X d S )Nc                 S   s
   t ddƒS )Nú	NO PYTHONr|   r   rU   r    r    r!   r}   Á   s    z.TestGDBCLIInfo.test_no_python.<locals>.mock_fnrf   úNo Python supportÚNone)r   r\   r]   r
   r	   rt   rw   ry   ©r,   r}   rz   r    r    r!   Útest_no_pythonÀ   s
    zTestGDBCLIInfo.test_no_pythonc              	   C   s<   dd„ }t j td|¡� tƒ }|  |jd¡ W 5 Q R X d S )Nc                 S   s   t dddd�S )Nr   r   ú(NOT A VERSION))r   r   rU   r    r    r!   r}   Ê   s    z>TestGDBCLIInfo.test_unparsable_python_version.<locals>.mock_fnrf   r€   )r   r\   r]   r
   r	   rt   rw   r‚   r    r    r!   Útest_unparsable_python_versionÉ   s    z-TestGDBCLIInfo.test_unparsable_python_versionc              	   C   sX   dd„ }t j td|¡�6 tƒ }|  |jd¡ |  |jd¡ |  d|j	¡ W 5 Q R X d S )Nc                 S   s
   t ddƒS )NzNO NUMPYr|   r   rU   r    r    r!   r}   Ò   s    z-TestGDBCLIInfo.test_no_numpy.<locals>.mock_fnri   zNo NumPy supportrr   ZPartial)
r   r\   r]   r
   r	   rt   rx   rw   r)   ry   r‚   r    r    r!   Útest_no_numpyÑ   s    zTestGDBCLIInfo.test_no_numpyc              	   C   s<   dd„ }t j td|¡� tƒ }|  |jd¡ W 5 Q R X d S )Nc                 S   s
   t ddƒS )NúNO NUMPY VERSIONr|   r   rU   r    r    r!   r}   Ü   s    z5TestGDBCLIInfo.test_no_numpy_version.<locals>.mock_fnrl   ÚUnknown©r   r\   r]   r
   r	   rt   rx   r‚   r    r    r!   Útest_no_numpy_versionÛ   s    z$TestGDBCLIInfo.test_no_numpy_versionc              	   C   s<   dd„ }t j td|¡� tƒ }|  |jd¡ W 5 Q R X d S )Nc                 S   s   t ddddd�S )Nr‡   r   r„   Ú	Tracebackrd   r   rU   r    r    r!   r}   ä   s    þz?TestGDBCLIInfo.test_traceback_in_numpy_version.<locals>.mock_fnrl   rˆ   r‰   r‚   r    r    r!   Útest_traceback_in_numpy_versionã   s    z.TestGDBCLIInfo.test_traceback_in_numpy_versionN)rP   rQ   rR   ro   rq   r{   r~   rƒ   r…   r†   rŠ   rŒ   r    r    r    r!   rS   w   s   .		
rS   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestGDBCLIInfoBrokenGdbsc                 C   sX   t j ¡ }d|d< tjdddg}t||d�\}}|  d|¡ |  d|¡ |  d	|¡ d S )
NZ#THIS_IS_NOT_A_VALID_GDB_BINARY_NAMEÚNUMBA_GDB_BINARYr$   r%   rN   ©r   úTesting gdb binary failedúNo such file or directoryz%'THIS_IS_NOT_A_VALID_GDB_BINARY_NAME'©r6   ÚenvironÚcopyr&   r'   r"   r)   ©r,   r   r   r   r   r    r    r!   Útest_cannot_find_gdb_from_nameô   s    
z7TestGDBCLIInfoBrokenGdbs.test_cannot_find_gdb_from_namec              	   C   sx   t j ¡ }tƒ �^}t j |d¡}||d< tjdddg}t||d�\}}|  	d|¡ |  	d|¡ |  	||¡ W 5 Q R X d S )	NZCANNOT_EXISTrŽ   r$   r%   rN   r�   r�   r‘   )
r6   r“   r”   r   r7   r8   r&   r'   r"   r)   )r,   r   rH   r7   r   r   r   r    r    r!   Útest_cannot_find_gdb_from_pathþ   s    
z7TestGDBCLIInfoBrokenGdbs.test_cannot_find_gdb_from_pathc                 C   sL   t j ¡ }d|d< tjdddg}t||d�\}}|  d|¡ |  d|¡ d S )	NÚpythonrŽ   r$   r%   rN   r�   r�   zUnknown optionr’   r•   r    r    r!   Útest_nonsense_gdb_binary  s    
z1TestGDBCLIInfoBrokenGdbs.test_nonsense_gdb_binaryN)rP   rQ   rR   r–   r—   r™   r    r    r    r!   r�   î   s   
r�   Ú__main__)r6   r   r&   r   r<   r   Útempfiler   Zunittestr   Znumba.tests.supportr   r   Znumba.misc.numba_sysinfoÚmiscZnumba_sysinfor?   Znumba.tests.gdb_supportr   Znumba.misc.numba_gdbinfor	   r
   r“   r"   r#   rS   r�   rP   Úmainr    r    r    r!   Ú<module>   s(   Nw)