§
    (¶Õir  ã                   ó  — 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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¦   «          dS dS )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dS )Ú_IgnoreNc                 óŠ   — |st          ¦   «         nt          |¦  «        | _        |sg nd„ |D ¦   «         | _        ddi| _        d S )Nc                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S © )ÚosÚpathÚnormpath©Ú.0Úds     ú/usr/lib/python3.11/trace.pyú
<listcomp>z$_Ignore.__init__.<locals>.<listcomp>G   s8   € ð *9ð *9ð *9Ø./õ +-¬'×*:Ò*:¸1Ñ*=Ô*=ð *9ð *9ð *9ó    z<string>é   )ÚsetÚ_modsÚ_dirsÚ_ignore)ÚselfÚmodulesÚdirss      r   Ú__init__z_Ignore.__init__E   sX   € Ø")Ð;•S‘U”U�U­s°7©|¬|ˆŒ
Ø#ð 9�R�Rð *9ð *9Ø37ð*9ñ *9ô *9ˆŒ
à# QÐ(ˆŒˆˆr   c                 ó\  — || j         v r| j         |         S || j        v rd| j         |<   dS | j        D ]'}|                     |dz   ¦  «        rd| j         |<    dS Œ(|€d| j         |<   dS | j        D ]1}|                     |t          j        z   ¦  «        rd| j         |<    dS Œ2d| j         |<   dS )Nr   ú.r   )r   r   Ú
startswithr   r   Úsep)r   ÚfilenameÚ
modulenameÚmodr   s        r   Únamesz_Ignore.namesK   sø   € Ø˜œÐ%Ð%Ø”< 
Ô+Ð+ð ˜œÐ#Ð#Ø'(ˆDŒL˜Ñ$Ø�1ð ”:ð 	ð 	ˆCð ×$Ò$ S¨3¡YÑ/Ô/ð Ø+,�”˜ZÑ(Ø�q�qðð
 Ðà'(ˆDŒL˜Ñ$Ø�1ð ”ð 
	ð 
	ˆAð ×"Ò" 1¥r¤v¡:Ñ.Ô.ð Ø+,�”˜ZÑ(Ø�q�qðð
 $%ˆŒ�ZÑ Øˆqr   ©NN)Ú__name__Ú
__module__Ú__qualname__r   r$   r
   r   r   r   r   D   s7   € € € € € ð)ð )ð )ð )ð)ð )ð )ð )ð )r   r   c                 óˆ   — t           j                             | ¦  «        }t           j                             |¦  «        \  }}|S )ú,Return a plausible module name for the path.)r   r   ÚbasenameÚsplitext)r   Úbaser!   Úexts       r   Ú_modnamer/   v   s7   € õ Œ7×Ò˜DÑ!Ô!€DÝ”G×$Ò$ TÑ*Ô*�M€HˆcØ€Or   c                 óÜ  — t           j                             | ¦  «        }d}t          j        D ]{}t           j                             |¦  «        }|                     |¦  «        rE|t          |¦  «                 t           j        k    r"t          |¦  «        t          |¦  «        k    r|}Œ||r| t          |¦  «        dz   d…         }n| }t           j                             |¦  «        \  }}|                     t           j        d¦  «        }t           j	        r |                     t           j	        d¦  «        }t           j         
                    |¦  «        \  }}|                     d¦  «        S )r*   Ú r   Nr   )r   r   ÚnormcaseÚsysr   Úlenr    Ú
splitdriveÚreplaceÚaltsepr,   Úlstrip)r   ÚcomparepathÚlongestÚdirr-   Údriver!   r.   s           r   Ú_fullmodnamer=   }   s0  € õ ”'×"Ò" 4Ñ(Ô(€KØ€GÝŒxð ð ˆÝŒg×Ò˜sÑ#Ô#ˆØ×!Ò! #Ñ&Ô&ð 	¨;µs¸3±x´xÔ+@ÅBÄFÒ+JÐ+JÝ�3‰xŒx�#˜g™,œ,Ò&Ð&Ø�øàð Ø•C˜‘L”L 1Ñ$Ð%Ð%Ô&ˆˆàˆå”'×$Ò$ TÑ*Ô*�K€Eˆ4Ø�<Š<�œ Ñ$Ô$€DÝ	„yð ,Ø�|Š|�BœI sÑ+Ô+ˆÝ”G×$Ò$ TÑ*Ô*�M€HˆcØ�?Š?˜3ÑÔÐr   c                   ó6   — e Zd Z	 	 d	d„Zd„ Zd„ Zd
d„Zdd„ZdS )r   Nc                 óÞ  — || _         | j         €i | _         | j                              ¦   «         | _        || _        | j        €i | _        | j                             ¦   «         | _        || _        | j        €i | _        | j                             ¦   «         | _        || _        || _        | j        r¾	 t          | j        d¦  «        5 }t          j	        |¦  «        \  }}}d d d ¦  «         n# 1 swxY w Y   |  
                    |                      |||¬¦  «        ¦  «         d S # t          t          t          f$ r1}t          d| j        ›d|›�t           j        ¬¦  «         Y d }~d S d }~ww xY wd S )NÚrb)ÚcallerszSkipping counts file ú: ©Úfile)ÚcountsÚcopyÚcounterÚcalledfuncsrA   ÚinfileÚoutfileÚopenÚpickleÚloadÚupdateÚ	__class__ÚOSErrorÚEOFErrorÚ
