o
    ¦¸¢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)Údisp© r   ú]/home/ubuntu/transcripts/venv/lib/python3.10/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   é   )r   é   ÚDebuggerÚCoverageÚProfilerÚ	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Ú
monitoringÚget_toolÚappendÚTOOL2MONITORTYPEÚjoinÚskipTestr   r   r   ÚargÚ
foo_resultÚcall_foo_resultÚPROFILER_IDÚtool_id)ÚselfÚ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   Ú_mock_call_args_listÚargs)r4   Ú	mockcallsÚmatchedÚtarget_codeobjsÚcb_argsÚcodeobjr;   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   é   )rA   ÚPY_STARTÚassertEqualÚlenÚdisÚget_instructionsr   Úoffsetr9   r   Útotal)r4   Úallcallsr=   ÚinstrQ   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   rB   rC   rE   rG   r   r   r   rI   m   rJ   z7TestMonitoring.check_py_start_calls.<locals>.<listcomp>r   )rL   rM   Ú
call_countrO   rP   r   rQ   r   r9   r   Úassert_has_calls)r4   rS   r<   rT   rQ   Ú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   rG   r   r   r   rI   y   ó    zETestMonitoring.check_py_return_calls_multithreads.<locals>.<listcomp>éÿÿÿÿr   r   rK   )rA   Ú	PY_RETURNrO   rP   r   rQ   rM   r   r9   r0   r1   rR   )r4   rS   r=   rQ   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   rZ   r   r   rG   r   r   r   rI   ‹   r[   z8TestMonitoring.check_py_return_calls.<locals>.<listcomp>r\   r   )r]   rM   rV   rO   rP   r   rQ   r   r   r9   r0   r1   rW   )r4   rS   r<   rQ   rX   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   )	r3   r(   r)   Úuse_tool_idr   Úregister_callbackÚ
set_eventsÚ	NO_EVENTSÚfree_tool_id)r4   Úfunctionr;   Úeventsr3   ÚbarrierÚ_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   )rn   r   r/   rL   rM   rN   rY   ©r4   Úcbr   r   r   Útest_start_eventµ   ó   zTestMonitoring.test_start_eventc                 C   ro   r   )rn   r   r/   r]   rM   rN   r_   rp   r   r   r   Útest_return_event¼   rs   z TestMonitoring.test_return_eventc                 C   s@   |   | j| jfttf¡}|  t|ƒd¡ |  |¡ |  |¡ d S )Nr   )	rn   r   r/   rL   r]   rM   rN   r_   rY   rp   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>.foor`   r   r   )r   r3   r(   r)   ra   rL   r]   r   rb   Úset_local_eventsr9   r/   re   rM   Úpy_funcrN   Úassert_not_called)	r4   r   r3   rj   rk   rg   rl   rm   Ú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>.foor`   r   )r3   r(   r)   ra   rw   r9   rL   rb   r   r   r/   rM   re   )r4   r   r3   rz   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©r}   r   r   Úconsumer  s   zTTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate.<locals>.consumerr   )Údecr‚   r   r   r   Úgenerate  s
   
