
    SLh                     ,   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 Zd	 Zed
v rej,                  j.                  j0                  Zej,                  j.                  j2                  Zej,                  j.                  j4                  Zej,                  j.                  j6                  Zej,                  j.                  j8                  Zej,                  j.                  j:                  ZdddddZ ej>                  edk\  d       G d de             Z  ej>                  edk\  d       G d de             Z! ej>                  edk\  d       G d de             Z"e#dk(  r ejH                          yy)    N)Counter)Mockcall)TestCase)jitobjmode)	PYVERSION)_numba_unpicklec                     d| _         | S )z4Decorator to enable sys.monitoring on the dispatcherT)_enable_sysmon)disps    Z/var/www/html/whisper/venv/lib/python3.12/site-packages/numba/tests/test_sys_monitoring.pyr   r      s    DK    c                  J    t         t        d      d               fd} | fS )Nint64(int64)c                     | dz   S N    xs    r   foozgenerate_usecase.<locals>.foo   s     1ur   c                      d | dz         z  S )N      r   )r   r   s    r   call_fooz"generate_usecase.<locals>.call_foo   s    3q1u:~r   )r   r   )r   r   s    @r   generate_usecaser      s3       =r   )      )r      DebuggerCoverageProfiler	Optimizer)r   r   r   r   r   zneeds Python 3.12+c                       e Zd Zd Zd Zd Zd Zd Zd Z	 	 ddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestMonitoringc                    g }t        d      D ]:  }t        j                  j                  |      #|j	                  t
        |          < |r%ddj                  |       }| j                  |       t               \  | _	        | _
        d| _        | j                  dz   dz   | _        d| j                  z  | _        t        j                  j                  | _        y )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msgs       r   setUpzTestMonitoring.setUp9   s     q 	:A~~&&q)5$$%5a%89	: 8ii./1C MM# #3"4$-((Q,* 4??2~~11r   c                     t               }| j                  j                  | j                  j                  h}|j                  D ]&  }|j
                  ^}}||v s||g|xx   dz  cc<   ( |S r   )r   r   __code__r   _mock_call_args_listargs)r8   	mockcallsmatchedtarget_codeobjscb_argscodeobjr@   s          r   gather_mock_calls_multithreadsz-TestMonitoring.gather_mock_calls_multithreadsO   sq    )==114883D3DE 55 	/G&||Wt/)(4()Q.)	/ r   c                    | j                  |t                 }| j                  t        |      d       t	        j
                  | j                        D cg c]  }|j                  dk(  r| }}|d   j                  }| j                  || j                  j                  |f   d       | j                  || j                  j                  df   d       | j                  |j                         d       y c c}w )Nr   RESUMEr      )rF   PY_STARTassertEquallendisget_instructionsr   opnameoffsetr>   r   total)r8   allcallsrB   r   instrP   s         r   !check_py_start_calls_multithreadsz0TestMonitoring.check_py_start_calls_multithreadsY   s     55hx6HIWq) //> )a88x'  ) )a!7!7!?@!D!2!2A!56:!,)s   C5c                    |t            }| j                  |j                  d       t        j                  | j
                        D cg c]  }|j                  dk(  r| }}|d   j                  }t        | j
                  j                  |      t        | j                  j                  d      f}|j                  |       y c c}w )Nr   rH   r   )rJ   rK   
