
    /~h'<                       d Z ddlm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	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZ ee   Zee   Zej>                  jA                  d      Z!ej>                  d	   Z"e!/ej>                  d
   Z#ej>                  d   Z$ejJ                  rdndZ&ndxZ#xZ$Z&e'jQ                  d      Z) G d de      Z*y)z#Raw data collector for coverage.py.    )annotationsN)	FrameType
ModuleType)AnyCallablecast)env)
TArcTFileDispositionTLineNoTShouldStartContextFnTShouldTraceFn
TTraceDataTTraceFileDataTTraceFnTWarnFnTracerRESUMERETURN_VALUEYIELD_VALUE
YIELD_FROM   coc                      e Zd ZdZ ej
                         ZddZddZddZ		 d	 	 	 	 	 	 	 	 	 ddZ
ddZddZdd	Zdd
ZddZy)PyTracerz-Python implementation of the raw data tracer.c                n   t        | j                        | _        |  d| _        |  |  d | _        d | _        |  |  |  d | _        d | _        d| _        d | _	        d | _
        d| _        g | _        d | _        d| _        d| _        d| _        t#        j$                  t&        | dd       | j(                  | _        y )NFr   	in_atexitT)next
tracer_idsid
trace_arcsshould_start_contextswitch_context	threadingcur_file_data	last_linecur_file_namecontextstarted_context
data_stackthreadstopped	_activityr   atexitregistersetattr_trace_cached_bound_method_traceselfs    Z/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/coverage/pytracer.py__init__zPyTracer.__init__M   s    t' 	BF!CG -148"#)-#'$ Z\/3{D9 59KK'    c                    t        d | j                  j                         D              }t        | j                        }dt	        |       dd| d| dS )Nc              3  2   K   | ]  }t        |        y wN)len).0vs     r6   	<genexpr>z$PyTracer.__repr__.<locals>.<genexpr>{   s     8SV8s   z<PyTracer at z#xz: z data points in z files>)sumdatavaluesr<   r!   )r5   pointsfiless      r6   __repr__zPyTracer.__repr__z   sN    8TYY%5%5%788DIIr$xm2fX5EeWGTTr8   c                T   t        dd      5 }|j                  | d| j                   dt        | j                         d       	 |j                  dj                  dj                  t        t        |                         	 |j                  d       ddd       y# 1 sw Y   yxY w)	z3For hard-core logging of what this tracer is doing.z/tmp/debug_trace.txta []z {}
N)openwriter!   r<   r+   formatr,   identr%   current_threadjoinmapstr)r5   markerargsfstacks        r6   logzPyTracer.log   s    (#. 	!GGvhay#doo*>)?qAB
 GGELL#c4.!9:; GGDM	 	 	s   BBB'Nc                
   t         |j                  j                  v ry| j                  rlt	        j
                         | j                  k(  rK	 t	        j                  d       	 | j                  j                         \  | _        | _        | _        | _        y|dk(  r<| j(                  rU| j*                  I| j)                  |      }|3|| _        d}| j,                  J | j-                  | j*                         nd}nd}|| _        d| _        | j                  j1                  | j                  | j                   | j"                  |f       |j                  j                  }|| j                   k7  s|r|| _        | j2                  j5                  |      }	|	!| j7                  ||      }	|	| j2                  |<   d| _        |	j8                  rk|	j:                  }
|
J | j=                          	 |
| j>                  vrtA               | j>                  |
<   | jC                          | j>                  |
   | _        nd|_"        n| j                  sd|_"        tF        ,|j                  jH                  |jJ                  dz      }|dk(  }ntM        |dd	      dk  }|r(|j                  jN                   | _        | j                  S |j                  | _        | j                  S |d
k(  r| j                  ~|j                  }| jP                  r6tS        tT        | j                        jW                  | j"                  |f       n)tS        tX        | j                        jW                  |       || _        | j                  S |dk(  r| jP                  r| j                  r|j                  jH                  }|jJ                  }tF        @t[        |      |dz   k(  rd}nzt\        j^                  j`                  r|dz  }||   tF        k7  }nN||   tb        k(  rd}n?||   td        k(  rd}n0t[        |      |tf        z   k  rd}n||tf        z      th        k(  rd}nd}|rL|j                  jN                  }tS        tT        | j                        jW                  | j"                  | f       | j                  j                         \  | _        | _        | _        | _        | j$                  r&| j,                  J d| _        | j-                  d       | j                  S # t&        $ rI | j                  d|j                  j                  |j                  |j                  j                         Y yw xY w# | jC                          w xY w)z*The trace function passed to sys.settrace.Nr   zEmpty stack!callTF   f_lastir   linereturnr   )5	THIS_FILEf_codeco_filenamer-   sysgettracer3   rX   f_linenoco_namef_tracef_backsettracer+   popr&   r(   r'   r*   
IndexErrorr#   r)   r$   r.   appendshould_trace_cachegetshould_tracetracesource_filename	lock_datarA   setunlock_dataf_trace_linesr   co_coder\   getattrco_firstlinenor"   r   set_TArcaddset_TLineNor<   r	   
PYBEHAVIORlasti_is_yieldr   r   YIELD_FROM_OFFSETr   )r5   frameeventarglinenorV   context_mayber*   filenamedisp	tracenameoparg	real_callflinenocodelastireal_returnfirsts                     r6   r2   zPyTracer._trace   s    000
 LLS\\^t/N/NN  LL
