???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................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  | }|| }
|rtd|
 d}d}x>|	jj D ]0\\}}}\}}}}}|dkr||7 }||7 }qW |rt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 )Nd   )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"