o
    1Æ&iÕ  ã                   @   sZ  d dl Z 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	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZ dd	„ Zd
d„ Zedv rjejjjZejjjZejjjZejjjZejjjZejjjZdddddœZe edkd¡G dd„ deƒƒZ e edkd¡G dd„ deƒƒZ!e edkd¡G dd„ deƒƒZ"e#dkr«e $¡  dS dS )é    N)ÚCounter)ÚMockÚcall)ÚTestCase)ÚjitÚobjmode)Ú	PYVERSION)Ú_numba_unpicklec                 C   s
   d| _ | S )z4Decorator to enable sys.monitoring on the dispatcherT)Ú_enable_sysmon)Zdisp© r   úJC:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_sys_monitoring.pyr
      s   r
   c                     s(   t tdƒdd„ ƒƒ‰ ‡ fdd„} ˆ | fS )Núint64(int64)c                 S   ó   | d S ©Né   r   ©Úxr   r   r   Úfoo   ó   zgenerate_usecase.<locals>.fooc                    s   dˆ | d ƒ S )Né   é   r   r   ©r   r   r   Úcall_foo   s   z"generate_usecase.<locals>.call_foo)r
   r   )r   r   r   r   Úgenerate_usecase   s
   r   )©é   é   )r   é   ZDebuggerZCoverageZProfilerZ	Optimizer)r   r   r   r   r   zneeds Python 3.12+c                   @   sÊ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z		d0d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"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ ZdS )1ÚTestMonitoringc                 C   sŒ   g }t dƒD ]}tj |¡d ur| t| ¡ q|r'dd |¡› }|  |¡ tƒ \| _	| _
d| _| jd d | _d| j | _tjj| _d S )Né   zVCannot run monitoring tests when other monitors are active, found monitor(s) of type: z, é
   r   r   r   )ÚrangeÚsysÚ
monitoringZget_toolÚappendÚTOOL2MONITORTYPEÚjoinZskipTestr   r   r   ÚargÚ
foo_resultÚcall_foo_resultÚPROFILER_IDÚtool_id)ÚselfZmonitor_kindsÚiÚmsgr   r   r   ÚsetUp9   s   €þ
zTestMonitoring.setUpc                 C   sP   t ƒ }| jj| jjh}|jD ]}|j^}}||v r%||g|¢R   d7  < q|S r   )r   r   Ú__code__r   Z_mock_call_args_listÚargs)r,   Ú	mockcallsÚmatchedZtarget_codeobjsZcb_argsÚcodeobjr1   r   r   r   Úgather_mock_calls_multithreadsO   s   

€z-TestMonitoring.gather_mock_calls_multithreadsc                 C   s‚   |   |t ¡}|  t|ƒd¡ dd„ t | j¡D ƒ}|d j}|  || jj|f d¡ |  || j	jdf d¡ |  | 
¡ d¡ d S )Nr   c                 S   ó   g | ]	}|j d kr|‘qS ©ÚRESUME©Úopname©Ú.0r   r   r   r   Ú
<listcomp>`   ó    
ÿzDTestMonitoring.check_py_start_calls_multithreads.<locals>.<listcomp>r   é   )r5   ÚPY_STARTÚassertEqualÚlenÚdisÚget_instructionsr   Úoffsetr0   r   Útotal)r,   Úallcallsr3   ÚinstrE   r   r   r   Ú!check_py_start_calls_multithreadsY   s   
z0TestMonitoring.check_py_start_calls_multithreadsc                 C   s`   |t  }|  |jd¡ dd„ t | j¡D ƒ}|d j}t| jj|ƒt| j	jdƒf}| 
|¡ d S )Nr   c                 S   r6   r7   r9   r;   r   r   r   r=   m   r>   z7TestMonitoring.check_py_start_calls.<locals>.<listcomp>r   )r@   rA   Ú
call_countrC   rD   r   rE   r   r0   r   Úassert_has_calls)r,   rG   r2   rH   rE   Úcallsr   r   r   Úcheck_py_start_callsg   s   
ÿz#TestMonitoring.check_py_start_callsc                 C   sv   |   |t ¡}dd„ t | j¡D ƒd j}|  || jjd| j	f d¡ |  || jj|| j
f d¡ |  | ¡ d¡ d S )Nc                 S   ó   g | ]}|‘qS r   r   r;   r   r   r   r=   y   ó    zETestMonitoring.check_py_return_calls_multithreads.<locals>.<listcomp>éÿÿÿÿr   r   r?   )r5   Ú	PY_RETURNrC   rD   r   rE   rA   r   r0   r(   r)   rF   )r,   rG   r3   rE   r   r   r   Ú"check_py_return_calls_multithreadsu   s   ÿz1TestMonitoring.check_py_return_calls_multithreadsc                 C   sd   |t  }|  |jd¡ dd„ t | j¡D ƒd j}t| jj	d| j
ƒt| jj	|| jƒg}| |¡ d S )Nr   c                 S   rN   r   r   r;   r   r   r   r=   ‹   rO   z8TestMonitoring.check_py_return_calls.<locals>.<listcomp>rP   r   )rQ   rA   rJ   rC   rD   r   rE   r   r   r0   r(   r)   rK   )r,   rG   r2   rE   rL   r   r   r   Úcheck_py_return_calls€   s   ÿz$TestMonitoring.check_py_return_callsNc                 C   s  zc|d u r	| j }n|}tj |d¡ i }d}|D ]}	tƒ }
tj ||	|
¡ |
||	< ||	O }qtj ||¡ |d ur<|ƒ  ||Ž  W |d urH|ƒ  tj |t¡ |D ]
}	tj ||	d ¡ qQtj |¡ |S |d urk|ƒ  tj |t¡ |D ]
}	tj ||	d ¡ qttj |¡ w )NÚcustom_monitorr   )	r+   r"   r#   Úuse_tool_idr   Úregister_callbackÚ
set_eventsÚ	NO_EVENTSÚfree_tool_id)r,   Úfunctionr1   Úeventsr+   ÚbarrierZ_tool_idÚ	callbacksÚevent_bitmaskÚeventÚcallbackr   r   r   Úrun_with_events   s:   

