o
    IAf                     @   sz   	 g d Z ddlZddlZdddZdddZejje_ejje_G dd	 d	ejZd
d Z	dd Z
edkr;e
  dS dS ))runrunctxProfile    Nc                 C   s   t t| ||S N)
_pyprofile_Utilsr   r   )	statementfilenamesort r   /usr/lib/python3.10/cProfile.pyr      s   r   c                 C   s   t t| ||||S r   )r   r   r   r   )r	   globalslocalsr
   r   r   r   r   r      s   r   c                   @   sX   e Zd Z	 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S )r   r   c                 C   s$   dd l }||  |  d S Nr   )pstatsStatsZ
strip_dirsZ
sort_statsprint_stats)selfr   r   r   r   r   r   (   s   zProfile.print_statsc                 C   sN   dd l }t|d}|   || j| W d    d S 1 s w   Y  d S )Nr   wb)marshalopencreate_statsdumpstats)r   filer   fr   r   r   
dump_stats,   s
   "zProfile.dump_statsc                 C   s   |    |   d S r   )disablesnapshot_statsr   r   r   r   r   2   s   zProfile.create_statsc              
   C   s$  |   }i | _i }|D ](}t|j}|j}||j }|j}|j}i }	|	|t|j< |||||	f| j|< q|D ]Y}|j	rt|j}|j	D ]K}
z	|t|
j }	W n	 t
yW   Y qCw |
j}||
j }|
j}|
j}||	v r|	| }||d 7 }||d 7 }||d 7 }||d 7 }||||f|	|< qCq6d S )Nr            )Zgetstatsr   labelcodeZ	callcountZreccallcountZ
inlinetimeZ	totaltimeidZcallsKeyError)r   entriesZcallersdictsentryfuncZncZccttctZcallersZsubentryprevr   r   r   r   6   sD   




zProfile.snapshot_statsc                 C   s   dd l }|j}| |||S r   )__main____dict__r   )r   cmdr.   dictr   r   r   r   \   s   zProfile.runc                 C   s.   |    zt||| W |   | S |   w r   )enableexecr   )r   r0   r   r   r   r   r   r   a   s   
zProfile.runctxc                O   s,   |    z||i |W |   S |   w r   )r2   r   )r   r*   argskwr   r   r   runcallj   s   zProfile.runcallc                 C   s   |    | S r   )r2   r    r   r   r   	__enter__q   s   zProfile.__enter__c                 G   s   |    d S r   )r   )r   exc_infor   r   r   __exit__u   s   zProfile.__exit__N)r   )__name__
__module____qualname__r   r   r   r   r   r   r6   r7   r9   r   r   r   r   r      s    
&	r   c                 C   s$   t | tr
dd| fS | j| j| jfS )N~r   )
isinstancestrco_filenameco_firstlinenoco_name)r%   r   r   r   r$   z   s   

r$   c               
   C   s  dd l } dd l}dd l}dd l}ddlm} d}||d}d|_|jdddd	d d
 |jdddddt|j	j
d |jdddddd |jdd  sS|  |d | \}}||jd d < |jd urm| j|j|_t|dkr|jrd}	|j|d d}
n3|d }|jd| j| t|d}t| |d}	W d    n1 sw   Y  |dd d d}
zt|	|
d |j|j W |S  ty } zd |_||j W Y d }~|S d }~ww |  |S )Nr   )OptionParserzNcProfile.py [-o output_file_path] [-s sort] [-m module | 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   )rF   rG   rH   choicesz-mmodule
store_truezProfile a library module)rF   actionrG   rH   r!   r"   z(run_module(modname, run_name='__main__'))
run_modulemodnamerbr3   r.   )__file__r:   __package__
__cached__)ossysrunpyr   ZoptparserC   Zallow_interspersed_argsZ
add_optionsortedr   Zsort_arg_dict_defaultargvprint_usageexit
parse_argsrE   pathabspathlenrJ   rM   insertdirnamer   compilereadr   r   BrokenPipeErrorstdouterrno)rS   rT   rU   r   rC   rD   parseroptionsr4   r%   ZglobsZprognamefpexcr   r   r   main   sj   






ri   r.   )Nr   )__all__Z_lsprofZprofiler   r   r   __doc__ZProfilerr   r$   ri   r:   r   r   r   r   <module>   s   



_;
