???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \g                 @   sb  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gZG dd dZG dd dZ	dd Z
d	d
 Zdd Zdd Zdd Zdd Zdd Zedkr^d dlZyd dlZW n ek
r   Y nX G dd dejZee jdkre jd ZndZyTeeZx"e jdd D ]Zeje qW edejd ej  edejd W n e k
r\   Y nX dS )    N)
cmp_to_keyStatsc               @   s   e Zd ZddddZdd Zdd Zd	d
 Zdd Zdd ZdAdEdIdMdPdSdVdYd\dadedhdldpd Z	d!d" Z
d#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zdqd8d9Zd:d; Zd<d= ZdS )rr   N)streamc            G   sF   |pt j| _t|sd }n|d }|dd  }| j| | j|  d S )Nr      )sysstdoutr   leninitadd)selfr   argsarg r   /usr/lib64/python3.6/pstats.py__init__A   s    
zStats.__init__c             C   s   d | _ g | _d | _d| _d| _d| _d| _t | _i | _	i | _
| j| y| j  W n8 tk
r   td| jrx| jd nd | jd  Y nX d S )Nr   zInvalid timing data %sr    )file)all_calleesfilesfcn_listtotal_tttotal_calls
prim_callsmax_name_lenset	top_levelstatssort_arg_dict
load_statsget_top_level_stats	Exceptionprintr   )r   r   r   r   r   r	   K   s"    
z
Stats.initc             C   s   |d kri | _ d S t|trxt|d}tj|| _ W d Q R X y"tj|}tj	|j
d | }W n   Y nX |g| _n t|dr|j  |j | _ i |_ | j std| j|f d S )Nrbz    create_statsz.Cannot create or construct a %r object from %r)r   
isinstancestropenmarshalloadosstattimeZctimest_mtimer   hasattrr$   	TypeError	__class__)r   r   fZ
file_statsr   r   r   r   ^   s(    



zStats.load_statsc             C   s   x~| j j D ]p\}\}}}}}|  j|7  _|  j|7  _|  j|7  _d|kr\| jj| tt|| j	krtt|| _	qW d S )Njprofiler   profiler)r2   r   r3   )
r   itemsr   r   r   r   r
   r   func_std_stringr   )r   funcccncttctcallersr   r   r   r    t   s    zStats.get_top_level_statsc             G   s   |s| S xt |D ]}t| t|kr.t|}|  j|j7  _|  j|j7  _|  j|j7  _|  j|j7  _x|jD ]}| jj| qvW | j	|j	k r|j	| _	d | _
xJ|jj D ]<\}}|| jkr| j| }nddddi f}t||| j|< qW qW | S )Nr   )reversedtyper   r   r   r   r   r   r
   r   r   r   r4   add_func_stats)r   arg_listitemr6   r+   Zold_func_statr   r   r   r
   ~   s(    
z	Stats.addc          
   C   s(   t |d}tj| j| W d Q R X d S )Nwb)r'   r(   dumpr   )r   filenamer1   r   r   r   
dump_stats   s    zStats.dump_statsr   
call count   cumulative time   	file name   line number   function namename/file/liner   primitive call count   standard name   internal time)callsZncallsZcumtime
cumulativer   rC   linemodulenameZnflZpcallsstdnamer,   Ztottimec             C   s   | j szi  | _ }i }xP| jj D ]B\}}|}x4|r`|s8P ||krJd||< P |||< |d d }q.W q W x|D ]
}||= qlW | j S )Nr   r   r   )r   sort_arg_dict_defaultr4   )r   dictZbad_listwordtupZfragmentr   r   r   get_sort_arg_defs   s     


zStats.get_sort_arg_defsc             G   s"  |sd| _ | S t|dkrFt|d trFddddddddi|d  g}| j }f }d| _d}x:|D ]2}||| d  }|  j||| d  7  _d	}qbW g }xB| jj D ]4\}\}}	}
}}|j||	|
|f| t	||f  qW |j
tt|jd
 g  | _ }x|D ]}|j|d  qW | S )Nr   r   rY   rT   r,   rR   rU   r   z, )keyr   r   )r   r   r%   intr^   	sort_typer   r4   appendr5   sortr   	TupleCompcompare)r   ZfieldZsort_arg_defsZ
sort_tupleZ	connectorr\   Z
stats_listr6   r7   r8   r9   r:   r;   r   tupler   r   r   
sort_stats   s2    


zStats.sort_statsc             C   s   | j r| j j  | S )N)r   reverse)r   r   r   r   reverse_order   s    
zStats.reverse_orderc             C   s   | j }i  | _ }d}x|j D ]\}\}}}}}	t|}
tt|
|krTtt|
}i }x |	j D ]\}}||t|< qbW |
|krt||
 |||||f||
< q|||||f||
< qW | j}t  | _}x|D ]}|jt| qW || _	d | _
d | _| S )Nr   )r   r4   func_strip_pathr   r5   r>   r   r   r
   r   r   r   )r   ZoldstatsZnewstatsr   r6   r7   r8   r9   r:   r;   ZnewfuncZ
newcallersfunc2callerZold_topZnew_topr   r   r   
strip_dirs   s.    

zStats.strip_dirsc       
      C   s|   | j r
d S i  | _ }xb| jj D ]T\}\}}}}}||krBi ||< x0|j D ]$\}}	||krdi ||< |	|| |< qLW q W d S )N)r   r   r4   )
r   r   r6   r7   r8   r9   r:   r;   rk   rl   r   r   r   calc_callees  s    
zStats.calc_calleesc             C   s  |}t |trpytj|}W n& tjk
rB   |d| 7 }||fS X g }x|D ]}|jt|rN|j| qNW nzt|}t |t	rd|  kodk n  rt
|| d }|d | }n2t |t
rd|  ko|k n  r|}|d | }t|t|kr|dt|t||f 7 }||fS )Nz#   <Invalid regular expression %r>
g        g      ?g      ?r   z6   List reduced from %r to %r due to restriction <%r>
)r%   r&   recompileerrorsearchr5   rb   r   floatr`   )r   ZsellistmsgZnew_listZrexr6   countr   r   r   eval_print_amount  s,    


