Ë
    òT•jþq  ã                   ó  — d Z ddg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	Z	ddl
Z
ddlZddlZddlmZ ddlZdZ G d„ d«      Zd	„ Zd
„ Z G d„ d«      Zd„ Zd„ Zdd„Zd„ Z G d„ d«      Zd„ Zedk(  r e«        yy)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                   ó   — e Zd Zdd„Zd„ Zy)Ú_IgnoreNc                 óÄ   — |s
t        «       n
t        |«      | _        |sg n,|D �cg c]!  }t        j                  j	                  |«      ‘Œ# c}| _        ddi| _        y c c}w )Nz<string>é   )ÚsetÚ_modsÚosÚpathÚnormpathÚ_dirsÚ_ignore)ÚselfÚmodulesÚdirsÚds       ú/usr/lib/python3.12/trace.pyÚ__init__z_Ignore.__init__F   sR   € Ù")”S”U¬s°7«|ˆŒ
Ù#‘RØ37ö*9Ø./ô +-¯'©'×*:Ñ*:¸1Õ*=ò *9ˆŒ
à# QÐ(ˆ�ùò*9s   ¥&Ac                 ó°  — || j                   v r| j                   |   S || j                  v rd| j                   |<   y| j                  D ]'  }|j                  |dz   «      sŒd| j                   |<    y |€d| j                   |<   y| j                  D ]5  }|j                  |t        j
                  z   «      sŒ&d| j                   |<    y d| j                   |<   y)Nr	   ú.r   )r   r   Ú
startswithr   r   Úsep)r   ÚfilenameÚ
modulenameÚmodr   s        r   Únamesz_Ignore.namesL   sà   € Ø˜Ÿ™Ñ%Ø—<‘< 
Ñ+Ð+ð ˜Ÿ™Ñ#Ø'(ˆD�L‰L˜Ñ$Øð —:‘:ò 	ˆCð ×$Ñ$ S¨3¡YÕ/Ø+,�—‘˜ZÑ(Ùð	ð Ðà'(ˆD�L‰L˜Ñ$Øð —‘ò 
	ˆAð ×"Ñ" 1¤r§v¡v¡:Õ.Ø+,�—‘˜ZÑ(Ùð
	ð $%ˆ�‰�ZÑ Øó    ©NN)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r   E   s   „ ó)ó)r   r   c                 óˆ   — t         j                  j                  | «      }t         j                  j                  |«      \  }}|S )ú,Return a plausible module name for the path.)r   r   ÚbasenameÚsplitext)r   Úbaser   Úexts       r   Ú_modnamer+   w   s5   € ô �7‰7×Ñ˜DÓ!€DÜ—G‘G×$Ñ$ TÓ*�M€HˆcØ€Or   c                 óº  — t         j                  j                  | «      }d}t        j                  D ]m  }t         j                  j                  |«      }|j	                  |«      sŒ4|t        |«         t         j                  k(  sŒTt        |«      t        |«      kD  sŒl|}Œo |r| t        |«      dz   d }n| }t         j                  j                  |«      \  }}|j                  t         j                  d«      }t         j                  r |j                  t         j                  d«      }t         j                  j                  |«      \  }}|j                  d«      S )r&   Ú r	   Nr   )r   r   ÚnormcaseÚsysr   Úlenr   Ú
splitdriveÚreplaceÚaltsepr(   Úlstrip)r   ÚcomparepathÚlongestÚdirr)   Údriver   r*   s           r   Ú_fullmodnamer9   ~   s	  € ô —'‘'×"Ñ" 4Ó(€KØ€GÜ�x‰xò ˆÜ�g‰g×Ñ˜sÓ#ˆØ×!Ñ! #Õ&¨;´s¸3³xÑ+@ÄBÇFÁFÓ+JÜ�3‹xœ#˜g›,Ó&Ø‘ð	ñ Ø”C˜“L 1Ñ$Ð%Ð&‰àˆä—'‘'×$Ñ$ TÓ*�K€Eˆ4Ø�<‰<œŸ™ Ó$€DÜ	‡y‚yØ�|‰|œBŸI™I sÓ+ˆÜ—G‘G×$Ñ$ TÓ*�M€HˆcØ�?‰?˜3ÓÐr   c                   ó4   — e Zd Z	 	 dd„Zd„ Zd„ Zdd„Zd	d„Zy)
r   Nc                 óø  — || _         | j                   €i | _         | j                   j                  «       | _        || _        | j                  €i | _        | j                  j                  «       | _        || _        | j                  €i | _        | j                  j                  «       | _        || _        || _        | j
                  r]	 t        | j
                  d«      5 }t        j                  |«      \  }}}d d d «       | j                  | j                  |||¬«      «       y y # 1 sw Y   Œ.xY w# t        t        t        f$ r5}t        d| j
                  ›d|›�t         j"                  ¬«       Y d }~y d }~ww xY w)NÚrb)ÚcallerszSkipping counts file ú: ©Úfile)ÚcountsÚcopyÚcounterÚcalledfuncsr=   ÚinfileÚoutfileÚopenÚpickleÚloadÚupdateÚ	__class__ÚOSErrorÚEOFErrorÚ