call_countrM   rN   r   rO   rP   r   r>   r   assert_has_calls)r8   rR   rA   r   rS   rP   callss          r   check_py_start_callsz#TestMonitoring.check_py_start_callsg   s     X&	--q1//> )a88x'  ) )admm,,f5dhh''+-""5))s   Cc                    | j                  |t                 }t        j                  | j                        D cg c]  }| c}d   j
                  }| j                  || j                  j                  d| j                  f   d       | j                  || j                  j                  || j                  f   d       | j                  |j                         d       y c c}w )Nr   r   rI   )rF   	PY_RETURNrM   rN   r   rP   rK   r   r>   r4   r5   rQ   )r8   rR   rB   r   rP   s        r   "check_py_return_calls_multithreadsz1TestMonitoring.check_py_return_calls_multithreadsu   s     55hy6IJ 11$--@A!A"ELL!2!2At!FGKDMM**FD4H4HHI1	
 	!, Bs   	C c                    |t            }| j                  |j                  d       t        j                  | j
                        D cg c]  }| c}d   j                  }t        | j                  j                  d| j                        t        | j
                  j                  || j                        g}|j                  |       y c c}w )Nr   r[   r   )r\   rK   rV   rM   rN   r   rP   r   r   r>   r4   r5   rW   )r8   rR   rA   r   rP   rX   s         r   check_py_return_callsz$TestMonitoring.check_py_return_calls   s     Y'	--q1 !11$--@A!A"ELLdhh''DOO<dmm,,fd6J6JKM""5) Bs   	CNc                     	 || j                   }n|}t        j                  j                  |d       i }d}|D ]7  }	t	               }
t        j                  j                  ||	|
       |
||	<   ||	z  }9 t        j                  j                  ||       | |         ||  | |        t        j                  j                  |t               |D ]#  }	t        j                  j                  ||	d        % t        j                  j                  |       |S # | |        t        j                  j                  t               |D ]#  }	t        j                  j                  ||	d        % t        j                  j                  |       w xY w)Ncustom_monitorr   )	r7   r,   r-   use_tool_idr   register_callback
set_events	NO_EVENTSfree_tool_id)r8   functionr@   eventsr7   barrier_tool_id	callbacksevent_bitmaskeventcallbacks              r   run_with_eventszTestMonitoring.run_with_events   sa   
	2<<"NN&&x1ABIM '6005(K#+	% &	' NN%%h>"	dO " 	NN%%h	: H005$GHNN''1 " 	NN%%h	: H005$GHNN''1s   BD A6Fc                     | j                  | j                  | j                  ft        f      }| j	                  t        |      d       | j                  |       y r   )ro   r   r3   rJ   rK   rL   rY   r8   cbs     r   test_start_eventzTestMonitoring.test_start_event   sD    !!$--$((xkJR!$!!"%r   c                     | j                  | j                  | j                  ft        f      }| j	                  t        |      d       | j                  |       y r   )ro   r   r3   r\   rK   rL   r_   rq   s     r   test_return_eventz TestMonitoring.test_return_event   sD    !!$--$((ylKR!$""2&r   c                     | j                  | j                  | j                  ft        t        f      }| j                  t        |      d       | j                  |       | j                  |       y )Nr   )	ro   r   r3   rJ   r\   rK   rL   r_   rY   rq   s     r   test_call_event_chainz$TestMonitoring.test_call_event_chain   sZ    !!$--$((#+Y"79 	R!$""2&!!"%r   c                 L   t        d      d        }	 | j                  }t        j                  j	                  |d       i }d}t
        t        f}|D ]7  }t               }t        j                  j                  |||       |||<   ||z  }9 t        j                  j                  ||j                  |        || j                        }|D ]#  }t        j                  j                  ||d        % t        j                  j                  ||j                  d       t        j                  j                  |       | j                  ||j                  | j                               | j                  t        |      d       |t
           j!                          |t           j!                          y # D ]#  }t        j                  j                  |d        % t        j                  j                  |j                  d       t        j                  j                  |       w xY w)Nr   c                     | dz   S )Nr   r   r   s    r   r   zPTestMonitoring.test_instrumented_code_does_not_trigger_numba_events.<locals>.foo       q5Lr   ra   r   r   )r   r7   r,   r-   rb   rJ   r\   r   rc   set_local_eventsr>   r3   rf   rK   py_funcrL   assert_not_called)	r8   r   r7   rk   rl   rh   rm   rn   results	            r   4test_instrumented_code_does_not_trigger_numba_eventszCTestMonitoring.test_instrumented_code_does_not_trigger_numba_events   s   	^		 
		1llGNN&&w0@AIM	*F '600%J#+	% &	' NN++GS\\,9;]F G00%FGNN++GS\\1ENN''0 	TXX!67Y+(--/)..0   G00%FGNN++GS\\1ENN''0s   B5F/ /A4H#c                 \   d }	 | j                   }t        j                  j                  |d       t        j                  j	                  ||j
                  t               t        j                  j                  |t        t                       t        |      | j                        }| j                  | || j                               t        j                  j                  |t        d        t        j                  j	                  ||j
                  d       t        j                  j                  |       y # t        j                  j                  t        d        t        j                  j	                  ||j
                  d       t        j                  j                  |       w xY w)Nc                     | dz   S r   r   r   s    r   r   zBTestMonitoring.test_instrumented_code_can_be_compiled.<locals>.foo   s    q5Lr   ra   r   )r7   r,   r-   rb   r{   r>   rJ   rc   r   r   r3   rK   rf   )r8   r   r7   r~   s       r   &test_instrumented_code_can_be_compiledz5TestMonitoring.test_instrumented_code_can_be_compiled   s   		1llGNN&&w0@ANN++GS\\8LNN,,WhGSXdhh'FVS]3NN,,WhENN++GS\\1ENN''0 NN,,WhENN++GS\\1ENN''0s   CD: :A1F+c                    d }t         j                  j                  j                  }d } ||      }| j	                  |d|f      }||   j                           |t              }| j	                  |d|f      }||   j                          y )Nc                 D     | d      d         | d      fd       }|S )Nzvoid()c               3      K   d y w)Nr*   r   r   r   r   producerzTTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate.<locals>.producer  s     s   zint64()c                  (            } t        |       S N)next)pr   s    r   consumerzTTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate.<locals>.consumer  s    JAwr   r   )decr   r   s     @r   generatezBTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate  s8    ]  ^  Or   c                     d S )Nc                     | S r   r   )fns    r   <lambda>zTTestMonitoring.test_unhandled_events_are_ignored.<locals>.<lambda>.<locals>.<lambda>  s     r   r   )sigs    r   r   zBTestMonitoring.test_unhandled_events_are_ignored.<locals>.<lambda>  s    m r   r   )r,   r-   rh   PY_YIELDro   assert_called_oncer   r}   )r8   r   rm   wrapperpy_consumerpy_cbnb_consumernb_cbs           r   !test_unhandled_events_are_ignoredz0TestMonitoring.test_unhandled_events_are_ignored  s    
	 %%..+w'$$["x@e'')sm$$["x@e&&(r   c                    	 t         }| j                  }t        j                  j	                  |d       t        j                  j                  ||       t        j                  j                  |      }| j                  ||       | j                  | j                        }t        j                  j                  |      }| j                  ||       | j                  || j                         t        j                  j                  |t               t        j                  j                  |       y # t        j                  j                  t               t        j                  j                  |       w xY w)Nra   )rJ   r7   r,   r-   rb   rd   