ValueErrorÚprintr3   Ústderr)r   rE   rH   rI   rA   rJ   ÚfÚerrs           r   r   zCoverageResults.__init__š   sç  € àˆŒØŒ;ÐØˆDŒKØ”{×'Ò'Ñ)Ô)ˆŒØ&ˆÔØÔÐ#Ø!ˆDÔØÔ+×0Ò0Ñ2Ô2ˆÔØˆŒØŒ<ÐØˆDŒLØ”|×(Ò(Ñ*Ô*ˆŒØˆŒØˆŒØŒ;ð 	NðNÝ˜$œ+ tÑ,Ô,ð B°Ý39´;¸q±>´>Ñ0�F˜K¨ðBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bà—’˜DŸNšN¨6°;È˜NÑPÔPÑQÔQÐQÐQÐQøÝ�X¥zÐ2ð Nð Nð NÝ�Ø)-¬¨¨°c°cð;ÝBEÄ*ðNñ Nô Nð Nð Nð Nð Nð Nð Nð NøøøøðNøøøð	Nð 	Ns<   Â0D" ÃC*ÃD" Ã*C.Ã.D" Ã1C.Ã2.D" Ä"E*Ä9&E%Å%E*c                 óV   — |                      d¦  «        o|                     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Ô,BÐBr   c                 óÐ   — | j         }| j        }| j        }|j         }|j        }|j        }|D ]$}|                     |d¦  «        ||         z   ||<   Œ%|D ]}d||<   Œ|D ]}d||<   ŒdS )z.Merge in the data from another CoverageResultsr   r   N)rE   rH   rA   Úget)	r   ÚotherrE   rH   rA   Úother_countsÚother_calledfuncsÚother_callersÚkeys	            r   rN   zCoverageResults.updateº   s£   € à”ˆØÔ&ˆØ”,ˆØ”|ˆØ!Ô-ÐØœˆàð 	Að 	AˆCØ Ÿ*š* S¨!Ñ,Ô,¨|¸CÔ/@Ñ@ˆF�3‰KˆKà$ð 	!ð 	!ˆCØ ˆK˜ÑÐà ð 	ð 	ˆCØˆG�C‰LˆLð	ð 	r   TFc                 ó¬  — | j         rRt          ¦   «          t          d¦  «         | j         }t          |¦  «        D ]\  }}}t          d|›d|›d|›�¦  «         Œ| j        r¥t          ¦   «          t          d¦  «         dx}}	t          | j        ¦  «        D ]o\  \  }
}}\  }}}|
|k    r#t          ¦   «          t          d|
d¦  «         |
}d}	||
k    r|	|k    rt          d|¦  «         |}	t          d	|›d
|›d|›d
|›�¦  «         Œpi }| j        D ]2\  }}|                     |i ¦  «        x}||<   | j        ||f         ||<   Œ3i }|                     ¦   «         D �]š\  }}|                      |¦  «        rŒ|                     d¦  «        r
|dd…         }|€Lt          j
                             t          j
                             |¦  «        ¦  «        }t          |¦  «        }nD|}t          j
                             |¦  «        st          j        |¦  «         t!          |¦  «        }|rt#          |¦  «        }ni }t%          j        |¦  «        }t          j
                             ||dz   ¦  «        }t+          |d¦  «        5 }t-          j        |j        ¦  «        \  }}ddd¦  «         n# 1 swxY w Y   |                      |||||¦  «        \  }}|r |rt5          d|z  |z  ¦  «        }||||f||<   �Œœ|rH|rFt          d¦  «         t          |¦  «        D ]'}||         \  }}}}t          d||         z  ¦  «         Œ(| j        r�	 t+          | j        d¦  «        5 } t9          j        | j        | j         | j        f| d¦  «         ddd¦  «         dS # 1 swxY w Y   dS # t<          $ r)}!t          d|!z  t>          j         ¬¦  «         Y d}!~!dS d}!~!ww xY wdS )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:r1   z***z  -->z    r   z -> z.pycNéÿÿÿÿz.coverr@   éd   zlines   cov%   module   (path)z%5d   %3d%%   %s   (%s)Úwbr   z"Can't save counts files because %srC   )!rH   rS   ÚsortedrA   rE   r]   Úitemsr[   rZ   r   r   ÚdirnameÚabspathr/   ÚexistsÚmakedirsr=   Ú_find_executable_linenosÚ	linecacheÚgetlinesÚjoinrK   ÚtokenizeÚdetect_encodingÚreadlineÚwrite_results_fileÚintrJ   rL   ÚdumprP   r3   rT   )"r   Úshow_missingÚsummaryÚcoverdirÚ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ÚmrU   rV   s"                                     r   Úwrite_resultszCoverageResults.write_resultsÌ   s  € ð Ôð 	<Ý‰GŒGˆGÝÐ%Ñ&Ô&Ð&ØÔ$ˆEÝ28¸±-´-ð <ð <Ñ.�˜* hÝ�Ø"˜(˜( J J J°°ð:ñ <ô <ð <ð <ð Œ<ð 	IÝ‰GŒGˆGÝÐ*Ñ+Ô+Ð+Ø#%Ð%ˆH�yå˜dœlÑ+Ô+ð
