U e5dj@sddlZddlZddlZddlZddlZddlmZddlmZddgZ Gddde eZ GdddZ Gdd d Z d d Zd d ZddZddZddZddZddZedkr|ddlZz ddlZWnek rYnXGdddejZeejdkrejdZndZzPeeZejddD]Ze eq,e!dej"de#e!dej"dWne$k rzYnXdS) N)Enum) cmp_to_keyStatsSortKeyc@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/usr/lib64/python3.8/pstats.pyr-s  zSortKey.__new__N) __name__ __module__ __qualname__ZCALLSZ CUMULATIVEZFILENAMEZLINENAMEZNFLZPCALLSZSTDNAMEZTIMErrrrrr"sc@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.Zd6d0d1Zd2d3Zd4d5ZdS)7rN)streamcGsF|ptj|_t|sd}n|d}|dd}|||j|dSr)sysstdoutr#leninitadd)selfr#argsargrrr__init__Ys   zStats.__init__cCsd|_g|_d|_d|_d|_d|_d|_t|_i|_ i|_ | |z | Wn8t k rtd|jrx|jdnd|jdYnXdS)NrzInvalid timing data %sfile) all_calleesfilesfcn_listtotal_tt total_calls prim_calls max_name_lenset top_levelstats sort_arg_dict load_statsget_top_level_stats Exceptionprintr#)r)r+rrrr'cs(  z Stats.initc Cs|dkri|_dSt|trxt|d}t||_W5QRXz"t|}t |j d|}Wn YnX|g|_ n t |dr| |j|_i|_|jstd|j|fdS)Nrbz create_statsz.Cannot create or construct a %r object from %r)r: isinstanceropenmarshalloadosstatrctimest_mtimer2hasattrrA TypeError __class__)r)r+fZ file_statsrrrr<vs*     zStats.load_statscCs|jD]p\}\}}}}}|j|7_|j|7_|j|7_d|krZ|j|tt||j kr tt||_ q dS)N)ZjprofilerZprofiler) r:itemsr5r6r4r9r(r&func_std_stringr7)r)funcccncttctcallersrrrr=s 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 kr|j |}nddddif}t |||j |<qq|SNr)reversedtyperr2r5r6r4r9r(r7r3r:rNadd_func_stats)r)arg_listitemrPrGZ old_func_statrrrr(s(     z Stats.addc Cs(t|d}t|j|W5QRXdS)Nwb)rCrDdumpr:)r)r rMrrr dump_statss zStats.dump_stats)))rr-z call count)))r-zcumulative time))rz file name))rz line number))rz function name))rdr`rbzname/file/line)))rr-zprimitive call count)))rz standard name)))r-z internal time) rrr rr r r r rrrrrcCst|jsni|_}i}|jD]>\}}|}|r|s4q||krFd||<q|||<|dd}q*q|D] }||=qb|jS)Nrr-)r;sort_arg_dict_defaultrN)r)dictZbad_listwordtupZfragmentrrrget_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)Nrrrrrr)r-rrrgrgzCan't have mixed argument typerr.z, )keyr-)r3r&rBintrXrKrl sort_typerrr:rNappendrOsortr TupleCompcompare)r)Zfieldr+Z sort_arg_defsZ sort_tupleZ connectorrjZ stats_listrPrQrRrSrTrUr3tuplerrr sort_statssF     zStats.sort_statscCs|jr|j|SN)r3reverser)rrr reverse_orders zStats.reverse_ordercCs|j}i|_}d}|D]\}\}}}}} t|} tt| |krRtt| }i} | D]\} } | | t| <q^| |krt|| ||||| f|| <q||||| f|| <q|j}t|_}|D]}|t|q||_ d|_ d|_ |SrV) r:rNfunc_strip_pathr&rOrYr9r8r(r7r3r1)r)ZoldstatsZnewstatsr7rPrQrRrSrTrUZnewfuncZ newcallersfunc2callerZold_topZnew_toprrr strip_dirss0    zStats.strip_dirsc Cst|jr dSi|_}|jD]P\}\}}}}}||kr@i||<|D]$\}} ||kr`i||<| |||<qHqdSrv)r1r:rN) r)r1rPrQrRrSrTrUr{r|rrr calc_callees#s zStats.calc_calleescCs|}t|trpzt|}Wn*tjk rF|d|7}||fYSXg}|D]}|t|rP||qPnzt|}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> ) rBrrecompileerrorsearchrOrpr&floatrn)r)ZsellistmsgZnew_listZrexrPcountrrreval_print_amount6s2  "" zStats.eval_print_amountcCs|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/rg) r7r3rorr:keysrr&r?r#rO)r)Zsel_listwidthZ stat_listrZ selectionrrPrrrget_print_listPs$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 endr0z(%d primitive calls)zin %.3f seconds) r2r?r#r9func_get_function_namer5r6r4r print_title print_line)r)amountr indentrPrrrrr print_statshs(        zStats.print_statscGsz||\}}|rv|||d|D]2}||jkrN||||j|q*|||iq*t|jdt|jd|S)Nz called...r/)rr~print_call_headingr1print_call_liner?r#)r)rrrrPrrr print_calleess    zStats.print_calleesc Gsh||\}}|rd||d|D](}|j|\}}}}} |||| dq"t|jdt|jd|S)Nzwas called by...z<-r/)rrr:rr?r#) r)rrrrPrQrRrSrTrUrrr print_callerss   zStats.print_callersc Csvtd|||jdd}|jD]0\}}}}}|r&tt|} t| t}qXq&|rrtd|d|jddS)Nz Function r/Frz ncalls tottime cumtime) r?ljustr#r:rnextiterrBrt) r) name_sizeZ column_titleZ subheaderrQrRrSrTrUrrrrrs 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 %srfrgrz %s(%r) %sr_) r?rOrr#sortedrrBrtrjustr&f8r:)r)rsourceZ call_dictZarrowZclistrrPr rrRrQrSrTZsubstatsZ left_widthrrrrs0      zStats.print_call_linecCs"tdd|jdtd|jddS)Nz- ncalls tottime percall cumtime percallrrzfilename:lineno(function)r/r?r#rxrrrrszStats.print_titlecCs|j|\}}}}}t|}||kr4|dt|}t|dd|jdtt|d|jd|dkrxtdd|jdntt||d|jdtt|d|jd|dkrtdd|jdntt||d|jdtt||jddS)N/ rrrrr/)r:rr?rr#rrO)r)rPrQrRrSrTrUcrrrrszStats.print_line)r)rr r!r,r'r<r=r(r^rhrlruryr}r~rrrrrrrrrrrrrr7sD"  '  c@seZdZddZddZdS)rrcCs ||_dSrvcomp_select_list)r)rrrrr,szTupleComp.__init__cCsF|jD]:\}}||}||}||kr0| S||kr|SqdSrVr)r)leftrightindex directionlrrrrrss  zTupleComp.compareN)rr r!r,rsrrrrrrsrrcCs|\}}}tj|||fSrv)rFpathbasename) func_namer r r rrrrzs rzcCs|dS)Nrgr)rPrrrrsrcCsN|dddkrB|d}|dr<|drz{%s}rr-z %s:%d(%s)) startswithendswith)rr rrrrOs rOc Cs@|\}}}}}|\}}} } } |||||| || t| |fSrv) add_callers) targetrrQrRrSrTrUZt_ccZt_ncZt_ttZt_ctZ t_callersrrrrYs rYcCsi}|D]\}}|||<q |D]V\}}||krtt|trbtddt|||D||<q||||7<q&|||<q&|S)Ncss|]\}}||VqdSrvr).0ijrrr szadd_callers..)rNrBrtzip)rrZ new_callersrPr|rrrr s  " rcCsd}|D] }||7}q |SrV)r)rUrRrrrr count_callss  rcCsd|S)Nz%8.3fr)xrrrr(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|_|dk r2||dS)N% ) cmdCmdr,promptr:r$r%r#do_read)r)profilerrrr,7s  zProfileBrowser.__init__c Cs|}g}|D]}z|t|WqWntk r>YnXzAdd profile info from given file to current statistics object.r/rrxrrrhelp_addhszProfileBrowser.help_addcCs |d|S)Nrrr)r rrr do_calleeskszProfileBrowser.do_calleescCstd|jd|dS)Nz6Print callees statistics from the current stat object.r/r?r#rrxrrr help_calleesmszProfileBrowser.help_calleescCs |d|S)Nrrrrrr do_callersqszProfileBrowser.do_callerscCstd|jd|dS)Nz6Print callers statistics from the current stat object.r/rrxrrr help_callerssszProfileBrowser.help_callerscCstd|jddS)Nr.r/rrrrrrdo_EOFwszProfileBrowser.do_EOFcCstd|jddSNzLeave the profile browser.r/rrxrrrhelp_EOFzszProfileBrowser.help_EOFcCsdS)Nrrrrrrdo_quit}szProfileBrowser.do_quitcCstd|jddSrrrxrrr help_quitszProfileBrowser.help_quitc Cs|rzt||_Wnztk rN}zt|jd|jdWYdSd}~XYn@tk r}z"t|jjd||jdWYdSd}~XYnX|d|_ n6t |j dkr|j dd}| |ntd|jddS) Nrr/:rrgz1No statistics object is current -- cannot reload.r) rr:rr?r*r#r>rLrrr&r)r)r errrrrrs  zProfileBrowser.do_readcCs td|jdtd|jddS)Nz+Read in profile data from a specified file.r/z*Without argument, reload the current file.rrxrrr help_readszProfileBrowser.help_readcCs$|jr|jntd|jddS)Nrr/r)r:ryr?r#rrrr do_reverses zProfileBrowser.do_reversecCstd|jddS)Nz/Reverse the sort order of the profiling report.r/rrxrrr help_reverseszProfileBrowser.help_reversecs|jstd|jddS|j|rRtfdd|DrR|jj|n.z/Valid sort keys (unique prefixes are accepted):z%s -- %srr) r:r?r#rlallrrurrhrN)r)r rmrrrrdo_sorts zProfileBrowser.do_sortcCs td|jdtd|jddS)Nz.Sort profile data according to specified keys.r/z3(Typing `sort' without arguments lists valid keys.)rrxrrr help_sortszProfileBrowser.help_sortcsfddtjDS)Ncsg|]}|r|qSr)r)ratextrr s z0ProfileBrowser.complete_sort..)rrh)r)rr*rrr complete_sortszProfileBrowser.complete_sortcCs |d|S)Nrrrrrrdo_statsszProfileBrowser.do_statscCstd|jd|dS)Nz.Print statistics from the current stat object.r/rrxrrr help_statsszProfileBrowser.help_statscCs$|jr|jntd|jddS)Nrr/)r:r}r?r#rrrrdo_strips zProfileBrowser.do_stripcCstd|jddS)NzsP