???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5dj                     @   s  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mZ ddgZ	G dd de
e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z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zPeeZe jdd D ]Ze e q,e!dej"d e#  e!dej"d W n e$k
rz   Y nX dS )     N)Enum)
cmp_to_keyStatsSortKeyc                   @   s8   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
d ZdS )r   )callsncalls)
cumulativecumtime)filenamemodulelinenamenflpcallsstdname)timetottimec                 G   s@   |d }t | |}||_|dd  D ]}|| j|< q&||_|S Nr      )str__new___value__value2member_map_Z_all_values)clsvaluesvalueobjZother_value r   /usr/lib64/python3.8/pstats.pyr   -   s    zSortKey.__new__N)__name__
__module____qualname__ZCALLSZ
CUMULATIVEZFILENAMEZLINENAMEZNFLZPCALLSZSTDNAMEZTIMEr   r   r   r   r   r   "   s   c                   @   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ddddddddddd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d'd( Zd)d* Zd+d, Zd-d. Zd6d0d1Zd2d3 Zd4d5 ZdS )7r   N)streamc                G   sF   |pt j| _t|sd }n|d }|dd  }| | | j|  d S r   )sysstdoutr#   leninitadd)selfr#   argsargr   r   r   __init__Y   s    
zStats.__init__c                 C   s   d | _ g | _d | _d| _d| _d| _d| _t | _i | _	i | _
| | z|   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 %s 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'   c   s(    
z
Stats.initc              	   C   s   |d kri | _ d S t|trxt|d}t|| _ W 5 Q R X z"t|}t	|j
d | }W n   Y nX |g| _n t|dr|  |j | _ i |_ | j std| j|f d S )Nrbz    create_statsz.Cannot create or construct a %r object from %r)r:   
isinstancer   openmarshalloadosstatr   ctimest_mtimer2   hasattrrA   	TypeError	__class__)r)   r+   fZ
file_statsr   r   r   r<   v   s*    



zStats.load_statsc                 C   s   | j  D ]p\}\}}}}}|  j|7  _|  j|7  _|  j|7  _d|krZ| j| tt|| j	kr
tt|| _	q
d S )N)Zjprofiler   Zprofiler)
r:   itemsr5   r6   r4   r9   r(   r&   func_std_stringr7   )r)   funcccncttctcallersr   r   r   r=      s    zStats.get_top_level_statsc                 G   s   |s| S t |D ]}t| t|kr,t|}|  j|j7  _|  j|j7  _|  j|j7  _|  j|j7  _|jD ]}| j| qr| j	|j	k r|j	| _	d | _
|j D ]<\}}|| jkr| j| }nddddi f}t||| j|< qq| S Nr   )reversedtyper   r2   r5   r6   r4   r9   r(   r7   r3   r:   rN   add_func_stats)r)   arg_listitemrP   rG   Zold_func_statr   r   r   r(      s(    

z	Stats.addc              	   C   s(   t |d}t| j| W 5 Q R X d S )Nwb)rC   rD   dumpr:   )r)   r
   rM   r   r   r   
