
g[\                 @   s   d  Z  d d d g Z d d l Z d d l Z d d d d  Z d d d d  Z e j j  e _  e j j  e _  Gd	 d   d e j  Z d
 d   Z	 d d   Z
 e d k r e
   n  d S)zUPython interface for the 'lsprof' profiler.
   Compatible with the 'profile' module.
runrunctxProfile    N   c             C   s   t  j t  j |  | |  S)N)
_pyprofile_Utilsr   r   )	statementfilenamesort r   /usr/lib/python3.4/cProfile.pyr      s    c             C   s"   t  j t  j |  | | | |  S)N)r   r   r   r   )r   globalslocalsr	   r
   r   r   r   r      s    c               @   sm   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 S)r   ai  Profile(custom_timer=None, time_unit=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, time_unit can
    be a float specifying a scale (i.e. how long each integer unit
    is, in seconds).
    r   c             C   s2   d d  l  } | j |   j   j |  j   d  S)Nr   )pstatsZStatsZ
strip_dirsZ
sort_statsprint_stats)selfr
   r   r   r   r   r   (   s    zProfile.print_statsc          
   C   sE   d d  l  } t | d  $ } |  j   | j |  j |  Wd  QXd  S)Nr   wb)marshalopencreate_statsdumpstats)r   filer   fr   r   r   
dump_stats,   s    
zProfile.dump_statsc             C   s   |  j    |  j   d  S)N)disablesnapshot_stats)r   r   r   r   r   2   s    
zProfile.create_statsc             C   s  |  j    } i  |  _ i  } xz | D]r } t | j  } | j } | | j } | j } | j } i  }	 |	 | t | j  <| | | | |	 f |  j | <q" Wx | D] } | j	 r t | j  } x | j	 D] }
 y | t |
 j  }	 Wn t
 k
 r w Yn X|
 j } | |
 j } |
 j } |
 j } | |	 k ru|	 | } | | d 7} | | d 7} | | d 7} | | d 7} n  | | | | f |	 | <q Wq q Wd  S)Nr   r         )Zgetstatsr   labelcodeZ	callcountZreccallcountZ
inlinetimeZ	totaltimeidZcallsKeyError)r   ZentriesZcallersdictsentryfuncZncZccZttZctZcallersZsubentryprevr   r   r   r   6   s>    				 				
zProfile.snapshot_statsc             C   s(   d d  l  } | j } |  j | | |  S)Nr   )__main____dict__r   )r   cmdr&   dictr   r   r   r   \   s    	zProfile.runc          
   C   s0   |  j    z t | | |  Wd  |  j   X|  S)N)enableexecr   )r   r(   r   r   r   r   r   r   a   s
    
zProfile.runctxc          
   O   s-   |  j    z | | |   SWd  |  j   Xd  S)N)r*   r   )r   r$   argskwr   r   r   runcallj   s    
zProfile.runcallN)__name__
__module____qualname____doc__r   r   r   r   r   r   r.   r   r   r   r   r      s   &	c             C   s6   t  |  t  r d d |  f S|  j |  j |  j f Sd  S)N~r   )
isinstancestrco_filenameco_firstlinenoco_name)r    r   r   r   r   s   s    r   c              C   s  d d  l  }  d d  l } d d l m } d } | d |  } d | _ | j d d d d	 d
 d d d  | j d d d d d
 d d d | j d d   s | j   | j d  n  | j	   \ } } | | j d  d   <t
 |  d k r| d } | j j d |  j j |   t | d   } t | j   | d  }	 Wd  QXi | d 6d d 6d  d 6d  d 6}
 t |	 |
 d  | j | j  n
 | j   | S)Nr   )OptionParserz@cProfile.py [-o output_file_path] [-s sort] scriptfile [arg] ...usageFz-oz	--outfiledestoutfilehelpzSave stats to <outfile>defaultz-sz--sortr
   z?Sort order when printing to stdout, based on pstats.Stats classr   r   rbr+   __file__r&   r0   __package__
__cached__r/   )ossysZoptparser:   Zallow_interspersed_argsZ
add_optionargvZprint_usageexit
parse_argslenpathinsertdirnamer   compilereadr   r=   r
   )rD   rE   r:   r;   parserZoptionsr,   Zprognamefpr    Zglobsr   r   r   main{   s8    	



rQ   r&   r/   r/   )r3   __all__Z_lsprofZprofiler   r   r   ZProfilerr   r   rQ   r0   r   r   r   r   <module>   s   X$