a DOgr@sddlZddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z gdZ GdddeeZe d d Gd d d Ze d d Gd ddZGdddZGdddZddZddZddZddZddZddZdd Zed!krddlZz ddlZWney(Yn0Gd"d#d#ejZ e!ej"d$krXej"d$Z#ndZ#zPe e#Z$ej"d%dD]Z%e$&e%qte'd&e$j(d'e$)e'd(e$j(d'Wne*yYn0dS))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/python39/lib64/python3.9/pstats.pyr/s  zSortKey.__new__N) __name__ __module__ __qualname__ZCALLSZ CUMULATIVEZFILENAMEZLINENAMEZNFLZPCALLSZSTDNAMEZTIMErr!r!r!r"r$srT)Z unsafe_hashc@sFeZdZUeed<eed<eed<eed<eed<eed<eed<dS) rr rpercall_tottimer percall_cumtime file_name line_numberN)r#r$r%int__annotations__floatrr!r!r!r"r9s rc@s&eZdZUeed<eeefed<dS)r total_tt func_profilesN)r#r$r%r-r,rrrr!r!r!r"r Cs r c@seZdZddddZddZddZd 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|sd}n|d}|dd}|||j|dSr)sysstdoutr0leninitadd)selfr0argsargr!r!r"__init__ks   zStats.__init__cCsd|_g|_d|_d|_d|_d|_d|_t|_i|_ i|_ | |z | Wn6t ytd|jrv|jdnd|jdYn0dS)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|duri|_dSt|trt|d}t||_Wdn1sH0Yz"t|}t |j d|}Wn Yn0|g|_ n t |dr| |j|_i|_|jstd|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]p\}\}}}}}|j|7_|j|7_|j|7_d|vrZ|j|tt||j kr tt||_ q dS)N)ZjprofilerZprofiler) rFitemsrArBr.rEr5r3func_std_stringrC)r6funcccncttctcallersr!r!r"rIs zStats.get_top_level_statscGs|s|St|D]}t|t|kr,t|}|j|j7_|j|j7_|j|j7_|j|j7_|jD]}|j|qr|j |j kr|j |_ d|_ |j D]<\}}||j vr|j |}nddddif}t |||j |<qq|SNr)reversedtyperr?rArBr.rEr5rCr@rFrZadd_func_stats)r6arg_listitemr\rSZ old_func_statr!r!r"r5s(     z Stats.addcCs<t|d}t|j|Wdn1s.0YdS)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 rrrrrrrrrcCst|jsni|_}i}|jD]>\}}|}|r|s4q||vrFd||<q|||<|dd}q*q|D] }||=qb|jS)Nrr:)rGsort_arg_dict_defaultrZ)r6dictZbad_listwordtupZfragmentr!r!r"get_sort_arg_defss  zStats.get_sort_arg_defscGs\|sd|_|St|dkrBt|dtrBddddd|dg}n:t|dkr||ddD] }t|t|dkrZtd qZ|}d }d |_d }|D]B}t|tr|j }|||d}|j|||d7_d }qg}|j D]4\}\} } } } } | | | | | f|t ||fq|jtt|jd g|_}|D]}| |dqB|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_statssF     zStats.sort_statscCs|jr|j|SN)r@reverser6r!r!r" reverse_orders zStats.reverse_ordercCs|j}i|_}d}|D]\}\}}}}} t|} tt| |krRtt| }i} | D]\} } | | t| <q^| |vrt|| ||||| f|| <q||||| f|| <q|j}t|_}|D]}|t|q||_ 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|jr dSi|_}|jD]P\}\}}}}}||vr@i||<|D]$\}} ||vr`i||<| |||<qHqdSr)r>rFrZ) r6r>r\r]r^r_r`rarrr!r!r" calc_callees5s zStats.calc_calleescCs|}t|trnzt|}Wn(tjyD|d|7}||fYS0g}|D]}|t|rN||qNnzt|}t|t rd|krdkrnnt ||d}|d|}n2t|t rd|kr|krnn|}|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_amountHs.  "" zStats.eval_print_amountc Cs|jr|jddn t|j}|s0tdiStt|j}i}t||}|D]}|j|\}}}} } |\} } } ||krt|nt|dt|}tt|}|dkrdntt||}tt| }|dkrdntt| |}t |||||| | }||| <qP|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_profilebs2"   $   zStats.get_stats_profilecCs|j}|jr*|jdd}d|jd}nt|j}d}|D]}||||\}}q@t|}|sld|fSt||j d|t|jkrd}|D] }tt ||krtt |}q|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|jr,t|jdd}|jD]}t|t||jdq6t||jdd|jd|j|jkrtd|jd|jdtd|j|jdt|jd||\}}|r| |D]}| |qt|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||\}}|rv|||d|D]2}||jvrN||||j|q*|||iq*t|jdt|jd|S)Nz called...r<)rrprint_call_headingr>print_call_linerKr0)r6rrrr\r!r!r" print_calleess    zStats.print_calleesc Gsh||\}}|rd||d|D](}|j|\}}}}} |||| dq"t|jdt|jd|S)Nzwas called by...z<-r<)rrrFrrKr0) r6rrrr\r]r^r_r`rar!r!r" print_callerss   zStats.print_callersc Csvtd|||jdd}|jD]0\}}}}}|r&tt|} t| t}qXq&|rrtd|d|jddS)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|s2t|jddSt|}d}|D]}t|}||} t| tr| \} } } } | | krd| | f}n d| f}d|dd t |t | t | |f}|d }n$d || t |j |d f}|d }t||||jdd}qFdS) 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|}||kr4|dt|}t|dd|jdtt|d|jd|dkrxtdd|jdntt||d|jdtt|d|jd|dkrtdd|jdntt||d|jdtt||jddS)Nr rrrrr<)rFrrKrr0rr[)r6r\r]r^r_r`racr!r!r"rszStats.print_line)r)r#r$r%r9r4rHrIr5rjrtrxrrrrrrrrrrrrrrr!r!r!r"rIsF"  '#  rc@seZdZddZddZdS)r}cCs ||_dSrcomp_select_list)r6rr!r!r"r9szTupleComp.__init__cCsF|jD]:\}}||}||}||kr0| S||kr|SqdSrbr)r6leftrightindex directionlrr!r!r"r~s  zTupleComp.compareN)r#r$r%r9r~r!r!r!r"r} sr}cCs|\}}}tj|||fSr)rRpathbasename)rrrrr!r!r"r"s rcCs|dS)Nrsr!)r\r!r!r"r&srcCsN|dddkrB|d}|dr<|drz{%s}rr:z %s:%d(%s)) startswithendswith)rrr!r!r"r[)s r[c Cs@|\}}}}}|\}}} } } |||||| || t| |fSr) add_callers) targetrr]r^r_r`raZt_ccZt_ncZt_ttZt_ctZ t_callersr!r!r"re:s recCsi}|D]\}}|||<q |D]V\}}||vrtt|trbtddt|||D||<q||||7<q&|||<q&|S)Ncss|]\}}||VqdSrr!).0ijr!r!r" Jzadd_callers..)rZrNrzip)rrZ new_callersr\rr!r!r"rAs  " rcCsd}|D] }||7}q |Srb)r)rar^r r!r!r" count_callsRs  rcCsd|S)Nz%8.3fr!)xr!r!r"r]sr__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)7ProfileBrowserNcCs6tj|d|_d|_tj|_|dur2||dS)N% ) cmdCmdr9promptrFr1r2r0do_read)r6profiler!r!r"r9ls  zProfileBrowser.__init__c Cs|}g}|D]}z|t|WqWnty<Yn0zAdd profile info from given file to current statistics object.r<rrr!r!r"help_addszProfileBrowser.help_addcCs |d|S)Nrrr6rr!r!r" do_calleesszProfileBrowser.do_calleescCstd|jd|dS)Nz6Print callees statistics from the current stat object.r<rKr0rrr!r!r" help_calleesszProfileBrowser.help_calleescCs |d|S)Nrrrr!r!r" do_callersszProfileBrowser.do_callerscCstd|jd|dS)Nz6Print callers statistics from the current stat object.r<rrr!r!r" help_callersszProfileBrowser.help_callerscCstd|jddS)Nr;r<rrrr!r!r"do_EOFszProfileBrowser.do_EOFcCstd|jddSNzLeave the profile browser.r<rrr!r!r"help_EOFszProfileBrowser.help_EOFcCsdS)Nrr!rr!r!r"do_quitszProfileBrowser.do_quitcCstd|jddSrrrr!r!r" help_quitszProfileBrowser.help_quitc Cs|rzt||_WnvtyL}z"t|jd|jdWYd}~dSd}~0ty}z&t|jjd||jdWYd}~dSd}~00|d|_ n6t |j dkr|j dd}| |ntd|jddS) Nrr<:rrsz1No statistics object is current -- cannot reload.r) rrFrrKr7r0rJrXr#rr3r)r6rerrr!r!r"rs  zProfileBrowser.do_readcCs td|jdtd|jddS)Nz+Read in profile data from a specified file.r<z*Without argument, reload the current file.rrr!r!r" help_readszProfileBrowser.help_readcCs$|jr|jntd|jddS)Nrr<r)rFrrKr0rr!r!r" do_reverses zProfileBrowser.do_reversecCstd|jddS)Nz/Reverse the sort order of the profiling report.r<rrr!r!r" help_reverseszProfileBrowser.help_reversecs|jstd|jddS|j|rRtfdd|DrR|jj|n.z/Valid sort keys (unique prefixes are accepted):z%s -- %srr) rFrKr0rxallrrrrtrZ)r6rryrr!rr"do_sorts zProfileBrowser.do_sortcCs td|jdtd|jddS)Nz.Sort profile data according to specified keys.r<z3(Typing `sort' without arguments lists valid keys.)rrr!r!r" help_sortszProfileBrowser.help_sortcsfddtjDS)Ncsg|]}|r|qSr!)r)ratextr!r" rz0ProfileBrowser.complete_sort..)rrt)r6rr7r!rr" complete_sortszProfileBrowser.complete_sortcCs |d|S)Nrrrr!r!r"do_statsszProfileBrowser.do_statscCstd|jd|dS)Nz.Print statistics from the current stat object.r<rrr!r!r" help_statsszProfileBrowser.help_statscCs$|jr|jntd|jddS)Nrr<)rFrrKr0rr!r!r"do_strips zProfileBrowser.do_stripcCstd|jddS)Nzs\     C