Edit File: trace.cpython-37.pyc
B ����r}�c�p������������������@���s����d�Z�ddgZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddlZddlZddl mZ�ddlZdZG�dd��d�Zd d ��Zdd��ZG�d d��d�Zdd��Zdd��Zddd�Zdd��ZG�dd��d�Zdd��Zedkr�e���dS�)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���������������@���s���e�Zd�Zddd�Zdd��ZdS�)�_IgnoreNc�������������C���s:���|s t���nt�|�|�_|sg�ndd��|D��|�_ddi|�_d�S�)Nc�������������S���s���g�|�]}t�j�|��qS���)�os�path�normpath)�.0�dr���r����*/opt/alt/python37/lib64/python3.7/trace.py� <listcomp>H���s���z$_Ignore.__init__.<locals>.<listcomp>z<string>����)�set�_mods�_dirs�_ignore)�self�modules�dirsr���r���r����__init__F���s���� z_Ignore.__init__c�������������C���s����||�j�kr|�j�|�S�||�jkr,d|�j�|<�dS�x*|�jD�] }|�|d��r4d|�j�|<�dS�q4W�|d�krnd|�j�|<�dS�x,|�jD�]"}|�|tj��rvd|�j�|<�dS�qvW�d|�j�|<�dS�)Nr����.r���)r���r���� startswithr���r����sep)r����filename� modulename�modr���r���r���r����namesL���s$���� z _Ignore.names)NN)�__name__� __module__�__qualname__r���r���r���r���r���r���r���E���s��� r���c�������������C���s ���t�j�|��}t�j�|�\}}|S�)z-Return a plausible module name for the patch.)r���r����basename�splitext)r����baser����extr���r���r����_modnamew���s����r%���c�������������C���s����t�j�|��}d}xJtjD�]@}t�j�|�}|�|�r|t|��t�jkrt|�t|�kr|}qW�|rv|�t|�d�d��}n|�}t�j�|�\}}|�t�jd�}t�j r�|�t�j d�}t�j� |�\}}|�d�S�)z,Return a plausible module name for the path.��r���Nr���)r���r����normcase�sysr����lenr���� splitdrive�replace�altsepr"����lstrip)r���ZcomparepathZlongest�dirr#���Zdriver���r$���r���r���r����_fullmodname~���s ����r/���c���������������@���s:���e�Zd�Zddd�Zdd��Zdd��Zdd d�Zddd �ZdS�)r���Nc���������� ���C���s����||�_�|�j�d�kri�|�_�|�j����|�_||�_|�jd�kr8i�|�_|�j���|�_||�_|�jd�krZi�|�_|�j���|�_||�_||�_|�jr�y@t|�jd��}t� |�\}}}W�d�Q�R�X�|�� |��|||���W�n@�tt tfk r��}�ztd|�j|f�tjd��W�d�d�}~X�Y�nX�d�S�)N�rbzSkipping counts file %r: %s)�file)�counts�copyZcounter�calledfuncs�callers�infile�outfile�open�pickle�load�update� __class__�OSError�EOFError� ValueError�printr(����stderr)r���r2���r4���r6���r5���r7����f�errr���r���r���r�������s,���� zCoverageResults.__init__c�������������C���s���|��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���r���r���r����is_ignored_filename����s����z#CoverageResults.is_ignored_filenamec������� ������C���sz���|�j�}|�j}|�j}|j�}|j}|j}x$|D�]}|�|d�||��||<�q*W�x|D�]}d||<�qPW�x|D�]}d||<�qfW�dS�)z.Merge in the data from another CoverageResultsr���r���N)r2���r4���r5����get) r����otherr2���r4���r5���Zother_countsZother_calledfuncsZ other_callers�keyr���r���r���r;�������s���� zCoverageResults.updateTFc�������!��� ���C���s���|�j�rDt���td��|�j�}x(t|�D�]\}}}td|||f���q$W�|�jr�t���td��d�}} xvt|�j�D�]h\\} }}\} }}| |kr�t���td| d��| }d} | | kr�| | kr�td| ��| } td||||f���qlW�i�}x8|�jD�].\}}|�|i���}||<�|�j||f�||<�q�W�i�}�x$|���D��]\}}|��|��r@�q&|�d��rX|d d ��}|d k�r�t j �t j �|��}t |�}n$|}t j �|��s�t �|��t|�}|�r�t|�}ni�}t�|�}t j �||d��}t|d��}t�|j�\}}W�d Q�R�X�|��|||||�\}}|�r&|�r&td |�|��}||||f||<��q&W�|�r�|�r�td��x2t|�D�]&}||�\}}}}td||�����q`W�|�j�r�y&t�|�j|�j�|�jft|�jd�d��W�n6�tk �r��} �ztd| �tj d��W�d d } ~ X�Y�nX�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. zfunctions called:z*filename: %s, modulename: %s, funcname: %szcalling relationships:r&���z***z -->z %s.%s -> %s.%sz.pycN���z.coverr0����d���zlines cov% module (path)z%5d %3d%% %s (%s)�wbr���z"Can't save counts files because %s)r1���)!r4���r@����sortedr5���r2���rH����itemsrG���rF���r���r����dirname�abspathr%����exists�makedirsr/����_find_executable_linenos� linecache�getlines�joinr8����tokenize�detect_encoding�readline�write_results_file�intr7���r9����dumpr=���r(���rA���)!r���Zshow_missing�summary�coverdirZcallsr���r����funcnameZlastfileZ lastcfileZpfileZpmodZpfunc�cfileZcmodZcfuncZper_file�lineno� lines_hitZsums�countr.����lnotab�sourceZ coverpath�fp�encoding�_�n_hits�n_linesZpercent�mrC���r���r���r���� write_results����s|���� zCoverageResults.write_resultsc���������� ���C���s����yt�|d|d�}W�n8�tk rJ�}�ztd||f�tjd��dS�d}~X�Y�nX�d}d} |���x�t|d�D�]r\} }| |kr�|�d || ����| d7�} |d7�}n.| |kr�t|kr�|�d ��|d7�}n |�d��|�|�d���qfW�W�dQ�R�X�| |fS�) z'Return a coverage results file in path.�w)rh���z3trace: Could not open %r for writing: %s - skipping)r1���)r���r���Nr���r���z%5d: z>>>>>> z ����) r8���r=���r@���r(���rA���� enumerate�write�PRAGMA_NOCOVER� expandtabs)r���r����linesre���rc���rh���r7���rC���rk���rj���rb����liner���r���r���r[���(��s(���� z"CoverageResults.write_results_file)NNNNN)TFN)N)r���r���r ���r���rG���r;���rm���r[���r���r���r���r���r�������s���� [c�������������C���s0���i�}x&t��|��D�]\}}||krd||<�qW�|S�)z:Return dict where keys are lines in the line number table.r���)�disZfindlinestarts)�code�strs�linenosri���rb���r���r���r����_find_lines_from_codeH��s ����rz���c�������������C���s8���t�|�|�}x(|�jD�]}t�|�r|�t||���qW�|S�)z<Return lineno dict for all code objects reachable from code.)rz���� co_consts�inspectZiscoder;����_find_lines)rw���rx���ry����cr���r���r���r}���R��s ���� r}���c���������� ���C���s����i�}t�j}t|�|d��r}t�|j�}x^|D�]V\}}}} } |t�jkr||t�jkr||\}}| \} }xt|| d��D�]}d||<�qlW�|}q*W�W�dQ�R�X�|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. )rh���r���N)�token�INDENTr8���rX����generate_tokensrZ����STRING�range)r���rh���r���Z prev_ttyperB����tokZttypeZtstr�start�endru���ZslineZscolZelineZecol�ir���r���r���� _find_strings^��s���� r����c���������� ���C���s����y(t��|���}|���}|j}W�dQ�R�X�W�n8�tk r`�}�ztd|�|f�tjd��i�S�d}~X�Y�nX�t||�d�}t |�|�}t ||�S�)zAReturn dict where keys are line numbers in the line number table.Nz%Not printing coverage data for %r: %s)r1����exec)rX���r8����readrh���r=���r@���r(���rA����compiler����r}���)r���rB����progrh���rC���rw���rx���r���r���r���rT���u��s���� rT���c������������ ���@���sp���e�Zd�Zddd�Zdd ��Zdd d�Zdd ��Zdd��Zdd��Zdd��Z dd��Z dd��Zdd��Zdd��Z dd��ZdS�) 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|�_nd|�_dS�)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���)r6���r7���r����ignorer2���Zpathtobasename� 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���rd���r����� countfuncs�countcallers� ignoremods� ignoredirsr6���r7����timingr���r���r���r������s6���� zTrace.__init__c�������������C���s ���dd�l�}|j}|��|||��d�S�)Nr���)�__main__�__dict__�runctx)r����cmdr�����dictr���r���r����run���s����z Trace.runc���������� ���C���sh���|d�kri�}|d�kri�}|�j�s6t�|�j��t�|�j��zt|||��W�d�|�j�sbt�d���t�d���X�d�S�)N)r����� threading�settracer����r(���r����)r���r�����globals�localsr���r���r���r�������s������ zTrace.runctxc����������� ���O���s����t�|��dkr|�^}}}�n>|�s&td��n0d|krB|�d�}|�^}}�ntdt�|��d����d�}|jslt�|j��z||�|�}W�d�|js�t�d���X�|S�)N����z8descriptor 'runfunc' of 'Trace' object needs an argument�funcz7runfunc expected at least 1 positional argument, got %dr���)r)���� TypeError�popr����r(���r����r����)�args�kwr���r�����resultr���r���r����runfunc���s"���� z Trace.runfuncc������� ������C���s����|j�}|j}|rt|�}nd�}|j}d�}||�jkrL|�j|�d�k r�|�j|�}n�d�|�j|<�dd��t�|�D��}t|�dkr�dd��t�|d��D��}t|�dkr�dd��t�|d��D��} t| �dkr�| d�j}||�j|<�|d�k r�d||f�}|||fS�)Nc�������������S���s���g�|�]}t��|�r|�qS�r���)r|���Z isfunction)r ���rB���r���r���r���r ������s����z1Trace.file_module_function_of.<locals>.<listcomp>r���c�������������S���s���g�|�]}t�|t�r|�qS�r���)� isinstancer����)r ���r���r���r���r���r ������s����r���c�������������S���s���g�|�]}t�|d��r|�qS�)� __bases__)�hasattr)r ���r~���r���r���r���r ������s����z%s.%s) �f_code�co_filenamer%����co_namer�����gcZ get_referrersr)���r���) r����framerw���r���r���r`���ZclsnameZfuncsZdicts�classesr���r���r����file_module_function_of���s,���� zTrace.file_module_function_ofc�������������C���s0���|dkr,|���|�}|���|j�}d|�j||f<�dS�)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_funcZparent_funcr���r���r���r������s���� zTrace.globaltrace_trackcallersc�������������C���s ���|dkr|���|�}d|�j|<�dS�)zoHandler for call events. Adds (filename, modulename, funcname) to the self._calledfuncs dict. r����r���N)r����r����)r���r����r����r����r����r���r���r���r������s���� zTrace.globaltrace_countfuncsc�������������C���sj���|dkrf|j�}|j�dd�}|rbt|�}|dk rf|�j�||�}|sf|�jrZtd||jf���|�j S�ndS�dS�)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: %s, funcname: %s) r����� f_globalsrH���r%���r����r���r����r@���r����r����)r���r����r����r����rw���r���r���Z ignore_itr���r���r���r������s����zTrace.globaltrace_ltc�������������C���s����|dkr~|j�j}|j}||f}|�j�|d�d�|�j|<�|�jrTtdt��|�j��dd��tj � |�}td||t�||�f�dd��|�j S�) Nru���r���r���z%.2f� )r����z %s(%d): %sr&���)r����r�����f_linenor2���rH���r����r@���r����r���r���r!���rU����getliner����)r���r����r����r����r���rb���rJ����bnamer���r���r���r����3��s����z Trace.localtrace_trace_and_countc�������������C���sd���|dkr^|j�j}|j}|�jr4tdt��|�j��dd��tj�|�}td||t � ||�f�dd��|�jS�)Nru���z%.2fr����)r����z %s(%d): %sr&���)r����r����r����r����r@���r����r���r���r!���rU���r����r����)r���r����r����r����r���rb���r����r���r���r���r����B��s����zTrace.localtrace_tracec�������������C���s<���|dkr6|j�j}|j}||f}|�j�|d�d�|�j|<�|�jS�)Nru���r���r���)r����r����r����r2���rH���r����)r���r����r����r����r���rb���rJ���r���r���r���r����O��s����zTrace.localtrace_countc�������������C���s���t�|�j|�j|�j|�j|�jd�S�)N)r6���r7���r4���r5���)r���r2���r6���r7���r����r����)r���r���r���r����resultsW��s���� z Trace.results) r���r���r���r���r���r���NNF)NN)r���r���r ���r���r����r����r����r����r����r����r����r����r����r����r����r���r���r���r���r������s����� 0 ) c�����������������st��dd�l�}�|����}|jdddd��|�dd�}|jdd d dd��|jd dd dd��|jddd dd��|jddd dd��|�d�}|���}|jddd dd��|jddd dd��|jdddd ��|jd!d"d#d ��|jd$d%d d&d��|jd'd(d d)d��|jd*d+d d,d��|�d-d.�}|jd/d0g�d1d2��|jd3d0g�d4d2��|jd5d6d7d8��|jd9|�jd:d8��|���}|j�rvt� d;��t� d<������fd=d>��d?d@��|j D��|_ �fdAd@�|jD��|_|j�r�|j�s�|� dB��t|j|jdC�}|�|j|j|j�S�t|j|j|j|jg��s|� dD��|j�r0|j�s&|j�r0|� dE��|j�rJ|j�sJ|� dF��|jd�k�r`|� dG��|jf|j�t_tj�|j�tjd<�t|j|j|j|j|j |j|j|j|j dH� }yJt!|j��}t"|�#��|jdI�}W�d�Q�R�X�|jdJd�d�dK�} |�$|| | ��W�nP�t%k �r6�} �zt�&dLtjd�| f���W�d�d�} ~ X�Y�n�t'k �rJ���Y�nX�|�(��}|j)�sp|�|j|j|j��d�S�)MNr���z --version�versionz trace 2.0)�actionr����zMain 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 tracingZFilterszCan 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).r����?zfile to run as main program)�nargsr����� argumentszarguments to the programZstdlibZ 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����zmain.<locals>.parse_ignore_dirc�������������S���s$���g�|�]}|��d��D�]}|����qqS�)�,)�split�strip)r ���r����r���r���r���r���r ������s���zmain.<locals>.<listcomp>c����������������s&���g�|�]}|��tj�D�]}��|��qqS�r���)r����r����pathsep)r ���r����r����)r����r���r���r ������s���z-r/--report requires -f/--file)r6���r7���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 --reportz3filename is missing: required with the main options)r����r����r����r����r6���r7���r����r����r����)r����r����__package__� __cached__zCannot run file %r because: %s)*�argparse�ArgumentParser�add_argumentZadd_argument_groupZadd_mutually_exclusive_groupZ REMAINDER� parse_argsZ ignore_dir� sysconfigZget_pathZ ignore_moduleZreportr1����errorr���rm���Zmissingr^���r_����anyr����rd���Z listfuncsZ trackcallsr���r����r(����argvr���r���rP���r���r����r8���r����r����r����r=����exit� SystemExitr����Z no_report)r�����parserZgrpZ_grpZoptsr�����trg���rw���ZglobsrC���r���)r����r����r����r����main]��s����� (r����r����)N)�__doc__�__all__rU���r����rer(���r����r���rX���r|���r����rv���r9���Ztimer���r����r����rr���r���r%���r/���r���rz���r}���r����rT���r���r����r���r���r���r���r����<module>1���s<���2�/ �[