???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5d[                     @   st   d dl Z d dlZd dlZd dl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rpe	  dS )    N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.8/profile.py__init__0   s    z_Utils.__init__c                 C   sF   |   }z(z|| W n tk
r,   Y nX W 5 | ||| X d S r   )r   _showr   
SystemExit)r   	statementfilenamesortprofr	   r	   r
   r   3   s    
z
_Utils.runc                 C   sJ   |   }z,z|||| W n tk
r0   Y nX W 5 | ||| X d S r   )r   r   r   r   )r   r   globalslocalsr   r   r   r	   r	   r
   r   <   s    
z_Utils.runctxc                 C   s"   |d k	r| | n
|| d S r   )
dump_statsprint_stats)r   r   r   r   r	   r	   r
   r   E   s    z_Utils._showN)__name__
__module____qualname__r   r   r   r   r	   r	   r	   r
   r   *   s   		r   c                 C   s   t t| ||S r   )r   r   r   )r   r   r   r	   r	   r
   r   Q   s    c                 C   s   t t| ||||S r   )r   r   r   )r   r   r   r   r   r	   r	   r
   r   ^   s    c                   @   s   e Zd ZdZd4d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d/e_d6d0d1Zd2d3 ZdS )7r   r   Nc                 C   s   i | _ d | _d| _d| _|d kr&| j}|| _|sHtj | _| _| j	| _
nl|| _|  }zt|}W n" tk
r   || _| j	| _
Y n0X |dkr| j| _
n| j| _
|tfdd}|| _|  | _| d d S )N    c                 S   s
   ||  S r   r	   )timersumr	   r	   r
   get_time_timer   s    z(Profile.__init__.<locals>.get_time_timerr   )timingscurcmdc_func_namebiastime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      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 Nr0   r1   r   r3   r4   r5   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@r0   r1   r8   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 r7   )r&   r-   r#   r   r"   r2   )r   r3   r4   r5   r&   r-   r	   r	   r
   r,      s    