dump_stats   s    zStats.dump_stats)))r   r-   z
call count)))   r-   zcumulative time))   r   z	file name))   r   zline number))   r   zfunction name))rd   r`   rb   zname/file/line)))r   r-   zprimitive call count)))   r   zstandard name)))   r-   zinternal time)r   r   r	   r   r
   r   r   r   r   r   r   r   r   c                 C   st   | j sni  | _ }i }| j D ]>\}}|}|r|s4q||krFd||< q|||< |d d }q*q|D ]
}||= qb| j S )Nr   r-   )r;   sort_arg_dict_defaultrN   )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rBt|d trBddddd|d  g}n:t|dkr||dd  D ] }t|t|d krZtd	qZ|  }d
}d| _d}|D ]B}t|tr|j	}||| d  }|  j||| d  7  _d}qg }| j
 D ]4\}\}	}
}}}||	|
||f| t||f  q|jtt|jd g  | _ }|D ]}||d  qB| S )Nr   r   r   r   r   r   )r-   r   r   rg   rg   zCan't have mixed argument typer   r.   z, )keyr-   )r3   r&   rB   intrX   rK   rl   	sort_typer   r   r:   rN   appendrO   sortr   	TupleCompcompare)r)   Zfieldr+   Zsort_arg_defsZ
sort_tupleZ	connectorrj   Z
stats_listrP   rQ   rR   rS   rT   rU   r3   tupler   r   r   
sort_stats   sF    



zStats.sort_statsc                 C   s   | j r| j   | S N)r3   reverser)   r   r   r   reverse_order  s    
zStats.reverse_orderc                 C   s   | j }i  | _ }d}| D ]\}\}}}}}	t|}
tt|
|krRtt|
}i }|	 D ]\}}||t|< q^|
|krt||
 |||||f||
< q|||||f||
< q| j}t  | _}|D ]}|t| q|| _	d | _
d | _| S rV   )r:   rN   func_strip_pathr&   rO   rY   r9   r8   r(   r7   r3   r1   )r)   ZoldstatsZnewstatsr7   rP   rQ   rR   rS   rT   rU   ZnewfuncZ
newcallersfunc2callerZold_topZnew_topr   r   r   
strip_dirs  s0    

zStats.strip_dirsc           
      C   st   | j r
d S i  | _ }| j D ]P\}\}}}}}||kr@i ||< | D ]$\}}	||kr`i ||< |	|| |< qHqd S rv   )r1   r:   rN   )
r)   r1   rP   rQ   rR   rS   rT   rU   r{   r|   r   r   r   calc_callees#  s    
zStats.calc_calleesc                 C   s  |}t |trpzt|}W n* tjk
rF   |d| 7 }||f Y S X g }|D ]}|t|rP|| qPnzt|}t |t	rd|  krdk rn nt
|| d }|d | }n2t |t
rd|  kr|k rn n|}|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>
)rB   r   recompileerrorsearchrO   rp   r&   floatrn   )r)   ZsellistmsgZnew_listZrexrP   countr   r   r   eval_print_amount6  s2    
""  zStats.eval_print_amountc                 C   s   | j }| jr*| jd d  }d| j d }nt| j }d}|D ]}| |||\}}q@t|}|sld|fS t|| j	d |t| jk rd}|D ] }tt
||krtt
|}q|d |fS )Nz   Ordered by: 
z!   Random listing order was used
r   r/   rg   )r7   r3   ro   r   r:   keysr   r&   r?   r#   rO   )r)   Zsel_listwidthZ	stat_listr   Z	selectionr   rP   r   r   r   get_print_listP  s$    zStats.get_print_listc                 G   s   | j D ]}t|| jd q| j r,t| jd d}| jD ]}t|t|| jd q6t|| jdd| jd | j| jkrtd| j d| jd td| j | jd t| jd | |\}}|r| 	  |D ]}| 
| qt| jd t| jd | S )Nr/           zfunction calls endr0   z(%d primitive calls)zin %.3f seconds)r2   r?   r#   r9   func_get_function_namer5   r6   r4   r   print_title
print_line)r)   amountr
   indentrP   r   r   r   r   r   print_statsh  s(    

zStats.print_statsc                 G   sz   |  |\}}|rv|   | |d |D ]2}|| jkrN| ||| j|  q*| ||i  q*t| jd t| jd | S )Nz	called...r/   )r   r~   print_call_headingr1   print_call_liner?   r#   )r)   r   r   r   rP   r   r   r   print_callees  s    
zStats.print_calleesc           
      G   sh   |  |\}}|rd| |d |D ](}| j| \}}}}}	| |||	d q"t| jd t| jd | S )Nzwas called by...z<-r/   )r   r   r:   r   r?   r#   )
r)   r   r   r   rP   rQ   rR   rS   rT   rU   r   r   r   print_callers  s    zStats.print_callersc           
      C   sv   t d|| | jd d}| j D ]0\}}}}}|r&tt| }	t|	t} qXq&|rrt d| d | jd d S )Nz	Function r/   Fr   z    ncalls  tottime  cumtime)	r?   ljustr#   r:   r   nextiterrB   rt   )