÷zTestMonitoring.run_with_eventsc                 C   ó4   |   | j| jftf¡}|  t|ƒd¡ |  |¡ d S r   )ra   r   r'   r@   rA   rB   rM   ©r,   Úcbr   r   r   Útest_start_eventµ   ó   zTestMonitoring.test_start_eventc                 C   rb   r   )ra   r   r'   rQ   rA   rB   rS   rc   r   r   r   Útest_return_event¼   rf   z TestMonitoring.test_return_eventc                 C   s@   |   | j| jfttf¡}|  t|ƒd¡ |  |¡ |  |¡ d S )Nr   )	ra   r   r'   r@   rQ   rA   rB   rS   rM   rc   r   r   r   Útest_call_event_chainÃ   s   ÿ
z$TestMonitoring.test_call_event_chainc           	      C   s8  t dƒdd„ ƒ}zV| j}tj |d¡ i }d}ttf}|D ]}tƒ }tj |||¡ |||< ||O }qtj 	||j
|¡ || jƒ}W |D ]
}tj ||d ¡ qDtj 	||j
d¡ tj |¡ n|D ]
}tj ||d ¡ qatj 	||j
d¡ tj |¡ w |  || | j¡¡ |  t|ƒd¡ |t  ¡  |t  ¡  d S )Nr   c                 S   r   )Nr   r   r   r   r   r   r   Ü   ó   zPTestMonitoring.test_instrumented_code_does_not_trigger_numba_events.<locals>.foorT   r   r   )r   r+   r"   r#   rU   r@   rQ   r   rV   Úset_local_eventsr0   r'   rY   rA   Úpy_funcrB   Úassert_not_called)	r,   r   r+   r]   r^   r[   r_   r`   Úresultr   r   r   Ú4test_instrumented_code_does_not_trigger_numba_eventsÚ   s:   

ÿýzCTestMonitoring.test_instrumented_code_does_not_trigger_numba_eventsc                 C   sÆ   dd„ }zF| j }tj |d¡ tj ||jt¡ tj |ttƒ ¡ t	|ƒ| j
ƒ}|  ||| j
ƒ¡ W tj |td ¡ tj ||jd¡ tj |¡ d S tj |td ¡ tj ||jd¡ tj |¡ w )Nc                 S   r   r   r   r   r   r   r   r   þ   s   zBTestMonitoring.test_instrumented_code_can_be_compiled.<locals>.foorT   r   )r+   r"   r#   rU   rj   r0   r@   rV   r   r   r'   rA   rY   )r,   r   r+   rm   r   r   r   Ú&test_instrumented_code_can_be_compiledû   s   þz5TestMonitoring.test_instrumented_code_can_be_compiledc                 C   sf   dd„ }t jjj}dd„ }||ƒ}|  |d|f¡}||  ¡  |tƒ}|  |d|f¡}||  ¡  d S )Nc                    s(   | dƒdd„ ƒ‰ | dƒ‡ fdd„ƒ}|S )Nzvoid()c                   s   s    dV  d S )Nr    r   r   r   r   r   Úproducer  s   €
zTTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate.<locals>.producerzint64()c                     s   ˆ ƒ } t | ƒS ©N)Únext)Úp©rp   r   r   Úconsumer  s   zTTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate.<locals>.consumerr   )Údecru   r   rt   r   Úgenerate  s
   
