o ?Ogr@s ddlZddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z gdZ GdddeeZe d d Gd d d Ze d d Gd ddZGdddZGdddZddZddZddZddZddZddZdd Zed!krddlZzddlZWn eyYnwGd"d#d#ejZ e!ej"d$krej"d$Z#ndZ#z(e e#Z$ej"d%dD]Z%e$&e%qe'd&e$j(d'e$)e'd(e$j(d'WdSe*yYdSwdS))N)Enum) cmp_to_key) dataclass)Dict)StatsSortKeyFunctionProfile StatsProfilec@s8eZdZdZdZdZdZdZdZdZ dZ d Z d d Z d S) r)callsncalls) cumulativecumtime)filenamemodulelinenamenflpcallsstdname)timetottimecGs@|d}t||}||_|ddD]}||j|<q||_|SNr)str__new___value__value2member_map_Z _all_values)clsvaluesvalueobjZ other_valuer!-/opt/alt/python310/lib64/python3.10/pstats.pyr/s  zSortKey.__new__N) __name__ __module__ __qualname__ZCALLSZ CUMULATIVEZFILENAMEZLINENAMEZNFLZPCALLSZSTDNAMEZTIMErr!r!r!r"r$s rT)Z unsafe_hashc@sFeZdZUeed<eed<eed<eed<eed<eed<eed<dS) rr rpercall_tottimer percall_cumtime file_name line_numberN)r#r$r%r__annotations__floatintr!r!r!r"r9s  rc@s(eZdZU eed<eeefed<dS)r total_tt func_profilesN)r#r$r%r,r+rrrr!r!r!r"r Cs r c@seZdZ ddddZddZddZd d Zd d Zd dZdddddddddddddd Z ddZ ddZ ddZ dd Z d!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd8d2d3Zd4d5Zd6d7ZdS)9rN)streamcGsF|ptj|_t|s d}n |d}|dd}|||j|dSr)sysstdoutr0leninitadd)selfr0argsargr!r!r"__init__ks   zStats.__init__cCsd|_g|_d|_d|_d|_d|_d|_t|_i|_ i|_ | |z| WdSt yDtd|jr<|jdnd|jdw)NrzInvalid timing data %sfile) all_calleesfilesfcn_listr. total_calls prim_calls max_name_lenset top_levelstats sort_arg_dict load_statsget_top_level_stats Exceptionprintr0)r6r8r!r!r"r4us*  z Stats.initcCs|dur i|_dSt|trDt|d}t||_Wdn1s$wYzt|}t |j d|}WnY|g|_ nt |drT| |j|_i|_|js`td|j|fdS)Nrbz create_statsz.Cannot create or construct a %r object from %r)rF isinstanceropenmarshalloadosstatrctimest_mtimer?hasattrrM TypeError __class__)r6r8fZ file_statsr!r!r"rHs,     zStats.load_statscCs|jD]8\}\}}}}}|j|7_|j|7_|j|7_d|vr-|j|tt||j kr=tt||_ qdS)N)ZjprofilerZprofiler) rFitemsrArBr.rEr5r3func_std_stringrC)r6funcccncttctcallersr!r!r"rIs zStats.get_top_level_statscGs|s|St|D]k}t|t|krt|}|j|j7_|j|j7_|j|j7_|j|j7_|jD]}|j|q9|j |j krL|j |_ d|_ |j D]\}}||j vrc|j |}nddddif}t |||j |<qTq|SNr)reversedtyperr?rArBr.rEr5rCr@rFrZadd_func_stats)r6arg_listitemr\rSZ old_func_statr!r!r"r5s*     z Stats.addcCs@ t|d}t|j|WddS1swYdS)Nwb)rOrPdumprF)r6rrYr!r!r" dump_statss "zStats.dump_stats)))rr:z call count)))r:zcumulative time))rz file name))rz line number))rz function name))rprlrnzname/file/line)))rr:zprimitive call count)))rz standard name)))r:z internal time) r r r r rrrrrrrrrcCsx |js9i|_}i}|jD] \}}|}|r0|sn||vr$d||<n |||<|dd}|sq|D]}||=q3|jS)Nrr:)rGsort_arg_dict_defaultrZ)r6dictZbad_listwordtupZfragmentr!r!r"get_sort_arg_defss&  zStats.get_sort_arg_defscGsZ|sd|_|St|dkr!t|dtr!ddddd|dg}nt|dkr>|ddD]}t|t|dkr=td q-|}d }d |_d }|D]!}t|trU|j }|||d}|j|||d7_d }qKg}|j D]\}\} } } } } | | | | | f|t ||fqt|jtt|jd g|_}|D] }| |dq|S)Nrrrr rr )r:rrrsrszCan't have mixed argument typer!r;z, )keyr:)r@r3rNr-rdrWrx sort_typerrrFrZappendr[sortr TupleCompcompare)r6Zfieldr8Z sort_arg_defsZ sort_tupleZ connectorrvZ stats_listr\r]r^r_r`rar@tupler!r!r" sort_statssH    zStats.sort_statscCs|jr|j|SN)r@reverser6r!r!r" reverse_orders zStats.reverse_ordercCs|j}i|_}d}|D]H\}\}}}}} t|} tt| |kr)tt| }i} | D] \} } | | t| <q/| |vrMt|| ||||| f|| <q||||| f|| <q|j}t|_}|D] }|t|qb||_ d|_ d|_ |Srb) rFrZfunc_strip_pathr3r[rerErDr5rCr@r>)r6ZoldstatsZnewstatsrCr\r]r^r_r`raZnewfuncZ newcallersfunc2callerZold_topZnew_topr!r!r" strip_dirss0     zStats.strip_dirsc Cst|jrdSi|_}|jD](\}\}}}}}||vr i||<|D]\}} ||vr0i||<| |||<q$qdSr)r>rFrZ) r6r>r\r]r^r_r`rarrr!r!r" calc_callees5s zStats.calc_calleescCs|}t|tr7zt|}Wntjy"|d|7}||fYSwg}|D]}|t|r5||q'n=t|}t|t r[d|krJdkr[nnt ||d}|d|}nt|t rtd|krj|krtnn|}|d|}t|t|kr|dt|t||f7}||fS)Nz# gg?g?rz6 List reduced from %r to %r due to restriction <%r> ) rNrrecompileerrorsearchr[r{r3r,r-)r6ZsellistmsgZnew_listZrexr\countr!r!r"eval_print_amountHs4    "" zStats.eval_print_amountc Cs  |jr |jddnt|j}|stdiStt|j}i}t||}|D]Y}|j|\}}}} } |\} } } ||krBt|n t|dt|}tt|}|dkrXdntt||}tt| }|dkrldntt| |}t |||||| | }||| <q)|S)Nr/r:) r@rrFkeysr r,f8r.rr)r6Z func_listr.r/Z stats_profiler\r]r^r_r`rar)r* func_namer rr'r r(Z func_profiler!r!r"get_stats_profilebs4"   $   zStats.get_stats_profilecCs|j}|jr|jdd}d|jd}n t|j}d}|D] }||||\}}q t|}|s6d|fSt||j d|t|jkrYd}|D]}tt ||krXtt |}qH|d|fS)Nz Ordered by:  z! Random listing order was used rr<rs) rCr@rzrrFrrr3rKr0r[)r6Zsel_listwidthZ stat_listrZ selectionrr\r!r!r"get_print_lists&  zStats.get_print_listcGs|jD] }t||jdq|jrt|jdd}|jD] }t|t||jdqt||jdd|jd|j|jkrDtd|jd|jdtd|j|jdt|jd||\}}|rw| |D]}| |qct|jdt|jd|S)Nr< zfunction calls endr=z(%d primitive calls)zin %.3f seconds) r?rKr0rEfunc_get_function_namerArBr.r print_title print_line)r6amountrindentr\rrr!r!r" print_statss(        zStats.print_statscGsz||\}}|r;|||d|D]}||jvr'||||j|q|||iqt|jdt|jd|S)Nz called...r<)rrprint_call_headingr>print_call_linerKr0)r6rrrr\r!r!r" print_calleess    zStats.print_calleesc Gsh||\}}|r2||d|D]}|j|\}}}}} |||| dqt|jdt|jd|S)Nzwas called by...z<-r<)rrrFrrKr0) r6rrrr\r]r^r_r`rar!r!r" print_callerss   zStats.print_callersc Csztd|||jdd}|jD]\}}}}}|r+tt|} t| t}nq|r;td|d|jddSdS)Nz Function r<Frz ncalls tottime cumtime) rKljustr0rFrnextiterrNr) r6 name_sizeZ column_titleZ subheaderr]r^r_r`rarr!r!r"rs zStats.print_call_heading->cCstt|||d|jd|st|jddSt|}d}|D]^}t|}||} t| trb| \} } } } | | krCd| | f}nd| f}d|dd t |t | t | |f}|d }nd || t |j |d f}|d }t||||jdd}q#dS) Nrrr<r;z%d/%dz%dz %s %s %s %srrrsrz %s(%r) %srk) rKr[rr0sortedrrNrrjustr3rrF)r6rsourceZ call_dictZarrowZclistrr\rrr^r]r_r`ZsubstatsZ left_widthr!r!r"rs.      zStats.print_call_linecCs"tdd|jdtd|jddS)Nz- ncalls tottime percall cumtime percallrrzfilename:lineno(function)r<rKr0rr!r!r"rszStats.print_titlecCs|j|\}}}}}t|}||kr|dt|}t|dd|jdtt|d|jd|dkrz{%s}rr:z %s:%d(%s)) startswithendswith)rrr!r!r"r[)s r[c CsB |\}}}}}|\}}} } } |||||| || t| |fSr) add_callers) targetrr]r^r_r`raZt_ccZt_ncZt_ttZt_ctZ t_callersr!r!r"re:s recCs i}|D]\}}|||<q|D]+\}}||vr;t|tr2tddt|||D||<q|||7<q|||<q|S)Ncss|] \}}||VqdSrr!).0ijr!r!r" Jszadd_callers..)rZrNrzip)rrZ new_callersr\rr!r!r"rAs  " rcCs d}|D]}||7}q|Srb)r)rar^r r!r!r" count_callsRs   rcCsd|S)Nz%8.3fr!)xr!r!r"r]rr__main__c@seZdZd6ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5ZdS)7ProfileBrowserNcCs:tj|d|_d|_tj|_|dur||dSdS)N% ) cmdCmdr9promptrFr1r2r0do_read)r6profiler!r!r"r9ls zProfileBrowser.__init__c Cs|}g}|D]@}z |t|WqtyYnwzt|}|dks*|dkr3td|jdWq||WqtyBYnw||q|jrVt|j||dStd|jddS)Nrrz#Fraction argument must be in [0, 1]r<No statistics object is loaded.) splitr{r- ValueErrorr,rKr0rFgetattr)r6fnrr7Z processedZtermZfracr!r!r"genericts2    zProfileBrowser.genericcCsXtd|jdtd|jdtd|jdtd|jdtd|jdtd|jddS)NzArguments may be:r<z0* An integer maximum number of entries to print.z:* A decimal fractional number between 0 and 1, controllingz- what fraction of selected entries to print.z8* A regular expression; only entries with function namesz that match it are printed.rrr!r!r" generic_helps zProfileBrowser.generic_helpc Csh|jr+z |j|WdSty*}ztd||f|jdWYd}~dSd}~wwtd|jddS)Nz$Failed to load statistics for %s: %sr<rr)rFr5OSErrorrKr0)r6rer!r!r"do_adds zProfileBrowser.do_addcCtd|jddS)Nz>Add profile info from given file to current statistics object.r<rrr!r!r"help_addzProfileBrowser.help_addcC |d|S)Nrrr6rr!r!r" do_callees zProfileBrowser.do_calleescCtd|jd|dS)Nz6Print callees statistics from the current stat object.r<rKr0rrr!r!r" help_callees zProfileBrowser.help_calleescCr)Nrrrr!r!r" do_callersrzProfileBrowser.do_callerscCr)Nz6Print callers statistics from the current stat object.r<rrr!r!r" help_callersrzProfileBrowser.help_callerscCstd|jddS)Nr;r<rrrr!r!r"do_EOFszProfileBrowser.do_EOFcCrNzLeave the profile browser.r<rrr!r!r"help_EOFrzProfileBrowser.help_EOFcCsdS)Nrr!rr!r!r"do_quitszProfileBrowser.do_quitcCrrrrr!r!r" help_quitrzProfileBrowser.help_quitc Cs|rLzt||_Wn;ty&}zt|jd|jdWYd}~dSd}~wtyD}zt|jjd||jdWYd}~dSd}~ww|d|_ dSt |j dkra|j dd}| |dStd|jddS) Nrr<:rrsz1No statistics object is current -- cannot reload.r) rrFrrKr7r0rJrXr#rr3r)r6rerrr!r!r"rs(  zProfileBrowser.do_readcC td|jdtd|jddS)Nz+Read in profile data from a specified file.r<z*Without argument, reload the current file.rrr!r!r" help_readzProfileBrowser.help_readcCs&|jr |jdStd|jddS)Nrr<r)rFrrKr0rr!r!r" do_reverses  zProfileBrowser.do_reversecCr)Nz/Reverse the sort order of the profiling report.r<rrr!r!r" help_reverserzProfileBrowser.help_reversecs|js td|jddS|j|r*tfdd|Dr*|jj|dStd|jdtj D]\}}td||df|jdq6dS) Nrr<c3s|]}|vVqdSrr!)rrZabbrevsr!r"rsz)ProfileBrowser.do_sort..z/Valid sort keys (unique prefixes are accepted):z%s -- %srr) rFrKr0rxallrrrrtrZ)r6rryrr!rr"do_sorts zProfileBrowser.do_sortcCr)Nz.Sort profile data according to specified keys.r<z3(Typing `sort' without arguments lists valid keys.)rrr!r!r" help_sortrzProfileBrowser.help_sortcsfddtjDS)Ncsg|] }|r|qSr!)r)ratextr!r" sz0ProfileBrowser.complete_sort..)rrt)r6rr7r!rr" complete_sortszProfileBrowser.complete_sortcCr)Nrrrr!r!r"do_statsrzProfileBrowser.do_statscCr)Nz.Print statistics from the current stat object.r<rrr!r!r" help_statsrzProfileBrowser.help_statscCs&|jr |jdStd|jddS)Nrr<)rFrrKr0rr!r!r"do_stripszProfileBrowser.do_stripcCr)Nzsh     C