r)   	name_sizeZcolumn_titleZ	subheaderrQ   rR   rS   rT   rU   r   r   r   r   r     s    
zStats.print_call_heading->c                 C   s  t t||| d| jd |s2t | jd d S t| }d}|D ]}t|}|| }	t|	tr|	\}
}}}|
|krd|
|f }n
d|
f }d|dd	t	|  t
|t
||f }|d
 }n$d||	t
| j| d f }|d }t || | | jd d}qFd S )Nr   r   r/   r.   z%d/%dz%dz%s %s %s  %srf   rg   r   z	%s(%r) %sr_   )r?   rO   r   r#   sortedr   rB   rt   rjustr&   f8r:   )r)   r   sourceZ	call_dictZarrowZclistr   rP   r   r   rR   rQ   rS   rT   ZsubstatsZ
left_widthr   r   r   r     s0    

  
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   zfilename:lineno(function)r/   r?   r#   rx   r   r   r   r     s    zStats.print_titlec                 C   s   | j | \}}}}}t|}||kr4|d t| }t|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:   r   r?   r   r#   r   rO   )r)   rP   rQ   rR   rS   rT   rU   cr   r   r   r     s    zStats.print_line)r   )r   r    r!   r,   r'   r<   r=   r(   r^   rh   rl   ru   ry   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   7   sD   "

'
c                   @   s   e Zd Zdd Zdd ZdS )rr   c                 C   s
   || _ d S rv   comp_select_list)r)   r   r   r   r   r,     s    zTupleComp.__init__c                 C   sF   | j D ]:\}}|| }|| }||k r0|   S ||kr|  S qdS rV   r   )r)   leftrightindex	directionlrr   r   r   rs     s    

zTupleComp.compareN)r   r    r!   r,   rs   r   r   r   r   rr     s   rr   c                 C   s   | \}}}t j|||fS rv   )rF   pathbasename)	func_namer
   r   r   r   r   r   rz     s    
rz   c                 C   s   | d S )Nrg   r   )rP   r   r   r   r     s    r   c                 C   sN   | d d dkrB| d }| dr<|dr<d|dd  S |S nd|  S d S )	Nrg   )~r   <>z{%s}r   r-   z	%s:%d(%s))
startswithendswith)r   r   r   r   r   rO     s    rO   c                 C   s@   |\}}}}}| \}}}	}
}|| || ||	 ||
 t ||fS rv   )add_callers)targetr   rQ   rR   rS   rT   rU   Zt_ccZt_ncZt_ttZt_ctZ	t_callersr   r   r   rY     s
    rY   c                 C   s   i }|   D ]\}}|||< q|  D ]V\}}||krtt|trbtdd t||| D ||< q|||  |7  < q&|||< q&|S )Nc                 s   s   | ]\}}|| V  qd S rv   r   ).0ijr   r   r   	<genexpr>  s     zadd_callers.<locals>.<genexpr>)rN   rB   rt   zip)r   r   Znew_callersrP   r|   r   r   r   r     s    