zBTestMonitoring.test_unhandled_events_are_ignored.<locals>.generatec                 S   s   dd„ S )Nc                 S   s   | S rq   r   )Úfnr   r   r   Ú<lambda>  s    zTTestMonitoring.test_unhandled_events_are_ignored.<locals>.<lambda>.<locals>.<lambda>r   )Úsigr   r   r   ry     s    zBTestMonitoring.test_unhandled_events_are_ignored.<locals>.<lambda>r   )r"   r#   r[   ZPY_YIELDra   Úassert_called_oncer   rl   )r,   rw   r_   ÚwrapperZpy_consumerZpy_cbZnb_consumerZnb_cbr   r   r   Ú!test_unhandled_events_are_ignored  s   
z0TestMonitoring.test_unhandled_events_are_ignoredc              
   C   s®   zHt }| j}tj |d¡ tj ||¡ tj |¡}|  ||¡ |  | j	¡}tj |¡}|  ||¡ |  || j
¡ W tj |t¡ tj |¡ d S tj |t¡ tj |¡ w )NrT   )r@   r+   r"   r#   rU   rW   Ú
get_eventsrA   r   r'   r)   rX   rY   )r,   r_   r+   Úactive_eventsrm   r   r   r   Ú test_event_with_no_callback_runs'  s   ÿz/TestMonitoring.test_event_with_no_callback_runsc                 C   s  t tjjd}zat}| j}tj |d¡ tj ||¡ tj |||¡ tj 	|¡}|  
||¡ |  | j¡}tj 	|¡}|  
||¡ |  
|| j¡ | ¡  W tj ¡  tj ||d ¡ tj |t¡ tj |¡ d S tj ¡  tj ||d ¡ tj |t¡ tj |¡ w )N)Úreturn_valuerT   )r   r"   r#   ZDISABLEr@   r+   rU   rW   rV   r~   rA   r   r'   r)   Úassert_calledZrestart_eventsrX   rY   )r,   r`   r_   r+   r   rm   r   r   r   Útest_disable_from_callback<  s,   



ýz)TestMonitoring.test_disable_from_callbackc                    sî   z`| j ‰tj ˆd¡ t‰ tƒ }tj ˆˆ |¡ ‡ ‡fdd„‰ttdƒ‡fdd„ƒƒ}|dƒ | 	¡  |dƒ tj 
ˆt¡ | ¡  |  |jd	¡ W tj 
ˆt¡ tj ˆˆ d ¡ tj ˆ¡ d S tj 
ˆt¡ tj ˆˆ d ¡ tj ˆ¡ w )
NrT   c                    s   | rt j ˆˆ ¡ d S d S rq   )r"   r#   rW   )Zswitch_on_event)r_   r+   r   r   Úobjmode_enable_eventl  s   ÿzGTestMonitoring.test_mutation_from_objmode.<locals>.objmode_enable_eventr   c                    s:   t  ˆ | ƒ W d   ƒ | d S 1 sw   Y  | d S )Né   )r   )Úenable)r„   r   r   r   p  s   

ÿþz6TestMonitoring.test_mutation_from_objmode.<locals>.foor   r   r   )r+   r"   r#   rU   rQ   r   rV   r
   r   rl   rW   rX   r‚   rA   rJ   rY   )r,   r`   r   r   )r_   r„   r+   r   Útest_mutation_from_objmode`  s,   þz)TestMonitoring.test_mutation_from_objmodec                 C   s  t jjtft jjtft jjtft jjttfi}i }zt| 	¡ D ]2\}}t j 
|d|› ¡ d}i }|||< |D ]}tƒ }|tkrGt j |||¡ |||< ||O }q6q| ¡ D ]	}t j ||¡ qU|  | j¡ W | 	¡ D ]"\}}|D ]}|tkr~t j ||d ¡ qpt j |t¡ t j |¡ qjn(| 	¡ D ]"\}}|D ]}|tkr¦t j ||d ¡ q˜t j |t¡ t j |¡ q’w |t jj }	|  t|	ƒd¡ |	t }| ¡  |t jj }
|  t|
ƒd¡ |  |
¡ |t jj }|  t|ƒd¡ |  |¡ |t jj }|  t|ƒd¡ |  |¡ |  |¡ d S )NZcustom_monitor_r   r   r   )r"   r#   ÚDEBUGGER_IDrX   ÚCOVERAGE_IDr@   r*   rQ   ZOPTIMIZER_IDÚitemsrU   r   rV   ÚkeysrW   r   r'   rY   rA   rB   rl   rM   rS   )r,   Ztool_ids_2_eventsZall_callbacksr+   r[   r^   r]   r_   r`   Zdbg_toolZcov_toolZ	prof_toolZopt_toolr   r   r   Útest_multiple_tool_idŠ  sl   