ValueErrorÚprintr/   Ústderr)r   rA   rD   rE   r=   rF   ÚfÚerrs           r   r   zCoverageResults.__init__›   sC  € àˆŒØ�;‰;ÐØˆDŒKØ—{‘{×'Ñ'Ó)ˆŒØ&ˆÔØ×ÑÐ#Ø!ˆDÔØ×+Ñ+×0Ñ0Ó2ˆÔØˆŒØ�<‰<ÐØˆDŒLØ—|‘|×(Ñ(Ó*ˆŒØˆŒØˆŒØ�;Š;ðNÜ˜$Ÿ+™+ tÓ,ð B°Ü39·;±;¸q³>Ñ0�F˜K¨÷Bà—‘˜DŸN™N¨6°;È˜NÓPÕQð ÷Bð Bûô œX¤zÐ2ò NÝØ)-¯«±cð;ÜBEÇ*Á*÷Nò NûðNús0   ÃD0 ÃD$Ã7+D0 Ä$D-Ä)D0 Ä0E9Å+E4Å4E9c                 óJ   — |j                  d«      xr |j                  d«      S )z_Return True if the filename does not refer to a file
        we want to have reported.
        ú<ú>)r   Úendswith)r   r   s     r   Úis_ignored_filenamez#CoverageResults.is_ignored_filenameµ   s%   € ð ×"Ñ" 3Ó'ÒB¨H×,=Ñ,=¸cÓ,BÐBr   c                 ó  — | j                   }| j                  }| j                  }|j                   }|j                  }|j                  }|D ]  }|j                  |d«      ||   z   ||<   Œ |D ]  }d||<   Œ	 |D ]  }d||<   Œ	 y)z.Merge in the data from another CoverageResultsr   r	   N)rA   rD   r=   Úget)	r   ÚotherrA   rD   r=   Úother_countsÚother_calledfuncsÚother_callersÚkeys	            r   rJ   zCoverageResults.update»   s¡   € à—‘ˆØ×&Ñ&ˆØ—,‘,ˆØ—|‘|ˆØ!×-Ñ-ÐØŸ™ˆàò 	AˆCØ Ÿ*™* S¨!Ó,¨|¸CÑ/@Ñ@ˆF�3ŠKð	Að %ò 	!ˆCØ ˆK˜Òð	!ð !ò 	ˆCØˆG�CŠLñ	r   c                 ó  — | j                   rIt        «        t        d«       | j                   }t        |«      D ]  \  }}}t        d|›d|›d|›�«       Œ | j                  r�t        «        t        d«       dx}}	t        | j                  «      D ]\  \  \  }
}}\  }}}|
|k7  rt        «        t        d|
d«       |
}d}	||
k7  r|	|k7  rt        d|«       |}	t        d	|›d
|›d|›d
|›�«       Œ^ i }| j                  D ]0  \  }}|j                  |i «      x}||<   | j                  ||f   ||<   Œ2 i }|j                  «       D �]U  \  }}| j                  |«      rŒ|j                  d«      r|dd }|€Ht        j                  j                  t        j                  j                  |«      «      }t        |«      }n$|}t        j                  |d¬«       t        |«      }|rt!        |«      }ni }t#        j$                  |«      }t        j                  j'                  ||dz   «      }t)        |d«      5 }t+        j,                  |j.                  «      \  }}ddd«       | j1                  ||||«      \  }}|s�Œ8|s�Œ<t3        d|z  |z  «      }||||f||<   �ŒX |r8|r6t        d«       t        |«      D ]  }||   \  }}}}t        d||   z  «       Œ | j4                  rY	 t)        | j4                  d«      5 } t7        j8                  | j                  | j                   | j                  f| d«       ddd«       yy# 1 sw Y   ŒæxY w# 1 sw Y   yxY w# t:        $ r(}!t        d|!z  t<        j>                  ¬«       Y d}!~!yd}!~!ww xY w)af  
        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.
        zfunctions called:z