Ið 
IÑ<Ñ%�%˜˜uÑ';¨¨t°Uà˜HÒ$Ð$Ý‘G”G�GÝ˜% ¨Ñ.Ô.Ð.Ø$�HØ "�IØ˜E’>�> i°5Ò&8Ð&8Ý˜' 5Ñ)Ô)Ð)Ø %�IÝ�¨d¨d¨d°E°E°E¸4¸4¸4ÀÀÐGÑHÔHÐHÐHð ˆØ $¤ð 	@ð 	@ÑˆH�fØ-5¯\ª\¸(ÀBÑ-GÔ-GÐGˆI˜ Ñ*Ø $¤¨X°vÐ,>Ô ?ˆI�fÑÐð ˆà'Ÿ~š~Ñ/Ô/ð 	Jñ 	J‰OˆH�eØ×'Ò'¨Ñ1Ô1ð Øà× Ò  Ñ(Ô(ð )Ø# C R Cœ=�àÐÝ”g—o’o¥b¤g§o¢o°hÑ&?Ô&?Ñ@Ô@�Ý% hÑ/Ô/�
�
à�Ý”w—~’~ cÑ*Ô*ð %Ý”K Ñ$Ô$Ð$Ý)¨(Ñ3Ô3�
ð ð Ý1°(Ñ;Ô;��à�ÝÔ'¨Ñ1Ô1ˆFÝœŸš S¨*°xÑ*?Ñ@Ô@ˆIÝ�h Ñ%Ô%ð D¨Ý&Ô6°r´{ÑCÔC‘�˜!ðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dà"×5Ò5°iÀØ6<¸eÀXñOô O‰OˆF�Gàð J˜7ð JÝ˜c F™l¨WÑ4Ñ5Ô5�Ø#*¨G°ZÀÐ#I��ZÑ ùð ð 	;�tð 	;ÝÐ2Ñ3Ô3Ð3Ý˜D‘\”\ð ;ð ;�Ø9=¸a¼Ñ6�˜ *¨hÝÐ/°$°q´'Ñ9Ñ:Ô:Ð:Ð:àŒ<ð 	SðSÝ˜$œ,¨Ñ-Ô-ð &°Ý”K ¤¨dÔ.>ÀÄÐ MØ ! 1ñ&ô &ð &ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &øõ ð Sð Sð SÝÐ:¸SÑ@ÅsÄzÐRÑRÔRÐRÐRÐRÐRÐRÐRÐRøøøøðSøøøð	Sð 	SsN   Ê J)Ê)J-	Ê0J-	ÍN Í)NÎN ÎNÎN ÎNÎN Î
OÎ(OÏOc                 ó4  — 	 t          |d|¬¦  «        }n:# t          $ r-}t          d|›d|›d�t          j        ¬¦  «         Y d}~dS d}~ww xY wd	}d	}	|5  t          |d
¦  «        D ]—\  }
}|
|v r)|                     d||
         z  ¦  «         |	d
z  }	|d
z  }n=|
|v r$t          |vr|                     d¦  «         |d
z  }n|                     d¦  «         |                     |                     d¦  «        ¦  «         Œ˜	 ddd¦  «         n# 1 swxY w Y   |	|fS )z'Return a coverage results file in path.Úw©rŽ   ztrace: Could not open z for writing: z - skippingrC   N)r   r   r   r   z%5d: z>>>>>> z       é   )	rK   rP   rS   r3   rT   Ú	enumerateÚwriteÚPRAGMA_NOCOVERÚ
expandtabs)r   r   ÚlinesrŠ   r‡   rŽ   rJ   rV   r‘   r�   r†   Úlines               r   ru   z"CoverageResults.write_results_file(  s¶  € ð	Ý˜4 ¨xÐ8Ñ8Ô8ˆGˆGøÝð 	ð 	ð 	ÝˆEØ26°$°$¸¸¸ð=ÝDGÄJðPñ Pô Pð Pà�4�4�4�4�4øøøøð	øøøð
 ˆØˆØð 	2ð 	2Ý )¨%°Ñ 3Ô 3ð 2ð 2‘�˜ð ˜YÐ&Ð&Ø—M’M '¨I°fÔ,=Ñ"=Ñ>Ô>Ð>Ø˜a‘K�FØ˜q‘L�G�GØ˜vÐ%Ð%­nÀÐ.DÐ.Dð —M’M )Ñ,Ô,Ð,Ø˜q‘L�G�Gà—M’M )Ñ,Ô,Ð,Ø—’˜dŸošo¨aÑ0Ô0Ñ1Ô1Ð1Ð1ð2ð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð" �wˆÐs'   ‚ •
