
    rh                        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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(                  j*                  Zej&                  j(                  j,                  Zej&                  j(                  j.                  Zej&                  j(                  j0                  Zej&                  j(                  j2                  Zej&                  j(                  j4                  Zd
ddddZ ej8                  edk\  d       G d de	             Z ej8                  edk\  d       G d de	             Z ej8                  edk\  d       G d de	             Ze dk(  r ejB                          yy)    N)Mockcall)TestCase)jitobjmode)	PYVERSION)_numba_unpicklec                     d| _         | S )z4Decorator to enable sys.monitoring on the dispatcherT)_enable_sysmon)disps    Y/var/www/html/engine/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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.setUp7   s     q 	:A~~&&q)5$$%5a%89	: 8ii./1C MM# #3"4$-((Q,* 4??2~~11r   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   RESUMEr   )PY_STARTassertEqual
call_countdisget_instructionsr   opnameoffsetr   __code__r   assert_has_calls)r7   allcalls	mockcallsr   instrD   callss          r   check_py_start_callsz#TestMonitoring.check_py_start_callsM   s     X&	--q1//> )a88x'  ) )admm,,f5dhh''+-""5))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   )	PY_RETURNr?   r@   rA   rB   r   rD   r   r   rE   r3   r4   rF   )r7   rG   rH   r   rD   rJ   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                  ||        ||  |D ]#  }t        j                  j                  ||d        % t        j                  j                  |t               t        j                  j                  |       |S # |D ]#  }t        j                  j                  |d        % t        j                  j                  t               t        j                  j                  |       w xY w)Ncustom_monitorr   )	r6   r+   r,   use_tool_idr   register_callback
set_events	NO_EVENTSfree_tool_id)
r7   functionargseventsr6   _tool_id	callbacksevent_bitmaskeventcallbacks
             r   run_with_eventszTestMonitoring.run_with_eventsk   s<   	2<<"NN&&x1ABIM '6005(K#+	% &	' NN%%h>dO   H005$GHNN%%h	:NN''1	   H005$GHNN%%h	:NN''1s   BD A-E2c                     | j                  | j                  | j                  ft        f      }| j	                  t        |      d       | j                  |       y r   )r_   r   r2   r>   r?   lenrK   r7   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   )r_   r   r2   rN   r?   ra   rO   rb   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   )	r_   r   r2   r>   rN   r?   ra   rO   rK   rb   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   rQ   r   r   )r   r6   r+   r,   rR   r>   rN   r   rS   set_local_eventsrE   r2   rV   r?   py_funcra   assert_not_called)	r7   r   r6   r[   r\   rY   r]   r^   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   rQ   r   )r6   r+   r,   rR   rl   rE   r>   rS   r   r   r2   r?   rV   )r7   r   r6   ro   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)prw   s    r   consumerzTTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate.<locals>.consumer   s    JAwr   r   )decr|   rw   s     @r   generatezBTestMonitoring.test_unhandled_events_are_ignored.<locals>.generate   s8    ]  ^  Or   c                     d S )Nc                     | S ry   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,   rY   PY_YIELDr_   assert_called_oncer   rn   )r7   r~   r]   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)NrQ   )r>   r6   r+   r,   rR   rT   