filename: z, modulename: ú, funcname: zcalling relationships:r-   z***z  -->z    r   z -> z.pycNéÿÿÿÿT)Úexist_okz.coverr<   éd   zlines   cov%   module   (path)z%5d   %3d%%   %s   (%s)Úwbr	   z"Can't save counts files because %sr?   ) rD   rO   Úsortedr=   rA   rY   ÚitemsrW   rV   r   r   ÚdirnameÚabspathr+   Úmakedirsr9   Ú_find_executable_linenosÚ	linecacheÚgetlinesÚjoinrG   ÚtokenizeÚdetect_encodingÚreadlineÚwrite_results_fileÚintrF   rH   ÚdumprL   r/   rP   )"r   Úshow_missingÚsummaryÚcoverdirÚcallsr   r   ÚfuncnameÚlastfileÚ	lastcfileÚpfileÚpmodÚpfuncÚcfileÚcmodÚcfuncÚper_fileÚlinenoÚ	lines_hitÚsumsÚcountr7   ÚlnotabÚsourceÚ	coverpathÚfpÚencodingÚ_Ún_hitsÚn_linesÚpercentÚmrQ   rR   s"                                     r   Úwrite_resultszCoverageResults.write_resultsÍ   s|  € ð ×ÒÜŒGÜÐ%Ô&Ø×$Ñ$ˆEÜ28¸³-ò <Ñ.�˜* hÝÚ"¢J±ð:õ <ð<ð �<Š<ÜŒGÜÐ*Ô+Ø#%Ð%ˆH�yä˜dŸl™lÓ+ò
IÑ<Ñ%�%˜˜uÑ';¨¨t°Uà˜HÒ$Ü”GÜ˜% ¨Ô.Ø$�HØ "�IØ˜E’> i°5Ò&8Ü˜' 5Ô)Ø %�IÝªd²Eº4ÁÐGÕHð
Ið ˆØ $§¡ò 	@ÑˆH�fØ-5¯\©\¸(ÀBÓ-GÐGˆI˜ Ñ*Ø $§¡¨X°vÐ,>Ñ ?ˆI�fÒð	@ð
 ˆà'Ÿ~™~Ó/ó 	J‰OˆH�eØ×'Ñ'¨Ô1Øà× Ñ  Ô(Ø# C R˜=�àÐÜ—g‘g—o‘o¤b§g¡g§o¡o°hÓ&?Ó@�Ü% hÓ/‘
à�Ü—‘˜C¨$Õ/Ü)¨(Ó3�
ñ Ü1°(Ó;‘à�Ü×'Ñ'¨Ó1ˆFÜŸ™Ÿ™ S¨*°xÑ*?Ó@ˆIÜ�h Ó%ð D¨Ü&×6Ñ6°r·{±{ÓC‘�˜!÷Dà"×5Ñ5°iÀØ6<¸eÀXóO‰OˆF�Gã›7Ü˜c F™l¨WÑ4Ó5�Ø#*¨G°ZÀÐ#I��ZÓ ð;	Jñ@ ‘tÜÐ2Ô3Ü˜D“\ò ;�Ø9=¸a¹Ñ6�˜ *¨hÜÐ/°$°q±'Ñ9Õ:ð;ð �<Š<ðSÜ˜$Ÿ,™,¨Ó-ð &°Ü—K‘K §¡¨d×.>Ñ.>ÀÇÁÐ MØ ! 1ô&÷&ð &ð ÷Dð Dú÷$&ð &ûô ò SÜÐ:¸SÑ@ÄsÇzÁz×RÒRûðSúsB   È3#L;Ë"M Ë89MÌ1M Ì;M	ÍMÍM ÍM Í	NÍM?Í?Nc                 óò  — 	 t        |d|¬«      }d	}d	}	|5  t        |d
«      D ]  \  }
}|
|v r"|j                  d||
   z  «       |	d
