
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a¯t  ã                   @   sæ   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„ dƒZdd	„ Zd
d„ ZG dd„ dƒZdd„ Zdd„ Zddd„Zdd„ ZG dd „ d ƒZdd„ Zedkrâeƒ  dS )ÚTraceÚCoverageResultsé    N)Ú	monotonicz#pragma NO COVERc                   @   s   e Zd Zddd„Zdd„ ZdS )Ú_IgnoreNc                 C   s:   |s
t ƒ nt |ƒ| _|sg ndd„ |D ƒ| _ddi| _d S )Nc                 S   s   g | ]}t j |¡‘qS © )ÚosÚpathÚnormpath©Ú.0Údr   r   ú*/opt/alt/python38/lib64/python3.8/trace.pyÚ
<listcomp>G   s   ÿz$_Ignore.__init__.<locals>.<listcomp>z<string>é   )ÚsetÚ_modsÚ_dirsÚ_ignore)ÚselfÚmodulesÚdirsr   r   r   Ú__init__E   s
    ÿz_Ignore.__init__c                 C   s¦   || j kr| j | S || jkr,d| j |< dS | jD ]"}| |d ¡r2d| j |<  dS q2|d krld| j |< dS | jD ]$}| |tj ¡rrd| j |<  dS qrd| j |< dS )Nr   Ú.r   )r   r   Ú
startswithr   r   Úsep)r   ÚfilenameÚ
modulenameÚmodr   r   r   r   ÚnamesK   s$    









z_Ignore.names)NN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   D   s   
r   c                 C   s    t j | ¡}t j |¡\}}|S ©N)r   r   ÚbasenameÚsplitext)r   Úbaser   Úextr   r   r   Ú_modnamev   s    r'   c                 C   sÂ   t j | ¡}d}tjD ]@}t j |¡}| |¡r|t|ƒ t jkrt|ƒt|ƒkr|}q|rr| t|ƒd d … }n| }t j |¡\}}| t jd¡}t j	r¨| t j	d¡}t j 
|¡\}}| d¡S )NÚ r   r   )r   r   ÚnormcaseÚsysr   Úlenr   Ú
splitdriveÚreplaceÚaltsepr$   Úlstrip)r   ZcomparepathZlongestÚdirr%   Zdriver   r&   r   r   r   Ú_fullmodname}   s     
r1   c                   @   s:   e Zd Zddd„Zdd„ Zdd„ Zdd
d„Zddd„ZdS )r   Nc              
   C   sþ   || _ | j d kri | _ | j  ¡ | _|| _| jd kr8i | _| j ¡ | _|| _| jd krZi | _| j ¡ | _|| _|| _| jrúz@t| jdƒ�}t 	|¡\}}}W 5 Q R X |  
|  |||¡¡ W n@ tttfk
rø } ztd| j|f tjd� W 5 d }~X Y nX d S )NÚrbzSkipping counts file %r: %s©Úfile)ÚcountsÚcopyZcounterÚcalledfuncsÚcallersÚinfileÚoutfileÚopenÚpickleÚloadÚupdateÚ	__class__ÚOSErrorÚEOFErrorÚ
ValueErrorÚprintr*   Ústderr)r   r5   r7   r9   r8   r:   ÚfÚerrr   r   r   r   š   s2    


ÿÿzCoverageResults.__init__c                 C   s   |  d¡o| d¡S )Nú<ú>)r   Úendswith)r   r   r   r   r   Úis_ignored_filename´   s    z#CoverageResults.is_ignored_filenamec           	      C   sn   | j }| j}| j}|j }|j}|j}|D ]}| |d¡||  ||< q(|D ]}d||< qJ|D ]}d||< q\d S ©Nr   r   )r5   r7   r8   Úget)	r   Úotherr5   r7   r8   Zother_countsZother_calledfuncsZother_callersÚkeyr   r   r   r>   º   s    
zCoverageResults.updateTFc           "   
   C   sî  | j r@tƒ  tdƒ | j }t|ƒD ]\}}}td|||f ƒ q"| jrÐtƒ  tdƒ d }}	t| jƒD ]h\\}
}}\}}}|
|krœtƒ  td|
dƒ |
}d}	||
krº|	|krºtd|ƒ |}	td||||f ƒ qfi }| jD ].\}}| |i ¡ }||< | j||f ||< qÚi }| ¡ D �]\}}|  |¡�r0�q| d¡�rH|d d	… }|d k�rpt	j
 t	j
 |¡¡}t|ƒ}n$|}t	j
 |¡�sŒt	 |¡ t|ƒ}|�r¤t|ƒ}ni }t |¡}t	j
 ||d
 ¡}t|dƒ�}t |j¡\}}W 5 Q R X |  |||||¡\}}|�r|�rtd| | ƒ}||||f||< �q|�rt|�rttdƒ t|ƒD ]&}|| \}}}}td||  ƒ �qL| j�rêz6t| jdƒ� } t | j| j | jf| d¡ W 5 Q R X W n6 tk
