
    HeL<                       U 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Zddl	Z	ddl
mZ ddlmZmZ ddlmZmZmZmZmZ ddlmZmZ ddlmZmZmZmZmZmZmZm Z  d	Z! e"ed
d      Z#ere#J eZ$e!rF G d d      Z% e%e#d      Z#e#J  ejL                  eddd      Z e'       Z(de)d<   ddZ*ddZ+ddZ,nddZ*ddZ,e G d d             Z-ddZ. G d de      Z/y) zBCallback functions and support for sys.monitoring data collection.    )annotationsN)	dataclass)CodeType	FrameType)AnyCallableSetTYPE_CHECKINGcast)short_filenameshort_stack)AnyCallableTArcTFileDispositionTLineNo
TTraceDataTTraceFileData
TracerCoreTWarnFnF
monitoringc                       e Zd ZdZddZddZy)LoggingWrapperz*Wrap a namespace to log all its functions.c                     || _         || _        y N)wrapped	namespace)selfr   r   s      1/usr/lib/python3/dist-packages/coverage/sysmon.py__init__zLoggingWrapper.__init__:   s    "DL&DN    c                     d fd}|S )Nc                 x    t        j                   d |  |         t        j                        | i |S )N.)logr   getattrr   )argskwargsnamer   s     r   _wrappedz,LoggingWrapper.__getattr__.<locals>._wrapped?   s@    t~~&avdVF8<=2wt||T2DCFCCr    )r&   r   r'   r   returnr    )r   r(   r)   s   `` r   __getattr__zLoggingWrapper.__getattr__>   s    D Or    N)r   r   r   strr*   None)r(   r-   r*   zCallable[..., Any])__name__
__module____qualname____doc__r   r,   r+   r    r   r   r   7   s    8	'	r    r   zsys.monitoringT)fullshort_filenames	frame_idszset[int]seen_threadsc           	        t        j                         }t        t        t	        j
                         j                        }||z  dz  d}|t        vr1t        j                  |       t        d| d| dt                       dD ]-  }t        |d      5 }t        | d| d	|  |d
       ddd       / y# 1 sw Y   :xY w)z1Write a message to our detailed debugging log(s).iw 07dzNew thread  z:
)z/tmp/foo.outa:: T)fileflushN)osgetpidr   int	threadingcurrent_threadidentr6   addr$   r   openprint)msgpidtidtslugfilenamefs         r   r$   r$   M   s     iik3	002889#I*3/l"S!+cU!E7#km_=>
 	CH h$ CQugRu-ATBC C	CC Cs   B77C 	c                    t        | t              rGdt        |       dd| j                   dz   dt	        | j
                        d| j                   dz   S t        |       S )z)Make a customized repr for logged values.z<code @#xz name=,z file=#>)
isinstancer   idco_namer   co_filenameco_firstlinenorepr)args    r   arg_reprrZ   b   sl    c8$"S'"&3;;-q)*>#//:=Qs?Q?Q>RRSTU
 Cyr    c                      d fd}|S )z%Decorate a function to log its calls.c                H     t        j                         d fd       }|S )Nc           	     d   	 g }t        |      D ]'  \  }}|	|j                  | dt        |              ) t        t	        |       ddj
                   ddj                  |       d        | g| }|S # t        $ r}t        d|j                  j
                   d|        t        d	j                  t        j                  |                   	 t        J t        j                  t        j                  j                  d
        # t         $ r t        d       Y  w xY wd }~ww xY w)N=rO   r;   (z, )z!!r<    r   z/oops, shutting off events with disabled tool id)zipappendrZ   r$   rT   r/   join	Exception	__class__	tracebackformat_exceptionsys_monitoring