ü
ÿ
ù	€ú€ú


z$TestMonitoring.test_multiple_tool_idc                    s¦  t ƒ }t ƒ }t ƒ }d‰ ttdƒ‡ fdd„ƒƒ}d }z| j}tj |d¡ tj |t|¡ tj |t	|¡ tj |t
|¡ tj |tt	B t
B ¡ z|ƒ  W n tya } z|}W Y d }~nd }~ww tj |t¡ | ¡  |jd }|  |jd tj¡ |  |jd d t¡ |  |jd d d ˆ ¡ | ¡  |jd }	|  |	jd tj¡ |  |	jd t¡ |jd }
|  |
jd |jj¡ |  |
jd t¡ |  ˆ t|
jd ƒ¡ | ¡  |jd }|  |jd |jj¡ |  |jd t¡ |  ˆ t|jd ƒ¡ W tj |t¡ tj |td ¡ tj |t	d ¡ tj |t
d ¡ tj |¡ n&tj |t¡ tj |td ¡ tj |t	d ¡ tj |t
d ¡ tj |¡ w |  ˆ t|ƒ¡ d S )	Núexception raisedú()c                      ó   t ˆ ƒ‚rq   )Ú
ValueErrorr   ©r.   r   r   r   Ö  r   z9TestMonitoring.test_raising_under_monitoring.<locals>.foorT   r   r   r   )r   r
   r   r+   r"   r#   rU   rV   rQ   ÚRAISEÚ	PY_UNWINDrW   r   rX   r{   Úcall_args_listrA   r1   r	   r0   r‚   ÚassertIsInstanceÚKeyErrorrk   ÚassertInÚstrrY   )r,   Zret_callbackÚraise_callbackZunwind_callbackr   Ústore_raisedr+   ÚraisesÚthe_callÚnumba_unpickle_callÚfoo_callZunwind_callr   r‘   r   Útest_raising_under_monitoringË  sn   
ÿ
€ÿ

ÿ

üz,TestMonitoring.test_raising_under_monitoringc                    sº  t ƒ }t ƒ }t ƒ }d‰ ttdƒ‡ fdd„ƒƒ}d }z| j}tj |d¡ tj |t|¡ tj |t	|¡ tj |t
|¡ tj |tt
B t	B ¡ z|ƒ  W n tya } z|}W Y d }~nd }~ww tj |t¡ | ¡  |jd }|  |jd tj¡ |  |jd d t¡ |  |jd d d ˆ ¡ | ¡  |  |jd	¡ |jd }	|  |	jd tj¡ |  |	jd t¡ |jd }
|  |
jd |jj¡ |  |
jd t¡ |  ˆ t|
jd ƒ¡ |jd }t ¡ j}|  |jd |¡ |  |jd t¡ |  ˆ t|jd ƒ¡ | ¡  W tj |t¡ tj |td ¡ tj |t
d ¡ tj |t	d ¡ tj |¡ n&tj |t¡ tj |td ¡ tj |t
d ¡ tj |t	d ¡ tj |¡ w |  ˆ t|ƒ¡ d S )
Nr   rŽ   c                      r   rq   )ÚStopIterationr   r‘   r   r   r     r   z@TestMonitoring.test_stop_iteration_under_monitoring.<locals>.foorT   r   r   r   r   )r   r
   r   r+   r"   r#   rU   rV   rQ   r’   ÚSTOP_ITERATIONrW   r    rX   r{   r”   rA   r1   r	   r0   r‚   rJ   r•   r–   rk   r—   r˜   Ú	_getframeÚf_coderl   rY   )r,   Zreturn_callbackr™   Zstopiter_callbackr   rš   r+   r›   rœ   r   rž   Ú	meth_callÚtest_method_coder   r‘   r   Ú$test_stop_iteration_under_monitoring  s~   
