�&ǐk�@'bJ�h�ۊL'}T� :��'2�Z#$��n�a��� �>a��`��_3d�Qpt�/�P -��#5�,�M��� �pA:©�q�����NW��ډ�A���� �9nʺج���� �TSM��{J6?7��r�@�\����D��� �׶���s�f�TJj?"��D��`?��̒� b�#�%�C*v�$�{�$����5Ծ�F�s��y�e/8��h-�f�̰&(����Gj�L:U� 2�� ����v�_k����Y��gp,�k�WF�R������_C�R��N@���R�@�ߔ?A�w9���F("iNa-S���Q�o�3tDMLh*�#4k�T/iQ��Y*�G��m����)��8�hBm/�I�,g�ﯖ���Z��}�Cz�q@´��d.����L�ŕ�,��1�Z�܌�: ̪���F+J-'��c�tvJ8��]Q-��b��y �6;*J`r_�d ��'�G ~p��)'�C,�%F��E(��2�k�����lР�z�!�=t ��_�0��f7��� ;�p�|�U �%.get_time_timerr)timingscurcmd c_func_namebiastimeZ process_timerget_timetrace_dispatch_i dispatcherlen TypeErrortrace_dispatchtrace_dispatch_lrt simulate_call)rrr$r-Zlengthrr r r r s0    zProfile.__init__cCs|j}|}|d|d|j|j}|dkr8|j|_|j||||rd|}|d|d|_n|}|d|d||_dS)Nrrc_call)rr-r$rr#dispatch)rframeeventargrr-rr r r r+szProfile.trace_dispatchcCsT|j}||j|j}|dkr(|j|_|j||||rD||_n |||_dS)Nr/)rr-r$rr#r0)rr1r2r3rr-r r r r's zProfile.trace_dispatch_icCs`|j}|d|j|j}|dkr,|j|_|j||||rL|d|_n|d||_dS)NgN@r/)rr-r$rr#r0)rr1r2r3rr-r r r trace_dispatch_macszProfile.trace_dispatch_maccCsT|j}||j|j}|dkr(|j|_|j||||rD||_n |||_dS)Nr/)r&r-r$rr#r0)rr1r2r3r&r-r r r r,s zProfile.trace_dispatch_lc CsD|j\}}}}}}||k r*|r*|j||S|||||||f|_dS)Nr)r!trace_dispatch_return) rr1r-rptritretrfnrframercurr r r trace_dispatch_exceptions   z Profile.trace_dispatch_exceptioncCs|jr@|j|jdk r@|j\}}}}}}t|tjs@|j|d|j} | j| j| j f} |dd| ||jf|_|j } | | kr| | \} } }}}| | d|||f| | <nddddif| | <dS)Nrrr) r!f_back isinstancer fake_framer6f_code co_filenameco_firstlinenoco_namer )rr1r-r7r8r9r:r;r<Zfcodefnr ccnsttctcallersr r r trace_dispatch_calls  zProfile.trace_dispatch_callc Csndd|jf}|dd|||jf|_|j}||krX||\}}}}} ||d||| f||<nddddif||<dS)Nrrr)r#r!r ) rr1r-rFr rGrHrIrJrKr r r trace_dispatch_c_calls zProfile.trace_dispatch_c_callcCs||jdk r |j|jdd|j\}}}}}}||}||}|\} } } } } }| | || || | |f|_|j}||\}}}}}|s||}|d}| |kr|| d|| <nd|| <||d||||f||<dS)Nrrrr>r>)r!r6r )rr1r-r7r8r9r:r<Z frame_totalZpptZpitZpetZpfnpframeZpcurr rGrHrIrJrKr r r r6#s"zProfile.trace_dispatch_return)callZ exceptionreturnr/Z c_exceptionZc_returncCs"|jdrdS||_|j|dS)Nr)r!r"r.)rr"r r r set_cmdYs zProfile.set_cmdc@seZdZddZddZdS)zProfile.fake_codecCs||_||_||_d|_dS)Nr)rCco_linerErD)rrlinenamer r r r _szProfile.fake_code.__init__cCst|j|j|jfS)N)reprrCrSrE)rr r r __repr__eszProfile.fake_code.__repr__N)rrrr rWr r r r fake_code^srXc@seZdZddZdS)zProfile.fake_framecCs||_||_dS)N)rBr?)rcodeZpriorr r r r iszProfile.fake_frame.__init__N)rrrr r r r r rAhsrAcCsF|jdd|}|jr |jd}nd}|j||}|jd||ddS)NZprofilerrrOr>)rXr!rAr0)rrUrYrNr1r r r r.ms   zProfile.simulate_callcCsN|j}||j}x*|jdr<|jd||jd|d}qW|||_dS)NrrPrrrQr>)r&r-r!r0)rr&r-r r r simulate_cmd_completeys   zProfile.simulate_cmd_completercCs$ddl}|j|jj|jdS)Nr)pstatsZStatsZ strip_dirsZ sort_statsr)rrr[r r r rszProfile.print_statsc Cs0t|d}|jtj|j|WdQRXdS)Nwb)open create_statsmarshaldumpstats)rfilefr r r rs zProfile.dump_statscCs|j|jdS)N)rZsnapshot_stats)rr r r r^szProfile.create_statsc Csfi|_xZ|jjD]L\}\}}}}}|j}d}x|jD] }||7}q:W|||||f|j|<qWdS)Nr)rar itemscopyvalues) rfuncrGrHrIrJrKZncZcallcntr r r rds zProfile.snapshot_statscCsddl}|j}|j|||S)Nr)__main____dict__r)rr"ridictr r r rsz Profile.runc Cs8|j|tj|jzt|||WdtjdX|S)N)rRsys setprofiler(exec)rr"rrr r r rs    zProfile.runctxc Os6|jt|tj|jz |||StjdXdS)N)rRrVrlrmr()rrhargskwr r r runcalls   zProfile.runcallc Cs8|jtk rtd|j}d|_z |j||S||_XdS)Nz&Subclasses must override .calibrate().r) __class__rr*r$_calibrate_inner)rmverboseZ saved_biasr r r calibrates  zProfile.calibratecCs$|j}dd}|fdd}|||}|||}||}|rLtd|t} |}| jdtt|}||} |rtd| d} d} x>| jjD]0\\} }}\}}}}}|dkr| |7} | |7} qW|rtd | td | | |d krtd| | |d| }|r td||S)NcSsxt|D]}d}q WdS)Nr)range)nixr r r f1sz$Profile._calibrate_inner..f1cSsxt|D] }|dq WdS)Nd)rw)rtr{ryr r r rcsz#Profile._calibrate_inner..fz elapsed time without profiling =zf(m)zelapsed time with profiling =grcr{z!'CPU seconds' profiler reported =ztotal # calls =rz internal error: total calls = %dg@z+mean stopwatch overhead per profile event =)rcr{) r&printrrrrr re ValueError)rrtrur&r{rcZt0Zt1Zelapsed_noprofilepZelapsed_profileZ total_callsZ reported_timerrTfuncnamerGrHrIrJrKZmeanr r r rssB   "     zProfile._calibrate_inner)NNrQ)rQ)r)rrrrr$r r+r'r5r,r=rLrMr6r0rRrXrAr.rZrrr^rdrrrqrvrsr r r r rhs>% ' '      1 c Csd}t|d}d|_|jdddddd|jd d d d ddtjd ds\|jtjd|j\}}|tjdd<t|dkr|d}tj j dt j j |t |d}t|j|d}WdQRX|dddd}t||d|j|jn|j|S)Nz?profile.py [-o output_file_path] [-s sort] scriptfile [arg] ...)usageFz-oz --outfileoutfilezSave stats to )desthelpdefaultz-sz--sortrz?Sort order when printing to stdout, based on pstats.Stats classrrrrbrnri)__file__r __package__ __cached__rQ)rZallow_interspersed_argsZ add_optionrlargvZ print_usageexit parse_argsr)pathinsertosdirnamer]compilereadrrr)rparserZoptionsroZprognamefprYZglobsr r r main*s2        rrirQ)NrQrQ)NrQ)rrlrr%r_Zoptparser__all__rrrrrrr r r r  s   ' E"