set_eventssysr   COVERAGE_ID
ValueError)	r   r&   
args_reprsr(   rY   retexcmethodnamess	          r   r)   z0panopticon.<locals>._decorator.<locals>._wrappedp   s0   !#J%(%5 E	c<$"))TF!HSM?*CDE 2d8B-q(9499Z;P:QQRST --CJ  	"S]]334Bse<=	 : :3 ?@AO-999&11#..2L2LaP  & OMNO	s=   A9A= =	D/AD*6DD*D'$D*&D''D**D/)r   r   r&   r   r*   r   )	functoolswraps)rq   r)   rr   s   ` r   
_decoratorzpanopticon.<locals>._decoratoro   s%    __V$ %. Or    )rq   r   r*   r   r+   rr   ru   s   ` r   
panopticonrw   l   s    	6 r    c                     y)zAWrite a message to our detailed debugging log(s), but not really.Nr+   )rH   s    r   r$   r$      s    r    c                     dd}|S )z5Decorate a function to log its calls, but not really.c                    | S r   r+   )meths    r   ru   zpanopticon.<locals>._decorator   s    Kr    )r{   r   r*   r   r+   rv   s     r   rw   rw      s    	 r    c                  0    e Zd ZU dZded<   ded<   ded<   y)	CodeInfoz/The information we want about each code object.booltracingzTTraceFileData | None	file_datazdict[int, int] | Nonebyte_to_lineN)r/   r0   r1   r2   __annotations__r+   r    r   r}   r}      s    9M$$''r    r}   c                p    i }| j                         D ]   \  }}}|
t        ||d      D ]  }|||<   	 " |S )z6Make a dict mapping byte code offsets to line numbers.   )co_linesrange)codeb2lbstartbendlinenoboffsets         r   bytes_to_linesr      sQ    
C $ &f q1 &%G&& Jr    c                     e Zd ZdZddZddZ e       dd       Z e       dd       Z e       dd       Z	ddZ
ddZdd	Zerdd
ZnddZ edd      dd       Z edd      	 	 	 	 	 	 dd       Z eddd      	 	 	 	 	 	 	 	 dd       Z eddd      	 	 	 	 	 	 	 	 dd       Z edd      d d       Z edd      d d       Zy)!
SysMonitorzHPython implementation of the raw data tracer for PEP669 implementations.c                    |  d| _         |  |  d | _        d | _        |  || _        i | _        g | _        i | _        i | _        d| _        ddi| _	        d| _
        d| _        y )NFstartsr   )
trace_arcsshould_start_contextswitch_contextmyid
code_infoscode_objects
last_lineslocal_event_codes	sysmon_onstatsstopped	_activity)r   tool_ids     r   r   zSysMonitor.__init__   sy     OS!CG	 02 -/0268 a

 r    c                    t        d | j                  j                         D              }t        | j                        }dt	        |       dd| d| dS )Nc              3  2   K   | ]  }t        |        y wr   )len).0vs     r   	<genexpr>z&SysMonitor.__repr__.<locals>.<genexpr>   s     8SV8s   z<SysMonitor at rO   r<   z data points in z files>)sumdatavaluesr   rT   )r   pointsfiless      r   __repr__zSysMonitor.__repr__   sN    8TYY%5%5%788DII D"Rx7GwgVVr    c                   d| _         t        J t        j                  | j                  d       t	        j
                  t        j                  | j                        }t        j                  }| j                  rt        j                  | j                  |j                  |j                  z          ||j                  | j                          ||j                  | j                          ||j                  | j                           ||j                  | j"                          ||j$                  | j&                         ndt        j                  | j                  |j                          ||j                  | j                          ||j$                  | j(                         t        j+                          d| _        y)zStart this Tracer.FNzcoverage.pyT)r   ri   use_tool_idr   rs   partialregister_callbackeventsr   rj   PY_START	PY_UNWINDsysmon_py_start	PY_RESUMEsysmon_py_resume_arcs	PY_RETURNsysmon_py_return_arcssysmon_py_unwind_arcsLINEsysmon_line_arcssysmon_line_linesrestart_eventsr   )r   registerr   s      r   startzSysMonitor.start   s?    )))""499m<$$^%E%EtyyQ&&??%%		&"2"22 V__d&:&:;V%%t'A'ABV%%t'A'ABV%%t'A'ABV[[$"7"78%%diiAV__d&:&:;V[[$"8"89%%'r    c                H   | j                   syt        J t        j                  | j                  d       d| _         | j                  j                         D ]#  }t        j                  | j                  |d       % i | _        t        j                  | j                         y)zStop this Tracer.Nr   F)r   ri   rj   r   r   r   set_local_eventsfree_tool_id)r   r   s     r   stopzSysMonitor.stop   s     ~~ )))!!$))Q/**113 	@D++DIItQ?	@!###DII.r    c                $    | j                          y)z+The process has forked, clean up as needed.N)r   r   s    r   	post_forkzSysMonitor.post_fork  s     			r    c                    | j                   S )zHas there been any activity?r   r   s    r   activityzSysMonitor.activity  s    ~~r    c                    d| _         y)zReset the activity() flag.FNr   r   s    r   reset_activityzSysMonitor.reset_activity
  s	    r    c                     y)z+Return a dictionary of statistics, or None.Nr+   r   s    r   	get_statszSysMonitor.get_stats  s    r    c                f    t        j                         j                  j                  j                  S z2Get the frame of the Python code we're monitoring.inspectcurrentframef_backr   s    r   callers_framezSysMonitor.callers_frame  s'     $$&--44;;r    c                R    t        j                         j                  j                  S r   r   r   s    r   r   zSysMonitor.callers_frame  s    '')00777r    r   @c                   d| _         | j                  dxx   dz  cc<   | j                  j                  t	        |            }d}d}||j
                  }|j                  }||j                  }| j                  j                  |      }|Qt        j                         j                  }t        r|j                  }| j                  ||      }|| j                  |<   |j                  }|rP|j                  }	|	J |	| j                   vrt#               | j                   |	<   | j                   |	   }t%        |      }
nd}d}
t'        |||
      | j                  t	        |      <   | j(                  j+                  |       |rt,        j.                  j0                  }| j2                  ret4        J t4        j7                  | j8                  ||j:                  |j<                  z  |j>                  z         || j@                  t	        |      <   |r7| jB                  r+| jE                         }|jF                   | jH                  |<   yt,        j.                  jJ                  S )z-Handle sys.monitoring.events.PY_START events.Tr      N)r   r   r   )&r   r   r   getrT   r   r   rV   should_trace_cacher   r   r   LOGshould_tracetracesource_filenamer   setr   r}   r   rc   rk   r   r   r   ri   r   r   r   r   r   r   r   r   rW   r   DISABLE)r   r   instruction_offset	code_infotracing_coder   rL   dispframe	tracenamer   r   s               r   r   zSysMonitor.sysmon_py_start!  s    

8!OO''41	$(+/	 $,,L!++I''H**..x8D|,,.55!LLE((5948''1::L 00	 ,,,DII-+.5DIIi( IIi0	$T* 	(0$# )DOOBtH%
 $$T*..>>)555"33		(( **+ !++	&
 8<D**2d84DOO&&(E&*&9&9%9DOOE">>)))r    c                V    | j                         }|j                  | j                  |<   y)zBHandle sys.monitoring.events.PY_RESUME events for branch coverage.N)r   f_linenor   )r   r   r   r   s       r   r   z SysMonitor.sysmon_py_resume_arcse  s$    
 ""$!&r    Nc                x   | j                         }| j                  j                  t        |            }|h|j                  \| j
                  j                  |      }|?||j                   f}t        t        t           |j                        j                  |       | j
                  j                  |d       y)zBHandle sys.monitoring.events.PY_RETURN events for branch coverage.N)r   r   r   rT   r   r   rW   r   r	   r   rE   pop)r   r   r   retvalr   r   	last_linearcs           r   r   z SysMonitor.sysmon_py_return_arcsm  s    
 ""$OO''41	 Y%8%8%D++E2I$ 4#6#6"67SY	 3 3488= 	E4(r    rp   c                j   | j                         }| j                  j                  |d      }t        |t              ry| j
                  j                  t        |            }|P|j                  C|@||j                   f}t        t        t           |j                        j                  |       yyyy)zBHandle sys.monitoring.events.PY_UNWIND events for branch coverage.N)r   r   r   rS   GeneratorExitr   r   rT   r   rW   r   r	   r   rE   )r   r   r   	exceptionr   r   r   r   s           r   r   z SysMonitor.sysmon_py_unwind_arcs~  s    
 ""$OO''t4	i/OO''41	 Y%8%8%D$ 4#6#6"67SY	 3 3488= % &E r    linec                    | j                   t        |         }|j                  0t        t        t
           |j                        j                  |       t        j                  j                  S )z;Handle sys.monitoring.events.LINE events for line coverage.)
r   rT   r   r   r	   r   rE   rk   r   r   )r   r   line_numberr   s       r   r   zSysMonitor.sysmon_line_lines  sQ     OOBtH-	*Wy22377D~~%%%r    c                2   | j                   t        |         }d}|j                  p| j                         }| j                  j                  |      }|4||f}t        t        t           |j                        j                  |       || j                  |<   |S )z=Handle sys.monitoring.events.LINE events for branch coverage.N)
r   rT   r   r   r   r   r   r	   r   rE   )r   r   r   r   ro   r   r   r   s           r   r   zSysMonitor.sysmon_line_arcs  s     OOBtH-	*&&(E++E2I$ +.SY	 3 3488=%0DOOE"
r    )r   rA   r*   r.   )r*   r-   )r*   r.   )r*   r~   )r*   zdict[str, int] | None)r*   r   )r   r   r   rA   r*   MonitorReturn)r   r   r   rA   r   objectr*   r   )r   r   r   rA   r   BaseExceptionr*   r   )r   r   r   rA   r*   r   )r/   r0   r1   r2   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r    r   r   r      sr   R@W
 \ 2 \/ / \ 
 		8 A* A*F 00250	0 0 T"))25)?E)	) #)  U#>>25>BO>	> $>$ &  &   r    r   )rH   r-   r*   r.   )rY   r   r*   r-   )rr   z
str | Noner*   r   )r   r   r*   zdict[int, int])0r2   
__future__r   rs   r   r?   os.pathrk   rB   rg   dataclassesr   typesr   r   typingr   r   r	   r
   r   coverage.debugr   r   coverage.typesr   r   r   r   r   r   r   r   r   r%   ri   r   r   r   r   r6   r   r$   rZ   rw   r}   r   r   r+   r    r   <module>r      s   I "   	  
   ! %  7	 	 	  lD1%%% M   $N4DEN%%%#)##$K !UL("C*DP ( ( (y yr    