�rè }! ztd|! tj d� W 5 d }!~!X Y nX d S )Nzfunctions called:z*filename: %s, modulename: %s, funcname: %szcalling relationships:r(   z***z  -->z    %s.%s -> %s.%sz.pycéÿÿÿÿz.coverr2   éd   zlines   cov%   module   (path)z%5d   %3d%%   %s   (%s)Úwbr   z"Can't save counts files because %sr3   )!r7   rC   Úsortedr8   r5   rL   ÚitemsrJ   rI   r   r   ÚdirnameÚabspathr'   ÚexistsÚmakedirsr1   Ú_find_executable_linenosÚ	linecacheÚgetlinesÚjoinr;   ÚtokenizeÚdetect_encodingÚreadlineÚwrite_results_fileÚintr:   r<   Údumpr@   r*   rD   )"r   Zshow_missingÚsummaryÚcoverdirZcallsr   r   ÚfuncnameZlastfileZ	lastcfileZpfileZpmodZpfuncÚcfileZcmodZcfuncZper_fileÚlinenoÚ	lines_hitZsumsÚcountr0   ÚlnotabÚsourceZ	coverpathÚfpÚencodingÚ_Ún_hitsÚn_linesZpercentÚmrE   rF   r   r   r   Úwrite_resultsÌ   sŠ    
ÿÿ





  ÿ ÿzCoverageResults.write_resultsc              
   C   sð   zt |d|d�}W n> tk
rP } z td||f tjd� W Y ¢dS d }~X Y nX d}d}	|�„ t|dƒD ]r\}
}|
|krž| d||
  ¡ |	d7 }	|d7 }n.|
|krÂt|krÂ| d	¡ |d7 }n
| d
¡ | | d¡¡ qjW 5 Q R X |	|fS )NÚw©rl   z3trace: Could not open %r for writing: %s - skippingr3   )r   r   r   r   z%5d: z>>>>>> z       é   )	r;   r@   rC   r*   rD   Ú	enumerateÚwriteÚPRAGMA_NOCOVERÚ
expandtabs)r   r   Úlinesri   rg   rl   r:   rF   ro   rn   rf   Úliner   r   r   r_   (  s.    ÿÿ



z"CoverageResults.write_results_file)NNNNN)TFN)N)r   r    r!   r   rJ   r>   rq   r_   r   r   r   r   r   ™   s       ÿ

\c                 C   s,   i }t  | ¡D ]\}}||krd||< q|S )Nr   )ÚdisZfindlinestarts)ÚcodeÚstrsÚlinenosrm   rf   r   r   r   Ú_find_lines_from_codeH  s
    
r   c                 C   s4   t | |ƒ}| jD ]}t |¡r| t||ƒ¡ q|S r"   )r   Ú	co_constsÚinspectZiscoder>   Ú_find_lines)r|   r}   r~   Úcr   r   r   r‚   R  s
    


r‚   c              	   C   sŠ   i }t j}t| |d��j}t |j¡}|D ]R\}}}}	}
|t jkrv|t jkrv|\}}|	\}}t||d ƒD ]}d||< qh|}q(W 5 Q R X |S )Nrs   r   )ÚtokenÚINDENTr;   r\   Úgenerate_tokensr^   ÚSTRINGÚrange)r   rl   r   Z
prev_ttyperE   ÚtokZttypeZtstrÚstartÚendrz   ZslineZscolZelineZecolÚir   r   r   Ú_find_strings^  s    


r�   c              
   C   sŠ   z(t  | ¡�}| ¡ }|j}W 5 Q R X W n@ tk
rh } z"td| |f tjd� i  W Y ¢S d }~X Y nX t|| dƒ}t	| |ƒ}t
||ƒS )Nz%Not printing coverage data for %r: %sr3   Úexec)r\   r;   Úreadrl   r@   rC   r*   rD   Úcompiler�   r‚   )r   rE   Úprogrl   rF   r|   r}   r   r   r   rX   u  s    ÿÿ
rX   c                	   @   sv   e Zd Zddd„Zdd	„ Zd d
d„Zdd„ Zde_dd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )!r   r   r   r   NFc
           
      C   sÀ   || _ || _t||ƒ| _i | _i | _d| _|| _i | _i | _	i | _
d | _|	rTtƒ | _|rb| j| _nZ|rp| j| _nL|rŠ|rŠ| j| _| j| _n2|r | j| _| j| _n|r¶| j| _| j| _nd| _d S rK   )r9   r:   r   Úignorer5   Z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   rh   r”   Ú
countfuncsÚcountcallersÚ
ignoremodsÚ
ignoredirsr9   r:   Útimingr   r   r   r   „  s6    




