
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \V  ã               @   s€   d dl Z d dlZd dlZd dlZd dlmZ dddgZG dd„ dƒZdd	d„Zdd
d„Z	G dd„ dƒZ
dd„ Zedkr|eƒ  dS )é    N)ÚOptionParserÚrunÚrunctxÚProfilec               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_Utilsc             C   s
   || _ d S )N)Úprofiler)Úselfr   © r	   ú/usr/lib64/python3.6/profile.pyÚ__init__1   s    z_Utils.__init__c             C   sF   | j ƒ }z(y|j|ƒ W n tk
r,   Y nX W d | j|||ƒ X d S )N)r   r   Ú
SystemExitÚ_show)r   Ú	statementÚfilenameÚsortÚprofr	   r	   r
   r   4   s    
z
_Utils.runc             C   sJ   | j ƒ }z,y|j|||ƒ W n tk
r0   Y nX W d | j|||ƒ X d S )N)r   r   r   r   )r   r   ÚglobalsÚlocalsr   r   r   r	   r	   r
   r   =   s    
z_Utils.runctxc             C   s"   |d k	r|j |ƒ n
|j|ƒ d S )N)Ú
dump_statsÚprint_stats)r   r   r   r   r	   r	   r
   r   F   s    z_Utils._showN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r	   r	   r	   r
   r   +   s   		r   é   c             C   s   t tƒj| ||ƒS )N)r   r   r   )r   r   r   r	   r	   r
   r   R   s    c             C   s   t tƒj| ||||ƒS )N)r   r   r   )r   r   r   r   r   r	   r	   r
   r   _   s    c               @   sì   e Zd ZdZd3d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e
e	eeeedœZdd„ ZG dd„ dƒZG dd„ dƒZdd„ Zdd„ Zd5d!d"„Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd6d/d0„Zd1d2„ ZdS )7r   r   Nc             C   sÌ   i | _ d | _d| _d| _|d kr&| j}|| _|sHtj | _| _| j	| _
nl|| _| jƒ }yt|ƒ}W n" tk
r„   || _| j	| _
Y n0X |dkr˜| j| _
n| j| _
|tfdd„}|| _| jƒ | _| jdƒ d S )NÚ é   c             S   s
   || ƒ ƒS )Nr	   )ÚtimerÚsumr	   r	   r
   Úget_time_timer°   s    z(Profile.__init__.<locals>.get_time_timerr   )ÚtimingsÚcurÚcmdÚc_func_nameÚbiasÚtimeZprocess_timer   Úget_timeÚtrace_dispatch_iÚ
dispatcherÚlenÚ	TypeErrorÚtrace_dispatchÚtrace_dispatch_lr   ÚtÚsimulate_call)r   r   r#   r,   Zlengthr   r	   r	   r
   r   ‘   s0    


zProfile.__init__c             C   s„   | j }|ƒ }|d |d  | j | j }|dkr8|j| _| j| | ||ƒrd|ƒ }|d |d  | _n|ƒ }|d |d  | | _d S )Nr   r   Úc_call)r   r,   r#   r   r"   Údispatch)r   ÚframeÚeventÚargr   r,   Úrr	   r	   r
   r*   ¸   s    zProfile.trace_dispatchc             C   sT   | j }|ƒ | j | j }|dkr(|j| _| j| | ||ƒrD|ƒ | _n|ƒ | | _d S )Nr.   )r   r,   r#   r   r"   r/   )r   r0   r1   r2   r   r,   r	   r	   r
   r&   Ê   s    