get_eventsrK   r   r3   r5   re   rf   )r8   rm   r7   active_eventsr~   s        r    test_event_with_no_callback_runsz/TestMonitoring.test_event_with_no_callback_runs'  s    
	1EllGNN&&w0@ANN%%gu5NN55g>M]E2]]488,FNN55g>M]E2VT%9%9:NN%%gy9NN''0 NN%%gy9NN''0s   C+D1 1AE6c                    t        t        j                  j                        }	 t        }| j
                  }t        j                  j                  |d       t        j                  j                  ||       t        j                  j                  |||       t        j                  j                  |      }| j                  ||       | j                  | j                        }t        j                  j                  |      }| j                  ||       | j                  || j                         |j                          t        j                  j                          t        j                  j                  ||d        t        j                  j                  |t                t        j                  j#                  |       y # t        j                  j                          t        j                  j                  d        t        j                  j                  |t                t        j                  j#                  |       w xY w)N)return_valuera   )r   r,   r-   DISABLErJ   r7   rb   rd   rc   r   rK   r   r3   r5   assert_calledrestart_eventsre   rf   )r8   rn   rm   r7   r   r~   s         r   test_disable_from_callbackz)TestMonitoring.test_disable_from_callback<  s    S^^%;%;<	1EllGNN&&w0@ANN%%gu5NN,,WeXFNN55g>M]E2]]488,FNN55g>M]E2VT%9%9:""$ NN))+NN,,WeTBNN%%gy9NN''0 NN))+NN,,WeTBNN%%gy9NN''0s   DG BI	c                    	 | j                   t        j                  j                  d       t        t               }t        j                  j                  |       fdt        t        d      fd              } |d       |j                           |d       t        j                  j                  t               |j                          | j                  |j                  d       t        j                  j                  t               t        j                  j                  d        t        j                  j                         y # t        j                  j                  t               t        j                  j                  d        t        j                  j                         w xY w)Nra   c                 L    | r!t         j                  j                         y y r   )r,   r-   rd   )switch_on_eventrm   r7   s    r   objmode_enable_eventzGTestMonitoring.test_mutation_from_objmode.<locals>.objmode_enable_eventl  s    "NN--gu= #r   r   c                 \    t         5   |        d d d        | dz   S # 1 sw Y   | dz   S xY w)N   )r   )enabler   s    r   r   z6TestMonitoring.test_mutation_from_objmode.<locals>.foop  s4      1(01z!1z!s   	+r   r   r   )r7   r,   r-   rb   r\   r   rc   r   r   r}   rd   re   r   rK   rV   rf   )r8   rn   r   rm   r   r7   s      @@@r   test_mutation_from_objmodez)TestMonitoring.test_mutation_from_objmode`  sD   '	1 llGNN&&w0@AEvHNN,,WeXF>  " ! " F&&( F NN%%gy9""$ X00!4NN%%gy9NN,,WeTBNN''0 NN%%gy9NN,,WeTBNN''0s   C/E A&F?c           	      |   t         j                  j                  t        ft         j                  j                  t
        ft         j                  j                  t        ft         j                  j                  t
        t        fi}i }	 |j                         D ]v  \  }}t         j                  j                  |d|        d}i }|||<   |D ]@  }t               }|t        k7  r!t         j                  j                  |||       |||<   ||z  }B x |j                         D ]"  }t         j                  j                  |       $ | j                  | j                          |j                         D ]z  \  }}|D ]-  }|t        k7  st         j                  j                  ||d        / t         j                  j                  |t               t         j                  j#                  |       | 	 |t         j                  j                     }	| j%                  t'        |	      d       |	t           }|j)                          |t         j                  j                     }
