U
    9%e(                     @   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re  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    S/var/www/html/Darija-Ai-API/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 ]}|  qd 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)