
    F\ht                        S r SS/rSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKJr  SSKrSr " S S5      rS	 rS
 r " S S5      rS rS rSS jrS r " S S5      rS r\S:X  a  \" 5         gg)a  program/module to trace Python program or function execution

Sample use, command line:
  trace.py -c -f counts --ignore-dir '$prefix' spam.py eggs
  trace.py -t --ignore-dir '$prefix' spam.py eggs
  trace.py --trackcalls spam.py eggs

Sample use, programmatically
  import sys

  # create a Trace object, telling it what to ignore, and whether to
  # do tracing or line-counting or both.
  tracer = trace.Trace(ignoredirs=[sys.base_prefix, sys.base_exec_prefix,],
                       trace=0, count=1)
  # run the new command using the given tracer
  tracer.run('main()')
  # make a report, placing output in /tmp
  r = tracer.results()
  r.write_results(show_missing=True, coverdir="/tmp")
TraceCoverageResults    N)	monotonicz#pragma NO COVERc                   $    \ rS rSrSS jrS rSrg)_IgnoreE   Nc                     U(       d
  [        5       O
[        U5      U l        U(       d  / O/U Vs/ s H"  n[        R                  R	                  U5      PM$     snU l        SS0U l        g s  snf )Nz<string>   )set_modsospathnormpath_dirs_ignore)selfmodulesdirsds       /usr/lib/python3.13/trace.py__init___Ignore.__init__F   sW    ")SUs7|
#R37*937a +-''*:*:1*=37*9
#Q(*9s   )A*c                    X R                   ;   a  U R                   U   $ X R                  ;   a  SU R                   U'   gU R                   H-  nUR                  US-   5      (       d  M  SU R                   U'     g   Uc  SU R                   U'   gU R                   H;  nUR                  U[        R
                  -   5      (       d  M,  SU R                   U'     g   SU R                   U'   g)Nr
   .r   )r   r   
startswithr   r   sep)r   filename
modulenamemodr   s        r   names_Ignore.namesL   s    %<<
++ #'(DLL$ ::C $$S3Y//+,Z(  '(DLL$ A ""1rvv:..+,Z(  $%Z     )r   r   r   NN)__name__
__module____qualname____firstlineno__r   r    __static_attributes__ r"   r   r   r   E   s    ))r"   r   c                     [         R                  R                  U 5      n[         R                  R                  U5      u  p#U$ ),Return a plausible module name for the path.)r   r   basenamesplitext)r   baser   exts       r   _modnamer0   w   s3     77D!DGG$$T*MHOr"   c                    [         R                  R                  U 5      nSn[        R                   Hx  n[         R                  R                  U5      nUR	                  U5      (       d  M:  U[        U5         [         R                  :X  d  M\  [        U5      [        U5      :  d  Mv  UnMz     U(       a  U [        U5      S-   S nOU n[         R                  R                  U5      u  pTUR                  [         R                  S5      n[         R                  (       a   UR                  [         R                  S5      n[         R                  R                  U5      u  pgUR                  S5      $ )r+    r
   Nr   )r   r   normcasesysr   lenr   
splitdrivereplacealtsepr-   lstrip)r   comparepathlongestdirr.   driver   r/   s           r   _fullmodnamer>   ~   s    ''""4(KGxxggs#!!#&&;s3x+@BFF+J3x#g,&	  CL1$%&''$$T*KE<<$D	yy||BIIs+GG$$T*MH??3r"   c                   J    \ rS rSr  SS jrS rS rSSS.S jjrSS	 jrS
r	g)r      Nc                     Xl         U R                   c  0 U l         U R                   R                  5       U l        X l        U R                  c  0 U l        U R                  R                  5       U l        X@l        U R                  c  0 U l        U R                  R                  5       U l        X0l        XPl        U R
                  (       aY   [        U R
                  S5       n[        R                  " U5      u  pnS S S 5        U R                  U R                  XUS95        g g ! , (       d  f       N/= f! [        [        [        4 a4  n[        SU R
                  < SU< 3[         R"                  S9   S nAg S nAff = f)Nrb)callerszSkipping counts file : file)countscopycountercalledfuncsrC   infileoutfileopenpickleloadupdate	__class__OSErrorEOFError
ValueErrorprintr4   stderr)r   rG   rJ   rK   rC   rL   ferrs           r   r   CoverageResults.__init__   s$   ;;DK{{'')&#!D++002<<DL||((*;;N$++t,39;;q>0F -DNN6NPQ  -, Xz2 N)-c;BE**NNs0   
D4  D#:'D4 #
D1-D4 4E=	*E88E=c                 T    UR                  S5      =(       a    UR                  S5      $ )zOReturn True if the filename does not refer to a file
we want to have reported.
<>)r   endswith)r   r   s     r   is_ignored_filename#CoverageResults.is_ignored_filename   s%     ""3'BH,=,=c,BBr"   c                    U R                   nU R                  nU R                  nUR                   nUR                  nUR                  nU H  nUR                  US5      XX   -   X('   M     U H  nSX8'   M	     U H  nSXH'   M	     g)z.Merge in the data from another CoverageResultsr   r
   N)rG   rJ   rC   get)	r   otherrG   rJ   rC   other_countsother_calledfuncsother_callerskeys	            r   rP   CoverageResults.update   s    &&,,||!--C **S!,|/@@FK   %C K % !CGL !r"   F)ignore_missing_filesc                   U R                   (       aM  [        5         [        S5        U R                   n[        U5       H  u  pgn[        SU< SU< SU< 35        M     U R                  (       a  [        5         [        S5        S=p[        U R                  5       H_  u  u  pnu  pnX:w  a  [        5         [        SUS5        Un	Sn