| j%                  t'        |
      d       | j+                  |
       |t         j                  j                     }| j%                  t'        |      d       | j-                  |       |t         j                  j                     }| j%                  t'        |      d       | j+                  |       | j-                  |       y # |j                         D ]z  \  }}|D ]-  }|t        k7  st         j                  j                  ||d        / t         j                  j                  |t               t         j                  j#                  |       | w xY w)Ncustom_monitor_r   r   r   )r,   r-   DEBUGGER_IDre   COVERAGE_IDrJ   r6   r\   OPTIMIZER_IDitemsrb   r   rc   keysrd   r   r3   rf   rK   rL   r}   rY   r_   )r8   tool_ids_2_eventsall_callbacksr7   rh   rl   rk   rm   rn   dbg_toolcov_tool	prof_toolopt_tools                r   test_multiple_tool_idz$TestMonitoring.test_multiple_tool_id  s    !^^77) ^^77( ^^77) ^^88"*I!7	: 	5#4#:#:#< +**7ogY4OP !	)2g&# +E#vH	)88%9AC'/Ie$!U*M++ -113 B))'=ABMM$((# $5#:#:#< 5# OE	)88%NO ))'9=++G45 !!;!;<X*I&""$ !!;!;<X*!!(+ "#.."<"<=	Y+""9- !!<!<=X*!!(+""8,= $5#:#:#< 5# OE	)88%NO ))'9=++G45s   CL, ,%N;A)N;c                 
   t               }t               }t               }dt        t        d      fd              }d }	 | j                  }t        j
                  j                  |d       t        j
                  j                  |t        |       t        j
                  j                  |t        |       t        j
                  j                  |t        |       t        j
                  j                  |t        t        z  t        z         	  |        t        j
                  j                  |t               |j                          |j                  d   }| j!                  |j"                  d   t$        j&                         | j!                  |j"                  d   d   t               | j!                  |j"                  d   d   d          |j)                          |j                  d   }	| j!                  |	j"                  d   t$        j&                         | j+                  |	j"                  d   t,               |j                  d   }
