
    |h                        % S r SSKJrJrJrJr  SSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJrJr   SSKrSr\S
 5       r/ r\/ \S   4   \S'   S\S   4S jr " S S\5      r " S S\5      r\R4                  S 5       r\(       a4  \	" SS9 " S S\R8                  R:                  5      5       rS\S\S\4S jr gg! \ a    S	r Nf = f)zw
Implement code coverage support.

Currently contains logic to extend ``coverage`` with lines covered by the
compiler.
    )OptionalSequenceCallableno_type_check)Mapping)	dataclassfield)ABCabstractmethod)irconfigNTFc                  \    Sn [         (       a  [        R                  R                  5       n U $ )z>Get active coverage instance or return None if not found.
    N)coverage_availablecoverageCoveragecurrent)covs    U/home/james-whalen/.local/lib/python3.13/site-packages/numba/misc/coverage_support.pyget_active_coverager      s(     C'')J    NotifyLocBase_the_registryreturnc                  r    [         R                  (       d  / $ [        [        S S [         5       5      5      $ )z;
Returns a list of the registered NotifyLocBase instances.
c                 
    U S L$ N )xs    r   <lambda>+get_registered_loc_notify.<locals>.<lambda>,   s    $r   c              3   .   #    U  H  o" 5       v   M     g 7fr   r   ).0factorys     r   	<genexpr>,get_registered_loc_notify.<locals>.<genexpr>-   s     ?g		s   )r   JIT_COVERAGElistfilterr   r   r   r   get_registered_loc_notifyr)   %   s4     	.??A B Br   c                   \    \ rS rSrSr\S\R                  SS4S j5       r\S	S j5       r	Sr
g)
r   0   z<Interface for notifying visiting of a ``numba.core.ir.Loc``.locr   Nc                     g r   r   )selfr,   s     r   notifyNotifyLocBase.notify3       r   c                     g r   r   r.   s    r   closeNotifyLocBase.close7   r1   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   Locr/   r4   __static_attributes__r   r   r   r   r   0   s=    F"&& T    r   c                   F    \ rS rSrSrS rS\R                  4S jrS r	Sr
g)	NotifyCompilerCoverage<   z
Use to notify ``coverage`` about compiled lines.

The compiled lines are under the "numba_compiled" context in the coverage
data.
c                    Xl         UR                  R                  R                  5       nUR	                  [        UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  R                  S9
5        [!        S0 UD6U l        UR$                  R'                  U R"                  5        g )N)
data	lock_dataunlock_data
trace_arcsshould_traceshould_trace_cachewarnshould_start_contextswitch_contextpacked_arcsr   )
_collectorcoretracer_kwargscopyupdatedictrB   rC   rD   branchrF   rG   rH   rI   rJ   rK   NumbaTracer_tracertracersappend)r.   	collectorrN   s      r   __init__NotifyCompilerCoverage.__init__D   s    # "4499;^^#--%11$++&33#,#?#?^^%.%C%C(77%NN66	
 #3]3  .r   r,   c                     U R                   nUR                  R                  S5      (       a4  UR                  S5        UR	                  U5        UR                  S 5        g g )Nz.pynumba_compiled)rT   filenameendswithrJ   trace)r.   r,   tracers      r   r/   NotifyCompilerCoverage.notifyZ   sN    <<  ''!!"23LL!!$' (r   c                     g r   r   r3   s    r   r4   NotifyCompilerCoverage.closea   s    r   )rL   rT   N)r7   r8   r9   r:   r;   rX   r   r<   r/   r4   r=   r   r   r   r?   r?   <   s!    /,("&& (r   r?   c                  p    [        5       n U b)  U R                  nUR                  (       a  [        U5      $ g g r   )r   rL   rU   r?   )r   cols     r   _register_coverage_notifierre   e   s4    

C
nn;;)#..  r   )kw_onlyc                   @   \ rS rSr% Sr\R                  R                  \S'   \	\S'   \R                  R                  \S'   \\\R                  R                  S-  4   \S'   \R                  R                  S-  \S'   \\S-  /S4   S-  \S	'   \/ S4   \S
'   \/ S4   \S'   \R                  R                   \S'   \	\S'   \" SS9r\	\S'   S\R                  R&                  S-  4S jrSS jrS\	4S jrSS jrS\\\4   S-  4S jrS\R8                  SS4S jrSrg)rS   q   z
Not actually a tracer as in the coverage implementation, which will
setup a Python trace function. This implementation pretends to trace
but instead receives fake trace events for each line the compiler has
visited.

See coverage.PyTracer
rB   rE   rF   NrG   rI   rJ   rC   rD   rH   rK   F)default	_activityr   c                     g)zDStart this tracer, return a trace function if based on
sys.settrace.Nr   r3   s    r   startNumbaTracer.start   s     r   c                     g)zStop this tracer.Nr   r3   s    r   stopNumbaTracer.stop       r   c                     U R                   $ )zHas there been any activity?rj   r3   s    r   activityNumbaTracer.activity   s    >>!r   c                     SU l         g)zReset the activity() flag.FNrs   r3   s    r   reset_activityNumbaTracer.reset_activity   s	    "DNr   c                     g)z+Return a dictionary of statistics, or None.Nr   r3   s    r   	get_statsNumbaTracer.get_stats   rq   r   r,   c                    U R                   R                  UR                  5      nUc4  U R                  UR                  S5      nX R                   UR                  '   UR                  (       d  gUR
                  nU R                  5         U R                  R                  U[        5       5      nU R                  (       ai  U R                  (       a0  UR                  [        UR                  UR                  5      5        OCUR                  UR                  UR                  45        OUR                  UR                  5        U R                  5         SU l        g)z8Insert coverage data given source location.
            NT)rG   getr\   rF   r^   source_filenamerC   rB   
setdefaultsetrE   rK   add
_pack_arcslinerD   rj   )r.   r,   disp	tracenamecur_file_datas        r   r^   NumbaTracer.trace   s     **..s||<D|((t<8<''5::,,INN II00CEBM##!%%j388&DE!%%sxx&:;!!#((+!DNr   rs   r6   )r7   r8   r9   r:   r;   r   types
TTraceData__annotations__boolTShouldTraceFnr   strTFileDispositionTShouldStartContextFnr   TWarnFnr	   rj   TTraceFnrl   ro   rt   rw   rQ   intrz   r   r<   r^   r=   r   r   r   rS   rS   q   s)   	 nn'''nn333#00477
 	
 'nnBBTII #*t!34t;;BH%%b$h''nn$$$.	4.	8>>22T9 	
		"d 	"	#	tCH~4 		"RVV 	" 	"r   rS   l1l2c                 V    SnU S:  a  US-  nU * n US:  a  US-  nU* nX!S-  U -   -  nU$ )zPack arcs into a single integer for compatibility with .packed_arcs
option.

See
https://github.com/nedbat/coveragepy/blob/e7c05fe91ee36c0c94e144bb88d25db4fc3d02fd/coverage/ctracer/tracer.c#L171
r   l        l           r   )r   r   packeds      r   r   r      sN     6gFB6gFB8r/!r   )!r;   typingr   r   r   r   collections.abcr   dataclassesr   r	   abcr
   r   
numba.corer   r   r   r   ImportErrorr   r   r   r)   r   r?   rV   re   r   TracerrS   r   r   r   r   r   <module>r      s   ? > # ( # !    :<xH_556 ;B8O#< B	C 	&] &R / / tF"hnn++ F" F"Ps   W {  s   B: :CC