
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
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rîe 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 s°t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 xêt |ƒ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|< q°W 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 ƒ q¨W |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r t||
 |||||fƒ||
< q|||||f||
< qW | j}tƒ  | _}x|D ]}|jt|ƒƒ qÎW || _	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	ƒr¸d|  ko”dk n  r¸t
|| d ƒ}|d |… }n2t |t
ƒrêd|  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 rºd}x(|D ] }tt
|ƒƒ|kr–tt
|ƒƒ}q–W |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r�td| j d| jd� td| j | jd� t| jd� | j|ƒ\}}|rú| j	ƒ  x|D ]}| j
|ƒ qÐW 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rˆd|
|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r¾t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r´t| 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Ä   |rŠy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      
 