""zStats.eval_print_amountc             C   s   | j }| jr*| jd d  }d| j d }nt| jj }d}x|D ]}| j|||\}}qBW t|}|spd|fS t|| j	d |t| jk rd}x(|D ] }tt
||krtt
|}qW |d |fS )Nz   Ordered by: 
z!   Random listing order was used
r   )r   rR   )r   r   ra   rt   r   keysrw   r   r"   r   r5   )r   Zsel_listwidthZ	stat_listru   Z	selectionrv   r6   r   r   r   get_print_list2  s$    

zStats.get_print_listc             G   s   x| j D ]}t|| jd qW | j r0t| jd d}x"| jD ]}t|t|| jd q<W t|| jdd| jd | j| jkrtd| j d| jd td| j | jd t| jd | j|\}}|r| j	  x|D ]}| j
| qW t| jd t| jd | S )	N)r       zfunction calls)endr   z(%d primitive calls)zin %.3f secondsz        )r   r"   r   r   func_get_function_namer   r   r   r{   print_title
print_line)r   amountrC   indentr6   rz   rt   r   r   r   print_statsJ  s(    
zStats.print_statsc             G   s~   | j |\}}|rz| j  | j|d x:|D ]2}|| jkrP| j||| j|  q,| j||i  q,W t| jd t| jd | S )Nz	called...)r   )r{   rn   print_call_headingr   print_call_liner"   r   )r   r   rz   rt   r6   r   r   r   print_calleesa  s    

zStats.print_calleesc       
      G   sl   | j |\}}|rh| j|d x0|D ](}| j| \}}}}}	| j|||	d q$W t| jd t| jd | S )Nzwas called by...z<-)r   )r{   r   r   r   r"   r   )
r   r   rz   rt   r6   r7   r8   r9   r:   r;   r   r   r   print_callersp  s    
zStats.print_callersc       
      C   sx   t dj|| | jd d}x<| jj D ].\}}}}}|r(tt|j }	t|	t}P q(W |rtt d| d | jd d S )Nz	Function )r   Fr|   z    ncalls  tottime  cumtime)	r"   ljustr   r   valuesnextiterr%   rf   )
r   	name_sizeZcolumn_titleZ	subheaderr7   r8   r9   r:   r;   valuer   r   r   r   {  s    
zStats.print_call_heading->c             C   s  t t|j|| d| jd |s2t | jd d S t|j }d}x|D ]}t|}|| }	t|	tr|	\}
}}}|
|krd|
|f }n
d|
f }d|jdd	t	|  t
|t
||f }|d
 }n$d||	t
| j| d f }|d }t || | | jd d}qHW d S )Nr|   )r~   r   )r   r   z%d/%dz%dz%s %s %s  %srP   rR   r   z	%s(%r) %srF   )r"   r5   r   r   sortedry   r%   rf   rjustr   f8r   )r   r   sourceZ	call_dictZarrowZclistr   r6   rX   r   r8   r7   r9   r:   ZsubstatsZ
left_widthr   r   r   r     s*    