| j!                  |
j"                  d   |j.                  j&                         | j+                  |
j"                  d   t               | j1                  t3        |
j"                  d                |j                          |j                  d   }| j!                  |j"                  d   |j.                  j&                         | j+                  |j"                  d   t               | j1                  t3        |j"                  d                t        j
                  j                  |t               t        j
                  j                  |t        d        t        j
                  j                  |t        d        t        j
                  j                  |t        d        t        j
                  j5                  |       | j1                  t3        |             y # t        $ r}|}Y d }~3d }~ww xY w# t        j
                  j                  t               t        j
                  j                  |t        d        t        j
                  j                  |t        d        t        j
                  j                  |t        d        t        j
                  j5                  |       w xY w)Nexception raised()c                      t               r   )
ValueErrorr;   s   r   r   z9TestMonitoring.test_raising_under_monitoring.<locals>.foo  s     S/!r   ra   r   r   r   )r   r   r   r7   r,   r-   rb   rc   r\   RAISE	PY_UNWINDrd   r   re   r   call_args_listrK   r@   r
   r>   r   assertIsInstanceKeyErrorr|   assertInstrrf   )r8   ret_callbackraise_callbackunwind_callbackr   store_raisedr7   raisesthe_callnumba_unpickle_callfoo_callunwind_callr;   s               @r   test_raising_under_monitoringz,TestMonitoring.test_raising_under_monitoring  s   
 v& 		T	" 
 
	" .	1llGNN&&w0@ANN,,WiNNN,,We^LNN,,Wi-<>NN%%gy5/@9/LM& NN%%gy9 ++- $2215HX]]1-/G/GHX]]1-a0*=X]]1-a03S9 ((*"0"?"?"B055a8,557!!"5":":1"=xH%44Q7HX]]1-s{{/C/CD!!(--"2J?MM#s8==#345 ..0)88;K[--a0#++2F2FG!!+"2"21"5zBMM#s;#3#3A#678NN%%gy9NN,,WiFNN,,WeTBNN,,WiFNN''0c3|,-M  &%&@ NN%%gy9NN,,WiFNN,,WeTBNN,,WiFNN''0s9   CQ P8 IQ 8	QQ	Q 	QQ B4Tc                 \
   t               }t               }t               }dt        t        d      fd              }d }	 | j                  }t        j
                  j                  |d       t        j
                  j                  |t        |       t        j
                  j                  |t        |       t        j
                  j                  |t        |       t        j
                  j                  |t        t        z  t        z         	  |        t        j
                  j                  |t               |j                          |j                  d   }| j!                  |j"                  d   t$        j&                         | j!                  |j"                  d   d   t               | j!                  |j"                  d   d   d          |j)                          | j!                  |j*                  d       |j                  d   }	| j!                  |	j"                  d   t$        j&                         | j-                  |	j"                  d   t.               |j                  d   }
