
    Rh                         d Z g dZddlZddlZddlZddlZddZddZ	ej                  j                   e_         ej                  j                   e	_          G d dej                        Zd Zd	 Zed
k(  r e        yy)zUPython interface for the 'lsprof' profiler.
   Compatible with the 'profile' module.
)runrunctxProfile    Nc                 V    t        j                  t              j                  | ||      S N)
_pyprofile_Utilsr   r   )	statementfilenamesorts      /usr/lib/python3.12/cProfile.pyr   r      s"    W%)))XtDD    c                 Z    t        j                  t              j                  | ||||      S r   )r   r	   r   r   )r
   globalslocalsr   r   s        r   r   r      s+    W%,,Y-5t= =r   c                   H    e Zd ZdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)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).
    c                     dd l }|j                  |       j                         j                  |      j	                          y Nr   )pstatsStats
strip_dirs
sort_statsprint_stats)selfr   r   s      r   r   zProfile.print_stats*   s.    T%%'2248DDFr   c                     dd l }t        |d      5 }| j                          |j                  | j                  |       d d d        y # 1 sw Y   y xY w)Nr   wb)marshalopencreate_statsdumpstats)r   filer   fs       r   
dump_statszProfile.dump_stats.   sD    $ 	(LLQ'	( 	( 	(s   -AAc                 D    | j                          | j                          y r   )disablesnapshot_statsr   s    r   r   zProfile.create_stats4   s    r   c                    | j                         }i | _        i }|D ]x  }t        |j                        }|j                  }||j
                  z
  }|j                  }|j                  }i }	|	|t        |j                        <   |||||	f| j                  |<   z |D ]  }|j                  st        |j                        }|j                  D ]  }
	 |t        |
j                           }	|
j                  }||
j
                  z
  }|
j                  }|
j                  }||	v r%|	|   }||d   z  }||d   z  }||d   z  }||d   z  }||||f|	|<     y # t        $ r Y w xY w)Nr            )getstatsr!   labelcode	callcountreccallcount
inlinetime	totaltimeidcallsKeyError)r   entriescallersdictsentryfuncncccttctcallerssubentryprevs               r   r'   zProfile.snapshot_stats8   s   --/
 	7E$DBe(((B!!BBG+2LEJJ(!2r2w6DJJt	7  	3E{{UZZ( % 3H!".r(--/@"A "++Bh333B!,,B!++Bw&t}d1gd1gd1gd1g$&BNGDM3	3 $ ! !s   E	EEc                 H    dd l }|j                  }| j                  |||      S r   )__main____dict__r   )r   cmdrC   dicts       r   r   zProfile.run^   s#      {{3d++r   c                     | j                          	 t        |||       | j                          | S # | j                          w xY wr   )enableexecr&   )r   rE   r   r   s       r   r   zProfile.runctxc   s7    	gv&LLN LLNs	   1 Ac                ~    | j                          	  ||i || j                          S # | j                          w xY wr   )rH   r&   )r   r:   argskws       r   runcallzProfile.runcalll   s0    	$$LLNDLLNs   * <c                 &    | j                          | S r   )rH   r(   s    r   	__enter__zProfile.__enter__s   s    r   c                 $    | j                          y r   )r&   )r   exc_infos     r   __exit__zProfile.__exit__w   s    r   N))__name__
__module____qualname____doc__r   r$   r   r'   r   r   rM   rO   rR    r   r   r   r      s6    G(!3L,
r   r   c                 r    t        | t              rdd| fS | j                  | j                  | j                  fS )N~r   )
isinstancestrco_filenameco_firstlinenoco_name)r/   s    r   r.   r.   |   s5    $Q~  $"5"5t||DDr   c            
         dd l } dd l}dd l}dd l}ddlm} d} ||      }d|_        |j                  dddd	d 
       |j                  dddddt        |j                  j                               |j                  ddddd       |j                  dd  s!|j                          |j                  d       |j                         \  }}||j                  d d  |j                  *| j                   j#                  |j                        |_        t%        |      dkD  r|j&                  rd}	|j(                  |d   d}
n|d   }|j                   j+                  d| j                   j-                  |             t/        j0                  |      5 }t3        |j5                         |d      }	d d d        t6        j8                  j;                  dd |      }||j<                  |j>                  d d d}
	 tA        	|
d |j                  |jB                         |S |j                          |S # 1 sw Y   xY w# tD        $ r-}d |_#        |j                  |jH                         Y d }~|S d }~ww xY w)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+   )rd   re   rf   choicesz-mmodule
store_truezProfile a library module)rd   actionre   rf   r*   z(run_module(modname, run_name='__main__'))
run_modulemodnamerI   rC   )nameloaderorigin)__spec____file__rT   __package__
__cached__)%ossysrunpyr   optparsera   allow_interspersed_args
add_optionsortedr   sort_arg_dict_defaultargvprint_usageexit
parse_argsrc   pathabspathlenrh   rk   insertdirnameio	open_codecompileread	importlib	machinery
ModuleSpecro   rm   r   r   BrokenPipeErrorstdouterrno)rt   ru   rv   r   ra   rb   parseroptionsrK   r/   globsprognamefpspecexcs                  r   mainr      s;   %\E&F%*F"
dKi&  6
dH6Nv||99:  < d,'  8 88AB<'')OWdCHHQK "''//'//:
4y1}>>=D#..7E
 AwHHHOOArwwx89h' <2rwwy(F;<&&11z$9A 2 CD ! KK II#"E	 4goow||D M 	M'< <  	 CJHHSYY M	 s$   H)2#H5 )H25	I+>"I&&I+rC   )NrS   )rW   __all___lsprofimportlib.machineryr   r   profiler   r   r   Profilerr   r.   r   rT   rX   r   r   <module>r      s    '   	 
E= nn$$""**[g [~E;| zF r   