zStats.print_call_linec             C   s"   t dd| jd t d| jd d S )Nz-   ncalls  tottime  percall  cumtime  percallr|   )r~   r   zfilename:lineno(function))r   )r"   r   )r   r   r   r   r     s    zStats.print_titlec             C   s   | j | \}}}}}t|}||kr4|d t| }t|jdd| jd tt|d| jd |dkrxtdd| jd ntt|| d| jd tt|d| jd |dkrtd	d| jd ntt|| d| jd tt|| jd d S )
N/	   r|   )r~   r   r   r}   )r   z        z        )r   r&   r"   r   r   r   r5   )r   r6   r7   r8   r9   r:   r;   cr   r   r   r     s    zStats.print_liner   r   r   r   )r   rE   r   r   r   r   )r   rE   r   rF   r   r   )r   rG   r   rF   r   r   )r   rG   rH   r   r   )r   rI   rH   r   r   )r   rI   rJ   r   r   )r   rK   rH   r   r   )r   rI   rL   r   r   )r   rM   rL   r   rH   r   rJ   r   r   r   r   )r   rN   r   r   r   r   )r   rO   rP   r   r   )r   rQ   r   rR   r   r   )r   rS   r   rR   r   r   )r   rS   )r   )__name__
__module____qualname__r   r	   r   r    r
   rD   rZ   r^   rg   ri   rm   rn   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r       sD   !

 
c               @   s   e Zd Zdd Zdd ZdS )rd   c             C   s
   || _ d S )N)comp_select_list)r   r   r   r   r   r     s    zTupleComp.__init__c             C   sB   x<| j D ]2\}}|| }|| }||k r.| S ||kr|S qW dS )Nr   )r   )r   leftrightindex	directionlrr   r   r   re     s    zTupleComp.compareN)r   r   r   r   re   r   r   r   r   rd     s   rd   c             C   s   | \}}}t jj|||fS )N)r*   pathbasename)	func_namerC   rV   rX   r   r   r   rj     s    
rj   c             C   s   | d S )NrR   r   )r6   r   r   r   r     s    r   c             C   sN   | d d d	krB| d }|j dr<|jdr<d|dd
  S |S nd|  S d S )NrR   ~r   <>z{%s}r   z	%s:%d(%s))r   r   r   )
startswithendswith)r   rX   r   r   r   r5     s    r5   c             C   s@   |\}}}}}| \}}}	}
}|| || ||	 ||
 t ||fS )N)add_callers)targetr   r7   r8   r9   r:   r;   Zt_ccZt_ncZt_ttZt_ctZ	t_callersr   r   r   r>     s    r>   c             C   s   i }x| j  D ]\}}|||< qW xb|j  D ]V\}}||krzt|trhtdd t||| D ||< q||  |7  < q,|||< q,W |S )Nc             S   s   g | ]}|d  |d  qS )r   r   r   ).0ir   r   r   
<listcomp>  s    zadd_callers.<locals>.<listcomp>)r4   r%   rf   zip)r   r   Znew_callersr6   rl   r   r   r   r     s    
r   c             C   s"   d}x| j  D ]}||7 }qW |S )Nr   )r   )r;   r8   rT   r   r   r   count_calls   s    r   c             C   s   d|  S )Nz%8.3fr   )xr   r   r   r     s    r   __main__c               @   s   e Zd Zd6ddZ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d Z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&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 ZdS )7ProfileBrowserNc             C   s6   t jj|  d| _d | _tj| _|d k	r2| j| d S )Nz% )	cmdCmdr   promptr   r   r   r   do_read)r   profiler   r   r   r     s    zProfileBrowser.__init__c             C   s   |j  }g }x|D ]}y|jt| wW n tk
r>   Y nX y8t|}|dksZ|dk rjtd| jd w|j| wW n tk
r   Y nX |j| qW | jrt| j||  ntd| jd dS )Nr   r   z#Fraction argument must be in [0, 1])r   zNo statistics object is loaded.)	splitrb   r`   
ValueErrorrs   r"   r   r   getattr)r   fnrV   r   Z	processedZtermZfracr   r   r   generic"  s,    