X:w  a  X:w  a  [        SU5        Un
[        S	U< S
U< SU< S
U< 35        Ma     0 nU R                   H1  u  nnUR                  U0 5      =nUU'   U R                  UU4   UU'   M3     0 nUR                  5        GH  u  nnU R                  U5      (       a  M  UR                  S5      (       a  USS nU(       a&  [        R                  R                  U5      (       d  Mg  UcH  [        R                  R                  [        R                  R                  U5      5      n[        U5      nO"Un[        R                  " USS9  [!        U5      nU(       a  [#        U5      nO0 n[$        R&                  " U5      n[        R                  R)                  UUS-   5      n[+        US5       n[,        R.                  " UR0                  5      u  nnSSS5        U R3                  UUUUW5      u  nnU(       d  GM|  U(       d  GM  [5        SU-  U-  5      nUUXv4UU'   GM     U(       a>  U(       a7  [        S5        [        U5       H  n UU    u  nnpv[        SUU    -  5        M     U R6                  (       aZ   [+        U R6                  S5       n![8        R:                  " U R                  U R                   U R                  4U!S5        SSS5        gg! , (       d  f       GN
= f! , (       d  f       g= f! [<         a%  n"[        SU"-  [>        R@                  S9   Sn"A"gSn"A"ff = f)a  
Write the coverage results.

:param show_missing: Show lines that had no hits.
:param summary: Include coverage summary per module.
:param coverdir: If None, the results of each module are placed in its
                 directory, otherwise it is included in the directory
                 specified.
:param ignore_missing_files: If True, counts for files that no longer
                 exist are silently ignored. Otherwise, a missing file
                 will raise a FileNotFoundError.
zfunctions called:z
filename: z, modulename: , funcname: zcalling relationships:r2   z***z  -->z    r   z -> z.pycNT)exist_okz.coverrB   d   zlines   cov%   module   (path)z%5d   %3d%%   %s   (%s)wbr
   z"Can't save counts files because %srE   )!rJ   rU   sortedrC   rG   ra   itemsr^   r]   r   r   isfiledirnameabspathr0   makedirsr>   _find_executable_linenos	linecachegetlinesjoinrM   tokenizedetect_encodingreadlinewrite_results_fileintrL   rN   dumprR   r4   rV   )#r   show_missingsummarycoverdirrh   callsr   r   funcnamelastfile	lastcfilepfilepmodpfunccfilecmodcfuncper_filelineno	lines_hitsumscountr<   lnotabsource	coverpathfpencoding_n_hitsn_linespercentmrW   rX   s#                                      r   write_resultsCoverageResults.write_results   sZ    G%&$$E28-.h"J: < 3@ <<G*+#%%Hdll+ =%%u';U$G%.$H "I>i&8'5) %IdE4GH ,  $Hf-5\\(B-GGI* $Xv,> ?If !,
 '~~/OHe''11  ((#CR=#BGGNN8,D,Dggoobggooh&?@%h/
C$/)(3
 1(;''1FS*x*?@Ih%&66r{{C! &"55i6<eXOOFGw77cFlW45#*GZ#IZ A  0D t23D\9=a6*/$q'9: " <<S$,,-KKd.>.> M !1& .-  &%" .-  S:S@szzRSsB   $N*O &:N< O *
N9	<
O
O 
O 
O<O77O<c                     [        USUS9nS	nS	n	U   [        US
5       H  u  pX;   a!  UR                  SXJ   -  5        U	S
-  n	US
-  nO7X;   a!  [        U;  a  UR                  S5        US
-  nOUR                  S5        UR                  UR                  S5      5        M     SSS5        X4$ ! [         a+  n[        SU< SU< S3[        R                  S9   SnAgSnAff = f! , (       d  f       X4$ = f)z'Return a coverage results file in path.wr   ztrace: Could not open z for writing: z - skippingrE   N)r   r   r   r
   z%5d: z>>>>>> z          )	rM   rR   rU   r4   rV   	enumeratewritePRAGMA_NOCOVER
expandtabs)r   r   linesr   r   r   rL   rX   r   r   r   lines               r   r|   "CoverageResults.write_results_file.  s    	4x8G  )% 3 &MM'I,="=>aKFqLG%n.D MM),qLGMM),dooa01 !4 " 1  	26=DGJJP	 W" s#   B1 BC)1
C&;!C!!C&)
C9)rJ   rC   rI   rG   rK   rL   )NNNNN)TFNN)
r$   r%   r&   r'   r   r^   rP   r   r|   r(   r)   r"   r   r   r      s0    =A'+N4C$_S+0_SBr"   c                 ^    0 n[         R                  " U 5       H  u  p4XA;  d  M  SX$'   M     U$ )z:Return dict where keys are lines in the line number table.r
   )disfindlinestarts)codestrslinenosr   r   s        r   _find_lines_from_coder   N  s2    G''-	GO . Nr"   c                     [        X5      nU R                   H:  n[        R                  " U5      (       d  M   UR	                  [        X15      5        M<     U$ )z<Return lineno dict for all code objects reachable from code.)r   	co_constsinspectiscoderP   _find_lines)r   r   r   cs       r   r   r   X  sE     $D/G ^^>>!NN;q/0  Nr"   c                 b   0 n[         R                  n[        XS9 n[        R                  " UR
                  5      nU HR  u  pgpn
U[         R                  :X  a5  U[         R                  :X  a!  Uu  pU	u  p[        XS-   5       H  nSX/'   M	     UnMT     SSS5        U$ ! , (       d  f       U$ = f)zReturn a dict of possible docstring positions.

The dict maps line numbers to strings.  There is an entry for
line that contains only a string or a part of a triple-quoted
string.
r   r
   N)tokenINDENTrM   ry   generate_tokensr{   STRINGrange)r   r   r   
prev_ttyperW   tokttypetstrstartendr   slinescolelineecolis                   r   _find_stringsr   d  s     	A J	h	*a&&qzz2-0)ET$-"'KE"%KE"5!)4  5J .1 
+ H 
+	* Hs   A9B
B.c                 V    [         R                  " U 5       nUR                  5       nUR                  nSSS5        [        WU S5      n[        U W5      n[        XV5      $ ! , (       d  f       N2= f! [         a,  n[        SU < SU< 3[        R                  S9  0 s SnA$ SnAff = f)zAReturn dict where keys are line numbers in the line number table.NzNot printing coverage data for rD   rE   exec)ry   rM   readr   rR   rU   r4   rV   compiler   r   )r   rW   progr   rX   r   r   s          r   ru   ru   {  s    ]]8$668DzzH % 46*D8,Dt"" %$  !)307:zz	C	s9   A2 A!A2 !
A/+A2 /A2 2
B(<!B#B(#B(c                   j    \ rS rSr   SS jrS rSS jrS rS rS r	S	 r
S
 rS rS rS rS rSrg)r   i  Nc
                 R   Xpl         Xl        [        XV5      U l        0 U l        0 U l        SU l        X l        0 U l        0 U l	        0 U l
        SU l        U	(       a  [        5       U l        U(       a  U R                  U l        gU(       a  U R                  U l        gU(       a*  U(       a#  U R                   U l        U R"                  U l        gU(       a#  U R                   U l        U R&                  U l        gU(       a#  U R                   U l        U R(                  U l        gSU l        g)a  
@param count true iff it should count number of times each
             line is executed
@param trace true iff it should print out each line that is
             being counted
@param countfuncs true iff it should just output a list of
             (filename, modulename, funcname,) for functions
             that were called at least once;  This overrides
             `count' and `trace'
@param ignoremods a list of the names of modules to ignore
@param ignoredirs a list of the names of directories to ignore
             all of the (recursive) contents of
@param infile file from which to read stored counts to be
             added into the results
@param outfile file in which to write the results
@param timing true iff timing information be displayed
r   Nr
   )rK   rL   r   ignorerG   pathtobasename	donothingtrace_calledfuncs_callers_caller_cache
start_time_timeglobaltrace_trackcallersglobaltraceglobaltrace_countfuncsglobaltrace_ltlocaltrace_trace_and_count
localtracelocaltrace_tracelocaltrace_count)
r   r   r   
countfuncscountcallers
ignoremods
ignoredirsrK   rL   timings
             r   r   Trace.__init__  s    ( j5 
#gDO#<<D#::Du#22D"==DO#22D"33DO#22D"33DO DNr"   c                 H    SS K nUR                  nU R                  XU5        g )Nr   )__main____dict__runctx)r   cmdr   dicts       r   run	Trace.run  s      Ct$r"   c                    Uc  0 nUc  0 nU R                   (       d@  [        R                  " U R                  5        [        R                  " U R                  5         [        XU5        U R                   (       d-  [        R                  " S 5        [        R                  " S 5        g g ! U R                   (       d-  [        R                  " S 5        [        R                  " S 5        f f = fr   )r   	threadingsettracer   r4   r   )r   r   globalslocalss       r   r   Trace.runctx  s    ?bG>B6~~t//0LL))*	)v&>>T"""4( "4>>T"""4( "s   B( (A C(c                &   S nU R                   (       d   [        R                  " U R                  5         U" U0 UD6nU R                   (       d  [        R                  " S 5        U$ ! U R                   (       d  [        R                  " S 5        f f = fr   )r   r4   r   r   )r   funcargskwresults        r   runfuncTrace.runfunc  sh    ~~LL))*	#4&2&F>>T" >>T" "s   A& &*Bc                 F   UR                   nUR                  nU(       a  [        U5      nOS nUR                  nS nX R                  ;   a!  U R                  U   b  U R                  U   nGOS U R                  U'   [
        R                  " U5       Vs/ s H"  n[        R                  " U5      (       d  M   UPM$     nn[        U5      S:X  a  [
        R                  " US   5       V	s/ s H  n	[        U	[        5      (       d  M  U	PM     n
n	[        U
5      S:X  ah  [
        R                  " U
S   5       Vs/ s H  n[        US5      (       d  M  UPM     nn[        U5      S:X  a  US   R                  nX`R                  U'   Ub	  U< SU< 3nX4U4$ s  snf s  sn	f s  snf )Nr
   r   	__bases__r   )f_codeco_filenamer0   co_namer   gcget_referrersr   
isfunctionr5   
isinstancer   hasattrr$   )r   framer   r   r   r   clsnamerW   funcsr   dictsr   classess                r   file_module_function_ofTrace.file_module_function_of  s   ||##!(+JJ<<%%%!!$'3,,T2'+Dt$ !# 0 0 6 3 61#..q1  6E 3
 5zQ$&$4$4U1X$> 5$>q *1d 3 $> 5u:?*,*:*:58*D ?*DQ&-a&=  !*DG ?7|q(")!*"5"5
 4;**40")84HX---35?s$   F6F(FF7FFc                     US:X  a=  U R                  U5      nU R                  UR                  5      nSU R                  XT4'   gg)z[Handler for call events.

Adds information about who called who to the self._callers dict.
callr
   N)r
  f_backr   )r   r  whyarg	this_funcparent_funcs         r   r   Trace.globaltrace_trackcallers  sE    
 &=44U;I66u||DK67DMM;23	 r"   c                 R    US:X  a!  U R                  U5      nSU R                  U'   gg)z_Handler for call events.

Adds (filename, modulename, funcname) to the self._calledfuncs dict.
r  r
   N)r
  r   )r   r  r  r  r  s        r   r   Trace.globaltrace_countfuncs  s0    
 &=44U;I+,Di( r"   c                 H   US:X  a  UR                   nUR                  R                  SS5      nU(       al  [        U5      nUb]  U R                  R                  XV5      nU(       d:  U R                  (       a  [        SU< SUR                  < 35        U R                  $ gggg)zzHandler for call events.

If the code block being entered is to be ignored, returns `None',
else returns self.localtrace.
r  __file__Nz --- modulename: rj   )
r   	f_globalsra   r0   r   r    r   rU   r   r   )r   r  r  r  r   r   r   	ignore_its           r   r   Trace.globaltrace_lt  s     &=<<D**:t<H &h/
) $ 1 1( GI$::!&0$,,$@ B#.	 % *  r"   c                    US:X  a  UR                   R                  nUR                  nXE4nU R                  R	                  US5      S-   U R                  U'   U R
                  (       a"  [        S[        5       U R
                  -
  -  SS9  [        R                  R                  U5      n[        R                  " XE5      n[        SXu4-  SS9  U(       a  [        S	USS9  U R                  $ [        5         U R                  $ )
Nr   r   r
   %.2f r   %s(%d)r2   rD   )r   r   f_linenorG   ra   r   rU   r   r   r   r,   rv   getliner   )	r   r  r  r  r   r   rf   bnamer   s	            r   r    Trace.localtrace_trace_and_count-  s    &=||//H^^F"C#{{sA6:DKKf$// 9:DGG$$X.E$$X6D(e_,"5dDb)  r"   c                    US:X  a  UR                   R                  nUR                  nU R                  (       a"  [	        S[        5       U R                  -
  -  SS9  [        R                  R                  U5      n[        R                  " XE5      n[	        SXe4-  SS9  U(       a  [	        SUSS9  U R                  $ [	        5         U R                  $ )Nr   r  r  r  r  r2   rD   )r   r   r   r   rU   r   r   r   r,   rv   r!  r   )r   r  r  r  r   r   r"  r   s           r   r   Trace.localtrace_trace@  s    &=||//H^^Ff$// 9:DGG$$X.E$$X6D(e_,"5dDb)  r"   c                     US:X  aQ  UR                   R                  nUR                  nXE4nU R                  R	                  US5      S-   U R                  U'   U R
                  $ )Nr   r   r
   )r   r   r   rG   ra   r   )r   r  r  r  r   r   rf   s          r   r   Trace.localtrace_countQ  sU    &=||//H^^F"C#{{sA6:DKKr"   c                     [        U R                  U R                  U R                  U R                  U R
                  S9$ )N)rK   rL   rJ   rC   )r   rG   rK   rL   r   r   )r   s    r   resultsTrace.resultsY  s2    t{{4;;'+||+/+<+<'+}}6 	6r"   )r   r   r   rG   r   r   r   rK   r   rL   r   r   r   )	r
   r
   r   r   r)   r)   NNFr#   )r$   r%   r&   r'   r   r   r   r   r
  r   r   r   r   r   r   r)  r(   r)   r"   r   r   r     sI    DEDH0d%
)	'.R	8-.&"6r"   c                    ^^ SS K n U R                  5       nUR                  SSSS9  UR                  SS5      nUR                  SS	S
SS9  UR                  SSS
SS9  UR                  SSS
SS9  UR                  SSS
SS9  UR                  S5      nUR	                  5       nUR                  SSS
SS9  UR                  SSS
SS9  UR                  SSSS 9  UR                  S!S"S#S 9  UR                  S$S%S
S&S9  UR                  S'S(S
S)S9  UR                  S*S+S
S,S9  UR                  S-S.5      nUR                  S/S0/ S1S29  UR                  S3S0/ S4S29  UR                  S5S
S6S7S29  UR                  S8S9S:S;9  UR                  S<U R
                  S=S;9  UR                  5       nUR                  (       a,  [        R                  " S>5      m[        R                  " S?5      mUU4S@ jnUR                   VVs/ s H+  ofR                  SA5        H  nUR                  5       PM     M-     snnUl
        UR                   VVs/ s H1  ofR                  [        R                  5        H  nU" U5      PM     M3     snnUl        UR                  (       aq  UR                   (       d  UR#                  SB5        [%        UR                   UR                   SC9n	U	R'                  UR(                  UR*                  UR,                  5      $ [/        UR0                  UR2                  UR4                  UR6                  /5      (       d  UR#                  SD5        UR4                  (       a3  UR2                  (       d  UR0                  (       a  UR#                  SE5        UR*                  (       a"  UR2                  (       d  UR#                  SF5        UR8                  c  UR#                  SG5        [;        UR2                  UR0                  UR4                  UR6                  UR                  UR                  UR                   UR                   UR<                  SH9	n
 UR>                  (       an  SS K nUR8                  nURC                  U5      u  pnURD                  /URF                  Q[H        l%        SIURD                  URL                  URN                  US SJ.nOUR8                  /URF                  Q[H        l%        [        RP                  RS                  UR8                  5      [H        RP                  S'   [T        RV                  " UR8                  5       n[Y        UR[                  5       UR8                  SK5      nS S S 5        UR8                  SIS S SL.nU
R]                  WUU5        U
Re                  5       n	URf                  (       d2  U	R'                  UR(                  UR*                  UR,                  5        g g s  snnf s  snnf ! , (       d  f       N= f! [^         a9  n[H        R`                  " SM[H        RJ                  S   < SNU< 35         S nANS nAf[b         a     Nf = f)ONr   z	--versionversionz	trace 2.0)actionr,  zMain optionsz(One of these (or --report) must be givenz-cz--count
store_truezCount the number of times each line is executed and write the counts to <module>.cover for each module executed, in the module's directory. See also --coverdir, --file, --no-report below.)r-  helpz-tz--tracez3Print each line to sys.stdout before it is executedz-lz--listfuncszKeep track of which functions are executed at least once and write the results to sys.stdout after the program exits. Cannot be specified alongside --trace or --count.z-Tz--trackcallsz^Keep track of caller/called pairs and write the results to sys.stdout after the program exits.	Modifiersz-rz--reportzGenerate a report from a counts file; does not execute any code. --file must specify the results file to read, which must have been created in a previous run with --count --file=FILEz-Rz--no-reportz^Do not generate the coverage report files. Useful if you want to accumulate over several runs.z-fz--filez+File to accumulate counts over several runs)r/  z-Cz
--coverdirzDirectory where the report files go. The coverage report for <package>.<module> will be written to file <dir>/<package>/<module>.coverz-mz	--missingz?Annotate executable lines that were not executed with ">>>>>> "z-sz	--summaryz\Write a brief summary for each file to sys.stdout. Can only be used with --count or --reportz-gz--timingzQPrefix each line with the time since the program started. Only used while tracingFilterszCan be specified multiple timesz--ignore-moduleappendzqIgnore the given module(s) and its submodules (if it is a package). Accepts comma separated list of module names.)r-  defaultr/  z--ignore-dirzWIgnore files in the given directory (multiple directories can be joined by os.pathsep).z--moduleFzTrace a module. progname?zfile to run as main program)nargsr/  	argumentszarguments to the programstdlib
platstdlibc                    > [         R                  R                  [         R                  R                  U 5      5      n U R	                  ST5      R	                  ST5      n [         R                  R                  U 5      $ )Nz$prefixz$exec_prefix)r   r   
expanduser
expandvarsr7   r   )s_exec_prefix_prefixs    r   parse_ignore_dirmain.<locals>.parse_ignore_dir  sX    GGrww11!45IIi)11.,Oww""r"   ,z-r/--report requires -f/--file)rK   rL   zLmust specify one of --trace, --count, --report, --listfuncs, or --trackcallsz8cannot specify both --listfuncs and (--trace or --count)z3--summary can only be used with --count or --reportz3progname is missing: required with the main options)r   r   r   r   rK   rL   r   r   )r$   r  __package__
__loader____spec__
__cached__r   )r  r$   rC  rF  zCannot run file z
 because: )4argparseArgumentParseradd_argumentadd_argument_groupadd_mutually_exclusive_group	REMAINDER
parse_args
ignore_dir	sysconfigget_pathignore_modulesplitstripr   pathsepreportrF   errorr   r   missingr   r   anyr   r   	listfuncs
trackcallsr4  r   r   modulerunpy_get_module_detailsr   r7  r4   argvparentloaderr   rr   io	open_coder   r   r   rR   exit
SystemExitr)  	no_report)rG  parsergrp_grpoptsr@  r   r   r=  r)  tr\  module_namemod_namemod_specr   globsr   rX   r>  r?  s                      @@r   mainro  _  s   $$&F
I{K

#
#N68C T9\&  '
 T9\F  HT=E  F T>,7  8 
#
#K
0C++-DdJ|   
 	dM,G  H T8>  @T<2  3 T;|   T;|=  > T:l+  , 
#
#I-/C&x!  " ^HbG  H 
</  1

#.  0
8+=+=+  - D$$X. )),7# $(#5#5O#5a# ))+AM &#5OD !%N /19LA (*9L + /NDO {{yyLL9:!DIIF$$T\\4<<OO

DJJHII 4 	5 ~~4::OP||DJJJK}}JKdjj$**??t7I7Iii	5A;;--K','@'@'M$H((:4>>:CH& ,,'&oo$"E 77CH''//$--8CHHQKdmm,rwwy$--@ - !MM&#"	E 	
ue$ iikG>>dllDLL$--H ONX -,  HSXXa[#FGG sC   62W2 8W8C;X &W>2,X >
XX 
Y/YYYr   r   )__doc____all__ra  rv   r   r4   rO  r   ry   r   r   r   rN   timer   r   r   r   r   r0   r>   r   r   r   r   ru   r   ro  r$   r)   r"   r   <module>rs     s   <( %
& 	  	 
     	 
  # #0 0d 8r rh
.#T6 T6lPId ZF r"   