o
    ۾i(                     @   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rye  dS 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}z'|  | \}}|jdkr-t	d|j|
 f |
 |
 fW |  S |  w )N)stdoutstderrenvr   z/process failed with code %s: stderr follows
%s
)
subprocessPopenPIPE	threadingTimerkillstartcommunicate
returncodeAssertionErrordecodecancel)cmdliner   timeoutpopentimeout_timerouterr r!   H/home/ubuntu/.local/lib/python3.10/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   sT   t jddg}| t}t| W d    n1 sw   Y  | dt|j d S )N-mnumbazprocess failed with code 1)sys
executableassertRaisesr   r#   assertInstr	exception)selfr   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   s  t  }tj|d}tjddd|g}t| | j| dd | tj	| W d    n1 s4w   Y  | jdd" t
|d}t|}W d    n1 sUw   Y  W d    n1 sdw   Y  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 d    n1 sw   Y  qqW d    d S 1 sw   Y  d S )
Nztest_json_sysinfo.jsonr%   r&   z
--sys-jsonz exists)msgz	json loadr)k).r   ospathjoinr'   r(   r#   subTest
assertTrueexistsopenjsonloadintnsi
_cpu_countfloat_runtimer+   _start
_start_utc_machine	_cpu_name_platform_name_os_name_os_version_python_comp_python_impl_python_version_llvm_versionbool_cu_dev_init_svml_state_svml_loaded_svml_operational_llvm_svml_patched_tbb_thread_openmp_thread_wkq_threadlist_errors	_warningsdict_numba_env_varsitemsassertIsInstance)
r-   dr9   r   finfosafe_contentstkeysr7   r!   r!   r"   test_json_sysinfo_from_module7   sv   
&"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 supportr0   r1   r!   r!   r"   test_gdb_status_from_modulel   s   z#TestCLI.test_gdb_status_from_moduleN)__name__
__module____qualname__r/   r4   rg   r   ri   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 ]}|  qLd S )Nc                 S   s   d S Nr!   r-   r!   r!   r"   <lambda>   s    z&TestGDBCLIInfo.setUp.<locals>.<lambda>__init__z3numba.misc.numba_gdbinfo._GDBTestWrapper.gdb_binaryPATH_TO_GDBc                    s    j tjt| | d S rn   )_patchesappendr   patchobjectr
   )fnstrfuncro   r!   r"   _patch   s   
z$TestGDBCLIInfo.setUp.<locals>._patchc                 S   
   t ddS )NCOMMAND STRINGr   r   ro   r!   r!   r"   mock_check_launch      
z/TestGDBCLIInfo.setUp.<locals>.mock_check_launchcheck_launchc                 S      t dddddS )Nr{   r   z(3, 2) r   r   r   ro   r!   r!   r"   mock_check_python      z/TestGDBCLIInfo.setUp.<locals>.mock_check_pythoncheck_pythonc                 S   r   )Nr{   r   Truer   r   r   ro   r!   r!   r"   mock_check_numpy      z.TestGDBCLIInfo.setUp.<locals>.mock_check_numpycheck_numpyc                 S   r   )Nr{   r   1.15r   r   r   ro   r!   r!   r"   mock_check_numpy_version   r   z6TestGDBCLIInfo.setUp.<locals>.mock_check_numpy_versioncheck_numpy_version)rs   rt   r   ru   rv   r
   r   )	r-   	mock_initbpathry   r|   r   r   r   pr!   ro   r"   setUpy   s&   