AŸ"AÁAÁB)DÄDÄD)NNNNN)TFN©N)r&   r'   r(   r   r[   rN   r”   ru   r
   r   r   r   r   ™   s„   € € € € € Ø=AØ'+ðNð Nð Nð Nð4Cð Cð Cðð ð ð$ZSð ZSð ZSð ZSðxð ð ð ð ð r   c                 óP   — i }t          j        | ¦  «        D ]\  }}||vr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 ]9}t          j        |¦  «        r#|                     t          ||¦  «        ¦  «         Œ:|S )z<Return lineno dict for all code objects reachable from code.)r¦   Ú	co_constsÚinspectÚiscoderN   Ú_find_lines)r£   r¤   r¥   Úcs       r   r«   r«   R  sZ   € õ $ D¨$Ñ/Ô/€Gð Œ^ð 1ð 1ˆÝŒ>˜!ÑÔð 	1à�NŠN�; q¨$Ñ/Ô/Ñ0Ô0Ð0øØ€Nr   c                 óL  — i }t           j        }t          | |¬¦  «        5 }t          j        |j        ¦  «        }|D ]O\  }}}}	}
|t           j        k    r5|t           j        k    r%|\  }}|	\  }}t          ||dz   ¦  «        D ]}d||<   Œ|}ŒP	 ddd¦  «         n# 1 swxY w Y   |S )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ÚINDENTrK   rr   Úgenerate_tokensrt   ÚSTRINGÚrange)r!   rŽ   r   Ú
prev_ttyperU   ÚtokÚttypeÚtstrÚstartÚendrž   ÚslineÚscolÚelineÚecolÚis                   r   Ú_find_stringsr¾   ^  s
  € ð 	€Aõ ”€JÝ	ˆh Ð	*Ñ	*Ô	*ð 	¨aÝÔ& q¤zÑ2Ô2ˆØ-0ð 	ð 	Ñ)ˆE�4˜  TØ�œÒ$Ð$Ø¥¤Ò-Ð-Ø"'‘K�E˜4Ø"%‘K�E˜4Ý" 5¨%°!©)Ñ4Ô4ð !ð !˜Ø ˜˜!™˜ØˆJˆJð	ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð €Hs    A,BÂBÂ Bc                 ój  — 	 t          j        | ¦  «        5 }|                     ¦   «         }|j        }ddd¦  «         n# 1 swxY w Y   n:# t          $ r-}t          d| ›d|›�t          j        ¬¦  «         i cY d}~S d}~ww xY wt          || d¦  «        }t          | |¦  «        }t          ||¦  «        S )zAReturn dict where keys are line numbers in the line number table.NzNot printing coverage data for rB   rC   Úexec)rr   rK   ÚreadrŽ   rP   rS   r3   rT   Úcompiler¾   r«   )r!   rU   ÚprogrŽ   rV   r£   r¤   s          r   rn   rn   u  s  € ðÝŒ]˜8Ñ$Ô$ð 	"¨Ø—6’6‘8”8ˆDØ”zˆHð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"øøõ ð ð ð ÝˆØ!)  ¨3¨3ð0Ý7:´zð	Cñ 	Cô 	Cð 	Càˆ	ˆ	ˆ	ˆ	ˆ	ˆ	øøøøðøøøõ �4˜ 6Ñ*Ô*€DÝ˜ 8Ñ,Ô,€DÝ�t˜TÑ"Ô"Ð"s=   ‚A
 –>²A
 ¾AÁA
 ÁAÁA
 Á

BÁ"A<Á6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dS )r   r   r   r
   NFc
                 óà  — || _         || _        t          ||¦  «        | _        i | _        i | _        d| _        || _        i | _        i | _	        i | _
        d| _        |	rt          ¦   «         | _        |r| j        | _        dS |r| j        | _        dS |r|r| j        | _        | j        | _        dS |r| j        | _        | j        | _        dS |r| j        | _        | j        | _        dS d| _        dS )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   )rI   rJ   r   ÚignorerE   Ú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Ú
