
    |h                     2   S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	J
r
  S SKJr  S SKJrJr  S SKJr  S SKJr  S rS	 r\S
;   a  \R,                  R.                  R0                  r\R,                  R.                  R2                  r\R,                  R.                  R4                  r\R,                  R.                  R6                  r\R,                  R.                  R8                  r\R,                  R.                  R:                  rSSSSS.r\R>                  " \S:  S5       " S S\5      5       r \R>                  " \S:  S5       " S S\5      5       r!\R>                  " \S:  S5       " S S\5      5       r"\#S:X  a  \RH                  " 5         gg)    N)Counter)Mockcall)TestCase)jitobjmode)	PYVERSION)_numba_unpicklec                     SU l         U $ )z4Decorator to enable sys.monitoring on the dispatcherT)_enable_sysmon)disps    Y/home/james-whalen/.local/lib/python3.13/site-packages/numba/tests/test_sys_monitoring.pyr   r      s    DK    c                  L   ^ [         [        S5      S 5       5       mU4S jn TU 4$ )Nint64(int64)c                     U S-   $ N    xs    r   foogenerate_usecase.<locals>.foo   s     1ur   c                     > ST" U S-   5      -  $ )N      r   )r   r   s    r   call_foo"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                       \ rS rSrS rS rS rS rS rS r	  SS	 jr
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)TestMonitoring0   c                    / n[        S5       H=  n[        R                  R                  U5      c  M%  UR	                  [
        U   5        M?     U(       a%  SSR                  U5       3nU R                  U5        [        5       u  U l	        U l
        SU l        U R                  S-   S-   U l        SU R                  -  U l        [        R                  R                  U l        g )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   setUpTestMonitoring.setUp9   s     qA~~&&q)5$$%5a%89  8ii./1C MM# #3"4$-((Q,* 4??2~~11r   c                     [        5       nU R                  R                  U R                  R                  1nUR                   H'  nUR
                  tpVXS;   d  M  X%/UQ7==   S-  ss'   M)     U$ r   )r   r   __code__r   _mock_call_args_listargs)r;   	mockcallsmatchedtarget_codeobjscb_argscodeobjrD   s          r   gather_mock_calls_multithreads-TestMonitoring.gather_mock_calls_multithreadsO   sf    )==114883D3DE 55G&||W)(4()Q.) 6 r   c                    U R                  U[           5      nU R                  [        U5      S5        [        R
                  " U R                  5       Vs/ s H  nUR                  S:X  d  M  UPM     nnUS   R                  nU R                  X R                  R                  U4   S5        U R                  X R                  R                  S4   S5        U R                  UR                  5       S5        g s  snf )Nr   RESUMEr      )rJ   PY_STARTassertEquallendisget_instructionsr   opnameoffsetrB   r   total)r;   allcallsrF   r   instrU   s         r   !check_py_start_calls_multithreads0TestMonitoring.check_py_start_calls_multithreadsY   s     55hx6HIWq) //> )>a88x' > )a!7!7!?@!D!2!2A!56:!,)s   C:.C:c                    U[            nU R                  UR                  S5        [        R                  " U R
                  5       Vs/ s H  nUR                  S:X  d  M  UPM     nnUS   R                  n[        U R
                  R                  U5      [        U R                  R                  S5      4nUR                  U5        g s  snf )Nr   rM   r   )rO   rP   
call_countrR   rS   r   rT   rU   r   rB   r   assert_has_calls)r;   rW   rE   r   rX   rU   callss          r   check_py_start_calls#TestMonitoring.check_py_start_callsg   s     X&	--q1//> )>a88x' > )admm,,f5dhh''+-""5))s   C	 C	c                    U R                  U[           5      n[        R                  " U R                  5       Vs/ s H  o3PM     snS   R
                  nU R                  X R                  R                  SU R                  4   S5        U R                  X R                  R                  X@R                  4   S5        U R                  UR                  5       S5        g s  snf )Nr   r   rN   )rJ   	PY_RETURNrR   rS   r   rU   rP   r   rB   r7   r8   rV   )r;   rW   rF   r   rU   s        r   "check_py_return_calls_multithreads1TestMonitoring.check_py_return_calls_multithreadsu   s     55hy6IJ 11$--@A@!@A"ELL!2!2At!FGKMM**F4H4HHI1	
 	!, Bs   C c                    U[            nU R                  UR                  S5        [        R                  " U R
                  5       Vs/ s H  o3PM     snS   R                  n[        U R                  R                  SU R                  5      [        U R
                  R                  X@R                  5      /nUR                  U5        g s  snf )Nr   rb   r   )rc   rP   r\   rR   rS   r   rU   r   r   rB   r7   r8   r]   )r;   rW   rE   r   rU   r^   s         r   check_py_return_calls$TestMonitoring.check_py_return_calls   s     Y'	--q1 !11$--@A@!@A"ELLdhh''DOO<dmm,,f6J6JKM""5) Bs   C
