3 \g@sbddlZddlZddlZddlZddlZddlmZdgZGdddZGdddZ ddZ d d Z d d Z d dZ ddZddZddZedkr^ddlZy ddlZWnek rYnXGdddejZeejdkrejdZndZyTeeZx"ejddD]Zejeq WedejdejedejdWne k r\YnXdS)N) cmp_to_keyStatsc@seZdZddddZddZddZd d Zd d Zd dZdAdEdIdMdPdSdVdYd\dadedhdldpd Z d!d"Z d#d$Z d%d&Z d'd(Z d)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zdqd8d9Zd:d;Zdrrr rrr)r ZoldstatsZnewstatsrr6r7r8r9r:r;ZnewfuncZ newcallersfunc2callerZold_topZnew_toprrr strip_dirss.    zStats.strip_dirsc Cs||jr dSi|_}xb|jjD]T\}\}}}}}||krBi||<x0|jD]$\}} ||krdi||<| |||<qLWq WdS)N)rrr4) r rr6r7r8r9r:r;rkrlrrr calc_calleess zStats.calc_calleesc Cs|}t|trpytj|}Wn&tjk rB|d|7}||fSXg}x|D]}|jt|rN|j|qNWnzt|}t|t rd|kodknrt ||d}|d|}n2t|t rd|ko|knr|}|d|}t|t|kr|dt|t||f7}||fS)Nz# gg?g?rz6 List reduced from %r to %r due to restriction <%r> ) r%r&recompileerrorsearchr5rbrfloatr`)r ZsellistmsgZnew_listZrexr6countrrreval_print_amounts,    "" zStats.eval_print_amountcCs|j}|jr*|jdd}d|jd}nt|jj}d}x|D]}|j|||\}}qBWt|}|spd|fSt||j d|t|jkrd}x(|D] }tt ||krtt |}qW|d|fS)Nz Ordered by:  z! Random listing order was used r)rrR) rrrartrkeysrwrr"rr5)r Zsel_listwidthZ stat_listruZ selectionrvr6rrrget_print_list2s$  zStats.get_print_listcGsx|jD]}t||jdqW|jr0t|jdd}x"|jD]}t|t||jdqcCs tt|j||d|jd|s2t|jddSt|j}d}x|D]}t|}||} t| tr| \} } } } | | krd| | f}n d| f}d|jdd t |t | t | |f}|d }n$d || t |j |d f}|d }t||||jdd}qHWdS) Nr|)r~r)rrz%d/%dz%dz %s %s %s %srPrRrz %s(%r) %srF) r"r5rrsortedryr%rfrjustrf8r)r rsourceZ call_dictZarrowZclistrr6rXrr8r7r9r:ZsubstatsZ left_widthrrrrs*       zStats.print_call_linecCs"tdd|jdtd|jddS)Nz- ncalls tottime percall cumtime percallr|)r~rzfilename:lineno(function))r)r"r)r rrrrszStats.print_titlecCs|j|\}}}}}t|}||kr4|dt|}t|jdd|jdtt|d|jd|dkrxtdd|jdntt||d|jdtt|d|jd|dkrtd d|jdntt||d|jdtt||jddS) N/ r|)r~rrr})rz z )rr&r"rrrr5)r r6r7r8r9r:r;crrrrszStats.print_linerrrr)rrErrrr)rrErrFrr)rrGrrFrr)rrGrHrr)rrIrHrr)rrIrJrr)rrKrHrr)rrIrLrr)rrMrLrrHrrJrrrr)rrNrrrr)rrOrPrr)rrQrrRrr)rrSrrRrr)rrS)r)__name__ __module__ __qualname__rr rr r rDrZr^rgrirmrnrwr{rrrrrrrrrrrr sD!     c@seZdZddZddZdS)rdcCs ||_dS)N)comp_select_list)r rrrrrszTupleComp.__init__cCsBx<|jD]2\}}||}||}||kr.| S||kr|SqWdS)Nr)r)r leftrightindex directionlrrrrreszTupleComp.compareN)rrrrrerrrrrdsrdcCs|\}}}tjj|||fS)N)r*pathbasename) func_namerCrVrXrrrrjs rjcCs|dS)NrRr)r6rrrrsrcCsN|ddd krB|d}|jdr<|jdrz{%s}rz %s:%d(%s))rrr) startswithendswith)rrXrrrr5s r5c Cs@|\}}}}}|\}}} } } |||||| || t| |fS)N) add_callers) targetrr7r8r9r:r;Zt_ccZt_ncZt_ttZt_ctZ t_callersrrrr>sr>cCsi}x|jD]\}}|||<qWxb|jD]V\}}||krzt|trhtddt|||D||<q|||7<q,|||<q,W|S)NcSsg|]}|d|dqS)rrr).0irrr szadd_callers..)r4r%rfzip)rrZ new_callersr6rlrrrrs   rcCs"d}x|jD] }||7}qW|S)Nr)r)r;r8rTrrr 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)7ProfileBrowserNcCs6tjj|d|_d|_tj|_|dk r2|j|dS)Nz% ) cmdCmdrpromptrrrrdo_read)r profilerrrrs  zProfileBrowser.__init__cCs|j}g}x|D]}y|jt|wWntk r>YnXy8t|}|dksZ|dkrjtd|jdw|j|wWntk rYnX|j|qW|jrt|j||ntd|jddS)Nrrz#Fraction argument must be in [0, 1])rzNo statistics object is loaded.) splitrbr` ValueErrorrsr"rrgetattr)r fnrVr Z processedZtermZfracrrrgeneric"s,  zProfileBrowser.genericcCsXtd|jdtd|jdtd|jdtd|jdtd|jdtd|jddS)NzArguments may be:)rz0* 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.)r"r)r rrr generic_help:s zProfileBrowser.generic_helpcCsd|jrRy|jj|Wq`tk rN}ztd||f|jdWYdd}~Xq`Xntd|jddS)Nz$Failed to load statistics for %s: %s)rzNo statistics object is loaded.r)rr IOErrorr"r)r rVerrrdo_addBs*zProfileBrowser.do_addcCstd|jddS)Nz>Add profile info from given file to current statistics object.)r)r"r)r rrrhelp_addKszProfileBrowser.help_addcCs |jd|S)Nr)r)r rVrrr do_calleesNszProfileBrowser.do_calleescCstd|jd|jdS)Nz6Print callees statistics from the current stat object.)r)r"rr)r rrr help_calleesPszProfileBrowser.help_calleescCs |jd|S)Nr)r)r rVrrr do_callersTszProfileBrowser.do_callerscCstd|jd|jdS)Nz6Print callers statistics from the current stat object.)r)r"rr)r rrr help_callersVszProfileBrowser.help_callerscCstd|jddS)Nr)rr)r"r)r rVrrrdo_EOFZszProfileBrowser.do_EOFcCstd|jddS)NzLeave the profile brower.)r)r"r)r rrrhelp_EOF]szProfileBrowser.help_EOFcCsdS)Nrr)r rVrrrdo_quit`szProfileBrowser.do_quitcCstd|jddS)NzLeave the profile brower.)r)r"r)r rrr help_quitbszProfileBrowser.help_quitcCs|ryt||_Wnjtk rF}zt|jd|jddSd}~Xn8tk r|}zt|jjd||jddSd}~XnX|d|_ n6t |j dkr|j dd}|j |ntd|jddS) Nr)r:z% rRz1No statistics object is current -- cannot reload.r) rrOSErrorr"r rr!r0rrrr)r rVerrrrrres  zProfileBrowser.do_readcCs td|jdtd|jddS)Nz+Read in profile data from a specified file.)rz*Without argument, reload the current file.)r"r)r rrr help_readvszProfileBrowser.help_readcCs$|jr|jjntd|jddS)NzNo statistics object is loaded.)rr)rrir"r)r rVrrr do_reversezs zProfileBrowser.do_reversecCstd|jddS)Nz/Reverse the sort order of the profiling report.)r)r"r)r rrr help_reverseszProfileBrowser.help_reversecs|jstd|jddS|jj|rRtfdd|jDrR|jj|jn@td|jdx0tjj D]"\}}td||df|jdqlWdS) NzNo statistics object is loaded.)rc3s|]}|kVqdS)Nr)rr)abbrevsrr sz)ProfileBrowser.do_sort..z/Valid sort keys (unique prefixes are accepted):z%s -- %srr) rr"rr^allrrgrrZr4)r rVr_rr)rrdo_sorts zProfileBrowser.do_sortcCs td|jdtd|jddS)Nz.Sort profile data according to specified keys.)rz3(Typing `sort' without arguments lists valid keys.))r"r)r rrr help_sortszProfileBrowser.help_sortcsfddtjDS)Ncsg|]}|jr|qSr)r)ra)textrrrsz0ProfileBrowser.complete_sort..)rrZ)r rr r)rr complete_sortszProfileBrowser.complete_sortcCs |jd|S)Nr)r)r rVrrrdo_statsszProfileBrowser.do_statscCstd|jd|jdS)Nz.Print statistics from the current stat object.)r)r"rr)r rrr help_statsszProfileBrowser.help_statscCs$|jr|jjntd|jddS)NzNo statistics object is loaded.)r)rrmr"r)r rVrrrdo_strips zProfileBrowser.do_stripcCstd|jddS)Nzrrrrrreadline ImportErrorrrrargvZ initprofileZbrowserrrr"rZcmdloopKeyboardInterruptrrrrsL