| j!                  |
j"                  d   |j0                  j&                         | j-                  |
j"                  d   t               | j3                  t5        |
j"                  d                |j                  d   }t	        j6                         j8                  }| j!                  |j"                  d   |       | j-                  |j"                  d   t               | j3                  t5        |j"                  d                |j;                          t        j
                  j                  |t               t        j
                  j                  |t        d        t        j
                  j                  |t        d        t        j
                  j                  |t        d        t        j
                  j=                  |       | j3                  t5        |             y # t        $ r}|}Y d }~Yd }~ww xY w# t        j
                  j                  t               t        j
                  j                  |t        d        t        j
                  j                  |t        d        t        j
                  j                  |t        d        t        j
                  j=                  |       w xY w)	Nr   r   c                      t               r   )StopIterationr   s   r   r   z@TestMonitoring.test_stop_iteration_under_monitoring.<locals>.foo  s      $$r   ra   r   r   r   r   )r   r   r   r7   r,   r-   rb   rc   r\   r   STOP_ITERATIONrd   r   re   r   r   rK   r@   r
   r>   r   rV   r   r   r|   r   r   	_getframef_coder}   rf   )r8   return_callbackr   stopiter_callbackr   r   r7   r   r   r   r   	meth_calltest_method_coder;   s                @r   $test_stop_iteration_under_monitoringz3TestMonitoring.test_stop_iteration_under_monitoring  s    & F 		T	% 
 
	% :	1llGNN&&w0@ANN,,Wi-<>NN,,We-;=NN,,Wn->@NN%%g&/.&@5&HJ& NN%%gy9 ..0 '55a8HX]]1-/G/GHX]]1-a0-@X]]1-a03S9 ((*^66: #1"?"?"B055a8,557!!"5":":1"=xH &44Q7HX]]1-s{{/C/CD!!(--"2MBMM#s8==#345 '55a8I"}}55Y^^A.0@A!!).."3]CMM#s9>>!#456 //1NN%%gy9NN,,WiFNN,,WndKNN,,WeTBNN''0c3|,-_ ! &%&R NN%%gy9NN,,WiFNN,,WndKNN,,WeTBNN''0s9   CQ7 Q I:Q7 	Q4'Q/)Q7 /Q44Q7 7B4T+c                 t   d}t        t        |            }d }	 t        }| j                  }t        j
                  j                  |d       t        j
                  j                  ||       t        j
                  j                  |||       | j                  | j                         t        j
                  j                  d        t        j
                  j                  |t               t        j
                  j                  |       |j                          | j                  |t        |             y # t        $ r}|}Y d }~d }~ww xY w# t        j
                  j                  d        t        j
                  j                  |t               t        j
                  j                  |       w xY w)Ndeliberately broken callbackside_effectra   )r   r   rJ   r7   r,   r-   rb   rd   rc   r   r3   re   rf   r   r   r   )r8   r;   rn   r   rm   r7   r   s          r   6test_raising_callback_unwinds_from_jit_on_success_pathzETestMonitoring.test_raising_callback_unwinds_from_jit_on_success_path`  s1   
 -JsO4	1EllGNN&&w0@ANN%%gu5NN,,WeXFHHTXX NN,,WeTBNN%%gy9NN''0##%c3|,-  	"!L	" NN,,WeTBNN%%gy9NN''0s+   BD9 9	EE	E 	EE A&F7c                 f   d}dt        t        |            } G d dt              t        t	        d      fd              }d }	 t
        }| j                  }t        j                  j                  |d       t        j                  j                  ||       t        j                  j                  |||        |        t        j                  j                  d        t        j                  j                  |t               t        j                  j                  |       |j                          | j                  |j                   d	       |j"                  d
   }| j                  |j$                  d
   t&        j(                         | j+                  |j$                  d   t,               |j"                  d   }	| j                  |	j$                  d
   |j.                  j(                         | j1                  |	j$                  d   |j2                         |j"                  d   }
t        j4                         j6                  }| j                  |
j$                  d
   |       | j1                  |
j$                  d   |j2                         | j1                  ||j2                         y # t        $ r}|}Y d }~d }~ww xY w# t        j                  j                  d        t        j                  j                  |t               t        j                  j                  |       w xY w)Nr   deliberately broken executionr   c                       e Zd Zy)]TestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path.<locals>.LocalExceptionN__name__
__module____qualname__r   r   r   LocalExceptionr         r   r   r   c                              r   r   r   msg_executions   r   raisingzVTestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path.<locals>.raising       !//r   ra   r   r   r   r   )r   r   	Exceptionr   r   r   r7   r,   r-   rb   rd   rc   re   rf   r   rK   rV   r   r@   r
   r>   r   r   r|   assertIsr   r   r   )r8   msg_callbackrn   r   r   rm   r7   r   r   raising_callr   r   r   r   s               @@r   6test_raising_callback_unwinds_from_jit_on_raising_pathzETestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path{  sv    67J|$<=	Y 	 
	T	0 
 
	0 	1EllGNN&&w0@ANN%%gu5NN,,WeXFI NN,,WeTBNN%%gy9NN''0 ,,a0 '55a8,11!4o6N6NO166q98D  ..q1**1-w/G/GHl''*H,@,@A ++A.	==?11*,<=innQ')=)=> 	lH$8$899  	"!L	" NN,,WeTBNN%%gy9NN''0s,   A:J1 1	K:K<K
 KK
 
A&L0c                   	
 d}d
t        t        |            } G d dt              	t        t	        d      	
fd              }d }	 t
        }| j                  }t        j                  j                  |d       t        j                  j                  ||       t        j                  j                  |||        |        t        j                  j                  d        t        j                  j                  |t               t        j                  j                  |       |j                          |j                  d	   }| j!                  |j"                  d	   |j$                  j&                         | j!                  t)        |j"                  d
         	       | j!                  t+        |j"                  d
         
       | j-                  ||j.                         y # t        $ r}|}Y d }~4d }~ww xY w# t        j                  j                  d        t        j                  j                  |t               t        j                  j                  |       w xY w)Nr   r   r   c                       e Zd Zy)\TestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path.<locals>.LocalExceptionNr   r   r   r   r   r     r   r   r   r   c                              r   r   r   s   r   r   zUTestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path.<locals>.raising  r   r   ra   r   r   )r   r   r   r   r   r   r7   r,   r-   rb   rd   rc   re   rf   r   r   rK   r@   r|   r>   typer   r   r   )r8   r   rn   r   r   rm   r7   r   r   r   r   s            @@r   5test_raising_callback_unwinds_from_jit_on_unwind_pathzDTestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path  s    67J|$<=	Y 	 
	T	0 
 
	0 	1EllGNN&&w0@ANN%%gu5NN,,WeXFI NN,,WeTBNN%%gy9NN''0##%  ..q1**1-w/G/GHl//23^D\..q12MB 	lH$8$89!  	"!L	" NN,,WeTBNN%%gy9NN''0s,   A:G( (	G>1G93H 9G>>H A&I'c                    
 t        j                  d      

fdfd}fd}t        j                         }t        j                  | |f      }t        j                         }t        j                  | |f      }||f}|D ]  }|j                           |D ]  }|j                            fd}	 |	|        |	|       y )Nr   c                  &     j                          y r   )wait)ri   s   r   
barrier_cbzCTestMonitoring.test_monitoring_multiple_threads.<locals>.barrier_cb  s    LLNr   c                    	 | j                  | j                  | j                  ft        ft        j
                  j                        }| j                  t        |      d       | j                  |       y # t        $ r=}|j                  dj                  t        j                  |                   Y d }~y d }~ww xY wN)r7   ri   r    )ro   r   r3   rJ   r,   r-   r   rK   rL   rT   r   putr1   	tracebackformat_exceptionr8   qrr   er   s       r   t1_workz@TestMonitoring.test_monitoring_multiple_threads.<locals>.t1_work  s    
>))$--$((+3+25..2L2L2< * >
   R!,66r: >bggi88;<==>   A4A8 8	B>3B99B>c                    	 | j                  | j                  | j                  ft        ft        j
                  j                        }| j                  t        |      d       | j                  |       y # t        $ r=}|j                  dj                  t        j                  |                   Y d }~y d }~ww xY wr  )ro   r   r3   r\   r,   r-   r   rK   rL   r]   r   r  r1   r  r  r  s       r   t2_workz@TestMonitoring.test_monitoring_multiple_threads.<locals>.t2_work  s    
>))$--$((+4,25..2L2L2< * >
   R!,77; >bggi88;<==>r
  )targetr@   c                     | j                         dk7  rL| j                         s*t        | j                                | j                         s*j	                  d       y y )Nr   zqueue supposed to be empty)qsizeemptyprintgetfail)r  r8   s    r   assert_empty_queuezKTestMonitoring.test_monitoring_multiple_threads.<locals>.assert_empty_queue  sC    wwyA~'')!%%'N '')		67 r   )	threadingBarrierqueueQueueThreadstartr1   )r8   r	  r  q1t1q2t2threadstr  ri   r   s   `         @@r    test_monitoring_multiple_threadsz/TestMonitoring.test_monitoring_multiple_threads  s     ##A&		>	> [[]WD":>[[]WD":>r( 	AGGI	 	AFFH		8 	22r   )NN)r   r   r   r<   rF   rT   rY   r]   r_   ro   rs   ru   rw   r   r   r   r   r   r   r   r   r   r   r   r   r!  r   r   r   r'   r'   0   s    2,-*	-*  ?C $#J&'&.1B1&)21*"1H(1T?-BA.FP.d.69:v.:`8r   r'   c                       e Zd Zd Zy)TestMonitoringSelfTestc                     | j                  t        j                  ddddi      }| j                  dt	        |             y )Nr'   rs   z-mcProfile)flagsz	skipped=1)subprocess_test_runnerr'   r   r   r   )r8   rs     r   +test_skipping_of_tests_if_monitoring_in_usezBTestMonitoringSelfTest.test_skipping_of_tests_if_monitoring_in_use$  sD     ''(A(A(8(:/3Z.@ ( B 	k3q6*r   N)r   r   r   r)  r   r   r   r#  r#  !  s    +r   r#  c                       e Zd Z ej                  ddi      d        Z ej                  ddi      d        Z ej                  ddi      d        Zy	)
