
    /~hN>                       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 ddl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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jR                  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             Z0d dZ1 G d de"      Z2y)!zBCallback functions and support for sys.monitoring data collection.    )annotationsN)	dataclass)CodeType	FrameType)AnyCallableTYPE_CHECKINGcast)short_filenameshort_stack)isolate_module)
AnyCallableTArcTFileDispositionTLineNoTShouldStartContextFnTShouldTraceFn
TTraceDataTTraceFileDataTracer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      X/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-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>._wrappedE   s@    t~~&avdVF8<=2wt||T2DCFCCr"   )r(   r   r)   r   returnr    )r   r*   r+   s   `` r    __getattr__zLoggingWrapper.__getattr__D   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   =   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identr8   addr&   r   openprint)msgpidtidtslugfilenamefs         r    r&   r&   S   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_reprr\   h   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=rQ   r=   (z, )z!!r>    r   z/oops, shutting off events with disabled tool id)zipappendr\   r&   rV   r1   join	Exception	__class__	tracebackformat_exceptionsys_monitoring
set_eventssysr   COVERAGE_ID
ValueError)	r   r(   
args_reprsr*   r[   retexcmethodnamess	          r    r+   z0panopticon.<locals>._decorator.<locals>._wrappedv   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)rs   r+   rt   s   ` r    
_decoratorzpanopticon.<locals>._decoratoru   s%    __V$ %. Or"   )rs   r   r,   r   r-   rt   rw   s   ` r    
panopticonry   r   s    	6 r"   c                     y)zAWrite a message to our detailed debugging log(s), but not really.Nr-   )rJ   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    rw   zpanopticon.<locals>._decorator   s    Kr"   )r}   r   r,   r   r-   rx   s     r    ry   ry      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)r1   r2   r3   r4   __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| _        t        j                         | _        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_onrD   Locklockstatsstopped	_activity)r   tool_ids     r    r!   zSysMonitor.__init__   s     CG!CG	 02 -/0268NN$	 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 rQ   r>   z data points in z files>)sumdatavaluesr   rV   )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   rk   use_tool_idr   ru   partialregister_callbackeventsr   rl   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                   | j                   syt        J t        j                  | j                  d       | j                  5  d| _         | j
                  j                         D ]#  }t        j                  | j                  |d       % i | _        ddd       t        j                  | j                         y# 1 sw Y   )xY w)zStop this Tracer.Nr   F)	r   rk   rl   r   r   r   r   set_local_eventsfree_tool_id)r   r   s     r    stopzSysMonitor.stop   s     ~~ )))!!$))Q/YY 	("DN..557 D//		4CD%'D"		(
 	##DII.	( 	(s   AB99C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                l   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                  }|rq|j                  }	|	J | j!                          	 |	| j"                  vrt%               | j"                  |	<   | j'                          | j"                  |	   }t)        |      }
nd}d}
t+        |||
      | j                  t	        |      <   | j,                  j/                  |       |rt0        j2                  j4                  }| j6                  5  | j8                  ret:        J t:        j=                  | j>                  ||j@                  |jB                  z  |jD                  z         || jF                  t	        |      <   ddd       |r7| jH                  r+| jK                         }|jL                   | jN                  |<   yt0        j2                  jP                  S # | j'                          w xY w# 1 sw Y   qxY w)z-Handle sys.monitoring.events.PY_START events.Tr      N)r   r   r   ))r   r   r   getrV   r   r   rX   should_trace_cacher   r   r   LOGshould_tracetracesource_filename	lock_datar   setunlock_datar   r   r   re   rm   r   r   r   r   rk   r   r   r   r   r   r   r   r   rY   r   DISABLE)r   r   instruction_offset	code_infotracing_coder   rN   dispframe	tracenamer   r   s               r    r   zSysMonitor.sysmon_py_start+  sj    

8!OO''41	$(+/	 $,,L!++I''H**..x8D|,,.55!LLE((5948''1::L 00	 ,,, ' 		1/2u		),$$& IIi0	$T* 	(0$# )DOOBtH%
 $$T*..YY @~~-999&77 II ",,$../ %kk	*
 <@..r$x8@  DOO&&(E&*&9&9%9DOOE">>)))K $$& @ @s   %J A2J*J'*J3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_arcst  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   rV   r   r   rY   r
   r   r   rG   pop)r   r   r   retvalr   r   	last_linearcs           r    r   z SysMonitor.sysmon_py_return_arcs|  s    
 ""$OO''41	 Y%8%8%D++E2I$ 4#6#6"67SY	 3 3488= 	E4(r"   rr   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   rU   GeneratorExitr   r   rV   r   rY   r
   r   r   rG   )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   rV   r   r
   r   r   rG   rm   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   rV   r   r   r   r   r
   r   r   rG   )r   r   r   r   rq   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   rC   r,   r0   )r,   r/   )r,   r0   )r,   r   )r,   zdict[str, int] | None)r,   r   )r   r   r   rC   r,   MonitorReturn)r   r   r   rC   r   objectr,   r   )r   r   r   rC   r   BaseExceptionr,   r   )r   r   r   rC   r,   r   )r1   r2   r3   r4   r!   r   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r"   r    r   r      sr   R!FW
 \ 2 \/ / \ 
 		8 F* F*P 00250	0 0 T"))25)?E)	) #)  U#>>25>BO>	> $>$ &  &   r"   r   )rJ   r/   r,   r0   )r[   r   r,   r/   )rt   z
str | Noner,   r   )r   r   r,   zdict[int, int])3r4   
__future__r   ru   r   rA   os.pathrm   rD   ri   dataclassesr   typesr   r   typingr   r   r	   r
   coverage.debugr   r   coverage.miscr   coverage.typesr   r   r   r   r   r   r   r   r   r   r   r'   rk   r   r   r   r   r8   r   r&   r\   ry   r   r   r   r-   r"   r    <module>r     s    I #   	  
   ! %  7 (   B  lD1%%% M   $N4DEN%%%#)##$K !UL("C*DP ( ( (B Br"   