a DOgaY@srddlZddlZddlZddlZgdZGdddZdddZddd ZGd d d Zd d Z e dkrne dS)N)runrunctxProfilec@s,eZdZddZddZddZddZd S) _UtilscCs ||_dSN)profiler)selfrr /usr/lib64/python3.9/profile.py__init__0sz_Utils.__init__c CsR|}z4z||Wnty*Yn0W||||n||||0dSr)rr SystemExit_show)r statementfilenamesortprofr r r r3s  z _Utils.runc CsV|}z8z||||Wnty.Yn0W||||n||||0dSr)rrr r )rrglobalslocalsrrrr 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  rcCstt|||Sr)rrr)rrrr r r rQs rcCstt|||||Sr)rrr)rrrrrr r r r^src@seZdZdZd3ddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ e e e e e e dZ ddZGdddZGdddZddZddZd4d!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd5d/d0Zd1d2ZdS)6rrNcCsi|_d|_d|_d|_|dur&|j}||_|sHtj|_|_|j |_ nj||_|}z t |}Wn t y||_|j |_ Yn00|dkr|j |_ n|j|_ |tfdd}||_||_|ddS)NcSs ||Srr )timersumr r r get_time_timersz(Profile.__init__..get_time_timerr)timingscurcmd c_func_namebiastime process_timerget_timetrace_dispatch_i dispatcherlen TypeErrortrace_dispatchtrace_dispatch_lrt 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)Nrc_callrr-r#rr"dispatch)rframeeventargrr-rr r r r+szProfile.trace_dispatchcCsT|j}||j|j}|dkr(|j|_|j||||rD||_n |||_dSNr1r2rr4r5r6rr-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_macszProfile.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|_dSNr0)r trace_dispatch_return) rr4r-rptritretrfnrframercurr r r trace_dispatch_exceptions   z Profile.trace_dispatch_exceptioncCs|jr@|j|jdur@|j\}}}}}}t|tjs@||d|j} | j| j| j f} |dd| ||jf|_|j } | | vr| | \} } }}}| | d|||f| | <nddddif| | <dSNrr0) r f_back isinstancer fake_framer<f_code co_filenameco_firstlinenoco_namer)rr4r-r=r>r?r@rArBZfcodefnrccnsttctcallersr 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_totalZpptZpitZpetZpfnpframeZpcurrrNrOrPrQrRr r r r<"s"zProfile.trace_dispatch_return)call exceptionreturnr1Z c_exceptionZc_returncCs"|jdrdS||_||dS)Nr)r r!r.)rr!r r r set_cmdXszProfile.set_cmdc@seZdZddZddZdS)zProfile.fake_codecCs||_||_||_d|_dSNr)rJco_linerLrK)rrlinenamer r r r ^szProfile.fake_code.__init__cCst|j|j|jfSr)reprrJr[rLrr r r __repr__dszProfile.fake_code.__repr__N)rrrr r`r r r r fake_code]srac@seZdZddZdS)zProfile.fake_framecCs||_||_dSr)rIrF)rcodeZpriorr r r r hszProfile.fake_frame.__init__N)rrrr r r r r rHgsrHcCsF|dd|}|jr |jd}nd}|||}|jd||ddS)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 rszProfile.print_statscCsDt|d&}|t|j|Wdn1s60YdS)Nwb)open create_statsmarshaldumpstats)rfilefr r r rs zProfile.dump_statscCs||dSr)rcsnapshot_statsr_r r r rgszProfile.create_statsc Cs^i|_|jD]H\}\}}}}}|}d}|D] }||7}q6|||||f|j|<qdSrZ)rjritemscopyvalues) rfuncrNrOrPrQrRZncZcallcntr r r rms  zProfile.snapshot_statscCsddl}|j}||||SrZ)__main____dict__r)rr!rrdictr r r rsz Profile.runc CsB||t|jzt|||Wtdn td0|Sr)rYsys setprofiler(exec)rr!rrr r r rs   zProfile.runctxc OsF|t|t|jz||i|WtdStd0dSr)rYr^rurvr()rrqargskwr r r runcalls  zProfile.runcallcCs@|jturtd|j}d|_z|||W||_S||_0dS)Nz&Subclasses must override .calibrate().r) __class__rr*r#_calibrate_inner)rmverboseZ saved_biasr r r calibrates  zProfile.calibratecCs|j}dd}|fdd}|||}|||}||}|rLtd|t} |}| dtt|}||} |rtd| d} d} | jD]0\\} }}\}}}}}|d vr| |7} | |7} q|rtd | td | | |d krtd | | |d| }|rtd||S)NcSst|D]}d}qdSr;range)nixr r r f1s z$Profile._calibrate_inner..f1cSst|D] }|dqdS)Ndr)r}rrr r r rls z#Profile._calibrate_inner..fz elapsed time without profiling =zf(m)zelapsed time with profiling =g)rlrz!'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&rrlt0t1Zelapsed_noprofilepZelapsed_profileZ total_callsZ reported_timerr\funcnamerNrOrPrQrRmeanr 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 Csddl}ddlm}d}||d}d|_|jdddd dd |jd d d ddd|jdddddd tjdds|td| \}}|tjdd<|j dur|j |j |_ t |dkr|jrddl}d}|j|dd}nh|d} tj d|j | t|  } t| | d}Wdn1s:0Y| dddd}zt||d|j |jWn8ty} zdt_t| jWYd} ~ n d} ~ 00n||S)Nr) OptionParserzMprofile.py [-o output_file_path] [-s sort] [-m module | scriptfile] [arg] ...)usageFz-oz --outfileoutfilezSave stats to )desthelpdefaultz-mmodule store_truezProfile a library module.)ractionrrz-sz--sortrz?Sort order when printing to stdout, based on pstats.Stats classrr0rz(run_module(modname, run_name='__main__')) run_modulemodnamerwrr)__file__r __package__ __cached__)osZoptparserZallow_interspersed_argsZ add_optionruargv print_usageexit parse_argsrpathabspathr)rrunpyrinsertdirnameio open_codecompilereadrrBrokenPipeErrorstdouterrno) rrrparseroptionsrxrrbZglobsZprognamefpexcr r r main)sZ         0$rrr)Nr)Nr) rrur$rh__all__rrrrrrr r r r s ' E9