TestMonitoringEnvVarControlNUMBA_ENABLE_SYS_MONITORINGr  )envvarsc                 R    t         d        }| j                  |j                         y )Nc                     | dz   S r   r   r   s    r   r   z9TestMonitoringEnvVarControl.test_default_off.<locals>.foo4  rz   r   r   assertFalser   r8   r   s     r   test_default_offz,TestMonitoringEnvVarControl.test_default_off1  ,     
	 
	 	++,r   0c                 R    t         d        }| j                  |j                         y )Nc                     | dz   S r   r   r   s    r   r   z:TestMonitoringEnvVarControl.test_override_off.<locals>.foo=  rz   r   r0  r2  s     r   test_override_offz-TestMonitoringEnvVarControl.test_override_off:  r4  r   1c                 R    t         d        }| j                  |j                         y )Nc                     | dz   S r   r   r   s    r   r   z9TestMonitoringEnvVarControl.test_override_on.<locals>.fooF  rz   r   )r   
assertTruer   r2  s     r   test_override_onz,TestMonitoringEnvVarControl.test_override_onC  s*     
	 
	 	**+r   N)r   r   r   r   run_test_in_subprocessr3  r8  r=  r   r   r   r+  r+  /  s{    $X$$.35-5- %X$$.46-6- %X$$.46,6,r   r+  __main__)%rM   r  r,   r  r  unittestcollectionsr   unittest.mockr   r   numba.tests.supportr   numbar   r   numba.core.utilsr	   numba.core.serializer
   r   r   r-   rh   rJ   r\   r   r   r   re   r0   
skipUnlessr'   r#  r+  r   mainr   r   r   <module>rI     s   
  
     $ (  & 0	 ""~~$$--H%%//INN!!''E%%//I^^**99N%%//I #""#%  Y')+?@mX m Am` Y')+?@
+X 
+ A
+ Y')+?@,( , A,: zHMMO r   