
    HeX9                       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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 ej6                  j9                  d      Zej6                  d	   Ze.ej6                  d
   Zej6                  d   Z ejB                  rdndZ"e#jI                  d      Z% G d de      Z&y)z#Raw data collector for coverage.py.    )annotationsN)	FrameType
ModuleType)AnyCallableSetcast)env)TArcTFileDispositionTLineNo
TTraceDataTTraceFileDataTTraceFn
TracerCoreTWarnFn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                f   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    3/usr/lib/python3/dist-packages/coverage/pytracer.py__init__zPyTracer.__init__:   s    t' 	NR!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     r4   	<genexpr>z$PyTracer.__repr__.<locals>.<genexpr>f   s     8SV8s   z<PyTracer at z#xz: z data points in z files>)sumdatavaluesr:   r   )r3   pointsfiless      r4   __repr__zPyTracer.__repr__e   sN    8TYY%5%5%788DIIr$xm2fX5EeWGTTr6   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)r3   markerargsfstacks        r4   logzPyTracer.logj   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                  rJ|	j:                  }
|
J |
| j<                  vrt?               | j<                  |
<   | j<                  |
   | _        nd|_         n| j                  sd|_         tB        ,|j                  jD                  |jF                  dz      }|dk(  }ntI        |dd	      dk  }|r(|j                  jJ                   | _        | j                  S |j                  | _        | j                  S |d
k(  r| j                  |j                  }| jL                  r=tO        tP        tR           | j                        jU                  | j"                  |f       n0tO        tP        tV           | j                        jU                  |       || _        | j                  S |dk(  r| jL                  r| j                  r|j                  jD                  }|jF                  }tB        @tY        |      |dz   k(  rd}nztZ        j\                  j^                  r|dz  }||   tB        k7  }nN||   t`        k(  rd}n?||   tb        k(  rd}n0tY        |      |td        z   k  rd}n||td        z      tf        k(  rd}nd}|rS|j                  jJ                  }tO        tP        tR           | j                        jU                  | 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)z*The trace function passed to sys.settrace.Nr   zEmpty stack!callTF   f_lastilinereturnr   )4	THIS_FILEf_codeco_filenamer+   sysgettracer1   rV   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_filenamer?   setf_trace_linesr   co_coderZ   getattrco_firstlinenor    r	   r   r   addr   r:   r
   
PYBEHAVIORlasti_is_yieldr   r   YIELD_FROM_OFFSETr   )r3   frameeventarglinenorT   context_mayber(   filenamedisp	tracenameoparg	real_callflinenocodelastireal_returnfirsts                     r4   r0   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 		1/2u		),)-9)=D&*/E'''&+# ! ,,U]]Q->?"aZ	$UIr:Q>	"',,"="=!=l ...i "'h ...e f_!!-#(>>??TD$6$67;;T^^W<UVWt'9'9:>>wG!(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TD$6$67;;T^^eV<TU ##% YD 2DNDDX ##**666###D)...E  "LL,,NNLL((	 s   "3S< <A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*   rN   ra   rg   r1   r2   s    r4   startzPyTracer.start  sN     >>{{""nn;;=T445...r6   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)ra   rb   r+   r#   r*   rM   rN   r
   PYPYr   METACOVwarnr1   )r3   tfsuppress_warnings      r4   stopzPyTracer.stop,  s     \\^
 >>;;***{{  DNN$A$A$C$I$II
  XX7$..7R4Z {{ 	 99-T444		DfD!@!@ CDE(   5 .9r6   c                    | j                   S )zHas there been any activity?r,   r2   s    r4   activityzPyTracer.activityP  s    ~~r6   c                    d| _         y)zReset the activity() flag.FNr   r2   s    r4   reset_activityzPyTracer.reset_activityT  s	    r6   c                     y)z+Return a dictionary of statistics, or None.N r2   s    r4   	get_statszPyTracer.get_statsX  s    r6   )r]   None)r]   rQ   )rR   rQ   rS   r   r]   r   r9   )
ry   r   rz   rQ   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   r5   rC   rV   r0   r   r   r   r   r   r   r6   r4   r   r   %   s    7$ !"J)@VU
0 "&_/_/ _/ 	_/
 _/ 
_/B/"Hr6   r   )'r   
__future__r   r-   disr   ra   r#   typesr   r   typingr   r   r   r	   coverager
   coverage.typesr   r   r   r   r   r   r   r   opmaprl   r   r   r   r   r   rx   __file__rstripr^   r   r   r6   r4   <module>r      s    * "  
  
  ' + +    
x	 yy(	>))M*K<(J XX1
 OOD!	uz ur6   