a �DOgaY�@srddlZddlZddlZddlZgd�ZGdd�d�Zddd�Zddd �ZGd d �d �Zd d �Z e dkrne �dS)�N)�run�runctx�Profilec@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) �_UtilscCs ||_dS�N)�profiler)�selfr�r �/usr/lib64/python3.9/profile.py�__init__0sz_Utils.__init__c CsR|��}z4z|�|�Wnty*Yn0W|�|||�n|�|||�0dSr)rr� SystemExit�_show)r� statement�filename�sort�profr r r r3s  z _Utils.runc CsV|��}z8z|�|||�Wnty.Yn0W|�|||�n|�|||�0dSr)rrr r )rr�globals�localsrrrr r r r<s  z _Utils.runctxcCs"|dur|�|�n |�|�dSr)� dump_stats� print_stats)rrrrr r r r Es z _Utils._showN)�__name__� __module__� __qualname__r rrr r r r r r*s  r�����cCstt��|||�Sr)rrr)rrrr r r rQs rcCstt��|||||�Sr)rrr)rrrrrr r r r^src@s�eZdZdZd3dd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z e e e e e e d�Z dd�ZGdd�d�ZGdd�d�Zdd�Zdd�Zd4d!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd5d/d0�Zd1d2�ZdS)6rrNcCs�i|_d|_d|_d|_|dur&|j}||_|sHtj|_|_|j |_ nj||_|��}z t |�}Wn t y�||_|j |_ Yn00|dkr�|j |_ n|j|_ |tfdd�}||_|��|_|�d�dS)N��cSs ||��Srr )�timer�sumr r r �get_time_timer�sz(Profile.__init__..get_time_timerr)�timings�cur�cmd� c_func_name�bias�time� process_timer�get_time�trace_dispatch_i� dispatcher�len� TypeError�trace_dispatch�trace_dispatch_lr�t� simulate_call)rrr#r-�lengthrr r r r �s0     zProfile.__init__cCs�|j}|�}|d|d|j|j}|dkr8|j|_|j||||�rd|�}|d|d|_n|�}|d|d||_dS)Nr��c_call�rr-r#rr"�dispatch)r�frame�event�argrr-�rr r r r+�szProfile.trace_dispatchcCsT|j}|�|j|j}|dkr(|j|_|j||||�rD|�|_n |�||_dS�Nr1r2�rr4r5r6rr-r r r r'�s zProfile.trace_dispatch_icCs`|j}|�d|j|j}|dkr,|j|_|j||||�rL|�d|_n|�d||_dS)NgN@r1r2r9r r r �trace_dispatch_mac�szProfile.trace_dispatch_maccCsT|j}|�|j|j}|dkr(|j|_|j||||�rD|�|_n |�||_dSr8)r&r-r#rr"r3)rr4r5r6r&r-r r r r,�s zProfile.trace_dispatch_lc CsD|j\}}}}}}||ur*|r*|�||�S|||||||f|_dS�Nr0)r �trace_dispatch_return) rr4r-�rpt�rit�ret�rfn�rframe�rcurr r r �trace_dispatch_exception�s   z Profile.trace_dispatch_exceptioncCs�|jr@|j|jdur@|j\}}}}}}t|tj�s@|�|d�|j} | j| j| j f} |dd| ||jf|_|j } | | vr�| | \} } }}}| | d|||f| | <nddddif| | <dS�N�����rr0) r �f_back� isinstancer� fake_framer<�f_code� co_filename�co_firstlineno�co_namer)rr4r-r=r>r?r@rArBZfcode�fnr�cc�ns�tt�ct�callersr r r �trace_dispatch_calls  zProfile.trace_dispatch_callc Csndd|jf}|dd|||jf|_|j}||vrX||\}}}}} ||d||| f||<nddddif||<dS)Nrrr0)r"r r) rr4r-rMrrNrOrPrQrRr r r �trace_dispatch_c_calls zProfile.trace_dispatch_c_callcCs�||jdur |�|jdd�|j\}}}}}}||}||}|\} } } } } }| | || || | |f|_|j}||\}}}}}|s�||}|d}| |vr�|| d|| <nd|| <||d||||f||<dSrD)r r<r)rr4r-r=r>r?r@rBZ frame_totalZpptZpitZpetZpfn�pframeZpcurrrNrOrPrQrRr r r r<"s"zProfile.trace_dispatch_return)�call� exception�returnr1Z c_exceptionZc_returncCs"|jdrdS||_|�|�dS)Nr)r r!r.)rr!r r r �set_cmdXszProfile.set_cmdc@seZdZdd�Zdd�ZdS)zProfile.fake_codecCs||_||_||_d|_dS�Nr)rJ�co_linerLrK)rr�line�namer r r r ^szProfile.fake_code.__init__cCst|j|j|jf�Sr)�reprrJr[rL�rr r r �__repr__dszProfile.fake_code.__repr__N)rrrr r`r r r r � fake_code]srac@seZdZdd�ZdS)zProfile.fake_framecCs||_||_dSr)rIrF)r�codeZpriorr r r r hszProfile.fake_frame.__init__N)rrrr r r r r rHgsrHcCsF|�dd|�}|jr |jd}nd}|�||�}|jd||d�dS)NZprofilerrErV)rar rHr3)rr]rbrUr4r r r r.ls   zProfile.simulate_callcCsJ|j}|�|j}|jdr:|jd||jd|�d}q|�||_dS)NrrXrEr)r&r-r r3)rr&r-r r r �simulate_cmd_completexs   zProfile.simulate_cmd_completercCs$ddl}|�|����|���dSrZ)�pstatsZStatsZ strip_dirsZ sort_statsr)rrrdr r r r�szProfile.print_statscCsDt|d��&}|��t�|j|�Wd�n1s60YdS)N�wb)�open� create_stats�marshal�dump�stats)r�file�fr r r r�s zProfile.dump_statscCs|��|��dSr)rc�snapshot_statsr_r r r rg�szProfile.create_statsc Cs^i|_|j��D]H\}\}}}}}|��}d}|��D] }||7}q6|||||f|j|<qdSrZ)rjr�items�copy�values) r�funcrNrOrPrQrRZncZcallcntr r r rm�s  zProfile.snapshot_statscCsddl}|j}|�|||�SrZ)�__main__�__dict__r)rr!rr�dictr r r r�sz Profile.runc CsB|�|�t�|j�zt|||�Wt�d�n t�d�0|Sr)rY�sys� setprofiler(�exec)rr!rrr r r r�s   zProfile.runctxc OsF|�t|��t�|j�z||i|��Wt�d�St�d�0dSr)rYr^rurvr()rrq�args�kwr r r �runcall�s  �zProfile.runcallcCs@|jturtd��|j}d|_z|�||�W||_S||_0dS)Nz&Subclasses must override .calibrate().r)� __class__rr*r#�_calibrate_inner)r�m�verboseZ saved_biasr r r � calibrate�s  �zProfile.calibratecCs|j}dd�}|fdd�}||�|�}||�|�}||}|rLtd|�t�} |�}| �dt�t��|�}||} |r�td| �d} d} | j��D]0\\} }}\}}}}}|d vr�| |7} | |7} q�|r�td | �td | �| |d kr�td | ��| |d| }|�rtd|�|S)NcSst|�D]}d}qdSr;��range)�n�i�xr r r �f1�s z$Profile._calibrate_inner..f1cSst|�D] }|d�qdS)N�dr�)r}r�r�r r r rl�s z#Profile._calibrate_inner..fz elapsed time without profiling =zf(m)zelapsed time with profiling =g)rlr�z!'CPU seconds' profiler reported =ztotal # calls =r0z internal error: total calls = %dg@z+mean stopwatch overhead per profile event =) r&�printrrrrrrn� ValueError)rr}r~r&r�rl�t0�t1Zelapsed_noprofile�pZelapsed_profileZ total_callsZ reported_timerr\�funcnamerNrOrPrQrR�meanr r r r|�sB   �      zProfile._calibrate_inner)NN)r)r)rrrr#r r+r'r:r,rCrSrTr<r3rYrarHr.rcrrrgrmrrrzrr|r r r r rgs>' ' '�     1 rc Cs�ddl}ddlm}d}||d�}d|_|jdddd dd �|jd d d ddd�|jdddddd �tjdd�s�|��t�d�|� �\}}|tjdd�<|j dur�|j � |j �|_ t |�dk�r�|jr�ddl}d}|j|dd�}nh|d} tj �d|j �| ��t�| �� } t| ��| d�}Wd�n1�s:0Y| dddd�}zt||d|j |j�Wn8t�y�} zdt_t�| j�WYd} ~ n d} ~ 00n|��|S)Nr)� OptionParserzMprofile.py [-o output_file_path] [-s sort] [-m module | scriptfile] [arg] ...)�usageFz-oz --outfile�outfilezSave stats to )�dest�help�defaultz-m�module� store_truezProfile a library module.)r��actionr�r�z-sz--sortrz?Sort order when printing to stdout, based on pstats.Stats classrr0rz(run_module(modname, run_name='__main__'))� run_module�modnamerwrr)�__file__r� __package__� __cached__)�osZoptparser�Zallow_interspersed_argsZ add_optionru�argv� print_usage�exit� parse_argsr��path�abspathr)r��runpyr��insert�dirname�io� open_code�compile�readrr�BrokenPipeError�stdout�errno) r�r�r��parser�optionsrxr�rbZglobsZprogname�fp�excr r r �main)sZ   � � �   � 0�$r�rr)Nr)Nr) r�rur$rh�__all__rrrrr�rr r r r �s ' E9