ÿ
ÿ
ÿ
ÿ
€ÿ

ÿ



üz3TestMonitoring.test_stop_iteration_under_monitoringc                 C   sþ   d}t t|ƒd}d }zOz#t}| j}tj |d¡ tj ||¡ tj |||¡ |  	| j
¡ W n tyC } z|}W Y d }~nd }~ww W tj ||d ¡ tj |t¡ tj |¡ ntj ||d ¡ tj |t¡ tj |¡ w | ¡  |  |t|ƒ¡ d S )Núdeliberately broken callback©Úside_effectrT   )r   r   r@   r+   r"   r#   rU   rW   rV   r   r'   rX   rY   r{   r—   r˜   )r,   r.   r`   rš   r_   r+   r›   r   r   r   Ú6test_raising_callback_unwinds_from_jit_on_success_path`  s.   €ÿ€þzETestMonitoring.test_raising_callback_unwinds_from_jit_on_success_pathc                    sÐ  d}d‰t t|ƒd}G dd„ dtƒ‰ ttdƒ‡ ‡fdd„ƒƒ}d }zLz t}| j}tj 	|d	¡ tj 
||¡ tj |||¡ |ƒ  W n tyW } z|}W Y d }~nd }~ww W tj ||d ¡ tj 
|t¡ tj |¡ ntj ||d ¡ tj 
|t¡ tj |¡ w | ¡  |  |jd
¡ |jd }|  |jd tj¡ |  |jd t¡ |jd }	|  |	jd |jj¡ |  |	jd |j¡ |jd }
t ¡ j}|  |
jd |¡ |  |
jd |j¡ |  ||j¡ d S )Nr§   údeliberately broken executionr¨   c                   @   ó   e Zd ZdS )z]TestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path.<locals>.LocalExceptionN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚLocalExceptionˆ  ó    r±   rŽ   c                      ó   ˆ ˆƒ‚rq   r   r   ©r±   Zmsg_executionr   r   Úraising‹  r   zVTestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path.<locals>.raisingrT   r   r   r   r   )r   r   Ú	Exceptionr
   r   r’   r+   r"   r#   rU   rW   rV   rX   rY   r‚   rA   rJ   r”   r1   r	   r0   r•   r–   rk   ÚassertIsr©   r¢   r£   )r,   Úmsg_callbackr`   rµ   rš   r_   r+   r›   r   Úraising_callr¤   r¥   r   r´   r   Ú6test_raising_callback_unwinds_from_jit_on_raising_path{  sN   
€ÿ€þ



zETestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_pathc           	         sp  d}d‰t t|ƒd}G dd„ dtƒ‰ ttdƒ‡ ‡fdd„ƒƒ}d }zLz t}| j}tj 	|d	¡ tj 
||¡ tj |||¡ |ƒ  W n tyW } z|}W Y d }~nd }~ww W tj ||d ¡ tj 
|t¡ tj |¡ ntj ||d ¡ tj 
|t¡ tj |¡ w | ¡  |jd
 }|  |jd
 |jj¡ |  t|jd ƒˆ ¡ |  t|jd ƒˆ¡ |  ||j¡ d S )Nr§   r«   r¨   c                   @   r¬   )z\TestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path.<locals>.LocalExceptionNr­   r   r   r   r   r±   Ä  r²   r±   rŽ   c                      r³   rq   r   r   r´   r   r   rµ   Ç  r   zUTestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path.<locals>.raisingrT   r   r   )r   r   r¶   r
   r   r“   r+   r"   r#   rU   rW   rV   rX   rY   r{   r”   rA   r1   rk   r0   Útyper˜   r·   r©   )	r,   r¸   r`   rµ   rš   r_   r+   r›   r¹   r   r´   r   Ú5test_raising_callback_unwinds_from_jit_on_unwind_path¶  s@   	
€ÿ€þ
zDTestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_pathc           
         s®   t  d¡‰ ‡ fdd„‰‡fdd„}‡fdd„}t ¡ }t j|ˆ|fd}t ¡ }t j|ˆ|fd}||f}|D ]}| ¡  q7|D ]}| ¡  q@‡fd	d
„}	|	|ƒ |	|ƒ d S )Nr   c                      s   ˆ   ¡  d S rq   )Úwaitr   )r\   r   r   Ú
barrier_cbî  s   zCTestMonitoring.test_monitoring_multiple_threads.<locals>.barrier_cbc              
      ó~   z | j | j| jftftjjˆ d}|  t|ƒd¡ |  	|¡ W d S  t