z  }	|d
z  }n4|
|v rt        |vr|j                  d«       |d
z  }n|j                  d«       |j                  |j                  d«      «       Œ� 	 ddd«       |	|fS # t        $ r,}t        d|›d|›d�t        j                  ¬«       Y d}~yd}~ww xY w# 1 sw Y   |	|fS xY w)z'Return a coverage results file in path.Úw©rŠ   ztrace: Could not open z for writing: z - skippingr?   N)r   r   r   r	   z%5d: z>>>>>> z       é   )	rG   rL   rO   r/   rP   Ú	enumerateÚwriteÚPRAGMA_NOCOVERÚ
expandtabs)r   r   Úlinesr†   rƒ   rŠ   rF   rR   r�   rŒ   r‚   Úlines               r   rq   z"CoverageResults.write_results_file(  s  € ð	Ü˜4 ¨xÔ8ˆGð ˆØˆØñ 	2Ü )¨%°Ó 3ò 2‘�˜ð ˜YÑ&Ø—M‘M '¨I°fÑ,=Ñ"=Ô>Ø˜a‘K�FØ˜q‘L‘GØ˜vÑ%¬nÀÑ.Dð —M‘M )Ô,Ø˜q‘L‘Gà—M‘M )Ô,Ø—‘˜dŸo™o¨aÓ0Õ1ñ2÷	2ð" �wˆÐøô1 ò 	ÝÚ26ºð=ÜDGÇJÁJõPäûð	ú÷	2ð" �wˆÐús#   ‚B2 –BC*Â2	C'Â;"C"Ã"C'Ã*C6)NNNNN)TFN©N)r!   r"   r#   r   rW   rJ   r�   rq   r$   r   r   r   r   š   s&   „ Ø=AØ'+óNò4Còó$YSôvr   c                 óX   — i }t        j                  | «      D ]  \  }}||vsŒd||<   Œ |S )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¢   H  s=   € à€Gä×'Ñ'¨Ó-ò  ‰	ˆˆ6Ø˜ÒØˆG�FŠOð ð €Nr   c                 ó¢   — t        | |«      }| j                  D ]3  }t        j                  |«      sŒ|j	                  t        ||«      «       Œ5 |S )z<Return lineno dict for all code objects reachable from code.)r¢   Ú	co_constsÚinspectÚiscoderJ   Ú_find_lines)rŸ   r    r¡   Úcs       r   r§   r§   R  sK   € ô $ D¨$Ó/€Gð �^‰^ò 1ˆÜ�>‰>˜!Õà�N‰Nœ; q¨$Ó/Õ0ð1ð €Nr   c                 ó`  — i }t         j                  }t        | |¬«      5 }t        j                  |j
                  «      }|D ]S  \  }}}}	}
|t         j                  k(  r6|t         j                  k(  r#|\  }}|	\  }}t        ||dz   «      D ]  }d||<   Œ	 |}ŒU 	 ddd«       |S # 1 sw Y   |S xY w)zÄReturn 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ÚINDENTrG   rn   Úgenerate_tokensrp   ÚSTRINGÚrange)r   rŠ   r   Ú
prev_ttyperQ   ÚtokÚttypeÚtstrÚstartÚendrš   ÚslineÚscolÚelineÚecolÚis                   r   Ú_find_stringsrº   ^  s¾   € ð 	€Aô —‘€JÜ	ˆh Ô	*ð 	¨aÜ×&Ñ& q§z¡zÓ2ˆØ-0ò 	Ñ)ˆE�4˜  TØœŸ™Ò$Ø¤§¡Ò-Ø"'‘K�E˜4Ø"%‘K�E˜4Ü" 5¨%°!©)Ó4ò !˜Ø ˜˜!šð!à‰Jñ	÷	ð €H÷	ð €Hús    A8B#Â#B-c                 óL  — 	 t        j                  | «      5 }|j                  «       }|j                  }ddd«       t        | d«      }t        | «      }t        ||«      S # 1 sw Y   Œ.xY w# t        $ r-}t        d| ›d|›�t        j                  ¬«       i cY d}~S d}~ww xY w)zAReturn dict where keys are line numbers in the line number table.NzNot printing coverage data for r>   r?   Úexec)rn   rG   ÚreadrŠ   rL   rO   r/   rP   Úcompilerº   r§   )r   rQ   ÚprogrŠ   rR   rŸ   r    s          r   rj   rj   u  s—   € ðÜ�]‰]˜8Ó$ð 	"¨Ø—6‘6“8ˆDØ—z‘zˆH÷	"ô �4˜ 6Ó*€DÜ˜ 8Ó,€DÜ�t˜TÓ"Ð"÷	"ð 	"ûô ò ÝÚ!)©3ð0Ü7:·z±zõ	Cà�	ûðús3   ‚A- —A!´A- Á!A*Á&A- Á-	B#Á6"BÂB#ÂB#c                   ó^   — e Zd Z	 	 	 dd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zy)r   Nc
                 ó  — || _         || _        t        ||«      | _        i | _        i | _        d| _        || _        i | _        i | _	        i | _
        d| _        |	rt        «       | _        |r| j                  | _        y|r| j                  | _        y|r%|r#| j                   | _        | j"                  | _        y|r#| j                   | _        | j&                  | _        y|r#| j                   | _        | j(                  | _        yd| _        y)ax  
        @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	   )rE   rF   r   ÚignorerA   Ú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Ú