get_eventsr?   r   r2   r4   rU   rV   )r7   r]   r6   active_eventsro   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_valuerQ   )r   r+   r,   DISABLEr>   r6   rR   rT   rS   r   r?   r   r2   r4   assert_calledrestart_eventsrU   rV   )r7   r^   r]   r6   r   ro   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)NrQ   c                 L    | r!t         j                  j                         y y ry   )r+   r,   rT   )switch_on_eventr]   r6   s    r   objmode_enable_eventzGTestMonitoring.test_mutation_from_objmode.<locals>.objmode_enable_event>  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>.fooB  s4      1(01z!1z!s   	+r   r   r   )r6   r+   r,   rR   rN   r   rS   r   r   rn   rT   rU   r   r?   r@   rV   )r7   r^   r   r]   r   r6   s      @@@r   test_mutation_from_objmodez)TestMonitoring.test_mutation_from_objmode2  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_IDrU   COVERAGE_IDr>   r5   rN   OPTIMIZER_IDitemsrR   r   rS   keysrT   r   r2   rV   r?   ra   rn   rK   rO   )r7   tool_ids_2_eventsall_callbacksr6   rY   r\   r[   r]   r^   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               ry   )
ValueErrorr:   s   r   r   z9TestMonitoring.test_raising_under_monitoring.<locals>.foo  s     S/!r   rQ   r   r   r   )r   r   r   r6   r+   r,   rR   rS   rN   RAISE	PY_UNWINDrT   r   rU   r   call_args_listr?   rX   r	   rE   r   assertIsInstanceKeyErrorrm   assertInstrrV   )r7   ret_callbackraise_callbackunwind_callbackr   store_raisedr6   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               ry   )StopIterationr   s   r   r   z@TestMonitoring.test_stop_iteration_under_monitoring.<locals>.foo  s      $$r   rQ   r   r   r   r   )r   r   r   r6   r+   r,   rR   rS   rN   r   STOP_ITERATIONrT   r   rU   r   r   r?   rX   r	   rE   r   r@   r   r   rm   r   r   	_getframef_codern   rV   )r7   return_callbackr   stopiter_callbackr   r   r6   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_effectrQ   )r   r   r>   r6   r+   r,   rR   rT   rS   r   r2   rU   rV   r   r   r   )r7   r:   r^   r   r]   r6   r   s          r   6test_raising_callback_unwinds_from_jit_on_success_pathzETestMonitoring.test_raising_callback_unwinds_from_jit_on_success_path2  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   Z      r   r   r   c                              ry   r   r   msg_executions   r   raisingzVTestMonitoring.test_raising_callback_unwinds_from_jit_on_raising_path.<locals>.raising]       !//r   rQ   r   r   r   r   )r   r   	Exceptionr   r   r   r6   r+   r,   rR   rT   rS   rU   rV   r   r?   r@   r   rX   r	   rE   r   r   rm   assertIsr   r   r   )r7   msg_callbackr^   r   r   r]   r6   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_pathM  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                              ry   r   r   s   r   r   zUTestMonitoring.test_raising_callback_unwinds_from_jit_on_unwind_path.<locals>.raising  r   r   rQ   r   r   )r   r   r   r   r   r   r6   r+   r,   rR   rT   rS   rU   rV   r   r   r?   rX   rm   rE   typer   r   r   )r7   r   r^   r   r   r]   r6   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    d }d }t        j                         }t        j                  | |f      }t        j                         }t        j                  | |f      }||f}|D ]  }|j	                           |D ]  }|j                            fd}	 |	|        |	|       y )Nc                 :   	 | j                  | j                  | j                  ft        ft        j
                  j                        }| j                  t        |      d       | j                  |       y # t        $ r}|j                  |       Y d }~y d }~ww xY wN)r6   r   )r_   r   r2   r>   r+   r,   r   r?   ra   rK   r   putr7   qrc   es       r   t1_workz@TestMonitoring.test_monitoring_multiple_threads.<locals>.t1_work  s~    	))$--$((+3+25..2L2L * N   R!,))"- a   A3A6 6	B?BBc                 :   	 | j                  | j                  | j                  ft        ft        j
                  j                        }| j                  t        |      d       | j                  |       y # t        $ r}|j                  |       Y d }~y d }~ww xY wr   )r_   r   r2   rN   r+   r,   r   r?   ra   rO   r   r   r   s       r   t2_workz@TestMonitoring.test_monitoring_multiple_threads.<locals>.t2_work  s~    	))$--$((+4,25..2L2L * N   R!,**2. ar   )targetrX   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   r7   s    r   assert_empty_queuezKTestMonitoring.test_monitoring_multiple_threads.<locals>.assert_empty_queue  sC    wwyA~'')!%%'N '')		67 r   )queueQueue	threadingThreadstartr0   )
r7   r   r   q1t1q2t2threadstr   s
   `         r    test_monitoring_multiple_threadsz/TestMonitoring.test_monitoring_multiple_threads  s    
	
	 [[]WD":>[[]WD":>r( 	AGGI	 	AFFH		8 	22r   ry   )r   r   r   r;   rK   rO   r_   rd   rf   rh   rp   rs   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r&   r&   .   sp    2,** 8&'&.1B1&)21*"1H(1T?-BA.FP.d.69:v.:`.r   r&   c                       e Zd Zd Zy)TestMonitoringSelfTestc                     | j                  t        j                  ddddi      }| j                  dt	        |             y )Nr&   rd   z-mcProfile)flagsz	skipped=1)subprocess_test_runnerr&   r   r   r   )r7   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_MONITORING )envvarsc                 R    t         d        }| j                  |j                         y )Nc                     | dz   S r   r   r   s    r   r   z9TestMonitoringEnvVarControl.test_default_off.<locals>.foo  rk   r   r   assertFalser   r7   r   s     r   test_default_offz,TestMonitoringEnvVarControl.test_default_off  ,     
	 
	 	++,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  rk   r   r  r  s     r   test_override_offz-TestMonitoringEnvVarControl.test_override_off  r  r   1c                 R    t         d        }| j                  |j                         y )Nc                     | dz   S r   r   r   s    r   r   z9TestMonitoringEnvVarControl.test_override_on.<locals>.foo  rk   r   )r   
assertTruer   r  s     r   test_override_onz,TestMonitoringEnvVarControl.test_override_on  s*     
	 
	 	**+r   N)r   r   r   r   run_test_in_subprocessr  r#  r(  r   r   r   r  r    s{    $X$$.35-5- %X$$.46-6- %X$$.46,6,r   r  __main__)"rA   r   r+   r  unittestunittest.mockr   r   numba.tests.supportr   numbar   r   numba.core.utilsr   numba.core.serializer	   r   r   r,   rY   r>   rN   r   r   r   rU   r/   
skipUnlessr&   r  r  r   mainr   r   r   <module>r3     s}   
  
   $ (  & 0	 ""~~$$--H%%//INN!!''E%%//I^^**99N%%//I #""#%  Y')+?@w
X w
 Aw
t Y')+?@
+X 
+ A
+ Y')+?@,( , A,: zHMMO r   