ignoredirsrI   rJ   Útimings
             r   r   zTrace.__init__„  s  € ð( ˆŒØˆŒÝ˜j¨*Ñ5Ô5ˆŒØˆŒØ ˆÔØˆŒØˆŒ
ØˆÔØˆŒØˆÔØˆŒØð 	&Ý#™gœgˆDŒOØð 	Ø#Ô<ˆDÔÐÐØð 	Ø#Ô:ˆDÔÐÐØð 	�uð 	Ø#Ô2ˆDÔØ"Ô=ˆDŒOˆOˆOØð 	Ø#Ô2ˆDÔØ"Ô3ˆDŒOˆOˆOØð 	Ø#Ô2ˆDÔØ"Ô3ˆDŒOˆOˆOð ˆDŒNˆNˆNr   c                 óJ   — dd l }|j        }|                      |||¦  «         d S )Nr   )Ú__main__Ú__dict__Úrunctx)r   ÚcmdrÝ   Údicts       r   Úrunz	Trace.run¶  s/   € ØˆˆˆØÔ ˆØ�Š�C˜˜tÑ$Ô$Ð$Ð$Ð$r   c                 óx  — |€i }|€i }| j         s2t          j        | j        ¦  «         t	          j        | j        ¦  «         	 t          |||¦  «         | j         s*t	          j        d ¦  «         t          j        d ¦  «         d S d S # | j         s)t	          j        d ¦  «         t          j        d ¦  «         w w xY wrŸ   )rÈ   Ú	threadingÚsettracerÐ   r3   rÀ   )r   rà   ÚglobalsÚlocalss       r   rß   zTrace.runctx»  sÍ   € Øˆ? b˜GØˆ> B˜6ØŒ~ð 	+ÝÔ˜tÔ/Ñ0Ô0Ð0ÝŒL˜Ô)Ñ*Ô*Ð*ð	)Ý��g˜vÑ&Ô&Ð&à”>ð )Ý”˜TÑ"Ô"Ð"ÝÔ" 4Ñ(Ô(Ð(Ð(Ð(ð)ð )ø�4”>ð )Ý”˜TÑ"Ô"Ð"ÝÔ" 4Ñ(Ô(Ð(Ð(ð)øøøs   ÁB Â2B9c                óÖ   — d }| j         st          j        | j        ¦  «         	  ||i |¤Ž}| j         st          j        d ¦  «         n!# | j         st          j        d ¦  «         w w xY w|S rŸ   )rÈ   r3   rå   rÐ   )r   ÚfuncÚargsÚkwÚresults        r   ÚrunfunczTrace.runfuncÈ  s…   € ØˆØŒ~ð 	+ÝŒL˜Ô)Ñ*Ô*Ð*ð	#Ø�T˜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        |<   d„ t          j        |¦  «        D ¦   «         }t          |¦  «        dk    r…d„ t          j        |d         ¦  «        D ¦   «         }t          |¦  «        dk    rNd„ t          j        |d         ¦  «        D ¦   «         }	t          |	¦  «        dk    r|	d         j        }|| j        |<   |�|›d|›�}|||fS )Nc                 ó:   — g | ]}t          j        |¦  «        ¯|‘ŒS r
   )r©   Ú
isfunction)r   rU   s     r   r   z1Trace.file_module_function_of.<locals>.<listcomp>ä  s7   € ð 3ð 3ð 3˜1Ý#Ô.¨qÑ1Ô1ð3�Qð 3ð 3ð 3r   r   c                 ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r
   )Ú
isinstancerá   r   s     r   r   z1Trace.file_module_function_of.<locals>.<listcomp>ê  s6   € ð 5ð 5ð 5˜qÝ *¨1­dÑ 3Ô 3ð5˜ð 5ð 5ð 5r   r   c                 ó2   — g | ]}t          |d ¦  «        ¯|‘ŒS )Ú	__bases__)Úhasattr)r   r¬   s     r   r   z1Trace.file_module_function_of.<locals>.<listcomp>í  s6   € ð ?ð ?ð ? QÝ&-¨a°Ñ&=Ô&=ð?˜qð ?ð ?ð ?r   r   )	Úf_codeÚco_filenamer/   Úco_namerÌ   ÚgcÚget_referrersr4   r&   )
r   Úframer£   r!   r"   r|   ÚclsnameÚfuncsÚdictsÚclassess
             r   Úfile_module_function_ofzTrace.file_module_function_ofÓ  s_  € ØŒ|ˆØÔ#ˆØð 	Ý! (Ñ+Ô+ˆJˆJàˆJà”<ˆØˆØ�4Ô%Ð%Ð%ØÔ! $Ô'Ð3ØÔ,¨TÔ2�øà'+ˆDÔ˜tÑ$ð3ð 3¥Ô 0°Ñ 6Ô 6ð 3ñ 3ô 3ˆEõ
 �5‰zŒz˜QŠˆð5ð 5¥BÔ$4°U¸1´XÑ$>Ô$>ð 5ñ 5ô 5�å�u‘:”: ’?�?ð?ð ?­"Ô*:¸5À¼8Ñ*DÔ*Dð ?ñ ?ô ?�Gå˜7‘|”| qÒ(Ð(à")¨!¤*Ô"5˜ð
 4;˜Ô*¨4Ñ0ØÐØ") ' '¨8¨8Ð4ˆHà˜ XÐ-Ð-r   c                 óŒ   — |dk    r=|                       |¦  «        }|                       |j        ¦  «        }d| j        ||f<   dS dS )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ü  sS   € ð
 �&Š=ˆ=à×4Ò4°UÑ;Ô;ˆIØ×6Ò6°u´|ÑDÔDˆKØ67ˆDŒM˜;¨	Ð2Ñ3Ð3Ð3ð	 ˆ=r   c                 óT   — |dk    r!|                       |¦  «        }d| j        |<   dS dS )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  s:   € ð
 �&Š=ˆ=Ø×4Ò4°UÑ;Ô;ˆIØ+,ˆDÔ˜iÑ(Ð(Ð(ð ˆ=r   c                 ó  — |dk    r€|j         }|j                             dd¦  «        }|rZt          |¦  «        }|�E| j                             ||¦  «        }|s*| j        rt          d|›d|j        ›�¦  «         | j	        S dS dS dS dS )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: rd   )