zProfile.trace_dispatch_lc           	      C   sD   | j \}}}}}}||k	r*|r*| ||S ||| ||||f| _ dS Nr/   )r    trace_dispatch_return)	r   r3   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@| |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    f_back
isinstancer   
fake_framer;   f_codeco_filenameco_firstlinenoco_namer   )r   r3   r-   r<   r=   r>   r?   r@   rA   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   r3   r-   rL   r   rM   rN   rO   rP   rQ   r	   r	   r
   trace_dispatch_c_call  s    zProfile.trace_dispatch_c_callc                 C   s   || j d k	r | | j d d | j \}}}}}}|| }|| }|\}	}
}}}}|	|
| || |||f| _ | j}|| \}}}}}|s|| }|d }||kr|| d ||< nd||< ||d || ||f||< dS rC   )r    r;   r   )r   r3   r-   r<   r=   r>   r?   rA   Zframe_totalZpptZpitZpetZpfnpframeZpcurr   rM   rN   rO   rP   rQ   r	   r	   r
   r;   "  s"    zProfile.trace_dispatch_return)callZ	exceptionreturnr0   Zc_exceptionZc_returnc                 C   s"   | j d rd S || _| | d S )Nr   )r    r!   r.   )r   r!   r	   r	   r
   set_cmdX  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   )rI   co_linerK   rJ   )r   r   linenamer	   r	   r
   r   ^  s    zProfile.fake_code.__init__c                 C   s   t | j| j| jfS r   )reprrI   rY   rK   r   r	   r	   r
   __repr__d  s    zProfile.fake_code.__repr__N)r   r   r   r   r^   r	   r	   r	   r
   	fake_code]  s   r_   c                   @   s   e Zd Zdd ZdS )zProfile.fake_framec                 C   s   || _ || _d S r   )rH   rE   )r   codeZpriorr	   r	   r
   r   h  s    zProfile.fake_frame.__init__N)r   r   r   r   r	   r	   r	   r
   rG   g  s   rG   c                 C   sF   |  dd|}| jr | jd }nd }| ||}| jd | |d d S )NZprofiler   rD   rU   )r_   r    rG   r2   )r   r[   r`   rT   r3   r	   r	   r
   r.   l  s    zProfile.simulate_callc                 C   sJ   | j }| | j }| jd r:| jd | | jd | d}q| | | _d S )Nr   rV   rD   r   )r&   r-   r    r2   )r   r&   r-   r	   r	   r
   simulate_cmd_completex  s    
zProfile.simulate_cmd_completer   c                 C   s$   dd l }||  |  d S rX   )pstatsZStatsZ
strip_dirsZ
sort_statsr   )r   r   rb   r	   r	   r
   r     s    zProfile.print_statsc              	   C   s0   t |d}|   t| j| W 5 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   |    |   d S r   )ra   snapshot_statsr]   r	   r	   r
   re     s    zProfile.create_statsc           	      C   s^   i | _ | j D ]H\}\}}}}}| }d}| D ]}||7 }q6|||||f| j |< qd S rX   )rh   r   itemscopyvalues)	r   funcrM   rN   rO   rP   rQ   ZncZcallcntr	   r	   r
   rk     s    
zProfile.snapshot_statsc                 C   s   dd l }|j}| |||S rX   )__main____dict__r   )r   r!   rp   dictr	   r	   r
   r     s    zProfile.runc              	   C   s8   |  | t| j zt||| W 5 td  X | S r   )rW   sys
setprofiler(   exec)r   r!   r   r   r	   r	   r
   r     s    
zProfile.runctxc               	   O   s   t | dkr| ^}}} nV| s&tdnHd|krZ|d}| ^}} dd l}|jdtdd ntdt | d  |t| t	|j
 z|| |W S t	d  X d S )	Nr   z:descriptor 'runcall' of 'Profile' object needs an argumentro   r   z0Passing 'func' as keyword argument is deprecated)
stacklevelz7runcall expected at least 1 positional argument, got %dr/   )r)   r*   popwarningswarnDeprecationWarningrW   r\   rs   rt   r(   )argskwr   ro   rx   r	   r	   r
   runcall  s(    

 
zProfile.runcallz($self, func, /, *args, **kw)c                 C   s<   | j tk	rtd| j}d| _z| ||W 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 }	| }|	dt t  | }|| }
|rtd|
 d}d}|	j D ]0\\}}}\}}}}}|d	kr||7 }||7 }q|rtd
| td| ||d krtd| || d | }|rtd| |S )Nc                 S   s   t | D ]}d}qd S r:   range)nixr	   r	   r
   f1  s    z$Profile._calibrate_inner.<locals>.f1c                 S   s   t | D ]}|d qd S )Nd   r   )r   r   r   r	   r	   r
   rj     s    z#Profile._calibrate_inner.<locals>.fz elapsed time without profiling =zf(m)zelapsed time with profiling =g        )rj   r   z!'CPU seconds' profiler reported =ztotal # calls =r/   z internal error: total calls = %dg       @z+mean stopwatch overhead per profile event =)	r&   printr   r   r   r   r   rl   
ValueError)r   r   r   r&   r   rj   Zt0t1Zelapsed_noprofilepZelapsed_profileZtotal_callsZreported_timer   rZ   funcnamerM   rN   rO   rP   rQ   Zmeanr	   r	   r
   r     sB    





zProfile._calibrate_inner)NN)r   )r   )r   r   r   r#   r   r+   r'   r9   r,   rB   rR   rS   r;   r2   rW   r_   rG   r.   ra   r   r   re   rk   r   r   r}   __text_signature__r   r   r	   r	   r	   r
   r   g   s@   '
''


+
c               
   C   s  dd l } ddlm} d}||d}d|_|jdddd	d d
 |jdddddd |jdddddd
 tjdd  s|  td |	 \}}|tjd d < |j
d k	r| j|j
|_
t|dkr|jrdd l}d}|j|d d}nR|d }	tjd| j|	 t|	}
t|
 |	d}W 5 Q R X |	dd d d}zt||d |j
|j W n6 tk
r } zd t_t|j W 5 d }~X Y nX n|  |S )Nr   )OptionParserzMprofile.py [-o output_file_path] [-s sort] [-m module | scriptfile] [arg] ...)usageFz-oz	--outfileoutfilezSave stats to <outfile>)desthelpdefaultz-mmodule
store_truezProfile a library module.)r   actionr   r   z-sz--sortr   z?Sort order when printing to stdout, based on pstats.Stats classr   r/   r   z(run_module(modname, run_name='__main__'))
run_modulemodnameru   rp   )__file__r   __package__
__cached__)osZoptparser   Zallow_interspersed_argsZ
add_optionrs   argvZprint_usageexit
parse_argsr   pathabspathr)   r   runpyr   insertdirnameio	open_codecompilereadr   r   BrokenPipeErrorstdouterrno)r   r   r   parserZoptionsr{   r   r`   ZglobsZprognamefpexcr	   r	   r
   main9  s^    

 
 


 r   rp   )Nr   )Nr   )r   rs   r$   rf   __all__r   r   r   r   r   r   r	   r	   r	   r
   <module>   s   

'

	   U9