zTrace.__init__c                 C   s    dd l }|j}|  |||¡ d S )Nr   )Ú__main__Ú__dict__Úrunctx)r   Úcmdr§   Údictr   r   r   Úrun¶  s    z	Trace.runc              	   C   sh   |d kri }|d kri }| j s6t | j¡ t | j¡ zt|||ƒ W 5 | j sbt d ¡ t d ¡ X d S r"   )r“   Ú	threadingÚsettracer›   r*   rŽ   )r   rª   ÚglobalsÚlocalsr   r   r   r©   »  s      
zTrace.runctxc               	   O   sª   t | ƒdkr| ^}}} nV| s&tdƒ‚nHd|krZ| d¡}| ^}} dd l}|jdtdd� ntdt | ƒd  ƒ‚d }|js„t |j	¡ z|| |Ž}W 5 |js¤t d ¡ X |S )	Né   z8descriptor 'runfunc' of 'Trace' object needs an argumentÚfuncr   z0Passing 'func' as keyword argument is deprecated)Ú
stacklevelz7runfunc expected at least 1 positional argument, got %dr   )
r+   Ú	TypeErrorÚpopÚwarningsÚwarnÚDeprecationWarningr“   r*   r®   r›   )ÚargsÚkwr   r²   r¶   Úresultr   r   r   ÚrunfuncÈ  s.    

 ÿ
ÿzTrace.runfuncz($self, func, /, *args, **kw)c           
      C   sð   |j }|j}|rt|ƒ}nd }|j}d }|| jkrL| j| d k	rÒ| j| }n†d | j|< dd„ t |¡D ƒ}t|ƒdkrÒdd„ t |d ¡D ƒ}t|ƒdkrÒdd„ t |d ¡D ƒ}	t|	ƒdkrÒ|	d j}|| j|< |d k	ræd||f }|||fS )Nc                 S   s   g | ]}t  |¡r|‘qS r   )r�   Z
isfunction)r   rE   r   r   r   r   ô  s    
ÿz1Trace.file_module_function_of.<locals>.<listcomp>r   c                 S   s   g | ]}t |tƒr|‘qS r   )Ú
isinstancer«   r
   r   r   r   r   ú  s    
ÿr   c                 S   s   g | ]}t |d ƒr|‘qS )Ú	__bases__)Úhasattr)r   rƒ   r   r   r   r   ý  s    
ÿz%s.%s)	Úf_codeÚco_filenamer'   Úco_namer—   ÚgcZget_referrersr+   r   )
r   Úframer|   r   r   rd   ZclsnameZfuncsZdictsÚclassesr   r   r   Úfile_module_function_ofã  s,    




