a
    &0_                      @   sz   d dl mZmZ d dlZd dlZddlmZ ddlmZ ejZeeddZ	ddgZ
d	d
 ZG dd deZi Zdd ZdS )    )absolute_importprint_functionN   getattr)pycompatprofiler_entrys   profiles   Statsc                 O   sF   t  }|jddd z| |i | W |  n
|  0 t| S )XXX docstringT)Zsubcallsbuiltins)ProfilerenabledisableStatsZgetstats)fargskwdsp r   2/usr/lib/python3/dist-packages/mercurial/lsprof.pyprofile   s    r   c                   @   s4   e Zd ZdZdd ZdddZddd	Zd
d ZdS )r   r	   c                 C   s
   || _ d S N)data)selfr   r   r   r   __init__   s    zStats.__init__
inlinetimec                    s   t r t jvr@td  n$| jr@t| jd  ds@td  | jj fdddd | jD ]"}|jr^|jj fdddd q^dS )	r	   s   Can't sort by %sr   Nc                    s
   t |  S r   r   xcritr   r   <lambda>+       zStats.sort.<locals>.<lambda>T)keyreversec                    s
   t |  S r   r   r   r   r   r   r   .   r    )r   __dict__
ValueErrorr   r   sortcalls)r   r   er   r   r   r%   "   s    

z
Stats.sortNc                 C   s  |du rt j}| j}|dur(|d| }d}d}||d  d}|D ]}	|||	j|	j|	j|	jt|	j	f  |d7 }|dur||kr dS d}
|rF|	j
rF|	j
D ]j}|||j|j|j|jdt|j	 f  |d7 }|
d7 }
|dur||kr  dS |dur|
|kr qFqqFdS )r	   Ns   % 12d %12d %11.4f %11.4f   %s
s   % 12s %12s %12s %12s %s
)s	   CallCounts	   Recursives   Total(s)s	   Inline(s)s   module:lineno(function)r   r   s       %s)sysstdoutr   writeZ	callcountZreccallcountZ	totaltimer   labelcoder&   )r   topfilelimitZclimitdZcolsZhcolscountr'   Zccountser   r   r   pprint0   s\    




zStats.pprintc                 C   s   t t| jD ]}| j| }t|jtsNt|t|jf|dd  | j|< |jrt t|jD ]@}|j| }t|jtsbt|t|jf|dd  |j|< qbqdS )zwReplace all references to code objects with string
        descriptions; this makes it possible to pickle the instance.r   N)	rangelenr   
isinstancer,   strtyper+   r&   )r   ir'   jr2   r   r   r   freezef   s    
&
zStats.freeze)r   )NNNN)__name__
__module____qualname____doc__r   r%   r3   r;   r   r   r   r   r      s
   

6r   c              	   C   s   t | tr$tjjdkr | d} | S zt| j }W n~ ty   t	t
tjD ]F\}}|d u rbqPt t|dd tsvqP|j| jrP| }t| j<  qqPd| j  }t| j< Y n0 d|| j| jf }tjjdkr|d}|S )N   zlatin-1__file__z<%s>z	%s:%d(%s))r6   r7   r(   version_infomajorencode_fn2modco_filenameKeyErrorlistr   Z	iteritemsmodulesr   rA   
startswithco_firstlinenoco_name)r,   Zmnamekvresr   r   r   r+   y   s(    


r+   )Z
__future__r   r   Z_lsprofr(   r   r    r   r   __all__r   objectr   rE   r+   r   r   r   r   <module>   s   Z