"
r   c                 C   s   d}|   D ]}||7 }q|S rV   )r   )rU   rR   r   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|  d| _d | _tj| _|d k	r2| | d S )N% )	cmdCmdr,   promptr:   r$   r%   r#   do_read)r)   profiler   r   r   r,   7  s    zProfileBrowser.__init__c              	   C   s   |  }g }|D ]}z|t| W qW n tk
r>   Y nX z<t|}|dksZ|dk rltd| jd W q|| W qW n tk
r   Y nX || q| jrt| j||  ntd| jd dS )Nr   r   z#Fraction argument must be in [0, 1]r/   No statistics object is loaded.)	splitrp   rn   
ValueErrorr   r?   r#   r:   getattr)r)   fnr   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   rx   r   r   r   generic_helpW  s    zProfileBrowser.generic_helpc              
   C   sd   | j rRz| j | W q` tk
rN } ztd||f | jd W 5 d }~X Y q`X ntd| jd dS )Nz$Failed to load statistics for %s: %sr/   r   r   )r:   r(   OSErrorr?   r#   )r)   r   er   r   r   do_add_  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   rx   r   r   r   help_addh  s    zProfileBrowser.help_addc                 C   s   |  d|S )Nr   r   r)   r   r   r   r   
do_calleesk  s    zProfileBrowser.do_calleesc                 C   s   t d| jd |   d S )Nz6Print callees statistics from the current stat object.r/   r?   r#   r   rx   r   r   r   help_calleesm  s    zProfileBrowser.help_calleesc                 C   s   |  d|S )Nr   r   r   r   r   r   
do_callersq  s    zProfileBrowser.do_callersc                 C   s   t d| jd |   d S )Nz6Print callers statistics from the current stat object.r/   r   rx   r   r   r   help_callerss  s    zProfileBrowser.help_callersc                 C   s   t d| jd dS )Nr.   r/   r   r   r   r   r   r   do_EOFw  s    zProfileBrowser.do_EOFc                 C   s   t d| jd d S NzLeave the profile browser.r/   r   rx   r   r   r   help_EOFz  s    zProfileBrowser.help_EOFc                 C   s   dS )Nr   r   r   r   r   r   do_quit}  s    zProfileBrowser.do_quitc                 C   s   t d| jd d S r   r   rx   r   r   r   	help_quit  s    zProfileBrowser.help_quitc              
   C   s   |rzt || _W nz tk
rN } zt|jd | jd W Y d S d }~X Y n@ tk
r } z"t|jjd || jd W Y d S d }~X Y nX |d | _	n6t
| j	dkr| j	d d }| | ntd| jd dS )	Nr   r/   :r   rg   z1No statistics object is current -- cannot reload.r   )r   r:   r   r?   r*   r#   r>   rL   r   r   r&   r   )r)   r   errr   r   r   r     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   rx   r   r   r   	help_read  s    zProfileBrowser.help_readc                 C   s$   | j r| j   ntd| jd dS )Nr   r/   r   )r:   ry   r?   r#   r   r   r   r   
do_reverse  s    zProfileBrowser.do_reversec                 C   s   t d| jd d S )Nz/Reverse the sort order of the profiling report.r/   r   rx   r   r   r   help_reverse  s    zProfileBrowser.help_reversec                    s   | j std| jd d S | j   |rRt fdd| D rR| j j|   n<td| jd tj	 D ]"\}}td||d f | jd qjdS )	Nr   r/   c                 3   s   | ]}| kV  qd S rv   r   )r   r   Zabbrevsr   r   r     s     z)ProfileBrowser.do_sort.<locals>.<genexpr>z/Valid sort keys (unique prefixes are accepted):z%s -- %sr   r   )
r:   r?   r#   rl   allr   ru   r   rh   rN   )r)   r   rm   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   rx   r   r   r   	help_sort  s    zProfileBrowser.help_sortc                    s    fddt jD S )Nc                    s   g | ]}|  r|qS r   )r   )r   atextr   r   
<listcomp>  s     
 z0ProfileBrowser.complete_sort.<locals>.<listcomp>)r   rh   )r)   r   r*   r   r   r   complete_sort  s    zProfileBrowser.complete_sortc                 C   s   |  d|S )Nr   r   r   r   r   r   do_stats  s    zProfileBrowser.do_statsc                 C   s   t d| jd |   d S )Nz.Print statistics from the current stat object.r/   r   rx   r   r   r   
help_stats  s    zProfileBrowser.help_statsc                 C   s$   | j r| j   ntd| jd d S )Nr   r/   )r:   r}   r?   r#   r   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   rx   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   rx   r   r   r   	help_help  s    zProfileBrowser.help_helpc                 C   s   |r|S d S rv   r   )r)   stopr   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   6  s4   
	r   r   rg   z*Welcome to the profile statistics browser.r/   zGoodbye.)%r$   rF   r   rD   r   enumr   	functoolsr   __all__r   r   r   rr   rz   r   rO   rY   r   r   r   r   r   readlineImportErrorr   r   r&   argvZinitprofileZbrowserr   r   r?   r#   ZcmdloopKeyboardInterruptr   r   r   r   <module>   sP       
 