zProfile.trace_dispatch_ic             C   s`   | j }|ƒ d | j | j }|dkr,|j| _| j| | ||ƒrL|ƒ d | _n|ƒ d | | _d S )Ng      N@r.   )r   r,   r#   r   r"   r/   )r   r0   r1   r2   r   r,   r	   r	   r
   Útrace_dispatch_macÙ   s    zProfile.trace_dispatch_macc             C   sT   | j }|ƒ | j | j }|dkr(|j| _| j| | ||ƒrD|ƒ | _n|ƒ | | _d S )Nr.   )r%   r,   r#   r   r"   r/   )r   r0   r1   r2   r%   r,   r	   r	   r
   r+   ç   s    
zProfile.trace_dispatch_lc       	      C   sD   | j \}}}}}}||k	r*|r*| j||ƒS ||| ||||f| _ dS )Nr   )r    Útrace_dispatch_return)	r   r0   r,   ÚrptÚritÚretÚrfnÚrframeÚrcurr	   r	   r
   Útrace_dispatch_exceptionú   s
    z Profile.trace_dispatch_exceptionc             C   s¸   | j r@|j| j d k	r@| j \}}}}}}t|tjƒs@| j|dƒ |j}	|	j|	j|	j	f}
|dd|
|| j f| _ | j
}|
|kr¢||
 \}}}}}||d |||f||
< nddddi f||
< dS )Nr   r   r   éþÿÿÿ)r    Úf_backÚ
isinstancer   Ú
fake_framer5   Úf_codeÚco_filenameÚco_firstlinenoÚco_namer   )r   r0   r,   r6   r7   r8   r9   r:   r;   ZfcodeÚfnr   ÚccÚnsÚttÚctÚcallersr	   r	   r
   Útrace_dispatch_call  s    zProfile.trace_dispatch_callc       
      C   sn   dd| j f}|dd||| jf| _| j}||krX|| \}}}}}	||d |||	f||< nddddi f||< dS )Nr   r   r   )r"   r    r   )
r   r0   r,   rE   r   rF   rG   rH   rI   rJ   r	   r	   r
   Útrace_dispatch_c_call  s    zProfile.trace_dispatch_c_callc             C   sØ   || j d k	r | j| j d dƒ | j \}}}}}}|| }|| }|\}	}
}}}}|	|
| || |||f| _ | j}|| \}}}}}|s˜|| }|d }||kr²|| d ||< nd||< ||d || ||f||< dS )Nr   r   r   r=   r=   )r    r5   r   )r   r0   r,   r6   r7   r8   r9   r;   Zframe_totalZpptZpitZpetZpfnÚpframeZpcurr   rF   rG   rH   rI   rJ   r	   r	   r
   r5   #  s"    zProfile.trace_dispatch_return)ÚcallZ	exceptionÚreturnr.   Zc_exceptionZc_returnc             C   s"   | j d rd S || _| j|ƒ d S )Nr   éÿÿÿÿ)r    r!   r-   )r   r!   r	   r	   r
   Úset_cmdY  s    
 zProfile.set_cmdc               @   s   e Zd Zdd„ Zdd„ ZdS )zProfile.fake_codec             C   s   || _ || _|| _d| _d S )Nr   )rB   Úco_linerD   rC   )r   r   ÚlineÚnamer	   r	   r
   r   _  s    zProfile.fake_code.__init__c             C   s   t | j| j| jfƒS )N)ÚreprrB   rR   rD   )r   r	   r	   r
   Ú__repr__e  s    zProfile.fake_code.__repr__N)r   r   r   r   rV   r	   r	   r	   r
   Ú	fake_code^  s   rW   c               @   s   e Zd Zdd„ ZdS )zProfile.fake_framec             C   s   || _ || _d S )N)rA   r>   )r   ÚcodeZpriorr	   r	   r
   r   i  s    zProfile.fake_frame.__init__N)r   r   r   r   r	   r	   r	   r
   r@   h  s   r@   c             C   sF   | j dd|ƒ}| jr | jd }nd }| j||ƒ}| jd | |dƒ d S )NZprofiler   r   rN   r=   )rW   r    r@   r/   )r   rT   rX   rM   r0   r	   r	   r
   r-   m  s    zProfile.simulate_callc             C   sN   | j }|ƒ | j }x*| jd r<| jd | | jd |ƒ d}qW |ƒ | | _d S )Nr   rO   r   r   rP   r=   )r%   r,   r    r/   )r   r%   r,   r	   r	   r
   Úsimulate_cmd_completey  s    zProfile.simulate_cmd_completer   c             C   s$   dd l }|j| ƒjƒ j|ƒjƒ  d S )Nr   )ÚpstatsZStatsZ
strip_dirsZ
sort_statsr   )r   r   rZ   r	   r	   r
   r   „  s    zProfile.print_statsc          
   C   s0   t |dƒ�}| jƒ  tj| j|ƒ W d Q R X d S )NÚwb)ÚopenÚcreate_statsÚmarshalÚdumpÚstats)r   ÚfileÚfr	   r	   r
   r   ‰  s    zProfile.dump_statsc             C   s   | j ƒ  | jƒ  d S )N)rY   Úsnapshot_stats)r   r	   r	   r
   r]   Ž  s    zProfile.create_statsc       	      C   sf   i | _ xZ| jjƒ D ]L\}\}}}}}|jƒ }d}x|jƒ D ]}||7 }q:W |||||f| j |< qW d S )Nr   )r`   r   ÚitemsÚcopyÚvalues)	r   ÚfuncrF   rG   rH   rI   rJ   ZncZcallcntr	   r	   r
   rc   ’  s    zProfile.snapshot_statsc             C   s   dd l }|j}| j|||ƒS )Nr   )Ú__main__Ú__dict__r   )r   r!   rh   Údictr	   r	   r
   r   Ÿ  s    zProfile.runc             C   s8   | j |ƒ tj| jƒ zt|||ƒ W d tjd ƒ X | S )N)rQ   ÚsysÚ