rö   Ú	f_globalsr]   r/   rÆ   r$   rÉ   rS   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Ô G�IØ$ð /Øœ:ð BÝ!˜EØ&0 j j°$´,°,ð$@ñ Bô Bð Bà#œÐ.ð *Ð)ð/ð /ð �tð ˆ=r   c           	      ó†  — |dk    rµ|j         j        }|j        }||f}| j                             |d¦  «        dz   | j        |<   | j        r(t          dt          ¦   «         | j        z
  z  d¬¦  «         t          j	         
                    |¦  «        }t          d||t          j        ||¦  «        fz  d¬¦  «         | j        S )	Nrž   r   r   ú%.2fú ©r¸   ú
%s(%d): %sr1   )rö   r÷   Úf_linenorE   r]   rÍ   rS   rÎ   r   r   r+   ro   ÚgetlinerÔ   )r   rû   r  r  r!   r†   rb   Úbnames           r   rÓ   z Trace.localtrace_trace_and_count'  sÒ   € Ø�&Š=ˆ=à”|Ô/ˆHØ”^ˆFØ˜FÐ"ˆCØ#œ{Ÿš¨s°AÑ6Ô6¸Ñ:ˆDŒK˜ÑàŒð EÝ�f¥¡¤¨$¬/Ñ 9Ñ:ÀÐDÑDÔDÐDÝ”G×$Ò$ XÑ.Ô.ˆEÝ�, %¨Ý"+Ô"3°H¸fÑ"EÔ"Eð"Gñ GØLNðPñ Pô Pð PàŒÐr   c           	      ó2  — |dk    r‹|j         j        }|j        }| j        r(t	          dt          ¦   «         | j        z
  z  d¬¦  «         t          j                             |¦  «        }t	          d||t          j
        ||¦  «        fz  d¬¦  «         | j        S )Nrž   r  r  r  r  r1   )rö   r÷   r  rÍ   rS   rÎ   r   r   r+   ro   r  rÔ   )r   rû   r  r  r!   r†   r  s          r   rÕ   zTrace.localtrace_trace6  s§   € Ø�&Š=ˆ=à”|Ô/ˆHØ”^ˆFàŒð EÝ�f¥¡¤¨$¬/Ñ 9Ñ:ÀÐDÑDÔDÐDÝ”G×$Ò$ XÑ.Ô.ˆEÝ�, %¨Ý"+Ô"3°H¸fÑ"EÔ"Eð"Gñ GØLNðPñ Pô Pð PàŒÐr   c                 ó–   — |dk    r=|j         j        }|j        }||f}| j                             |d¦  «        dz   | j        |<   | j        S )Nrž   r   r   )rö   r÷   r  rE   r]   rÔ   )r   rû   r  r  r!   r†   rb   s          r   rÖ   zTrace.localtrace_countC  sO   € Ø�&Š=ˆ=Ø”|Ô/ˆHØ”^ˆFØ˜FÐ"ˆCØ#œ{Ÿš¨s°AÑ6Ô6¸Ñ:ˆDŒK˜ÑØŒÐr   c                 ó\   — t          | j        | j        | j        | j        | j        ¬¦  «        S )N)rI   rJ   rH   rA   )r   rE   rI   rJ   rÊ   rË   )r   s    r   ÚresultszTrace.resultsK  s1   € Ý˜tœ{°4´;Ø'+¤|Ø+/Ô+<Ø'+¤}ð6ñ 6ô 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   ƒ  sÝ   € € € € € ØDEØDHØð0ð 0ð 0ð 0ðd%ð %ð %ð
)ð )ð )ð )ð	ð 	ð 	ð'.ð '.ð '.ðR	8ð 	8ð 	8ð-ð -ð -ðð ð ð.ð ð ðð ð ðð ð ð6ð 6ð 6ð 6ð 6r   c                  ó"  ‡‡‡— dd l } |                      ¦   «         }|                     ddd¬¦  «         |                     dd¦  «        }|                     dd	d
d¬¦  «         |                     ddd
d¬¦  «         |                     ddd
d¬¦  «         |                     ddd
d¬¦  «         |                     d¦  «        }|                     ¦   «         }|                     ddd
d¬¦  «         |                     ddd
d¬¦  «         |                     ddd¬ ¦  «         |                     d!d"d#¬ ¦  «         |                     d$d%d
d&¬¦  «         |                     d'd(d
d)¬¦  «         |                     d*d+d
d,¬¦  «         |                     d-d.¦  «        }|                     d/d0g d1¬2¦  «         |                     d3d0g d4¬2¦  «         |                     d5d
d6d7¬2¦  «         |                     d8d9d:¬;¦  «         |                     d<| j        d=¬;¦  «         |                     ¦   «         }|j        r(t          j	        d>¦  «        Št          j	        d?¦  «        Šˆˆfd@„ŠdA„ |j
        D ¦   «         |_
        ˆfdB„|j        D ¦   «         |_        |j        r]|j        s|                     dC¦  «         t          |j        |j        ¬D¦  «        }|                     |j        |j        |j        ¦  «        S t'          |j        |j        |j        |j        g¦  «        s|                     dE¦  «         |j        r#|j        s|j        r|                     dF¦  «         |j        r|j        s|                     dG¦  «         |j        €|                     dH¦  «         t3          |j        |j        |j        |j        |j
        |j        |j        |j        |j        ¬I¦	  «	        }	 |j        rVdd l}|j        }|                     |¦  «        \  }	}
}|j        g|j        ¢t@          _!        dJ|j        |
j"        |
j#        |
d dKœ}n«|j        g|j        ¢t@          _!        tH          j%         &                    |j        ¦  «        t@          j%        d<   tO          |j        dL¦  «        5 }tQ          | )                    ¦   «         |j        dM¦  «        }d d d ¦  «         n# 1 swxY w Y   |j        dJd d dNœ}| *                    |||¦  «         nL# tV          $ r4}tA          j,        dOt@          j!        d         ›dP|›�¦  «         Y d }~nd }~wtZ          $ r Y nw xY w| .                    ¦   «         }|j/        s(|                     |j        |j        |j        ¦  «         d S d S )QNr   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                             t           j                             | ¦  «        ¦  «        } |                      d‰¦  «                             d‰¦  «        } t           j                             | ¦  «        S )Nz$prefixz$exec_prefix)r   r   Ú
expanduserÚ
expandvarsr6   r   )ÚsÚ_exec_prefixÚ_prefixs    €€r   Úparse_ignore_dirzmain.<locals>.parse_ignore_dirœ  sa   ø€ ÝŒG×Ò�rœw×1Ò1°!Ñ4Ô4Ñ5Ô5ˆØ�IŠI�i Ñ)Ô)×1Ò1°.À,ÑOÔOˆÝŒw×Ò Ñ"Ô"Ð"r   c                 óf   — g | ].}|                      d ¦  «        D ]}|                     ¦   «         ‘ŒŒ/S )ú,)ÚsplitÚstrip)r   r½   r#   s      r   r   zmain.<locals>.<listcomp>¡  sW   € ð Oð Oð OØÀÇÂÈÁÄðOð OØ:=ð Ÿ)š)™+œ+ð Oð Oð Oð Or   c                 ój   •— g | ]/}|                      t          j        ¦  «        D ]} ‰|¦  «        ‘ŒŒ0S r
   )r1  r   Úpathsep)r   r½   r+  r.  s      €r   r   zmain.<locals>.<listcomp>£  s_   ø€ ð Nð Nð NØ¸¿ºÅÄÑ9LÔ9LðNð NØ45ð (Ð'¨Ñ*Ô*ð Nð Nð Nð Nr   z-r/--report requires -f/--file)rI   rJ   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Ú   rI   rJ   rÛ   rÝ   )r&   r
  Ú__package__Ú
__loader__Ú__spec__Ú
__cached__r@   rÀ   )r
  r&   r5  r8  zCannot run file z
 because: )0ÚargparseÚArgumentParserÚadd_argumentÚadd_argument_groupÚadd_mutually_exclusive_groupÚ	REMAINDERÚ