zTestGDBCLIInfo.setUpc                 C   s   | j D ]}|  qd S rn   )rs   stop)r-   r   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 )Nrr   3.2r   Full)r	   assertEqual
binary_locr8   r9   r=   abspathextension_locr<   py_vernp_verr*   	supported)r-   	collectedextpr!   r!   r"   
test_valid   s   
zTestGDBCLIInfo.test_validc                 C   s`   dd }t jtd| t }| d|j | d|j W d    d S 1 s)w   Y  d S )Nc                 S   rz   )NINVALID_BINARY   r   ro   r!   r!   r"   mock_fn   r}   z3TestGDBCLIInfo.test_invalid_binary.<locals>.mock_fnr~   zTesting gdb binary failed.z,gdb at 'PATH_TO_GDB' does not appear to work)r   ru   rv   r
   r	   r*   r   )r-   r   rc   r!   r!   r"   test_invalid_binary   s   "z"TestGDBCLIInfo.test_invalid_binaryc                 C   s`   dd }t jtd| t }| |jd | |jd W d    d S 1 s)w   Y  d S )Nc                 S   rz   )N	NO PYTHONr   r   ro   r!   r!   r"   r      r}   z.TestGDBCLIInfo.test_no_python.<locals>.mock_fnr   No Python supportNone)r   ru   rv   r
   r	   r   r   r   r-   r   r   r!   r!   r"   test_no_python   s   "zTestGDBCLIInfo.test_no_pythonc                 C   R   dd }t jtd| t }| |jd W d    d S 1 s"w   Y  d S )Nc                 S   s   t ddddS )Nr   r   (NOT A VERSION))r   r   ro   r!   r!   r"   r      s   z>TestGDBCLIInfo.test_unparsable_python_version.<locals>.mock_fnr   r   )r   ru   rv   r
   r	   r   r   r   r!   r!   r"   test_unparsable_python_version   
   "z-TestGDBCLIInfo.test_unparsable_python_versionc                 C   sn   dd }t jtd|! t }| |jd | |jd | d|j	 W d    d S 1 s0w   Y  d S )Nc                 S   rz   )NzNO NUMPYr   r   ro   r!   r!   r"   r      r}   z-TestGDBCLIInfo.test_no_numpy.<locals>.mock_fnr   zNo NumPy supportr   Partial)
r   ru   rv   r
   r	   r   r   r   r*   r   r   r!   r!   r"   test_no_numpy   s   "zTestGDBCLIInfo.test_no_numpyc                 C   r   )Nc                 S   rz   )NNO NUMPY VERSIONr   r   ro   r!   r!   r"   r      r}   z5TestGDBCLIInfo.test_no_numpy_version.<locals>.mock_fnr   Unknownr   ru   rv   r
   r	   r   r   r   r!   r!   r"   test_no_numpy_version   r   z$TestGDBCLIInfo.test_no_numpy_versionc                 C   r   )Nc                 S   r   )Nr   r   r   	Tracebackr   r   ro   r!   r!   r"   r      r   z?TestGDBCLIInfo.test_traceback_in_numpy_version.<locals>.mock_fnr   r   r   r   r!   r!   r"   test_traceback_in_numpy_version   s
   "z.TestGDBCLIInfo.test_traceback_in_numpy_versionN)rj   rk   rl   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   rm   w   s    .		
rm   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 )
N#THIS_IS_NOT_A_VALID_GDB_BINARY_NAMENUMBA_GDB_BINARYr%   r&   rh   r   Testing gdb binary failedNo such file or directoryz%'THIS_IS_NOT_A_VALID_GDB_BINARY_NAME'r8   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   s   t j }t 5}t j|d}||d< tjdddg}t||d\}}| 	d| | 	d| | 	|| W d    d S 1 s@w   Y  d S )	NCANNOT_EXISTr   r%   r&   rh   r   r   r   )
r8   r   r   r   r9   r:   r'   r(   r#   r*   )r-   r   ra   r9   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&   rh   r   r   zUnknown optionr   r   r!   r!   r"   test_nonsense_gdb_binary  s   
z1TestGDBCLIInfoBrokenGdbs.test_nonsense_gdb_binaryN)rj   rk   rl   r   r   r   r!   r!   r!   r"   r      s    
r   __main__)r8   r   r'   r   r?   r   tempfiler   unittestr   numba.tests.supportr   r   numba.misc.numba_sysinfomiscnumba_sysinforB   numba.tests.gdb_supportr   numba.misc.numba_gdbinfor	   r
   r   r#   r$   rm   r   rj   mainr!   r!   r!   r"   <module>   s,   Nw)