zProfileBrowser.genericc             C   sX   t d| jd t d| jd t d| jd t d| jd t d| jd t d| jd d S )NzArguments may be:)r   z0* An integer maximum number of entries to print.z:* A decimal fractional number between 0 and 1, controllingz-  what fraction of selected entries to print.z8* A regular expression; only entries with function namesz  that match it are printed.)r"   r   )r   r   r   r   generic_help:  s    zProfileBrowser.generic_helpc             C   sd   | j rRy| j j| W q` tk
rN } ztd||f | jd W Y d d }~X q`X ntd| jd dS )Nz$Failed to load statistics for %s: %s)r   zNo statistics object is loaded.r   )r   r
   IOErrorr"   r   )r   rV   er   r   r   do_addB  s    *zProfileBrowser.do_addc             C   s   t d| jd d S )Nz>Add profile info from given file to current statistics object.)r   )r"   r   )r   r   r   r   help_addK  s    zProfileBrowser.help_addc             C   s   | j d|S )Nr   )r   )r   rV   r   r   r   
do_calleesN  s    zProfileBrowser.do_calleesc             C   s   t d| jd | j  d S )Nz6Print callees statistics from the current stat object.)r   )r"   r   r   )r   r   r   r   help_calleesP  s    zProfileBrowser.help_calleesc             C   s   | j d|S )Nr   )r   )r   rV   r   r   r   
do_callersT  s    zProfileBrowser.do_callersc             C   s   t d| jd | j  d S )Nz6Print callers statistics from the current stat object.)r   )r"   r   r   )r   r   r   r   help_callersV  s    zProfileBrowser.help_callersc             C   s   t d| jd dS )Nr   )r   r   )r"   r   )r   rV   r   r   r   do_EOFZ  s    zProfileBrowser.do_EOFc             C   s   t d| jd d S )NzLeave the profile brower.)r   )r"   r   )r   r   r   r   help_EOF]  s    zProfileBrowser.help_EOFc             C   s   dS )Nr   r   )r   rV   r   r   r   do_quit`  s    zProfileBrowser.do_quitc             C   s   t d| jd d S )NzLeave the profile brower.)r   )r"   r   )r   r   r   r   	help_quitb  s    zProfileBrowser.help_quitc             C   s   |ryt || _W nj tk
rF } zt|jd | jd d S d }~X n8 tk
r| } zt|jjd || jd d S d }~X nX |d | _	n6t
| j	dkr| j	d d }| j| ntd| jd dS )	Nr   )r   :z% rR   z1No statistics object is current -- cannot reload.r   )r   r   OSErrorr"   r   r   r!   r0   r   r   r   r   )r   rV   errr   r   r   r   e  s    zProfileBrowser.do_readc             C   s    t d| jd t d| jd d S )Nz+Read in profile data from a specified file.)r   z*Without argument, reload the current file.)r"   r   )r   r   r   r   	help_readv  s    zProfileBrowser.help_readc             C   s$   | j r| j j  ntd| jd dS )NzNo statistics object is loaded.)r   r   )r   ri   r"   r   )r   rV   r   r   r   
do_reversez  s    zProfileBrowser.do_reversec             C   s   t d| jd d S )Nz/Reverse the sort order of the profiling report.)r   )r"   r   )r   r   r   r   help_reverse  s    zProfileBrowser.help_reversec                s   | j std| jd d S | j j  |rRt fdd|j D rR| j j|j   n@td| jd x0tjj	 D ]"\}}td||d f | jd qlW dS )	NzNo statistics object is loaded.)r   c             3   s   | ]}| kV  qd S )Nr   )r   r   )abbrevsr   r   	<genexpr>  s    z)ProfileBrowser.do_sort.<locals>.<genexpr>z/Valid sort keys (unique prefixes are accepted):z%s -- %sr   r   )
r   r"   r   r^   allr   rg   r   rZ   r4   )r   rV   r_   r   r   )r   r   do_sort  s    
zProfileBrowser.do_sortc             C   s    t d| jd t d| jd d S )Nz.Sort profile data according to specified keys.)r   z3(Typing `sort' without arguments lists valid keys.))r"   r   )r   r   r   r   	help_sort  s    zProfileBrowser.help_sortc                s    fddt jD S )Nc                s   g | ]}|j  r|qS r   )r   )r   a)textr   r   r     s    z0ProfileBrowser.complete_sort.<locals>.<listcomp>)r   rZ   )r   r   r   r   )r   r   complete_sort  s    zProfileBrowser.complete_sortc             C   s   | j d|S )Nr   )r   )r   rV   r   r   r   do_stats  s    zProfileBrowser.do_statsc             C   s   t d| jd | j  d S )Nz.Print statistics from the current stat object.)r   )r"   r   r   )r   r   r   r   
help_stats  s    zProfileBrowser.help_statsc             C   s$   | j r| j j  ntd| jd d S )NzNo statistics object is loaded.)r   )r   rm   r"   r   )r   rV   r   r   r   do_strip  s    zProfileBrowser.do_stripc             C   s   t d| jd d S )Nz<Strip leading path information from filenames in the report.)r   )r"   r   )r   r   r   r   
help_strip  s    zProfileBrowser.help_stripc             C   s   t d| jd d S )NzShow help for a given command.)r   )r"   r   )r   r   r   r   	help_help  s    zProfileBrowser.help_helpc             C   s   |r|S d S )Nr   )r   stoprV   r   r   r   postcmd  s    zProfileBrowser.postcmd)N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s4   
	r   r   rR   z*Welcome to the profile statistics browser.)r   zGoodbye.)!r   r*   r,   r(   ro   	functoolsr   __all__r   rd   rj   r   r5   r>   r   r   r   r   r   readlineImportErrorr   r   r   argvZinitprofileZbrowserr   r   r"   r   ZcmdloopKeyboardInterruptr   r   r   r   <module>   sL      
 