parse_argsÚ
ignore_dirÚ	sysconfigÚget_pathÚignore_moduleÚreportrD   Úerrorr   r”   Úmissingry   rz   ÚanyrÉ   r‰   Ú	listfuncsÚ
trackcallsr"  r   rÛ   ÚmoduleÚrunpyÚ_get_module_detailsr÷   r%  r3   ÚargvÚparentÚloaderr   r   rj   rK   rÂ   rÁ   rß   rP   ÚexitÚ
SystemExitr  Ú	no_report)r9  ÚparserÚgrpÚ_grpÚoptsr  ÚtrK  Úmodule_nameÚmod_nameÚmod_specr£   Úglobsr�   rV   r,  r-  r.  s                  @@@r   Úmainr\  Q  sQ  øøø€ Ø€O€O€Oà×$Ò$Ñ&Ô&€FØ
×Ò˜¨I¸{ÐÑKÔKÐKà
×
#Ò
# NØ6ñ8ô 8€Cð ×Ò�T˜9¨\ð&ð ñ 'ô 'ð 'ð
 ×Ò�T˜9¨\ØFð ñ Hô Hð Hà×Ò�T˜=°ðEð ñ Fô Fð Fð ×Ò�T˜>°,ð7ð ñ 8ô 8ð 8ð ×
#Ò
# KÑ
0Ô
0€Cà×+Ò+Ñ-Ô-€DØ×Ò�d˜J¨|ðð ñ  ô  ð  ð
 	×Ò�d˜M°,ðGð ñ Hô Hð Hð ×Ò�T˜8Ø>ð ñ @ô @ð @à×Ò�T˜<ð2ð ñ 3ô 3ð 3ð ×Ò�T˜;¨|ðð ñ ô ð ð ×Ò�T˜;¨|ð=ð ñ >ô >ð >ð ×Ò�T˜:¨lð+ð ñ ,ô ,ð ,ð ×
#Ò
# IØ-ñ/ô /€Cà×ÒÐ&¨xÀð!ð ñ "ô "ð "ð ×Ò�^¨H¸bðGð ñ Hô Hð Hð ×Ò˜
¨<ÀØ/ð ñ 1ô 1ð 1à
×Ò˜
¨#Ø.ð ñ 0ô 0ð 0à
×Ò˜¨8Ô+=Ø+ð ñ -ô -ð -ð ×ÒÑÔ€Dà„ð 8ÝÔ$ XÑ.Ô.ˆÝ Ô)¨,Ñ7Ô7ˆð#ð #ð #ð #ð #ð #ð
Oð OØ#'Ô#5ðOñ Oô O€DÔðNð Nð Nð NØ $¤ðNñ Nô N€D„Oð „{ð PØŒyð 	;Ø�LŠLÐ9Ñ:Ô:Ð:Ý!¨¬¸D¼IÐFÑFÔFˆØ×$Ò$ T¤\°4´<ÀÄÑOÔOÐOå�”
˜DœJ¨¬¸¼ÐHÑIÔIð 5Ø�Šð 4ñ 	5ô 	5ð 	5ð „~ð Q˜4œ:ð Q¨¬ð QØ�ŠÐOÑPÔPÐPà„|ð L˜DœJð LØ�ŠÐJÑKÔKÐKà„}ÐØ�ŠÐJÑKÔKÐKåˆdŒj˜$œ*°´Øœ?°tÔ7IØœ°´Ø”i¨¬ð	5ñ 	5ô 	5€AðØŒ;ð 	ØˆLˆLˆLØœ-ˆKØ',×'@Ò'@ÀÑ'MÔ'MÑ$ˆH�h ØÔ(Ð:¨4¬>Ð:�CŒHà&Ø Ô,Ø'œØ&œoØ$Ø"ðð ˆEˆEð œÐ7¨¬Ð7�CŒHÝœ'Ÿ/š/¨$¬-Ñ8Ô8�CŒH�Q‰Kå�d”m TÑ*Ô*ð A¨bÝ˜rŸwšw™yœy¨$¬-¸Ñ@Ô@�ðAð Að Añ Aô Að Að Að Að Að Að Aøøøð Að Að Að Að !œMØ&Ø#Ø"ð	ð ˆEð 	
�Š��u˜eÑ$Ô$Ð$Ð$øÝð Hð Hð HÝŒˆµS´X¸a´[°[°[À#À#ÐFÑGÔGÐGÐGÐGÐGÐGÐGøøøøÝð ð ð Øˆðøøøð �iŠi‰kŒk€GàŒ>ð IØ×Ò˜dœl¨D¬L¸$¼-ÑHÔHÐHÐHÐHðIð IsC   Ï B<T  Ò)SÓT  ÓSÓT  ÓSÓ&T  Ô 
U	Ô
*T9Ô9U	ÕU	rÝ   rŸ   )Ú__doc__Ú__all__ro   r   r3   rA  r®   rr   r©   rù   r¡   rL   Útimer   rÎ   rä   r›   r   r/   r=   r   r¦   r«   r¾   rn   r   r\  r&   r
   r   r   ú<module>r`     sÃ  ðð<ð ð( Ð%Ð
&€à Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #à Ð Ð Ð à#€ð0ð 0ð 0ð 0ð 0ñ 0ô 0ð 0ðdð ð ð ð  ð  ð8mð mð mð mð mñ mô mð mð^ð ð ð
ð 
ð 
ðð ð ð ð.#ð #ð #ðL6ð L6ð L6ð L6ð L6ñ L6ô L6ð L6ð\PIð PIð PIðd ˆZÒÐØ€D�F„F€F€F€Fð Ðr   