Nc                 (    Uc  U R                   nOUn[        R                  R                  US5        0 nSnU H5  n	[	        5       n
[        R                  R                  XiU
5        XU	'   X-  nM7     [        R                  R                  Xh5        Ub  U" 5         U" U6   Ub  U" 5         [        R                  R                  U[        5        U H#  n	[        R                  R                  XiS 5        M%     [        R                  R                  U5        U$ ! Ub  U" 5         [        R                  R                  W[        5        U H#  n	[        R                  R                  XiS 5        M%     [        R                  R                  U5        f = f)Ncustom_monitorr   )	r:   r/   r0   use_tool_idr   register_callback
set_events	NO_EVENTSfree_tool_id)r;   functionrD   eventsr:   barrier_tool_id	callbacksevent_bitmaskeventcallbacks              r   run_with_eventsTestMonitoring.run_with_events   sB   
	2<<"NN&&x1ABIM600(K#+% &	   NN%%h>"	dO " 	NN%%h	:00$G  NN''1 " 	NN%%h	:00$G  NN''1s   BD A8Fc                     U R                  U R                  U R                  4[        45      nU R	                  [        U5      S5        U R                  U5        g r   )rx   r   r6   rO   rP   rQ   r_   r;   cbs     r   test_start_eventTestMonitoring.test_start_event   sD    !!$--$((xkJR!$!!"%r   c                     U R                  U R                  U R                  4[        45      nU R	                  [        U5      S5        U R                  U5        g r   )rx   r   r6   rc   rP   rQ   rg   r{   s     r   test_return_event TestMonitoring.test_return_event   sD    !!$--$((ylKR!$""2&r   c                     U R                  U R                  U R                  4[        [        45      nU R                  [        U5      S5        U R                  U5        U R                  U5        g )Nr   )	rx   r   r6   rO   rc   rP   rQ   rg   r_   r{   s     r   test_call_event_chain$TestMonitoring.test_call_event_chain   sZ    !!$--$((#+Y"79 	R!$""2&!!"%r   c                 J   [        S5      S 5       n U R                  n[        R                  R	                  US5        0 nSn[
        [        4nU H5  n[        5       n[        R                  R                  X&U5        XsU'   XF-  nM7     [        R                  R                  X!R                  U5        U" U R                  5      nU H#  n[        R                  R                  X&S 5        M%     [        R                  R                  X!R                  S5        [        R                  R                  U5        U R                  XR                  U R                  5      5        U R                  [        U5      S5        U[
           R!                  5         U[           R!                  5         g ! W H$  n[        R                  R                  WUS 5        M&     [        R                  R                  WUR                  S5        [        R                  R                  U5        f = f)Nr   c                     U S-   $ )Nr!   r   r   s    r   r   PTestMonitoring.test_instrumented_code_does_not_trigger_numba_events.<locals>.foo       q5Lr   rj   r   r   )r   r:   r/   r0   rk   rO   rc   r   rl   set_local_eventsrB   r6   ro   rP   py_funcrQ   assert_not_called)	r;   r   r:   rt   ru   rq   rv   rw   results	            r   4test_instrumented_code_does_not_trigger_numba_eventsCTestMonitoring.test_instrumented_code_does_not_trigger_numba_events   s   	^		 
		1llGNN&&w0@AIM	*F600J#+% &	   NN++G\\,9;]F00F  NN++G\\1ENN''0 	TXX!67Y+(--/)..0  00%F  NN++GS\\1ENN''0s   B3F, ,A6H"c                 T   S n U R                   n[        R                  R                  US5        [        R                  R	                  X!R
                  [        5        [        R                  R                  U[        [        5       5        [        U5      " U R                  5      nU R                  X1" U R                  5      5        [        R                  R                  U[        S 5        [        R                  R	                  X!R
                  S5        [        R                  R                  U5        g ! [        R                  R                  W[        S 5        [        R                  R	                  X!R
                  S5        [        R                  R                  U5        f = f)Nc                     U S-   $ r   r   r   s    r   r   BTestMonitoring.test_instrumented_code_can_be_compiled.<locals>.foo   s    q5Lr   rj   r   )r:   r/   r0   rk   r   rB   rO   rl   r   r   r6   rP   ro   )r;   r   r:   r   s       r   &test_instrumented_code_can_be_compiled5TestMonitoring.test_instrumented_code_can_be_compiled   s   		1llGNN&&w0@ANN++G\\8LNN,,WhGXdhh'FVS]3NN,,WhENN++G\\1ENN''0 NN,,WhENN++G\\1ENN''0s   CD7 7A0F'c                    S n[         R                  R                  R                  nS nU" U5      nU R	                  USU45      nXR   R                  5         U" [        5      nU R	                  USU45      nXr   R                  5         g )Nc                 F   ^ U " S5      S 5       mU " S5      U4S j5       nU$ )Nzvoid()c               3      #    Sv   g 7f)Nr-   r   r   r   r   producerTTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate.<locals>.producer  s
     s   zint64()c                  (   > T" 5       n [        U 5      $ N)next)pr   s    r   consumerTTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate.<locals>.consumer  s    JAwr   r   )decr   r   s     @r   generateBTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate  s8    ]  ^  Or   c                     S $ )Nc                     U $ r   r   )fns    r   <lambda>TTestMonitoring.test_unhandled_events_are_ignored.<locals>.<lambda>.<locals>.<lambda>  s    r   r   )sigs    r   r   BTestMonitoring.test_unhandled_events_are_ignored.<locals>.<lambda>  s    mr   r   )r/   r0   rq   PY_YIELDrx   assert_called_oncer   r   )r;   r   rv   wrapperpy_consumerpy_cbnb_consumernb_cbs           r   !test_unhandled_events_are_ignored0TestMonitoring.test_unhandled_events_are_ignored  s~    
	 %%..+w'$$["x@'')sm$$["x@&&(r   c                     [         nU R                  n[        R                  R	                  US5        [        R                  R                  X!5        [        R                  R                  U5      nU R                  X15        U R                  U R                  5      n[        R                  R                  U5      nU R                  X15        U R                  X@R                  5        [        R                  R                  U[        5        [        R                  R                  U5        g ! [        R                  R                  W[        5        [        R                  R                  U5        f = f)Nrj   )rO   r:   r/   r0   rk   rm   
get_eventsrP   r   r6   r8   rn   ro   )r;   rv   r:   active_eventsr   s        r    test_event_with_no_callback_runs/TestMonitoring.test_event_with_no_callback_runs'  s    
	1EllGNN&&w0@ANN%%g5NN55g>M]2]]488,FNN55g>M]2V%9%9:NN%%gy9NN''0 NN%%gy9NN''0s   C'D- -AE2c                    [        [        R                  R                  S9n [        nU R
                  n[        R                  R                  US5        [        R                  R                  X25        [        R                  R                  X2U5        [        R                  R                  U5      nU R                  XB5        U R                  U R                  5      n[        R                  R                  U5      nU R                  XB5        U R                  XPR                  5        UR                  5         [        R                  R                  5         [        R                  R                  X2S 5        [        R                  R                  U[         5        [        R                  R#                  U5        g ! [        R                  R                  5         [        R                  R                  WWS 5        [        R                  R                  U[         5        [        R                  R#                  U5        f = f)N)return_valuerj   )r   r/   r0   DISABLErO   r:   rk   rm   rl   r   rP   r   r6   r8   assert_calledrestart_eventsrn   ro   )r;   rw   rv   r:   r   r   s         r   test_disable_from_callback)TestMonitoring.test_disable_from_callback<  sx    S^^%;%;<	1EllGNN&&w0@ANN%%g5NN,,WXFNN55g>M]2]]488,FNN55g>M]2V%9%9:""$ NN))+NN,,WTBNN%%gy9NN''0 NN))+NN,,WeTBNN%%gy9NN''0s   DF< <BI c                   ^^^  U R                   m[        R                  R                  TS5        [        m[        5       n[        R                  R                  TTU5        UU4S jm[        [        S5      U4S j5       5       nU" S5        UR                  5         U" S5        [        R                  R                  T[        5        UR                  5         U R                  UR                  S5        [        R                  R                  T[        5        [        R                  R                  TTS 5        [        R                  R                  T5        g ! [        R                  R                  T[        5        [        R                  R                  TTS 5        [        R                  R                  T5        f = f)Nrj   c                 V   > U (       a!  [         R                  R                  TT5        g g r   )r/   r0   rm   )switch_on_eventrv   r:   s    r   objmode_enable_eventGTestMonitoring.test_mutation_from_objmode.<locals>.objmode_enable_eventl  s    "NN--gu= #r   r   c                 f   > [            T" U 5        S S S 5        U S-   $ ! , (       d  f       U S-   $ = f)N   )r   )enabler   s    r   r   6TestMonitoring.test_mutation_from_objmode.<locals>.foop  s1     (0 z! Wz!s   	
0r   r   r   )r:   r/   r0   rk   rc   r   rl   r   r   r   rm   rn   r   rP   r\   ro   )r;   rw   r   rv   r   r:   s      @@@r   test_mutation_from_objmode)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   C1E A&Gc           	         [         R                  R                  [        4[         R                  R                  [
        4[         R                  R                  [        4[         R                  R                  [
        [        40n0 n UR                  5        Hu  u  p4[         R                  R                  USU 35        Sn0 nXbU'   U H?  n[        5       nU[        :w  a   [         R                  R                  X7U5        XU'   XW-  nMA     Mw     UR                  5        H#  n[         R                  R                  UW5        M%     U R                  U R                   5        UR                  5        H}  u  p4U H/  nU[        :w  d  M  [         R                  R                  X7S 5        M1     [         R                  R                  U[        5        [         R                  R#                  U5        M     U[         R                  R                     n	U R%                  ['        U	5      S5        U	[           nUR)                  5         U[         R                  R                     n
U R%                  ['        U
5      S5        U R+                  U
5        U[         R                  R                     nU R%                  ['        U5      S5        U R-                  U5        U[         R                  R                     nU R%                  ['        U5      S5        U R+                  U5        U R-                  U5        g ! UR                  5        H}  u  p4U H/  nU[        :w  d  M  [         R                  R                  X7S 5        M1     [         R                  R                  U[        5        [         R                  R#                  U5        M     f = f)Ncustom_monitor_r   r   r   )r/   r0   DEBUGGER_IDrn   COVERAGE_IDrO   r9   rc   OPTIMIZER_IDitemsrk   r   rl   keysrm   r   r6   ro   rP   rQ   r   r_   rg   )r;   tool_ids_2_eventsall_callbacksr:   rq   ru   rt   rv   rw   dbg_toolcov_tool	prof_toolopt_tools                r   test_multiple_tool_id$TestMonitoring.test_multiple_tool_id  s    !^^77) ^^77( ^^77) ^^88"*I!7	: 	5#4#:#:#<**7ogY4OP !	)2g&#E#vH	)889AC'/e$!*M $ $= -113))'=A 4MM$((# $5#:#:#<#E	)88N $ ))'9=++G4 $= !!;!;<X*I&""$ !!;!;<X*!!(+ "#.."<"<=	Y+""9- !!<!<=X*!!(+""8,= $5#:#:#<#E	)88N $ ))'9=++G4 $=s   CL1 1#OA,Oc                 
  ^ [        5       n[        5       n[        5       nSm[        [        S5      U4S j5       5       nS n U R                  n[        R
                  R                  US5        [        R
                  R                  U[        U5        [        R
                  R                  U[        U5        [        R
                  R                  U[        U5        [        R
                  R                  U[        [        -  [        -  5         U" 5         [        R
                  R                  U[        5        UR                  5         UR                  S   nU R!                  UR"                  S   [$        R&                  5        U R!                  UR"                  S   S   [        5        U R!                  UR"                  S   S   S   T5        UR)                  5         UR                  S   n	U R!                  U	R"                  S   [$        R&                  5        U R+                  U	R"                  S   [,        5        UR                  S   n
U R!                  U
R"                  S   UR.                  R&                  5        U R+                  U
R"                  S   [        5        U R1                  T[3        U
R"                  S   5      5        UR                  5         UR                  S   nU R!                  UR"                  S   UR.                  R&                  5        U R+                  UR"                  S   [        5        U R1                  T[3        UR"                  S   5      5        [        R
                  R                  U[        5        [        R
                  R                  U[        S 5        [        R
                  R                  U[        S 5        [        R
                  R                  U[        S 5        [        R
                  R5                  U5        U R1                  T[3        U5      5        g ! [         a  nUn S nAGN4S nAff = f! [        R
                  R                  W[        5        [        R
                  R                  U[        S 5        [        R
                  R                  U[        S 5        [        R
                  R                  U[        S 5        [        R
                  R5                  U5        f = f)Nexception raised()c                     > [        T 5      er   )
ValueErrorr>   s   r   r   9TestMonitoring.test_raising_under_monitoring.<locals>.foo  s     S/!r   rj   r   r   r   )r   r   r   r:   r/   r0   rk   rl   rc   RAISE	PY_UNWINDrm   r   rn   r   call_args_listrP   rD   r
   rB   r   assertIsInstanceKeyErrorr   assertInstrro   )r;   ret_callbackraise_callbackunwind_callbackr   store_raisedr:   raisesthe_callnumba_unpickle_callfoo_callunwind_callr>   s               @r   test_raising_under_monitoring,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 P9 IQ 9
QQQ QQ B4Tc                 b
  ^ [        5       n[        5       n[        5       nSm[        [        S5      U4S j5       5       nS n U R                  n[        R
                  R                  US5        [        R
                  R                  U[        U5        [        R
                  R                  U[        U5        [        R
                  R                  U[        U5        [        R
                  R                  U[        [        -  [        -  5         U" 5         [        R
                  R                  U[        5        UR                  5         UR                  S   nU R!                  UR"                  S   [$        R&                  5        U R!                  UR"                  S   S   [        5        U R!                  UR"                  S   S   S   T5        UR)                  5         U R!                  UR*                  S5        UR                  S   n	U R!                  U	R"                  S   [$        R&                  5        U R-                  U	R"                  S   [.        5        UR                  S   n
U R!                  U
R"                  S   UR0                  R&                  5        U R-                  U
R"                  S   [        5        U R3                  T[5        U
R"                  S   5      5        UR                  S   n[        R6                  " 5       R8                  nU R!                  UR"                  S   U5        U R-                  UR"                  S   [        5        U R3                  T[5        UR"                  S   5      5        UR;                  5         [        R
                  R                  U[        5        [        R
                  R                  U[        S 5        [        R
                  R                  U[        S 5        [        R
                  R                  U[        S 5        [        R
                  R=                  U5        U R3                  T[5        U5      5        g ! [         a  nUn S nAGN[S nAff = f! [        R
                  R                  W[        5        [        R
                  R                  U[        S 5        [        R
                  R                  U[        S 5        [        R
                  R                  U[        S 5        [        R
                  R=                  U5        f = f)	Nr   r   c                     > [        T 5      er   )StopIterationr   s   r   r   @TestMonitoring.test_stop_iteration_under_monitoring.<locals>.foo  s      $$r   rj   r   r   r   r!   )r   r   r   r:   r/   r0   rk   rl   rc   r   STOP_ITERATIONrm   r   rn   r   r   rP   rD   r
   rB   r   r\   r   r   r   r   r   	_getframef_coder   ro   )r;   return_callbackr   stopiter_callbackr   r   r:   r   r   r   r   	meth_calltest_method_coder>   s                @r   $test_stop_iteration_under_monitoring3TestMonitoring.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Q: Q  I;Q:  
Q7*Q2,Q: 2Q77Q: :B4T.c                 l   Sn[        [        U5      S9nS n [        nU R                  n[        R
                  R                  US5        [        R
                  R                  XT5        [        R
                  R                  XTU5        U R                  U R                  5        [        R
                  R                  WWS 5        [        R
                  R                  U[        5        [        R
                  R                  U5        UR                  5         U R                  U[        U5      5        g ! [         a  nUn S nANS nAff = f! [        R
                  R                  WWS 5        [        R
                  R                  U[        5        [        R
                  R                  U5        f = f)Ndeliberately broken callbackside_effectrj   )r   r   rO   r:   r/   r0   rk   rm   rl   r   r6   rn   ro   r   r   r   )r;   r>   rw   r   rv   r:   r   s          r   6test_raising_callback_unwinds_from_jit_on_success_pathETestMonitoring.test_raising_callback_unwinds_from_jit_on_success_path`  s-   
 -JsO4	1EllGNN&&w0@ANN%%g5NN,,WXFHHTXX NN,,WeTBNN%%gy9NN''0##%c3|,-  	"!L	" NN,,WeTBNN%%gy9NN''0s+   BD4 4
E
>E E E

E A&F3c                 `  ^^ SnSm[        [        U5      S9n " S S[        5      m[        [	        S5      UU4S j5       5       nS n [
        nU R                  n[        R                  R                  US5        [        R                  R                  Xe5        [        R                  R                  XeU5        U" 5         [        R                  R                  WWS 5        [        R                  R                  U[        5        [        R                  R                  U5        UR                  5         U R                  UR                   S	5        UR"                  S
   nU R                  UR$                  S
   [&        R(                  5        U R+                  UR$                  S   [,        5        UR"                  S   n	U R                  U	R$                  S
   UR.                  R(                  5        U R1                  U	R$                  S   UR2                  5        UR"                  S   n
[        R4                  " 5       R6                  nU R                  U
R$                  S
   U5        U R1                  U
R$                  S   UR2                  5        U R1                  XBR2                  5        g ! [         a  nUn S nAGNS nAff = f! [        R                  R                  WWS 5        [        R                  R                  U[        5        [        R                  R                  U5        f = f)Nr   deliberately broken executionr   c                       \ rS rSrSrg)]TestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path.<locals>.LocalExceptioni  r   N__name__
__module____qualname____firstlineno____static_attributes__r   r   r   LocalExceptionr        r   r  r   c                     > T " T5      er   r   r  msg_executions   r   raisingVTestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path.<locals>.raising       !//r   rj   r!   r   r   r   )r   r   	Exceptionr   r   r   r:   r/   r0   rk   rm   rl   rn   ro   r   rP   r\   r   rD   r
   rB   r   r   r   assertIsr  r   r   )r;   msg_callbackrw   r  r   rv   r:   r   r   raising_callr   r   r  r  s               @@r   6test_raising_callback_unwinds_from_jit_on_raising_pathETestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path{  sp    67J|$<=	Y 	 
	T	0 
 
	0 	1EllGNN&&w0@ANN%%g5NN,,WX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')=)=> 	l$8$899  	"!L	" NN,,WeTBNN%%gy9NN''0s,   	A8J- -
K7J?9K ?KK A&L-c                   ^	^
 SnSm
[        [        U5      S9n " S S[        5      m	[        [	        S5      U	U
4S j5       5       nS n [
        nU R                  n[        R                  R                  US5        [        R                  R                  Xe5        [        R                  R                  XeU5        U" 5         [        R                  R                  WWS 5        [        R                  R                  U[        5        [        R                  R                  U5        UR                  5         UR                  S	   nU R!                  UR"                  S	   UR$                  R&                  5        U R!                  [)        UR"                  S
   5      T	5        U R!                  [+        UR"                  S
   5      T
5        U R-                  XBR.                  5        g ! [         a  nUn S nAGN4S nAff = f! [        R                  R                  WWS 5        [        R                  R                  U[        5        [        R                  R                  U5        f = f)Nr   r  r   c                       \ rS rSrSrg)\TestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path.<locals>.LocalExceptioni  r   Nr  r   r   r   r  r    r  r   r  r   c                     > T " T5      er   r   r  s   r   r  UTestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path.<locals>.raising  r  r   rj   r   r   )r   r   r  r   r   r   r:   r/   r0   rk   rm   rl   rn   ro   r   r   rP   rD   r   rB   typer   r  r  )r;   r  rw   r  r   rv   r:   r   r  r  r  s            @@r   5test_raising_callback_unwinds_from_jit_on_unwind_pathDTestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path  s    67J|$<=	Y 	 
	T	0 
 
	0 	1EllGNN&&w0@ANN%%g5NN,,WX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 	l$8$89!  	"!L	" NN,,WeTBNN%%gy9NN''0s,   	A8G# #
G:-G5/G= 5G::G= =A&I#c                   ^ ^
^ [         R                  " S5      m
U
4S jmU4S jnU4S jn[        R                  " 5       n[         R                  " UT U4S9n[        R                  " 5       n[         R                  " UT U4S9nXF4nU H  nUR                  5         M     U H  nUR                  5         M     U 4S jn	U	" U5        U	" U5        g )Nr   c                  &   > T R                  5         g r   )wait)rr   s   r   
barrier_cbCTestMonitoring.test_monitoring_multiple_threads.<locals>.barrier_cb  s    LLNr   c                   >  U R                  U R                  U R                  4[        4[        R
                  R                  TS9nU R                  [        U5      S5        U R                  U5        g ! [         a>  nUR                  SR                  [        R                  " U5      5      5         S nAg S nAff = fN)r:   rr   r    )rx   r   r6   rO   r/   r0   r   rP   rQ   rY   r  putr4   	tracebackformat_exceptionr;   qr|   er'  s       r   t1_work@TestMonitoring.test_monitoring_multiple_threads.<locals>.t1_work  s    
>))$--$((+3+25..2L2L2< * >
   R!,66r: >bggi88;<==>   A1A5 5
B=?4B88B=c                   >  U R                  U R                  U R                  4[        4[        R
                  R                  TS9nU R                  [        U5      S5        U R                  U5        g ! [         a>  nUR                  SR                  [        R                  " U5      5      5         S nAg S nAff = fr*  )rx   r   r6   rc   r/   r0   r   rP   rQ   rd   r  r,  r4   r-  r.  r/  s       r   t2_work@TestMonitoring.test_monitoring_multiple_threads.<locals>.t2_work  s    
>))$--$((+4,25..2L2L2< * >
   R!,77; >bggi88;<==>r4  )targetrD   c                    > U R                  5       S:w  aW  U R                  5       (       d0  [        U R                  5       5        U R                  5       (       d  M0  TR	                  S5        g g )Nr   zqueue supposed to be empty)qsizeemptyprintgetfail)r0  r;   s    r   assert_empty_queueKTestMonitoring.test_monitoring_multiple_threads.<locals>.assert_empty_queue  sG    wwyA~''))!%%'N ''))		67 r   )	threadingBarrierqueueQueueThreadstartr4   )r;   r2  r6  q1t1q2t2threadstr?  rr   r'  s   `         @@r    test_monitoring_multiple_threads/TestMonitoring.test_monitoring_multiple_threads  s     ##A&		>	> [[]WD":>[[]WD":>(AGGI AFFH 	8 	22r   )r6   r   r8   r   r7   r:   )NN)r	  r
  r  r  r?   rJ   rY   r_   rd   rg   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r  r  r"  rM  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                       \ rS rSrS rSrg)TestMonitoringSelfTesti!  c                 ~    U R                  [        R                  SSSS0S9nU R                  S[	        U5      5        g )Nr)   r}   z-mcProfile)flagsz	skipped=1)subprocess_test_runnerr)   r
  r   r   )r;   rs     r   +test_skipping_of_tests_if_monitoring_in_useBTestMonitoringSelfTest.test_skipping_of_tests_if_monitoring_in_use$  sD     ''(A(A(8(:/3Z.@ ( B 	k3q6*r   r   N)r	  r
  r  r  rV  r  r   r   r   rP  rP  !  s    +r   rP  c                       \ rS rSr\R
                  " SS0S9S 5       r\R
                  " SS0S9S 5       r\R
                  " SS0S9S	 5       rS
r	g)TestMonitoringEnvVarControli/  NUMBA_ENABLE_SYS_MONITORINGr+  )envvarsc                 R    [         S 5       nU R                  UR                  5        g )Nc                     U S-   $ r   r   r   s    r   r   9TestMonitoringEnvVarControl.test_default_off.<locals>.foo4  r   r   r   assertFalser   r;   r   s     r   test_default_off,TestMonitoringEnvVarControl.test_default_off1  ,     
	 
	 	++,r   0c                 R    [         S 5       nU R                  UR                  5        g )Nc                     U S-   $ r   r   r   s    r   r   :TestMonitoringEnvVarControl.test_override_off.<locals>.foo=  r   r   r_  ra  s     r   test_override_off-TestMonitoringEnvVarControl.test_override_off:  rd  r   1c                 R    [         S 5       nU R                  UR                  5        g )Nc                     U S-   $ r   r   r   s    r   r   9TestMonitoringEnvVarControl.test_override_on.<locals>.fooF  r   r   )r   
assertTruer   ra  s     r   test_override_on,TestMonitoringEnvVarControl.test_override_onC  s*     
	 
	 	**+r   r   N)
r	  r
  r  r  r   run_test_in_subprocessrb  ri  rp  r  r   r   r   rY  rY  /  su    $$.35-5- $$.46-6- $$.46,6,r   rY  __main__)%rR   rC  r/   rA  r-  unittestcollectionsr   unittest.mockr   r   numba.tests.supportr   numbar   r   numba.core.utilsr	   numba.core.serializer
   r   r   r0   rq   rO   rc   r   r   r   rn   r3   
skipUnlessr)   rP  rY  r	  mainr   r   r   <module>r}     s{   
  
     $ (  & 0	 ""~~$$--H%%//INN!!''E%%//I^^**99N%%//I #""#%  
Y')+?@mX m Am` 
Y')+?@
+X 
+ A
+ 
Y')+?@,( , A,: zMMO r   