OO'') ]"D$6H\ 
 F?((T\\-A $ 9 9% @ ,#0DL&*O..:::''5&+O"'#2D  "DNOO""&&&&NN#	 ||//H4---%-"..228<<,,Xu=D8<D++H5%)":: $ 4 4I$000NN$+$DII5365DIIi0((*)-9)=D&*/E'''&+# ! ,,U]]Q->?"aZ	$UIr:Q>	"',,"="=!=l ...i "'h ...e f_!!-#(>>??4#5#56::DNNG;TUd&8&89==gF!(R ...O h4#5#5 ||++%4yEAI-&* >>88!QJE'+E{f'<E{l2&*e3&+Te.?&??&*e&778JF&+&*!LL77E4#5#56::DNNUF;ST ##% YD 2DNDDX ##**666###D)...M  "LL,,NNLL((	 z ((*s   "3T *%U AUUU/c                    d| _         | j                  r+| j                  | j                  j                         | _        t	        j
                  | j                         | j                  S )zdStart this Tracer.

        Return a Python function suitable for use with sys.settrace().

        F)r-   r%   r,   rP   rb   rh   r3   r4   s    r6   startzPyTracer.start7  sN     >>{{""nn;;=T445...r8   c                   t        j                         }d| _        | j                  rJ| j                  J | j                  j
                  | j                  j                         j
                  k7  ryt        j                  xr | j                  xr |du xs t        j                  }| j                  r9|s6|| j                  k7  r&| j                  d|d| j                  z   d       yyyy)zStop this Tracer.TNz.Trace function changed, data is likely wrong: z != ztrace-changed)slug)rb   rc   r-   r%   r,   rO   rP   r	   PYPYr   METACOVwarnr3   )r5   tfsuppress_warnings      r6   stopzPyTracer.stopE  s     \\^
 >>;;***{{  DNN$A$A$C$I$II
  XX7$..7R4Z {{ 	 99-T444		DfD!@!@ CDE(   5 .9r8   c                    | j                   S )zHas there been any activity?r.   r4   s    r6   activityzPyTracer.activityi  s    ~~r8   c                    d| _         y)zReset the activity() flag.FNr   r4   s    r6   reset_activityzPyTracer.reset_activitym  s	    r8   c                     y)z+Return a dictionary of statistics, or None.N r4   s    r6   	get_statszPyTracer.get_statsq  s    r8   )r^   None)r^   rS   )rT   rS   rU   r   r^   r   r;   )
r~   r   r   rS   r   r   r   zTLineNo | Noner^   zTTraceFn | None)r^   r   )r^   bool)r^   zdict[str, int] | None)__name__
__module____qualname____doc__	itertoolscountr    r7   rE   rX   r2   r   r   r   r   r   r   r8   r6   r   r   8   s    7$ !"J+@ZU
0 "&c/c/ c/ 	c/
 c/ 
c/J/"Hr8   r   )+r   
__future__r   r/   disr   rb   r%   typesr   r   typingr   r   r   coverager	   coverage.typesr
   r   r   r   r   r   r   r   r   r   rr   rz   rx   opmaprm   r   r   r   r   r   r}   __file__rstripr_   r   r   r8   r6   <module>r      s    * "  
  
  ' & &   $ 'lt9
 
x	 yy(	>))M*K<(J XX1355K5*0
 OOD!	{v {r8   