ignoredirsrE   rF   Útimings
             r   r   zTrace.__init__„  sî   € ð( ˆŒØˆŒÜ˜j¨*Ó5ˆŒØˆŒØ ˆÔØˆŒØˆŒ
ØˆÔØˆŒØˆÔØˆŒÙÜ#›gˆDŒOÙØ#×<Ñ<ˆDÕÙØ#×:Ñ:ˆDÕÙ‘uØ#×2Ñ2ˆDÔØ"×=Ñ=ˆD�OÙØ#×2Ñ2ˆDÔØ"×3Ñ3ˆD�OÙØ#×2Ñ2ˆDÔØ"×3Ñ3ˆD�Oð ˆD�Nr   c                 óJ   — dd l }|j                  }| j                  |||«       y )Nr   )Ú__main__Ú__dict__Úrunctx)r   ÚcmdrÙ   Údicts       r   Úrunz	Trace.run¶  s    € ÛØ× Ñ ˆØ�‰�C˜˜tÕ$r   c                 óª  — |€i }|€i }| j                   s>t        j                  | j                  «       t	        j                  | j                  «       	 t        |||«       | j                   s+t	        j                  d «       t        j                  d «       y y # | j                   s+t	        j                  d «       t        j                  d «       w w xY wr›   )rÄ   Ú	threadingÚsettracerÌ   r/   r¼   )r   rÜ   ÚglobalsÚlocalss       r   rÛ   zTrace.runctx»  sŸ   € Øˆ? b˜GØˆ> B˜6Ø�~Š~Ü×Ñ˜t×/Ñ/Ô0Ü�L‰L˜×)Ñ)Ô*ð	)Ü��g˜vÔ&à—>’>Ü—‘˜TÔ"Ü×"Ñ" 4Õ(ð "ø�4—>’>Ü—‘˜TÔ"Ü×"Ñ" 4Õ(ð "ús   ÁB Â9Cc                ó  — d }| j                   st        j                  | j                  «       	  ||i |¤Ž}| j                   st        j                  d «       |S # | j                   st        j                  d «       w w xY wr›   )rÄ   r/   rá   rÌ   )r   ÚfuncÚargsÚkwÚresults        r   ÚrunfunczTrace.runfuncÈ  sh   € ØˆØ�~Š~Ü�L‰L˜×)Ñ)Ô*ð	#Ù˜4Ð& 2Ñ&ˆFà—>’>Ü—‘˜TÔ"Øˆøð —>’>Ü—‘˜TÕ"ð "ús   ¯A Á$A>c                 óì  — |j                   }|j                  }|rt        |«      }nd }|j                  }d }|| j                  v r | j                  |   ��| j                  |   }nôd | j                  |<   t        j                  |«      D �cg c]  }t        j                  |«      r|‘Œ }}t        |«      dk(  r t        j                  |d   «      D �	cg c]  }	t        |	t        «      r|	‘Œ }
}	t        |
«      dk(  r]t        j                  |
d   «      D �cg c]  }t        |d«      r|‘Œ }}t        |«      dk(  r|d   j                  }|| j                  |<   |�|›d|›�}|||fS c c}w c c}	w c c}w )Nr	   r   Ú	__bases__r   )Úf_codeÚco_filenamer+   Úco_namerÈ   ÚgcÚget_referrersr¥   Ú
isfunctionr0   Ú
isinstancerÝ   Úhasattrr!   )r   ÚframerŸ   r   r   rx   ÚclsnamerQ   Úfuncsr   Údictsr¨   Úclassess                r   Úfile_module_function_ofzTrace.file_module_function_ofÓ  s‡  € Ø�|‰|ˆØ×#Ñ#ˆÙÜ! (Ó+‰JàˆJà—<‘<ˆØˆØ�4×%Ñ%Ñ%Ø×!Ñ! $Ñ'Ñ3Ø×,Ñ,¨TÑ2‘à'+ˆD×Ñ˜tÑ$ô !#× 0Ñ 0°Ó 6ö 3˜1Ü#×.Ñ.¨qÔ1ò ð 3ˆEð 3ô
 �5‹z˜QŠÜ$&×$4Ñ$4°U¸1±XÓ$>ö 5˜qÜ *¨1¬dÔ 3ò ð 5�ð 5ä�u“: ’?Ü*,×*:Ñ*:¸5À¹8Ó*Dö ? QÜ&-¨a°Ô&=ò  !ð ?�Gð ?ä˜7“| qÒ(à")¨!¡*×"5Ñ"5˜ð
 4;˜×*Ñ*¨4Ñ0ØÐÚ")©8Ð4ˆHà˜ XÐ-Ð-ùò-3ùò5ùò?s   ÂE'ÃE,ÄE1c                 óŠ   — |dk(  r>| j                  |«      }| j                  |j                  «      }d| j                  ||f<   yy)zkHandler 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Ë   zTrace.globaltrace_trackcallersü  sG   € ð
 �&Š=à×4Ñ4°UÓ;ˆIØ×6Ñ6°u·|±|ÓDˆKØ67ˆD�M‰M˜;¨	Ð2Ò3ð	 r   c                 óP   — |dk(  r!| j                  |«      }d| j                  |<   yy)zoHandler 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Í   zTrace.globaltrace_countfuncs  s0   € ð
 �&Š=Ø×4Ñ4°UÓ;ˆIØ+,ˆD×Ñ˜iÒ(ð r   c                 ó$  — |dk(  r‹|j                   }|j                  j                  dd«      }|r`t        |«      }|�R| j                  j                  ||«      }|s3| j                  rt        d|›d|j                  ›�«       | j                  S yyyy)z’Handler for call events.

        If the code block being entered is to be ignored, returns `None',
        else returns self.localtrace.
        rû   Ú__file__Nz --- modulename: r`   )
rì   Ú	f_globalsrY   r+   rÂ   r   rÅ   rO   rî   rÐ   )r   rô   rý   rþ   rŸ   r   r   Ú	ignore_its           r   rÎ   zTrace.globaltrace_lt  s•   € ð �&Š=Ø—<‘<ˆDØ—‘×*Ñ*¨:°tÓ<ˆHÙô & hÓ/�
ØÐ)Ø $§¡× 1Ñ 1°(¸JÓ G�IÙ$ØŸ:š:Ý!Ú&0°$·,²,ð$@ô Bà#Ÿ™Ð.ð	 %ð *ð ð r   c           	      ó¶  — |dk(  rÉ|j                   j                  }|j                  }||f}| j                  j	                  |d«      dz   | j                  |<   | j
                  r%t        dt        «       | j
                  z
  z  d¬«       t        j                  j                  |«      }t        d||t        j                  ||«      fz  d¬«       | j                  S )	Nrš   r   r	   ú%.2fú ©r´   ú
%s(%d): %sr-   )rì   rí   Úf_linenorA   rY   rÉ   rO   rÊ   r   r   r'   rk   ÚgetlinerÐ   )r   rô   rý   rþ   r   r‚   r^   Úbnames           r   rÏ   z Trace.localtrace_trace_and_count'  sº   € Ø�&Š=à—|‘|×/Ñ/ˆHØ—^‘^ˆFØ˜FÐ"ˆCØ#Ÿ{™{Ÿ™¨s°AÓ6¸Ñ:ˆD�K‰K˜Ñà�ŠÜ�f¤£¨$¯/©/Ñ 9Ñ:ÀÕDÜ—G‘G×$Ñ$ XÓ.ˆEÜ�, %¨Ü"+×"3Ñ"3°H¸fÓ"Eð"Gñ GØLNõPà�‰Ðr   c           	      óV  — |dk(  r™|j                   j                  }|j                  }| j                  r%t	        dt        «       | j                  z
  z  d¬«       t        j                  j                  |«      }t	        d||t        j                  ||«      fz  d¬«       | j                  S )Nrš   r  r  r	  r
  r-   )rì   rí   r  rÉ   rO   rÊ   r   r   r'   rk   r  rÐ   )r   rô   rý   rþ   r   r‚   r  s          r   rÑ   zTrace.localtrace_trace6  sŽ   € Ø�&Š=à—|‘|×/Ñ/ˆHØ—^‘^ˆFà�ŠÜ�f¤£¨$¯/©/Ñ 9Ñ:ÀÕDÜ—G‘G×$Ñ$ XÓ.ˆEÜ�, %¨Ü"+×"3Ñ"3°H¸fÓ"Eð"Gñ GØLNõPà�‰Ðr   c                 óÈ   — |dk(  rR|j                   j                  }|j                  }||f}| j                  j	                  |d«      dz   | j                  |<   | j
                  S )Nrš   r   r	   )rì   rí   r  rA   rY   rÐ   )r   rô   rý   rþ   r   r‚   r^   s          r   rÒ   zTrace.localtrace_countC  sW   € Ø�&Š=Ø—|‘|×/Ñ/ˆHØ—^‘^ˆFØ˜FÐ"ˆCØ#Ÿ{™{Ÿ™¨s°AÓ6¸Ñ:ˆD�K‰K˜ÑØ�‰Ðr   c                 ó†   — t        | j                  | j                  | j                  | j                  | j
                  ¬«      S )N)rE   rF   rD   r=   )r   rA   rE   rF   rÆ   rÇ   )r   s    r   ÚresultszTrace.resultsK  s2   € Ü˜tŸ{™{°4·;±;Ø'+§|¡|Ø+/×+<Ñ+<Ø'+§}¡}ô6ð 	6r   )	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   ƒ  sI   „ ØDEØDHØó0òd%ó
)ò	ò'.òR	8ò-òò.òòó6r   c                  ó”  ‡‡— dd l } | j                  «       }|j                  ddd¬«       |j                  dd«      }|j                  dd	d
d¬«       |j                  ddd
d¬«       |j                  ddd
d¬«       |j                  ddd
d¬«       |j                  d«      }|j	                  «       }|j                  ddd
d¬«       |j                  ddd
d¬«       |j                  ddd¬ «       |j                  d!d"d#¬ «       |j                  d$d%d
d&¬«       |j                  d'd(d
d)¬«       |j                  d*d+d
d,¬«       |j                  d-d.«      }|j                  d/d0g d1¬2«       |j                  d3d0g d4¬2«       |j                  d5d
d6d7¬2«       |j                  d8d9d:¬;«       |j                  d<| j
                  d=¬;«       |j                  «       }|j                  r*t        j                  d>«      Št        j                  d?«      Šˆˆfd@„}|j                  D ��cg c](  }|j                  dA«      D ]  }|j                  «       ‘Œ Œ* c}}|_
        |j                  D ��cg c].  }|j                  t        j                  «      D ]
  } ||«      ‘Œ Œ0 c}}|_        |j                  ro|j                   s|j#                  dB«       t%        |j                   |j                   ¬C«      }	|	j'                  |j(                  |j*                  |j,                  «      S t/        |j0                  |j2                  |j4                  |j6                  g«      s|j#                  dD«       |j4                  r)|j2                  s|j0                  r|j#                  dE«       |j*                  r|j2                  s|j#                  dF«       |j8                  €|j#                  dG«       t;        |j2                  |j0                  |j4                  |j6                  |j                  |j                  |j                   |j                   |j<                  ¬H«	      }
	 |j>                  rodd l }|j8                  }|jC                  |«      \  }}}|jD                  g|jF                  ¢tH        _%        dI|jD                  |jL                  |jN                  |d dJœ}nº|j8                  g|jF                  ¢tH        _%        t        jP                  jS                  |j8                  «      tH        jP                  d<   tU        jV                  |j8                  «      5 }tY        |j[                  «       |j8                  dK«      }d d d «       |j8                  dId d dLœ}|
j]                  ||«       |
je                  «       }	|jf                  s2|	j'                  |j(                  |j*                  |j,                  «       y y c c}}w c c}}w # 1 sw Y   ŒˆxY w# t^        $ r6}tI        j`                  dMtH        jJ                  d   ›dN|›�«       Y d }~Œ¡d }~wtb        $ r Y Œ¯w xY w)ONr   z	--versionÚversionz	trace 2.0)Úactionr  zMain optionsz(One of these (or --report) must be givenz-cz--countÚ
store_truez»Count 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--listfuncsz§Keep 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--reportz¶Generate 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
--coverdirz†Directory 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                 óþ   •— t         j                  j                  t         j                  j                  | «      «      } | j	                  d‰«      j	                  d‰«      } t         j                  j                  | «      S )Nz$prefixz$exec_prefix)r   r   Ú
expanduserÚ
expandvarsr2   r   )ÚsÚ_exec_prefixÚ_prefixs    €€r   Úparse_ignore_dirzmain.<locals>.parse_ignore_dirœ  sX   ø€ Ü�G‰G×ÑœrŸw™w×1Ñ1°!Ó4Ó5ˆØ�I‰I�i Ó)×1Ñ1°.À,ÓOˆÜ�w‰w×Ñ Ó"Ð"r   ú,z-r/--report requires -f/--file)rE   rF   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Ö   rE   rF   r×   rÙ   )r!   r  Ú__package__Ú
__loader__Ú__spec__Ú
__cached__r¼   )r  r!   r)  r,  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Úreportr@   Úerrorr   r�   Úmissingru   rv   ÚanyrÅ   r…   Ú	listfuncsÚ
trackcallsr  r   r×   ÚmoduleÚrunpyÚ_get_module_detailsrí   r  r/   ÚargvÚparentÚloaderr   rg   ÚioÚ	open_coder¾   r½   rÛ   rL   ÚexitÚ
SystemExitr  Ú	no_report)r-  ÚparserÚgrpÚ_grpÚoptsr'  r¹   r   r$  r  ÚtrB  Úmodule_nameÚmod_nameÚmod_specrŸ   Úglobsr‰   rR   r%  r&  s                      @@r   ÚmainrU  Q  sÞ  ù€ Ûà×$Ñ$Ó&€FØ
×Ñ˜¨I¸{ÐÔKà
×
#Ñ
# NØ6ó8€Cð ×Ñ�T˜9¨\ð&ð ô 'ð
 ×Ñ�T˜9¨\ØFð ô Hà×Ñ�T˜=°ðEð ô Fð ×Ñ�T˜>°,ð7ð ô 8ð ×
#Ñ
# KÓ
0€Cà×+Ñ+Ó-€DØ×Ñ�d˜J¨|ðð ô  ð
 	×Ñ�d˜M°,ðGð ô Hð ×Ñ�T˜8Ø>ð ô @à×Ñ�T˜<ð2ð ô 3ð ×Ñ�T˜;¨|ðð ô ð ×Ñ�T˜;¨|ð=ð ô >ð ×Ñ�T˜:¨lð+ð ô ,ð ×
#Ñ
# IØ-ó/€Cà×ÑÐ&¨xÀð!ð ô "ð ×Ñ�^¨H¸bðGð ô Hð ×Ñ˜
¨<ÀØ/ð ô 1à
×Ñ˜
¨#Ø.ð ô 0à
×Ñ˜¨8×+=Ñ+=Ø+ð ô -ð ×ÑÓ€Dà‡‚Ü×$Ñ$ XÓ.ˆÜ ×)Ñ)¨,Ó7ˆõ#ð $(×#5Ñ#5÷OØÀÇÁÈÃòOØ:=ð Ÿ)™)�+ð O˜+ó O€DÔð !%§¡÷NØ¸¿¹ÄÇÁÓ9LòNØ45ñ (¨Õ*ð NÐ*ó N€D„Oð ‡{‚{Ø�yŠyØ�L‰LÐ9Ô:Ü!¨¯©¸D¿I¹IÔFˆØ×$Ñ$ T§\¡\°4·<±<ÀÇÁÓOÐOä�—
‘
˜DŸJ™J¨¯©¸¿¹ÐHÔIØ�‰ð 4ô 	5ð ‡~‚~˜4Ÿ:š:¨¯ªØ�‰ÐOÔPà‡|‚|˜DŸJšJØ�‰ÐJÔKà‡}�}ÐØ�‰ÐJÔKäˆd�j‰j˜$Ÿ*™*°·±ØŸ?™?°t×7IÑ7IØŸ™°·±Ø—i‘i¨¯©ô	5€AðØ�;Š;ÛØŸ-™-ˆKØ',×'@Ñ'@ÀÓ'MÑ$ˆH�h Ø×(Ñ(Ð:¨4¯>©>Ð:ŒCŒHà&Ø ×,Ñ,Ø'Ÿ™Ø&Ÿo™oØ$Ø"ñ‰Eð Ÿ™Ð7¨¯©Ð7ŒCŒHÜŸ'™'Ÿ/™/¨$¯-©-Ó8ŒC�H‰H�Q‰Kä—‘˜dŸm™mÓ,ð A°Ü˜rŸw™w›y¨$¯-©-¸Ó@�÷Að !ŸM™MØ&Ø#Ø"ñ	ˆEð 	
�‰��u˜eÔ$ð �i‰i‹k€Gà�>Š>Ø×Ñ˜dŸl™l¨D¯L©L¸$¿-¹-ÕHð ùóOùóN÷XAð Aûô ò HÜ�Š´S·X±X¸a³[Á#ÐF×GÑGûÜò ÙðúsC   È!-W&É&3W,ÑC6W> Õ&W2Õ+,W> ×2W;×7W> ×>	YØ,X8Ø8YÙYrÙ   r›   )Ú__doc__Ú__all__rG  rk   r   r/   r5  rª   rn   r¥   rï   r�   rH   Útimer   rÊ   rà   r—   r   r+   r9   r   r¢   r§   rº   rj   r   rU  r!   r$   r   r   ú<module>rY     s¢   ðñ<ð( Ð%Ð
&€ã 	Û Û 	Û 
Û Û Û Û Û 	Û 
Û Ý #ã à#€÷0ñ 0òdò ÷8lñ lò\ò
óò.#÷L6ñ L6ò\PIðd ˆZÒÙ…Fð r   