setprofiler'   Úexec)r   r!   r   r   r	   r	   r
   r   ¤  s    
zProfile.runctxc             O   s6   | j t|ƒƒ tj| jƒ z
|||ŽS tjd ƒ X d S )N)rQ   rU   rk   rl   r'   )r   rg   ÚargsÚkwr	   r	   r
   Úruncall®  s
    
zProfile.runcallc             C   s8   | j tk	rtdƒ‚| j}d| _z| j||ƒS || _X d S )Nz&Subclasses must override .calibrate().r   )Ú	__class__r   r)   r#   Ú_calibrate_inner)r   ÚmÚverboseZ
saved_biasr	   r	   r
   Ú	calibrateß  s    
zProfile.calibratec             C   s$  | j }dd„ }|fdd„}||ƒ |ƒ }||ƒ |ƒ }|| }|rLtd|ƒ tƒ }	|ƒ }|	jdtƒ tƒ ƒ |ƒ }|| }
|r†td|
ƒ d}d}x>|	jjƒ D ]0\\}}}\}}}}}|dkrš||7 }||7 }qšW |rætd|ƒ td|ƒ ||d k�r td| ƒ‚|| d | }|�r td|ƒ |S )Nc             S   s   xt | ƒD ]}d}q
W d S )Nr   )Úrange)ÚnÚiÚxr	   r	   r
   Úf1ó  s    z$Profile._calibrate_inner.<locals>.f1c             S   s   xt | ƒD ]}|dƒ q
W d S )Néd   )rv   )rs   rz   rx   r	   r	   r
   rb   ÷  s    z#Profile._calibrate_inner.<locals>.fz elapsed time without profiling =zf(m)zelapsed time with profiling =g        rb   rz   z!'CPU seconds' profiler reported =ztotal # calls =r   z internal error: total calls = %dg       @z+mean stopwatch overhead per profile event =)rb   rz   )	r%   Úprintr   r   r   r   r   rd   Ú
ValueError)r   rs   rt   r%   rz   rb   Zt0Zt1Zelapsed_noprofileÚpZelapsed_profileZtotal_callsZreported_timer   rS   ÚfuncnamerF   rG   rH   rI   rJ   Zmeanr	   r	   r
   rr   ê  sB    

"


zProfile._calibrate_inner)NNrP   )rP   )r   )r   r   r   r#   r   r*   r&   r4   r+   r<   rK   rL   r5   r/   rQ   rW   r@   r-   rY   r   r   r]   rc   r   r   rp   ru   rr   r	   r	   r	   r
   r   h   s<   '
''



1
c              C   sö   d} t | d�}d|_|jddddd d� |jd	d
dddd� tjdd … s\|jƒ  tjdƒ |jƒ \}}|tjd d …< t|ƒdkrê|d }tj	j
dtj	j|ƒƒ t|dƒ�}t|jƒ |dƒ}W d Q R X |dd d dœ}t||d |j|jƒ n|jƒ  |S )Nz?profile.py [-o output_file_path] [-s sort] scriptfile [arg] ...)ÚusageFz-oz	--outfileÚoutfilezSave stats to <outfile>)ÚdestÚhelpÚdefaultz-sz--sortr   z?Sort order when printing to stdout, based on pstats.Stats classr   r   r   Úrbrm   rh   )Ú__file__r   Ú__package__Ú
__cached__rP   )r   Zallow_interspersed_argsZ
add_optionrk   ÚargvZprint_usageÚexitÚ
parse_argsr(   ÚpathÚinsertÚosÚdirnamer\   ÚcompileÚreadr   r�   r   )r€   ÚparserZoptionsrn   ZprognameÚfprX   Zglobsr	   r	   r
   Úmain*  s2    




r”   rh   rP   )NrP   rP   )NrP   )rk   rŽ   r$   r^   Zoptparser   Ú__all__r   r   r   r   r”   r   r	   r	   r	   r
   Ú<module>   s   

'

	   E"