U
    ?h(                     @   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    F/var/www/html/venv/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
executableZ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+   dr6   r   finfoZsafe_contentstkeysr4   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,   r1   rL   r   rN   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 rS   )_patchesappendr   patchobjectr
   )ZfnstrfuncrT   r    r!   _patch   s    z$TestGDBCLIInfo.setUp.<locals>._patchc                 S   s
   t ddS )NCOMMAND STRINGr   r   rT   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   rT   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   Truerb   rc   r   rT   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.15rb   rc   r   rT   r    r    r!   mock_check_numpy_version   s    z6TestGDBCLIInfo.setUp.<locals>.mock_check_numpy_versioncheck_numpy_version)rY   rZ   r   r[   r\   r
   r   )	r+   Z	mock_initbpathr^   r`   rd   rg   rj   pr    rT   r!   setUpy   s$    




zTestGDBCLIInfo.setUpc                 C   s   | j D ]}|  qd S rS   )rY   stop)r+   rm   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 )NrX   3.2ri   Full)r	   assertEqual
binary_locr5   r6   r9   abspathZextension_locr8   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   rT   r    r    r!   mock_fn   s    z3TestGDBCLIInfo.test_invalid_binary.<locals>.mock_fnra   zTesting gdb binary failed.z,gdb at 'PATH_TO_GDB' does not appear to work)r   r[   r\   r
   r	   r(   rt   )r+   r|   rI   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   rT   r    r    r!   r|      s    z.TestGDBCLIInfo.test_no_python.<locals>.mock_fnre   No Python supportNone)r   r[   r\   r
   r	   rs   rv   rx   r+   r|   ry   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   rT   r    r    r!   r|      s    z>TestGDBCLIInfo.test_unparsable_python_version.<locals>.mock_fnre   r   )r   r[   r\   r
   r	   rs   rv   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   rT   r    r    r!   r|      s    z-TestGDBCLIInfo.test_no_numpy.<locals>.mock_fnrh   zNo NumPy supportrq   ZPartial)
r   r[   r\   r
   r	   rs   rw   rv   r(   rx   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   rT   r    r    r!   r|      s    z5TestGDBCLIInfo.test_no_numpy_version.<locals>.mock_fnrk   Unknownr   r[   r\   r
   r	   rs   rw   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   	Tracebackrc   r   rT   r    r    r!   r|      s    z?TestGDBCLIInfo.test_traceback_in_numpy_version.<locals>.mock_fnrk   r   r   r   r    r    r!   test_traceback_in_numpy_version   s    z.TestGDBCLIInfo.test_traceback_in_numpy_versionN)rO   rP   rQ   rn   rp   rz   r}   r   r   r   r   r   r    r    r    r!   rR   w   s   .		
rR   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%   rM   r   Testing gdb binary failedNo such file or directoryz%'THIS_IS_NOT_A_VALID_GDB_BINARY_NAME'r5   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%   rM   r   r   r   )
r5   r   r   r   r6   r7   r&   r'   r"   r(   )r+   r   rG   r6   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%   rM   r   r   zUnknown optionr   r   r    r    r!   test_nonsense_gdb_binary  s    
z1TestGDBCLIInfoBrokenGdbs.test_nonsense_gdb_binaryN)rO   rP   rQ   r   r   r   r    r    r    r!   r      s   
r   __main__)r5   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#   rR   r   rO   mainr    r    r    r!   <module>   s(   Nw)