y> } z| d t |¡¡¡ W Y d }~d S d }~ww ©N)r+   r\   r   Ú )ra   r   r'   r@   r"   r#   rˆ   rA   rB   rI   r¶   Úputr&   Ú	tracebackÚformat_exception©r,   Úqrd   Úe©r¾   r   r   Út1_workñ  ó   ý$€ÿz@TestMonitoring.test_monitoring_multiple_threads.<locals>.t1_workc              
      r¿   rÀ   )ra   r   r'   rQ   r"   r#   r‰   rA   rB   rR   r¶   rÂ   r&   rÃ   rÄ   rÅ   rÈ   r   r   Út2_workþ  rÊ   z@TestMonitoring.test_monitoring_multiple_threads.<locals>.t2_work)Útargetr1   c                    s:   |   ¡ dkr|  ¡ st|  ¡ ƒ |  ¡ r
ˆ  d¡ d S d S )Nr   zqueue supposed to be empty)ÚqsizeÚemptyÚprintÚgetZfail)rÆ   )r,   r   r   Úassert_empty_queue  s   ÿýzKTestMonitoring.test_monitoring_multiple_threads.<locals>.assert_empty_queue)Ú	threadingÚBarrierÚqueueÚQueueÚThreadÚstartr&   )
r,   rÉ   rË   Úq1Út1Úq2Út2ÚthreadsÚtrÑ   r   )r\   r¾   r,   r   Ú test_monitoring_multiple_threadsæ  s    


z/TestMonitoring.test_monitoring_multiple_threads)NN)r®   r¯   r°   r/   r5   rI   rM   rR   rS   ra   re   rg   rh   rn   ro   r}   r€   rƒ   r‡   rŒ   rŸ   r¦   rª   rº   r¼   rÞ   r   r   r   r   r   0   s4    	

ÿ%!$*ACR;0r   c                   @   s   e Zd Zdd„ ZdS )ÚTestMonitoringSelfTestc                 C   s,   | j tjddddid}|  dt|ƒ¡ d S )Nr   re   z-mZcProfile)Úflagsz	skipped=1)Zsubprocess_test_runnerr   r¯   r—   r˜   )r,   Úrr   r   r   Ú+test_skipping_of_tests_if_monitoring_in_use$  s   ýzBTestMonitoringSelfTest.test_skipping_of_tests_if_monitoring_in_useN)r®   r¯   r°   râ   r   r   r   r   rß   !  s    rß   c                   @   sT   e Zd Zejddiddd„ ƒZejddiddd„ ƒZejdd	idd
d„ ƒZdS )ÚTestMonitoringEnvVarControlZNUMBA_ENABLE_SYS_MONITORINGrÁ   )Úenvvarsc                 C   ó   t dd„ ƒ}|  |j¡ d S )Nc                 S   r   r   r   r   r   r   r   r   4  ri   z9TestMonitoringEnvVarControl.test_default_off.<locals>.foo©r   ZassertFalser
   ©r,   r   r   r   r   Útest_default_off1  ó   
z,TestMonitoringEnvVarControl.test_default_offÚ0c                 C   rå   )Nc                 S   r   r   r   r   r   r   r   r   =  ri   z:TestMonitoringEnvVarControl.test_override_off.<locals>.fooræ   rç   r   r   r   Útest_override_off:  ré   z-TestMonitoringEnvVarControl.test_override_offÚ1c                 C   rå   )Nc                 S   r   r   r   r   r   r   r   r   F  ri   z9TestMonitoringEnvVarControl.test_override_on.<locals>.foo)r   Ú
assertTruer
   rç   r   r   r   Útest_override_onC  ré   z,TestMonitoringEnvVarControl.test_override_onN)r®   r¯   r°   r   Zrun_test_in_subprocessrè   rë   rî   r   r   r   r   rã   /  s    ÿ
ÿ
ÿrã   Ú__main__)%rC   rÔ   r"   rÒ   rÃ   ZunittestÚcollectionsr   Zunittest.mockr   r   Znumba.tests.supportr   Znumbar   r   Znumba.core.utilsr   Znumba.core.serializer	   r
   r   r#   r[   r@   rQ   r’   r“   r¡   rX   r%   Z
skipUnlessr   rß   rã   r®   Úmainr   r   r   r   Ú<module>   sP    





ý     uÿ