zTrace.file_module_function_ofc                 C   s0   |dkr,|   |¡}|   |j¡}d| j||f< d S ©NÚcallr   )rÆ   Úf_backr–   )r   rÄ   ÚwhyÚargÚ	this_funcZparent_funcr   r   r   rš     s    
zTrace.globaltrace_trackcallersc                 C   s    |dkr|   |¡}d| j|< d S rÇ   )rÆ   r•   )r   rÄ   rÊ   rË   rÌ   r   r   r   rœ     s    
zTrace.globaltrace_countfuncsc                 C   sj   |dkrf|j }|j dd ¡}|rbt|ƒ}|d k	rf| j ||¡}|sf| jrZtd||jf ƒ | j	S nd S d S )NrÈ   Ú__file__z! --- modulename: %s, funcname: %s)
rÀ   Ú	f_globalsrL   r'   r’   r   r”   rC   rÂ   rŸ   )r   rÄ   rÊ   rË   r|   r   r   Z	ignore_itr   r   r   r�      s    ÿzTrace.globaltrace_ltc                 C   s„   |dkr~|j j}|j}||f}| j |d¡d | j|< | jrTtdtƒ | j  dd� tj	 
|¡}td||t ||¡f dd� | jS )	Nrz   r   r   ú%.2fú ©r‹   ú
%s(%d): %sr(   )rÀ   rÁ   Úf_linenor5   rL   r˜   rC   r™   r   r   r#   rY   ÚgetlinerŸ   )r   rÄ   rÊ   rË   r   rf   rN   Úbnamer   r   r   rž   7  s    
ÿÿz Trace.localtrace_trace_and_countc                 C   sd   |dkr^|j j}|j}| jr4tdtƒ | j  dd� tj |¡}td||t	 
||¡f dd� | jS )Nrz   rÏ   rÐ   rÑ   rÒ   r(   )rÀ   rÁ   rÓ   r˜   rC   r™   r   r   r#   rY   rÔ   rŸ   )r   rÄ   rÊ   rË   r   rf   rÕ   r   r   r   r    F  s    
ÿÿzTrace.localtrace_tracec                 C   s<   |dkr6|j j}|j}||f}| j |d¡d | j|< | jS )Nrz   r   r   )rÀ   rÁ   rÓ   r5   rL   rŸ   )r   rÄ   rÊ   rË   r   rf   rN   r   r   r   r¡   S  s    zTrace.localtrace_countc                 C   s   t | j| j| j| j| jd�S )N)r9   r:   r7   r8   )r   r5   r9   r:   r•   r–   )r   r   r   r   Úresults[  s
    
ýzTrace.results)	r   r   r   r   r   r   NNF)NN)r   r    r!   r   r¬   r©   r¼   Ú__text_signature__rÆ   rš   rœ   r�   rž   r    r¡   rÖ   r   r   r   r   r   ƒ  s&            þ
2
)	c                     sØ  dd l } |  ¡ }|jdddd� | dd¡}|jdd	d
dd� |jddd
dd� |jddd
dd� |jddd
dd� | d¡}| ¡ }|jddd
dd� |jddd
dd� |jdddd � |jd!d"d#d � |jd$d%d
d&d� |jd'd(d
d)d� |jd*d+d
d,d� | d-d.¡}|jd/d0g d1d2� |jd3d0g d4d2� |jd5d
d6d7d2� |jd8d9d:d;� |jd<| jd=d;� | ¡ }|j�rˆt 	d>¡‰t 	d?¡‰ ‡ ‡fd@dA„‰dBdC„ |j
D ƒ|_
‡fdDdC„|jD ƒ|_|j�rü|j�sØ| dE¡ t|j|jdF�}| |j|j|j¡S t|j|j|j|jgƒ�s | dG¡ |j�rB|j�s8|j�rB| dH¡ |j�r\|j�s\| dI¡ |jd k�rr| dJ¡ t|j|j|j|j|j
|j|j|j|jdK�	}zÀ|j�rðdd l}|j}| |¡\}	}
}|jf|j•t _!dL|j|
j"|
j#|
d dMœ}n^|jf|j•t _!t$j% &|j¡t j%d< t'|jdNƒ�}t(| )¡ |jdOƒ}W 5 Q R X |jdLd d dPœ}| *|||¡ W nP t+k
�rš } zt  ,dQt j!d |f ¡ W 5 d }~X Y n t-k
�r®   Y nX | .¡ }|j/�sÔ| |j|j|j¡ d S )RNr   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.Z	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 tracingZ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 programZstdlibZ
platstdlibc                    s4   t j t j | ¡¡} |  dˆ¡ dˆ ¡} t j | ¡S )Nz$prefixz$exec_prefix)r   r   Ú
expanduserÚ
expandvarsr-   r	   )Ús)Ú_exec_prefixÚ_prefixr   r   Úparse_ignore_dir¬  s    zmain.<locals>.parse_ignore_dirc                 S   s$   g | ]}|  d ¡D ]}| ¡ ‘qqS )ú,)ÚsplitÚstrip)r   rŒ   r   r   r   r   r   ±  s     ÿzmain.<locals>.<listcomp>c                    s&   g | ]}|  tj¡D ]}ˆ |ƒ‘qqS r   )ré   r   Úpathsep)r   rŒ   rä   )rç   r   r   r   ³  s     ÿz-r/--report requires -f/--file)r9   r:   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¥   r9   r:   r¦   r§   )r   rÍ   Ú__package__Ú
__loader__Ú__spec__Ú
__cached__r2   rŽ   )rÍ   r   rì   rï   zCannot run file %r because: %s)0ÚargparseÚArgumentParserÚadd_argumentZadd_argument_groupZadd_mutually_exclusive_groupZ	REMAINDERÚ
parse_argsZ
ignore_dirÚ	sysconfigZget_pathZignore_moduleZreportr4   Úerrorr   rq   Zmissingrb   rc   Úanyr”   rh   Z	listfuncsZ
trackcallsrÞ   r   r¦   ÚmoduleÚrunpyZ_get_module_detailsrÁ   rá   r*   ÚargvÚparentÚloaderr   r   rT   r;   r�   r�   r©   r@   ÚexitÚ
SystemExitrÖ   Z	no_report)rð   ÚparserZgrpZ_grpZoptsrÖ   Útrø   Zmodule_nameZmod_nameZmod_specr|   Zglobsrk   rF   r   )rå   ræ   rç   r   Úmaina  sò    ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿÿÿ
ÿ
ÿ
ÿÿ
ÿ
ÿ
ÿÿ
ÿ

ÿ
ÿ




   ýú	ü(r   r§   )N)Ú__all__rY   r   r*   rô   r„   r\   r�   rÃ   r{   r<   Útimer   r™   r­   rw   r   r'   r1   r   r   r‚   r�   rX   r   r   r   r   r   r   r   Ú<module>2   s8   2 0

 _ 