o
    éT•jË  ã                   @   s„   d Z g d¢Zddl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 )zUPython interface for the 'lsprof' profiler.
   Compatible with the 'profile' module.
)ÚrunÚrunctxÚProfileé    Néÿÿÿÿc                 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                   @   sZ   e Zd 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   a`  Profile(timer=None, timeunit=None, subcalls=True, builtins=True)

    Builds a profiler object using the specified timer function.
    The default timer is a fast built-in one based on real time.
    For custom timer functions returning integers, timeunit can
    be a float specifying a scale (i.e. how long each integer unit
    is, in seconds).
    r   c                 C   s$   dd l }| | ¡ ¡  |¡ ¡  d S ©Nr   )ÚpstatsÚStatsÚ
strip_dirsÚ
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   3   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	r�t|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   é   é   é   )Úgetstatsr   ÚlabelÚcodeÚ	callcountÚreccallcountÚ
inlinetimeÚ	totaltimeÚidÚcallsÚKeyError)r   ÚentriesÚcallersdictsÚentryÚfuncÚncÚccÚttÚctÚcallersÚsubentryÚprevr   r   r   r!   7   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   r=   r   r   r   r   r   r   b   s   
ÿzProfile.runctxc                O   s,   |   ¡  z||i |¤ŽW |  ¡  S |  ¡  w r   )r?   r    )r   r3   ÚargsÚkwr   r   r   Úruncallk   s   zProfile.runcallc                 C   s   |   ¡  | S r   )r?   r"   r   r   r   Ú	__enter__r   s   zProfile.__enter__c                 G   s   |   ¡  d S r   )r    )r   Úexc_infor   r   r   Ú__exit__v   s   zProfile.__exit__N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r!   r   r   rC   rD   rF   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'   {   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r�d}	|j|d dœ}
n3|d }|j d| j |¡¡ t |¡�}t| ¡ |dƒ}	W d   ƒ n1 s¨w   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   )rT   rU   rV   Úchoicesz-mÚmoduleÚ
store_truezProfile a library module)rT   ÚactionrU   rV   r#   r$   z(run_module(modname, run_name='__main__'))Ú
run_moduleÚmodnamer@   r;   )Ú__file__rG   Ú__package__Ú
__cached__) ÚosÚsysÚrunpyr   ÚoptparserQ   Úallow_interspersed_argsÚ
add_optionÚsortedr   Úsort_arg_dict_defaultÚargvÚprint_usageÚexitÚ
parse_argsrS   ÚpathÚabspathÚlenrX   r[   ÚinsertÚdirnameÚioÚ	open_codeÚcompileÚreadr   r   ÚBrokenPipeErrorÚstdoutÚerrno)r`   ra   rb   r   rQ   rR   ÚparserÚoptionsrA   r(   ÚglobsÚprognameÚfpÚexcr   r   r   Úmainƒ   sj   

ÿ

ý
ÿ

þÿüú€úr~   r;   )Nr   )rJ   Ú__all__Ú_lsprofrq   Úprofiler   r   r   ÚProfilerr   r'   r~   rG   r   r   r   r   Ú<module>   s   



_;
ÿ