3 \�g�@sbddlZddlZddlZddlZddlZddlmZdgZGdd�d�ZGdd�d�Z dd�Z d d �Z d d �Z d d�Z dd�Zdd�Zdd�Zedk�r^ddlZy ddlZWnek r�YnXGdd�dej�Zeej�dkr�ejdZndZyTee�Zx"ejdd�D]Zeje��q Wedejd�ej�edejd�Wne k �r\YnXdS)�N)� cmp_to_key�Statsc@s�eZdZdd�dd�Zdd�Zdd�Zd d �Zd d �Zd d�ZdAdEdIdMdPdSdVdYd\dadedhdldpd �Z d!d"�Z d#d$�Z d%d&�Z d'd(�Z d)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zdqd8d9�Zd:d;�Zdrrr rrr)r ZoldstatsZnewstatsrr6r7r8r9r:r;ZnewfuncZ newcallers�func2�callerZold_topZnew_toprrr� strip_dirs�s.    zStats.strip_dirsc Cs||jr dSi|_}xb|jj�D]T\}\}}}}}||krBi||<x0|j�D]$\}} ||krdi||<| |||<qLWq WdS)N)rrr4) r rr6r7r8r9r:r;rkrlrrr� calc_calleess zStats.calc_calleesc Cs|}t|t�rpytj|�}Wn&tjk rB|d|7}||fSXg}x�|D]}|jt|��rN|j|�qNWnzt|�}t|t �r�d|ko�dknr�t ||d�}|d|�}n2t|t �r�d|ko�|knr�|}|d|�}t|�t|�k�r|dt|�t|�|f7}||fS)Nz# gg�?g�?rz6 List reduced from %r to %r due to restriction <%r> ) r%r&�re�compile�error�searchr5rbr�floatr`)r Zsel�list�msgZnew_listZrexr6�countrrr�eval_print_amounts,    "" zStats.eval_print_amountcCs�|j}|jr*|jdd�}d|jd}nt|jj��}d}x|D]}|j|||�\}}qBWt|�}|spd|fSt||j d�|t|j�kr�d}x(|D] }tt |��|kr�tt |��}q�W|d|fS)Nz Ordered by: � z! Random listing order was used r)rrR) rrrartr�keysrwrr"rr5)r Zsel_list�widthZ stat_listruZ selectionrvr6rrr�get_print_list2s$  zStats.get_print_listcGs�x|jD]}t||jd�qW|jr0t|jd�d}x"|jD]}t|t|�|jd�qcCs tt|�j|�|d|jd�|s2t|jd�dSt|j��}d}x�|D]�}t|�}||} t| t�r�| \} } } } | | kr�d| | f}n d| f}d|jdd t |��t | �t | �|f}|d }n$d || t |j |d �f}|d }t||||jd�d}qHWdS) Nr|)r~r)rrz%d/%dz%dz %s %s %s %srPrRrz %s(%r) %srF) r"r5r�r�sortedryr%rf�rjustr�f8r)r r��sourceZ call_dictZarrowZclistr�r6rXr�r8r7r9r:ZsubstatsZ left_widthrrrr��s*       zStats.print_call_linecCs"tdd|jd�td|jd�dS)Nz- ncalls tottime percall cumtime percallr|)r~rzfilename:lineno(function))r)r"r)r rrrr��szStats.print_titlecCs�|j|\}}}}}t|�}||kr4|dt|�}t|jd�d|jd�tt|�d|jd�|dkrxtdd|jd�ntt||�d|jd�tt|�d|jd�|dkr�td d|jd�ntt||�d|jd�tt|�|jd�dS) N�/� r|)r~rrr})rz z )rr&r"r�rr�r5)r r6r7r8r9r:r;�crrrr��szStats.print_liner�rr�r�)r�rEr�rr�r�)r�rEr�rFr�r�)r�rGr�rFr�r�)r�rG�rHr�r�)r�rI�rHr�r�)r�rI�rJr�r�)r�rK�rHr�r�)r�rI�rLr�r�)r�rM�rLr�rHr�rJr�r�r�r�)r�rNr�rr�r�)r�rO�rPr�r�)r�rQr�rRr�r�)r�rSr�rRr�r�)r�rS)r�)�__name__� __module__� __qualname__rr rr r rDrZr^rgrirmrnrwr{r�r�r�r�r�r�r�rrrrr sD!     c@seZdZdd�Zdd�ZdS)rdcCs ||_dS)N)�comp_select_list)r r�rrrr�szTupleComp.__init__cCsBx<|jD]2\}}||}||}||kr.| S||kr|SqWdS)Nr)r�)r �left�right�index� direction�l�rrrrre�szTupleComp.compareN)r�r�r�rrerrrrrd�srdcCs|\}}}tjj|�||fS)N)r*�path�basename)� func_namerCrVrXrrrrj�s rjcCs|dS)NrRr)r6rrrr�srcCsN|dd�d krB|d}|jd�r<|jd�rz{%s}rz %s:%d(%s))r�rr)� startswith�endswith)r�rXrrrr5�s r5c Cs@|\}}}}}|\}}} } } |||||| || t| |�fS)N)� add_callers) �targetr�r7r8r9r:r;Zt_ccZt_ncZt_ttZt_ctZ t_callersrrrr>�sr>cCs�i}x|j�D]\}}|||<qWxb|j�D]V\}}||krzt|t�rhtdd�t|||�D��||<q�|||7<q,|||<q,W|S)NcSsg|]}|d|d�qS)rrr)�.0�irrr� �szadd_callers..)r4r%rf�zip)r�r�Z new_callersr6rlrrrr��s   r�cCs"d}x|j�D] }||7}qW|S)Nr)r�)r;r8rTrrr� count_callss r�cCsd|S)Nz%8.3fr)�xrrrr� sr��__main__c@s�eZdZd6dd�Zdd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�ZdS)7�ProfileBrowserNcCs6tjj|�d|_d|_tj|_|dk r2|j|�dS)Nz% ) �cmd�Cmdr�promptrrrr�do_read)r �profilerrrrs  zProfileBrowser.__init__cCs�|j�}g}x�|D]�}y|jt|��wWntk r>YnXy8t|�}|dksZ|dkrjtd|jd�w|j|�wWntk r�YnX|j|�qW|jr�t|j|�|�ntd|jd�dS)Nrrz#Fraction argument must be in [0, 1])rzNo statistics object is loaded.) �splitrbr`� ValueErrorrsr"rr�getattr)r �fnrVr Z processedZtermZfracrrr�generic"s,  zProfileBrowser.genericcCsXtd|jd�td|jd�td|jd�td|jd�td|jd�td|jd�dS)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|jd�WYdd}~Xq`Xntd|jd�dS)Nz$Failed to load statistics for %s: %s)rzNo statistics object is loaded.r)rr �IOErrorr"r)r rV�errr�do_addBs*zProfileBrowser.do_addcCstd|jd�dS)Nz>Add profile info from given file to current statistics object.)r)r"r)r rrr�help_addKszProfileBrowser.help_addcCs |jd|�S)Nr�)r�)r rVrrr� do_calleesNszProfileBrowser.do_calleescCstd|jd�|j�dS)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�|j�dS)Nz6Print callers statistics from the current stat object.)r)r"rr�)r rrr� help_callersVszProfileBrowser.help_callerscCstd|jd�dS)Nr)rr)r"r)r rVrrr�do_EOFZszProfileBrowser.do_EOFcCstd|jd�dS)NzLeave the profile brower.)r)r"r)r rrr�help_EOF]szProfileBrowser.help_EOFcCsdS)Nrr)r rVrrr�do_quit`szProfileBrowser.do_quitcCstd|jd�dS)NzLeave the profile brower.)r)r"r)r rrr� help_quitbszProfileBrowser.help_quitcCs�|r�yt|�|_Wnjtk rF}zt|jd|jd�dSd}~Xn8tk r|}zt|jjd||jd�dSd}~XnX|d|_ n6t |j �dkr�|j dd�}|j |�ntd|jd�dS) Nr)r�:z% rRz1No statistics object is current -- cannot reload.r�����) rr�OSErrorr"r rr!r0r�r�rr�)r rV�errrrrr�es  zProfileBrowser.do_readcCs td|jd�td|jd�dS)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|jj�ntd|jd�dS)NzNo statistics object is loaded.)rr)rrir"r)r rVrrr� do_reversezs zProfileBrowser.do_reversecCstd|jd�dS)Nz/Reverse the sort order of the profiling report.)r)r"r)r rrr� help_reverse�szProfileBrowser.help_reversecs�|jstd|jd�dS|jj��|rRt�fdd�|j�D��rR|jj|j��n@td|jd�x0tjj �D]"\}}td||df|jd�qlWdS) NzNo statistics object is loaded.)rc3s|]}|�kVqdS)Nr)r�r�)�abbrevsrr� �sz)ProfileBrowser.do_sort..z/Valid sort keys (unique prefixes are accepted):z%s -- %srr) rr"rr^�allr�rgrrZr4)r rVr_r�r)r�r�do_sort�s zProfileBrowser.do_sortcCs td|jd�td|jd�dS)Nz.Sort profile data according to specified keys.)rz3(Typing `sort' without arguments lists valid keys.))r"r)r rrr� help_sort�szProfileBrowser.help_sortcs�fdd�tjD�S)Ncsg|]}|j��r|�qSr)r�)r��a)�textrrr��sz0ProfileBrowser.complete_sort..)rrZ)r r�r r)r�r� complete_sort�szProfileBrowser.complete_sortcCs |jd|�S)Nr�)r�)r rVrrr�do_stats�szProfileBrowser.do_statscCstd|jd�|j�dS)Nz.Print statistics from the current stat object.)r)r"rr�)r rrr� help_stats�szProfileBrowser.help_statscCs$|jr|jj�ntd|jd�dS)NzNo statistics object is loaded.)r)rrmr"r)r rVrrr�do_strip�s zProfileBrowser.do_stripcCstd|jd�dS)Nzr�r�r�r�r��readline� ImportErrorr�r�r�argvZ initprofileZbrowserr�r�r"rZcmdloop�KeyboardInterruptrrrr�sL