zBTestMonitoring.test_unhandled_events_are_ignored.<locals>.generatec                 S   s   dd„ S )Nc                 S   s   | S r~   r   )Úfnr   r   r   Ú<lambda>  s    zTTestMonitoring.test_unhandled_events_are_ignored.<locals>.<lambda>.<locals>.<lambda>r   )Úsigr   r   r   r†     s    zBTestMonitoring.test_unhandled_events_are_ignored.<locals>.<lambda>r   )r(   r)   rg   ÚPY_YIELDrn   Úassert_called_oncer   ry   )r4   r„   rl   ÚwrapperÚpy_consumerÚpy_cbÚnb_consumerÚ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 )Nr`   )rL   r3   r(   r)   ra   rc   Ú
get_eventsrM   r   r/   r1   rd   re   )r4   rl   r3   Úactive_eventsrz   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_valuer`   )r   r(   r)   ÚDISABLErL   r3   ra   rc   rb   r   rM   r   r/   r1   Úassert_calledÚrestart_eventsrd   re   )r4   rm   rl   r3   r‘   rz   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 )
Nr`   c                    s   | rt j ˆˆ ¡ d S d S r~   )r(   r)   rc   )Úswitch_on_event)rl   r3   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   )r3   r(   r)   ra   r]   r   rb   r
   r   ry   rc   rd   r•   rM   rV   re   )r4   rm   r   r   )rl   r™   r3   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 )NÚcustom_monitor_r   r   r   )r(   r)   ÚDEBUGGER_IDrd   ÚCOVERAGE_IDrL   r2   r]   ÚOPTIMIZER_IDÚitemsra   r   rb   Úkeysrc   r   r/   re   rM   rN   ry   rY   r_   )r4   Útool_ids_2_eventsÚall_callbacksr3   rg   rk   rj   rl   rm   Údbg_toolÚcov_toolÚ	prof_toolÚ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 ˆ ƒ‚r~   )Ú
ValueErrorr   ©r7   r   r   r   Ö  r   z9TestMonitoring.test_raising_under_monitoring.<locals>.foor`   r   r   r   )r   r
   r   r3   r(   r)   ra   rb   r]   ÚRAISEÚ	PY_UNWINDrc   r­   rd   r‰   Úcall_args_listrM   r;   r	   r9   r•   ÚassertIsInstanceÚKeyErrorrx   ÚassertInÚstrre   )r4   Úret_callbackÚraise_callbackÚunwind_callbackr   Ústore_raisedr3   ÚraisesÚthe_callÚnumba_unpickle_callÚfoo_callÚ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¬   r~   )ÚStopIterationr   r®   r   r   r     r   z@TestMonitoring.test_stop_iteration_under_monitoring.<locals>.foor`   r   r   r   r   )r   r
   r   r3   r(   r)   ra   rb   r]   r¯   ÚSTOP_ITERATIONrc   rÀ   rd   r‰   r±   rM   r;   r	   r9   r•   rV   r²   r³   rx   r´   rµ   Ú	_getframeÚf_codery   re   )r4   Úreturn_callbackr·   Ústopiter_callbackr   r¹   r3   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_effectr`   )r   r­   rL   r3   r(   r)   ra   rc   rb   r   r/   rd   re   r‰   r´   rµ   )r4   r7   rm   r¹   rl   r3   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                      ó   ˆ ˆƒ‚r~   r   r   ©rÓ   Úmsg_executionr   r   Úraising‹  r   zVTestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path.<locals>.raisingr`   r   r   r   r   )r   r­   Ú	Exceptionr
   r   r¯   r3   r(   r)   ra   rc   rb   rd   re   r•   rM   rV   r±   r;   r	   r9   r²   r³   rx   ÚassertIsrË   rÂ   rÃ   )r4   Úmsg_callbackrm   rØ   r¹   rl   r3   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Õ   r~   r   r   rÖ   r   r   rØ   Ç  r   zUTestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path.<locals>.raisingr`   r   r   )r   r­   rÙ   r
   r   r°   r3   r(   r)   ra   rc   rb   rd   re   r‰   r±   rM   r;   rx   r9   Útyperµ   rÚ   rË   )	r4   rÛ   rm   rØ   r¹   rl   r3   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 r~   )Úwaitr   )rh   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)r3   rh   r   Ú )rn   r   r/   rL   r(   r)   rž   rM   rN   rU   rÙ   Úputr-   Ú	tracebackÚformat_exception©r4   Úqrq   Úe©rá   r   r   Út1_workñ  ó   ý$€ÿz@TestMonitoring.test_monitoring_multiple_threads.<locals>.t1_workc              
      râ   rã   )rn   r   r/   r]   r(   r)   rŸ   rM   rN   r^   rÙ   rå   r-   ræ   rç   rè   rë   r   r   Út2_workþ  rí   z@TestMonitoring.test_monitoring_multiple_threads.<locals>.t2_work)Útargetr;   c                    s:   |   ¡ dkr|  ¡ st|  ¡ ƒ |  ¡ r
ˆ  d¡ d S d S )Nr   zqueue supposed to be empty)ÚqsizeÚemptyÚprintÚgetÚfail)ré   )r4   r   r   Úassert_empty_queue  s   ÿýzKTestMonitoring.test_monitoring_multiple_threads.<locals>.assert_empty_queue)Ú	threadingÚBarrierÚqueueÚQueueÚThreadÚstartr-   )
r4   rì   rî   Úq1Út1Úq2Út2ÚthreadsÚtrõ   r   )rh   rá   r4   r   Ú test_monitoring_multiple_threadsæ  s    


z/TestMonitoring.test_monitoring_multiple_threads)NN)rÐ   rÑ   rÒ   r8   rA   rU   rY   r^   r_   rn   rr   rt   ru   r{   r|   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$   rr   z-mÚcProfile)Úflagsz	skipped=1)Úsubprocess_test_runnerr$   rÑ   r´   rµ   )r4   Ú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 )ÚTestMonitoringEnvVarControlÚNUMBA_ENABLE_SYS_MONITORINGrä   )Úenvvarsc                 C   ó   t dd„ ƒ}|  |j¡ d S )Nc                 S   r   r   r   r   r   r   r   r   4  rv   z9TestMonitoringEnvVarControl.test_default_off.<locals>.foo©r   ÚassertFalser
   ©r4   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   =  rv   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  rv   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   Úrun_test_in_subprocessr  r  r  r   r   r   r   r	  /  s    ÿ
ÿ
ÿr	  Ú__main__)%rO   rø   r(   rö   ræ   ÚunittestÚcollectionsr   Úunittest.mockr   r   Únumba.tests.supportr   Únumbar   r   Únumba.core.utilsr   Únumba.core.serializer	   r
   r   r)   rg   rL   r]   r¯   r°   rÁ   rd   r,   Ú
skipUnlessr$   r  r	  rÐ   Úmainr   r   r   r   Ú<module>   sP    





ý     uÿ