Ë ^ŠUµsÑk�ãó"—dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZm Z ejZej Zgd¢Zhd£Zd„ZGd „d «Ze«ZGd „d «ZGd „d«Zd„Ze j2«Zd„Zd„Zdad(d„Zd„Zd„Z d„Z!d)d„Z"ed„«Z#Gd„d«Z$Gd„d«Z%d*d„Z&d„Z'd„Z(d)d„Z)d+d „Z*d,d!„Z+iZ,d"„Z-d#„Z.d-d$„Z/d%„Z0d)d&„Z1e2d'k(rejfe1««yy).aÀ statprof is intended to be a fairly simple statistical profiler for python. It was ported directly from a statistical profiler for guile, also named statprof, available from guile-lib [0]. [0] http://wingolog.org/software/guile-lib/statprof/ To start profiling, call statprof.start(): >>> start() Then run whatever it is that you want to profile, for example: >>> import test.pystone; test.pystone.pystones() Then stop the profiling and print out the results: >>> stop() >>> display() % cumulative self time seconds seconds name 26.72 1.40 0.37 pystone.py:79:Proc0 13.79 0.56 0.19 pystone.py:133:Proc1 13.79 0.19 0.19 pystone.py:208:Proc8 10.34 0.16 0.14 pystone.py:229:Func2 6.90 0.10 0.10 pystone.py:45:__init__ 4.31 0.16 0.06 pystone.py:53:copy ... All of the numerical data is statistically approximate. In the following column descriptions, and in all of statprof, "time" refers to execution time (both user and system), not wall clock time. % time The percent of the time spent inside the procedure itself (not counting children). cumulative seconds The total number of seconds spent in the procedure, including children. self seconds The total number of seconds spent in the procedure itself (not counting children). name The name of the procedure. By default statprof keeps the data collected from previous runs. If you want to clear the collected data, call reset(): >>> reset() reset() can also be used to change the sampling frequency from the default of 1000 Hz. For example, to tell statprof to sample 50 times a second: >>> reset(50) This means that statprof will sample the call stack after every 1/50 of a second of user + system time spent running on behalf of the python process. When your process is idle (for example, blocking in a read(), as is the case at the listener), the clock does not advance. For this reason statprof is not currently not suitable for profiling io-bound operations. The profiler uses the hash of the code object itself to identify the procedures, so it won't confuse different procedures with the same name. They will show up as two different rows in the output. Right now the profiler is quite simplistic. I cannot provide call-graphs or other higher level information. What you see in the table is pretty much all there is. Patches are welcome :-) Threading --------- Because signals only get delivered to the main thread in Python, statprof only profiles the main thread. However because the time reporting function uses per-process timers, the results can be significantly off if other threads' work patterns are not similar to the main thread's work patterns. éNé)Úopen)ÚencodingÚpycompat)sstartsstopsresetsdisplaysprofile>ú util.py:checkúhg.py:údispatch.py:runúpager.py:pagecmdúcolor.py:colorcmdúdispatch.py:údispatch.py:dispatchúdispatch.py:_dispatchúdispatch.py:_runcatchúdispatch.py:checkargsúextensions.py:closureúdispatch.py:runcommandúdispatch.py:_runcommandúevolve.py:warnobserrorscóJ—tj«}|d|dz|dfS)Nrré)ÚosÚtimes)rs ú6usr/lib/python3.12/site-packages/mercurial/statprof.pyÚclockr”s)€Ü �H‰H‹J€EØ �!‰H�u˜Q‘xÑ   q¡Ð *Ð*ócó8—eZdZdd„Zdd„Zd„Zd„Zed„«Zy)Ú ProfileStateNcó4—|j|«d|_y)Nócpu)ÚresetÚtrack©ÚselfÚ frequencys rÚ__init__zProfileState.__init__žs€Ø � ‰ �9ÔØˆ� rcó¢—d|_d|_|r d|z |_ntj|d«sd|_n d|_d|_g|_y)N)çr'gð?Úsample_intervalçü©ñÒMbP?r)Úaccumulated_timeÚlast_start_timer(rÚhasattrÚremaining_prof_timeÚ profile_levelÚsamplesr"s rr zProfileState.reset¢sV€à *ˆÔà#ˆÔá Ø#&¨¡?ˆDÕ Ü×!Ñ! $Ð(9Ô:à#/ˆDÕ ð Ø#'ˆÔ àˆÔàˆ� rcó¶—|d|jdz |d|jdz f}|jd|dz|jd|dzf|_y©Nrr)r+r*)r#Ú stop_timeÚ increments rÚaccumulate_timezProfileState.accumulate_time¶sq€à �a‰L˜4×/Ñ/°Ñ2Ñ 2Ø �a‰L˜4×/Ñ/°Ñ2Ñ 2ð ˆ ð × !Ñ ! !Ñ $ y°¡|Ñ 3Ø × !Ñ ! !Ñ $ y°¡|Ñ 3ð! ˆÕrcó`—|j|jt|j«z S©N)r*ÚtimeidxÚlenr/©r#s rÚseconds_per_samplezProfileState.seconds_per_sampleÀs%€Ø×$Ñ$ T§\¡\Ñ2´S¸¿¹Ó5FÑFÐFrcó$—|jdk(ryy)Nsrealrr)r!r9s rr7zProfileState.timeidxÃs€à �:‰:˜Ò ØØrr6) Ú__name__Ú __module__Ú __qualname__r%r r4r:Úpropertyr7©rrrr�s+„óóò( òGðñóñrrcóH—eZdZiZdZd„Zd„Zd„Zed„«Z d„Z d„Z d„Z y ) ÚCodeSite)ÚpathÚlinenoÚfunctionÚsourcecó„—t|t«sJ‚||_||_t|t«sJ‚||_d|_yr6)Ú isinstanceÚbytesrCrDrErF)r#rCrDrEs rr%zCodeSite.__init__Òs>€Ü˜$¤Ô&Ð&Ð&؈Œ ؈Œ ܘ(¤EÔ*Ð*Ð*Ø ˆŒ ؈� rcóz— |j|jk(xr|j|jk(S#YyxYw)NF)rDrC)r#Úothers rÚ__eq__zCodeSite.__eq__Ús6€ð Ø—;‘; %§,¡,Ñ.ÒJ°4·9±9ÀÇ Á Ñ3JÐ Jøð Ùús‚36¶:cóD—t|j|jf«Sr6)ÚhashrDrCr9s rÚ__hash__zCodeSite.__hash__às€Ü�T—[‘[ $§)¡)Ð,Ó-Ð-rcó~—||f} |j|S#t$r||||«}||j|<|cYSwxYwr6)ÚcacheÚKeyError)ÚclsrCrDrEÚkÚvs rÚgetz CodeSite.getãsM€à �6ˆNˆð Ø—9‘9˜Q‘<Ð øÜò Ù�D˜& (Ó+ˆA؈C�I‰I�a‰LØŠHð ús †•$<»<cóp—|j€q |jdz }t|jd«5}t |«D]!\}}||k(sŒ |j «|_nddd«|j€d|_|j}t |«|kDr |d|dz dz}|S#1swYŒCxYw#YŒJxYw)Nrórbrés...)rFrDrrCÚ enumerateÚstripr8)r#ÚlengthrDÚfpÚiÚlinerFs rÚ getsourcezCodeSite.getsourceís°€Ø �;‰;Ð ð ØŸ™ q™�ܘ$Ÿ)™) UÔ+¨rÜ#,¨R¦=™˜˜4Ø ›;Ø*.¯*©*«,˜DœKÙ!ð$1÷,ð�{‰{Ð"Ø!�” à—‘ˆÜ ˆv‹;˜Ò ؘN˜v¨™zÐ+¨fÑ4ˆF؈ ÷,Ð+ûð  Ùús(Ž%B1³B%Á B%Á#B1Â%B.Â*B1Â1B5cóT—tjj|j«Sr6)rrCÚbasenamer9s rÚfilenamezCodeSite.filenames€Ü�w‰w×Ñ § ¡ Ó*Ð*rcó@—|j«›d|j›�S)NÚ:)rcrEr9s rÚskipnamezCodeSite.skipnames€ØŸ-™-�/¨4¯=ª=Ð9Ð9rN) r<r=r>rQÚ __slots__r%rLrOÚ classmethodrVr`rcrfr@rrrBrBÍs>„Ø €Eà8€Iòòò .ðñóðòò&+ó:rrBcó&—eZdZdZd„Zed„«Zy)ÚSample©ÚstackÚtimecó —||_||_yr6rk)r#rlrms rr%zSample.__init__ s€ØˆŒ ؈� rc ó<—g}|r�|jtjtj|j j «|jtj|j j«««|j}|rŒ�t||«Sr6) ÚappendrBrVrÚsysbytesÚf_codeÚ co_filenameÚf_linenoÚco_nameÚf_backrj)rSÚframermrls rÚ from_framezSample.from_framesx€àˆáØ �L‰LÜ— ‘ Ü×%Ñ% e§l¡l×&>Ñ&>Ó?Ø—N‘NÜ×%Ñ% e§l¡l×&:Ñ&:Ó;óô ð—L‘LˆEòô�e˜TÓ"Ð"rN)r<r=r>rgr%rhrxr@rrrjrjs „Ø!€Iòðñ #óñ #rrjcóŽ—tjdkDr²t«}tj|«tjtj }tj jtj||««tjtjtjd«|t_yy)Nrr')Ústater.rr4r*r7r/rprjrxÚsignalÚ setitimerÚ ITIMER_PROFr(r+)ÚsignumrwÚnowÚ timestamps rÚprofile_signal_handlerr�#sƒ€Ü ×јQÒÜ‹gˆÜ ×јcÔ"ä×*Ñ*¬5¯=©=Ñ9ˆ Ü � ‰ ×ÑœV×.Ñ.¨u°iÓ@ÔAä×Ñœ×+Ñ+¬U×-BÑ-BÀCÔHØ #ŒÕðrcóî—tj«sÍt«}tj |«t j «|}tjtj}tjjtj||««|t_ tjtj «tj«sŒÍtj#«yr6)Ú stopthreadÚis_setrrzr4ÚsysÚ_current_framesr*r7r/rprjrxr+rmÚsleepr(Úclear)Útidrrwr€s rÚ samplerthreadrŠ2sŸ€Ü×ÑÔ!Ü‹gˆÜ ×јcÔ"ä×#Ñ#Ó% cÑ*ˆä×*Ñ*¬5¯=©=Ñ9ˆ Ü � ‰ ×ÑœV×.Ñ.¨u°iÓ@ÔAà #ŒÔÜ � ‰ ”5×(Ñ(Ô)ô×ÑÕ!ô×ÑÕrcó(—tjdkDS©Nr)rzr.r@rrÚ is_activer�Fs€Ü × Ñ  Ñ "Ð"rcóä—|t_txjdz c_tjdk(�r2t«t_tj }dt_|a|dk(r`tjtjt«tjtj|xstjd«y|dk(r—tj«}tj «j#«D��cgc] \}}||k(sŒ |‘Œc}}d}t%j&t(|fd¬«t_tj*j-«yyycc}}w) z:Install the profiling signal handler, and start profiling.rNósignalr'óthreadrrŠ)ÚtargetÚargsÚname)rzr!r.rr+r-Ú lastmechanismr{ÚSIGPROFr�r|r}r(ÚinspectÚ currentframer…r†ÚitemsÚ threadingÚThreadrŠÚthreadÚstart)Ú mechanismr!ÚrptrwrTÚfr‰s rrœrœMs€à„E„KÜ ×Ò˜1ÑÕÜ ×јaÓÜ %£ŒÔÜ×'Ñ'ˆØ$(ŒÔ!ð"ˆ à ˜ Ò !Ü �M‰Mœ&Ÿ.™.Ô*@Ô AÜ × Ñ Ü×"Ñ" CÒ$@¬5×+@Ñ+@À#õ ð˜)Ò #Ü×(Ñ(Ó*ˆEÜ!$×!4Ñ!4Ó!6×!<Ñ!<Ô!>ÔMÑ!>™˜˜AÀ!ÀuÃ*’1Ð!>ÒMÈaÑPˆCÜ$×+Ñ+Ü$¨C¨6¸ôŒEŒLô �L‰L× Ñ Õ ð $ð ùóNs Ä E,ÄE,cób—txjdzc_tjdk(rþtdk(rftjtj dd«}tjtj tj«|dt_n;tdk(r2tj«tjj«tjt««dt_t j"j%d«}|r t'|«tS)z;Stop profiling, and uninstall the profiling signal handler.rrr�r'r�Ns STATPROF_DEST)rzr.r”r{r|r}r•ÚSIG_IGNr-rƒÚsetr›Újoinr4rr+rÚenvironrVÚ save_data)ržÚ statprofpaths rÚstopr§gsÆ€ä ×Ò˜1ÑÕÜ ×јaÒÜ ˜IÒ %Ü×"Ñ"¤6×#5Ñ#5°s¸CÓ@ˆCÜ �M‰Mœ&Ÿ.™.¬&¯.©.Ô 9Ø(+¨A©ŒEÕ %Ü ˜iÒ 'Ü �N‰NÔ Ü �L‰L× Ñ Ô ä ×Ñœe›gÔ&Ø $ŒÔÜ×'Ñ'×+Ñ+Ð,<Ó=ˆ Ù Ü �lÔ #ä €Lrc ó¾—t|d«5}|jdtjz«tjD]�}|j }|j }|D�cgc]7}dj|jd|jz|jg«‘Œ9}}|jd|dj|«fz«Œƒ ddd«ycc}w#1swYyxYw)Nów+s%f %f ós%ds%d%s ó) rÚwriterzr*r/rmrlr£rCrDrE)rCÚfileÚsamplermrlÚsÚsitess rr¥r¥|s¿€Ü ˆd�EÔ ˜dØ � ‰ �:¤× 6Ñ 6Ñ6Ô7Ü—m”mˆFØ—;‘;ˆDØ—L‘LˆEñóá�Að— ‘ ˜AŸF™F E¨A¯H©HÑ$4°a·j±jÐAÕBØð ðð �J‰J�{ d¨E¯J©J°uÓ,=Ð%>Ñ>Õ ?ñ$÷ Ð ùò ÷ Ð ús�ACÁÓ*™>�a’˜>Ñ*Ð*ùÒ*s BN) r<r=r>r%rÌrÎrÒrÔrÖrØrhrÝr@rrrÄrĵs9„òò òò9ò:ò;ò<ðñ+óñ+rrÄcó(—eZdZdZdZdZdZdZdZdZ y) ÚDisplayFormatsrrr²rYrééN) r<r=r>ÚByLineÚByMethodÚ AboutMethodÚHotpathÚ FlameGraphÚJsonÚChromer@rrrßrßàs%„Ø €FØ€HØ€KØ€GØ€JØ €DØ �Frrßc ó`—|€t}|€ddlm}|j}t |j «dk(r|j d«y|tjk(r t||«nÏ|tjk(r t||«n¯|tjk(rt||fi|¤ŽnŽ|tjk(rt||fi|¤Žnm|tj k(rt#||fi|¤ŽnL|tj$k(r t'||«n,|tj(k(rt+||fi|¤Žn t-d«‚|tj$tj(fvrW|j d«|j dt |j «z«|j d |j.z«yy) z×*Ñ*Ò *ܘ$ Õ#Ø ”>×-Ñ-Ò -ܘT 2Ñ0¨Ó0Ø ”>×)Ñ)Ò )ܘ˜bÑ+ FÓ+Ø ”>×,Ñ,Ò ,Ü�t˜RÑ* 6Ó*Ø ”>×&Ñ&Ò &Ü�d˜BÕØ ”>×(Ñ(Ò (ܘ˜bÑ+ FÓ+äÐ0Ó1Ð1à ”n×)Ñ)¬>×+@Ñ+@ÐAÑAØ �‰�ÔØ �‰Ð&¬¨T¯\©\Ó):Ñ:Ô;Ø �‰Ð6¸×9NÑ9NÑNÕOðBrcóÀ—tj|j«}|jdd„¬«|j ddz«|j ddz«|D]~}|j }d|j «|jxsd |jfz}|j d |j«|j«|j«|fz«Œ€y ) zsPrint the profiler data with each sample line represented as one row in a table. Sorted by self-time per line.Tcó"—|j«Sr6©rÖ©Úxs rÚz!display_by_line..s €¨1¯=©=¬?r©ÚreverseÚkeyó%5.5s %10.10s %7.7s %-8.8s ©s% s cumulativesselfró%5.5s %9.9s %8.8s %-8.8s ©stimeósecondsrsnames%s:%d:%séÿÿÿÿó%6.2f %9.2f %9.2f %s N) rÄrÝr/Úsortr¬rÆrcrDrErÒrØrÖ)rör]rÛÚstatrÆÚ sitelabels rrírísÛ€ô × Ñ  §¡Ó .€EØ ‡J�J�tÑ!:€JÔ;à‡H�HØ*Ø /ñ 0ôð‡H�HØ(Ø 4ñ 5ôó ˆØ�y‰yˆØØ �M‰M‹OØ �K‰KÒ ˜2Ø �M‰Mð# ñ ˆ ð �‰Ø &à× Ñ Ó"Ø×!Ñ!Ó#Ø× Ñ Ó"Øð ñ õ ñrc óL—|jddz«|jddz«tj|j«}t t «}|D]H}||j j«dz|j jzj|«ŒJg}|j«D]a\}}d}d} d} |D];}||j«z }| |j«z } | |j«z } Œ=|j||| | |f«Œc|jdd„¬ «|D]ò} | d d krŒ |jd | d | d | d| dfz«| djdd„¬ «| dD]¤}|j«d kDsŒ|j jd«} t!| t"«st%j&| «} |j«|j«|j j(xsd| f} |jd| z«Œ¦Œôy)z¼Print the profiler data with each sample function represented as one row in a table. Important lines within that function are output as nested rows. Sorted by self-time per line.rrrró:rTcó —|dS)Nr²r@rûs rrýz#display_by_method..Rs€°!°A²$rrþrYçš™™™™™©?rrr²rcó"—|j«Sr6rú)r^s rrýz#display_by_method..as €°Q·]±]´_rérs%33.0f%% %6.2f line %d: %s N)r¬rÄrÝr/Ú defaultdictÚlistrÆrcrErpr˜rØrÖrÒrr`rHrIrÚbytestrrD)rör]rÛÚgroupedr Ú functiondataÚfnameÚ sitestatsÚ total_cum_secÚtotal_self_secÚ total_percentrErFÚ stattuples rrîrî/s2€ð‡H�HØ*Ø /ñ 0ôð‡H�HØ(Ø 4ñ 5ôô × Ñ  §¡Ó .€Eäœ$Ó€GÛˆØ�— ‘ ×"Ñ"Ó$ tÑ+¨d¯i©i×.@Ñ.@Ñ@ÑA×HÑHÈÕNðð€LØ#ŸM™MžOшˆy؈ ؈؈ ÛˆDØ ˜T×.Ñ.Ó0Ñ 0ˆMØ ˜d×.Ñ.Ó0Ñ 0ˆNØ ˜T×-Ñ-Ó/Ñ /‰Mðð ×ÑØ �M >°=À)Ð Lõ ð,ð×јd©ÐÔ7ã ˆØ �A‰;˜Ò Ø Ø �‰Ø &à˜‘ ؘ‘ ؘ‘ ؘ‘ ð ñ ô ð �‰ ×Ñ Ñ+DÐÔEؘQ”KˆDà×ÑÓ! AÓ%ØŸ™×,Ñ,¨RÓ0�Ü! &¬%Ô0Ü%×-Ñ-¨fÓ5�Fð×$Ñ$Ó&Ø×$Ñ$Ó&Ø—I‘I×$Ñ$Ò*¨Øð � ð—‘Ð:¸YÑFÕGñ ñ!rc ó–—|€ td«‚d}d|vr|jd«\}}d}i}i}|jD]¡}t|j«D]‡\} } | j |k(sŒ|r| j «|k(sŒ,|dz }| t|j«dz k7r'|j| dz} | |vr || dz|| <nd|| <| |vr || dz|| <Œƒd|| <Œ‰Œ£|j«D� � cgc] \} } | | f‘Œ }} } |jdd„¬«|D]Ž\} } |jd| |z d ztj| j ««tj| j «| jtj| jd ««fz«Œ�t j#|j«} | D�cgc]<}|j$j |k(r!|r|j$j «|k(r|‘Œ>} }d}d}d}d}| D]N}||j'«z }||j)«z }||j+«z }||j-«z }ŒP|jd tj|xsd «tj|«||||fz«|j«D�� cgc] \}} || f‘Œ }}} |jdd „¬«|D]N\}} |jd| |z d z|jtj|jd ««fz«ŒPycc} } wcc}wcc} }w)NzInvalid functionr rrTcó —|dSrËr@rûs rrýz&display_about_method..’s€¨Q¨qªTrrþs%6.2f%% %s:%s line %s: %s rÑé2sA %s:%s Total: %0.2fs (%0.2f%%) Self: %0.2fs (%0.2f%%) s___có —|dSrËr@rûs rrýz&display_about_method..¾s€¨a°ªdrs %6.2f%% line %s: %s )rôrµr/rZrlrErcr8r˜rr¬rÚfsencoderqrDr`rÄrÝrÆrØrÖrÒrÔ)rör]rEr÷rcÚrelevant_samplesÚparentsÚchildrenr®r^rÆÚparentÚcountrÛr¯rrÚtotal_self_percentÚtotal_cum_percentr Úchilds rrïrïss_€ØÐÜÐ*Ó+Ð+à€HØ ˆxÑØ%Ÿ^™^¨DÓ1ш�(àÐØ€GØ€Hà—,”,ˆÜ  §¡Ö.‰GˆAˆtØ�}‰} Ó(Ù § ¡ £°8Ó ;à  AÑ%Ð Øœ˜FŸL™LÓ)¨AÑ-Ò-Ø#Ÿ\™\¨!¨a©%Ñ0�FØ Ñ(Ø*1°&©/¸AÑ*=˜ šà*+˜ ™à˜8Ñ#Ø%-¨d¡^°aÑ%7�H˜T’Nà%&�H˜T’Nñ/ðð$5<·M±M´OÔD±O¡= 6¨5�˜Š°O€GÑDØ ‡L�L˜¡>€LÔ2Û ‰ ˆ�Ø �‰Ø .àÐ(Ñ(¨3Ñ.Ü×!Ñ! &§/¡/Ó"3Ó4Ü×!Ñ! &§/¡/Ó2Ø— ‘ Ü×!Ñ! &×"2Ñ"2°2Ó"6Ó7ð ñ õ ð!ô × Ñ  §¡Ó .€Eñó áˆAØ �6‰6�?‰?˜hÒ &Ù˜QŸV™VŸ_™_Ó.°(Ò:ò Øð ð ð€MØ€NØÐØÐۈؘ×*Ñ*Ó,Ñ,ˆ ؘ$×*Ñ*Ó,Ñ,ˆØ˜d×.Ñ.Ó0Ñ0ÐØ˜T×.Ñ.Ó0Ñ0Ñð ð ‡H�HØOä × Ñ ˜hÒ0¨&Ó 1Ü × Ñ ˜hÓ 'Ø Ø Ø Ø ð  ñ ô ð4<·>±>Ô3CÔDÑ3C¡< 5¨%�˜’Ð3C€HÑDØ ‡M�M˜$¡N€MÔ3Û ‰ ˆˆuØ �‰Ø .àÐ(Ñ(¨3Ñ.Ø— ‘ Ü×!Ñ! %§/¡/°"Ó"5Ó6ðñ õ ñ!ùó]Eùò ùó:EsÃ1L:Ç AMËMc ól‡‡‡‡‡‡ —Gˆfd„d«Š‰d«Š|jdj}|jD]=}‰j|jddd…|j|z «|j}Œ?|j dd«Š ˆˆˆˆˆ fd„Љj dkDr ‰‰dd«yy) Ncó•—eZdZd„Zˆfd„Zy)ú display_hotpath..HotNodecó.—||_d|_i|_yrŒ)rÆr%r#rÉs rr%z)display_hotpath..HotNode.__init__Ìs€ØˆDŒI؈DŒJ؈D�MrcóÞ•—|xj|z c_|d}|jj|«}|s‰|«}||j|<t|«dkDr{d}|t|«krF||j «t vr-|dz }|t|«kr||j «t vrŒ-|t|«kr|j ||d|«yy|xj|z c_yr1)r%r#rVr8rfÚskipsÚadd)r#rlrmrÆr(r^ÚHotNodes €rr/z$display_hotpath..HotNode.addÑsÕø€Ø �JŠJ˜$Ñ �Jؘ‘8ˆDØ—M‘M×%Ñ% dÓ+ˆEÙÙ › �Ø&+�— ‘ ˜dÑ#ä�5‹z˜AŠ~Ø�àœ#˜e›*’n¨¨q©×):Ñ):Ó)<ÄÑ)Eؘ‘F�Aðœ#˜e›*’n¨¨q©×):Ñ):Ó)<ÄÒ)Eà”s˜5“z’>Ø—I‘I˜e A B˜i¨Õ.ð"ð— ’ ˜tÑ#– rN)r<r=r>r%r/)r0s€rr0r+Ës ø„ò õ  $rr0rrÚshowtimeTcóÆ•—|j}|jj«D�cgc]!}|j‰‰jzk\sŒ |‘Œ#}}|�r»|dzdz }|j «dzj d«}|j }dj |«|rdndzdz‰rd |jzndzd z} | |j‰jz d z||fz} td d t| «z «} d} | d k(rd} d} | | dj| «|j� |jnddj tdd tt|j««z ««|jd«fz}| |z}t|jj«D�cgc]}|j‘Œc}«}|j|z d‰jzkDr d|zdz}n|j|z dk(rd|zdz}‰j|dz«|}t|«dkDs|r|dz }|jdd„¬«|D]}‰||t|«dkD«Œycc}wcc}w)Nr²rr éró\ó|s %4.1f%%s %5.2fss %s %srÑré7s, s %s%s %d: %s%sslinerrégš™™™™™¹?sssó Tcó—|jSr6)r%rûs rrýz1display_hotpath.._write..s€¸¿ºrrþ)rÆr#rÚr%rcÚljustrEÚmaxr8ÚrjustrDÚstrr`Úsumr¬r)ÚnodeÚdepthÚmultiple_siblingsrÆÚcÚvisiblechildrenÚindentrcrEÚ listpatternÚ liststringÚ spacing_lenÚprefixÚ codepatternÚ codestringÚ finalstringÚchildrensamplesÚnewdepthr(Ú_writer]ÚlimitÚrootr1s €€€€€rrNzdisplay_hotpath.._writeësvø€Ø�y‰yˆà—}‘}×+Ñ+Ô-ó Ù-�!°·±¸UÀTÇZÁZÑ=OÓ1PŠAÐ-ð ð ò ؘQ‘Y ‘]ˆFØŸ ™ ›¨$Ñ.×5Ñ5°bÓ9ˆHØ—}‘}ˆHð— ‘ ˜&Ó!Ù-‘5°4ñ9àññ/7�: § ¡ Ò*¸CñAðñ ð ð%Ø— ‘ ˜TŸZ™ZÑ'¨#Ñ-ØØð(ñˆJô ˜a ¤c¨*£oÑ!5Ó6ˆK؈FؘaÒØ�à*ˆKØ$ØØ— ‘ ˜kÓ*Ø#Ÿ{™{Ð6�— ’ ¸BØ— ‘ œ#˜a ¤S¬¨T¯[©[Ó)9Ó%:Ñ!:Ó;Ó<Ø—‘˜rÓ"ð (ñˆJð% zÑ1ˆKÜ!°D·M±M×4HÑ4HÔ4JÓ"KÑ4J¨q 1§7£7Ð4JÑ"KÓLˆOà�z‰z˜OÑ+¨s°T·Z±ZÑ/?Ò@Ø)¨KÑ7¸*ÑD‘ à—‘˜oÑ-°Ò2Ø)¨KÑ7¸*ÑD� Ø �H‰H�[ 5Ñ(Ô )àˆÜ ˆÓ  !Ò #Ñ'8Ø ˜‰MˆHà×Ñ TÑ/@ÐÔAÛ$ˆEÙ �5˜(¤C¨Ó$8¸1Ñ$<Õ =ñ%ùòg ùòJ#Lsª!IÁ IÆ IF)r/rmr/rlrVr%) rör]rOr÷Úlasttimer®r0rNrPr1s `` @@@@rrðrðÊs¡ý€÷$ó$ñ2 �4‹=€DØ�|‰|˜A‰×#Ñ#€HØ—,”,ˆØ �‰�—‘™d ˜dÑ# V§[¡[°8Ñ%;Ô<Ø—;‘;‰ðð�z‰z˜* dÓ+€H÷6>ð6>ðp ‡z�z�A‚~Ùˆt�Q˜Õðrc óÒ—|€tjddz}tjj |«s&|j d|z«|j d«yi}|j D][}|jD�cgc]}|j‘Œ}}|j«dj|«} | |vr || dz|| <ŒWd|| <Œ]tj«\} } t| d«5} |j«D]\} } | j d| | fz«Œ ddd«|€d }tjd | |fz«|j d |z«ycc}w#1swYŒAxYw) NsHOMEs/flamegraph.plserror: missing %s s8get it here: https://github.com/brendangregg/FlameGraph ó;rr©s%s %d s~/flamegraph.svgsperl ~/flamegraph.pl %s > %ssWritten to %s )rr¤rrCÚexistsr¬r/rlrErÿr£rÚmkstemprr˜Úsystem)rör]Ú scriptpathÚ outputfiler÷r¸r®r¯r°r_ÚfdrCr­r%s rrñrñ'sI€ØÐÜ×%Ñ% gÑ.Ð1BÑBˆ Ü �7‰7�>‰>˜*Ô %Ø �‰Ð'¨*Ñ4Ô5Ø �‰ÐMÔNØà €EØ—,”,ˆØ%+§\¢\Ó2¡\ �—“ \ˆÐ2Ø � ‰ ŒØ�y‰y˜ÓˆØ �5‰=Ø ™+¨™/ˆE�$ŠKàˆE�$ŠKðô×ÑÓ!�H€Bˆä ˆd�EÔ ˜dØ Ÿ;™;ž=‰KˆD�%Ø �J‰J�z T¨5 MÑ1Õ 2ñ)÷ ðÐØ(ˆ ä‡I�IÐ-°°zÐ0BÑBÔC؇H�HÐ  *Ñ ,Õ-ùò%3÷ Ð úsÁ=EÃ-/EÅE&có6—|tvr t|Stjjtj d«d}|gt jzD]6}|tj z}|j|«sŒ(|t|«d}n|t|<|S)z‡Attempt to make the path to a Python module easier to read by removing whatever part of the Python search path it was found on.r²rN) Ú _pathcacherÚ__file__ÚrsplitrÚsepr…rCÚ startswithr8)rCÚhgpathÚprHs rÚ simplifypathrbIsŠ€ð  ŒzÑܘ$ÑÐÜ × Ñ × %Ñ %¤b§f¡f¨aÓ 0°Ñ 3€F؈XœŸ™Ô ˆØ”R—V‘V‘ˆØ �?‰?˜6Õ "Øœ˜F› ˜ Ð&ˆDÙ ð !ð „JˆtÑØ €Krc óÈ—g}|jD]Š}g}|jD]Z}|jtj|j «|j tj|j«f«Œ\|j|j|f«ŒŒtj|«}t|t«s|jd«}|j|«y)Núutf-8)r/rlrprÚsysstrrCrDrErmÚjsonÚdumpsrHrIÚencoder¬)rör]r/r®rlrws rròròZsª€Ø€Gà—,”,ˆØˆà—\”\ˆEØ �L‰Lä—O‘O E§J¡JÓ/Ø—L‘LÜ—O‘O E§N¡NÓ3ðõ ð"ð �‰˜Ÿ ™  UÐ+Õ,ðô �:‰:�gÓ €DÜ �dœEÔ "Ø�{‰{˜7Ó#ˆà‡H�HˆT…Nrc ó(‡‡‡ ‡‡‡‡‡‡‡‡—gŠtj«Štj«ŠiŠgŠˆˆˆfd„ŠdŠt«Š|jdj|jdjz }|‰zŠt |‰z‰«Šˆˆˆˆˆˆˆ ˆˆf d„}|jD�]$Š t d„‰ jD««}tj|«}‰|k(rŒ;‰r=|r;‰d|dk(r0‰j«|j«‰r|r ‰d|dk(rŒ0‰r |«‰rŒ t|«D]|}‰j‰ jt‰«f«‰j|«|\} } ‰t ‰««} ‰jtd| | ‰ jdz| d¬ ««Œ~tj|«Š�Œ'‰r |«‰rŒ t‰«D� � cgc] \} } | ‰vsŒ | ‘Œ}} } tjd „t‰«D««}t!j"t||¬ «d ¬ «}t%|t&«s|j)d«}|j+|«|j+d«ycc} } w)NcóÔ•—|sy|‰vr‰|S‰|dd«}t‰«}|‰|<‰jt|ddd|dz¬««|�‰dj|¬«|S)Nrrz%s %s)Úcategoryr“r)r$)r8rpÚdictÚupdate)rlr$ÚmyidÚid2stackÚstack2idÚstackids €€€rrqz write_to_chrome..stackid}s�ø€ÙØ Ø �HÑ Ø˜E‘?Ð "Ù˜˜q˜r˜Ó#ˆÜ�8‹}ˆØˆ�‰Ø�‰œ e¨A¡h¨q¡k¸À%ÈÁ(Ñ8JÔKÔLØ Ð Ø �R‰L× Ñ  vÐ Ô .؈ rr)rrc óJ• —‰t‰ ««}‰ j«\}}‰ j«\}}‰ j|z }‰ |cxkr‰ kr@nn=t|‰z‰ j«}‰j t d||||dzd¬««y‰j |«y)NÚE瀄.Ar)Úphr“ÚcatÚsfÚtsÚpid)ÚtupleÚpopleftrmr;rprlr/)ÚoldsidÚoldcatÚoldfuncÚoldtimeÚoldidxÚdurationÚ sampletimeÚ blacklistÚclampÚlastseenÚ laststackÚ maxthresholdÚ minthresholdr®r/rqs €€€€€€€€€rÚpoplastz write_to_chrome..poplast sžø€Ùœ˜yÓ)Ó*ˆØ#×+Ñ+Ó-‰ˆ�Ø"×*Ñ*Ó,‰ˆ�Ø—;‘; Ñ(ˆØ ˜8Ô 3 |Õ 3ä˜W u™_¨f¯k©kÓ:ˆJØ �N‰NÜØØ ØØØ! CÑ'Øô õ ð �M‰M˜&Õ !rc3óÈK—|]Z}dttj|j««|jfztj|j «f–—Œ\y­w)z%s:%dN)rbrrerCrDrE)Ú.0rws rÚ z"write_to_chrome..ºsUèø€ð ñ *�Eð Ü#¤H§O¡O°E·J±JÓ$?Ó@À%Ç,Á,ÐOñPä—O‘O E§N¡NÓ3ôñ *ùs‚A A"ÚBrt)rur“rvrxrwryc3ó<K—|]\}}t|«|f–—Œy­wr6)r=)r‹rTrUs rrŒz"write_to_chrome..às!èø€ð%Ù"5™˜˜AŒˆQ‹�Œ Ñ"5ùs‚)Ú traceEventsÚ stackFramesr)rDrdr8)Ú collectionsÚdequer¢r/rmr;rzrlÚpopÚreversedÚ appendleftr8rprlrZÚ OrderedDictrfrgrHrIrhr¬)rör]rˆr‡Ú totaltimer‰rlÚqstackrŸrCr“ÚsidÚidxr®ÚeventsÚframesrƒr„ror…r†r/rprqs `` ` @@@@@@@@rrórórshÿú€Ø€GÜ×!Ñ!Ó#€IÜ× Ñ Ó"€Hð €HØ€Hö ð& €Eô“€IØ— ‘ ˜RÑ ×%Ñ%¨¯ © °Q©×(<Ñ(<Ñ<€Iؘ|Ñ+€LÜ�y <Ñ/°Ó7€L÷"ô"ð0—,•,ˆÜñ ð $Ÿ\š\ó  ó  ˆô×"Ñ" 5Ó)ˆØ ˜Ò Ø Ù™F y°¡}¸¸r¹ Ò'BØ �M‰MŒOØ �J‰JŒLñ™F y°¡}¸¸r¹ Ó'BñÙ ŒIòä˜&Ö!ˆAØ × Ñ  §¡¬c°'«lÐ ;Ô <Ø × Ñ  Ô #؉JˆD�$Ùœ%  Ó*Ó+ˆCØ �N‰NÜØØØØ—{‘{ SÑ(ØØô õ ð "ô ×%Ñ% eÓ,Š ðEñF ÙŒ ò ô#,¨GÔ"4ôÙ"4‘;�3˜¸À9Ò8LŠÐ"4ð ñô× $Ñ $ñ%Ü"+¨HÔ"5ó%ó€Fô �:‰:”d v¸6ÔBÈ1Ô M€DÜ �dœEÔ "Ø�{‰{˜7Ó#ˆØ‡H�HˆT„N؇H�HˆU…Oùós Ç/ JÇ<Jcó—td«y)NaÏ The statprof command line allows you to inspect the last profile's results in the following forms: usage: hotpath [-l --limit percent] Shows a graph of calls with the percent of time each takes. Red calls take over 10%% of the total time themselves. lines Shows the actual sampled lines. functions Shows the samples grouped by function. function [filename:]functionname Shows the callers and callees of a particular function. flame [-s --script-path] [-o --output-file path] Writes out a flamegraph to output-file (defaults to ~/flamegraph.svg) Requires that ~/flamegraph.pl exist. (Specify alternate script path with --script-path.))Úprintr@rrÚ printusagerŸês€Ü ð ?õrcó”—|€tj}t|«dk(r t«yi}d}d|d<|ddk(rtj |d<n…|ddk(rtj |d<ni|ddk(rtj|d<nM|dd k(rtj|d<|d|d<d }n'|dd k(rtj|d<n t«y tjtj|dd gd ¢«\}}d|d<d}|D]L\}}|dvrt!|«|d<Œ|dvr|}Œ |dvr||d<Œ*|dvr||d<Œ4|dvr t«yJd|z«‚|s td«yt#|¬«t%ditj&|«¤Žy#tj$r}t|«t«Yd}~yd}~wwxYw)Nrrr²sfunctionÚhotpathsformatr¸Ú functionsrErYÚflames hl:f:o:p:)shelpslimit=sfile=s output-file=s script-path=rslimit)z-lz--limit)z-fz--file)z-oz --output-files outputfile)z-pz --script-paths scriptpath)z-hÚhelpzunhandled option %szmust specify --file to load)rCr@)r…Úargvr8rŸrßrårârãrärærÚgetoptbÚsysargvÚgetoptÚerrorržr¶r¾rÁÚ strkwargs) r¥Ú displayargsÚoptstartÚoptsr’ÚmsgrCÚor¹s rÚmainr°sî€Ø €|Ü�x‰xˆä ˆ4ƒy�A‚~ÜŒ Øà€Kà€HØ#€K� ÑØ ˆA�w�)ÒÜ!/×!7Ñ!7ˆ �IÒØ ˆa‰�GÒ Ü!/×!6Ñ!6ˆ �IÒØ ˆa‰�KÒ Ü!/×!8Ñ!8ˆ �IÒØ ˆa‰�JÒ Ü!/×!;Ñ!;ˆ �IÑØ#'¨¡7ˆ �KÑ Ø‰Ø ˆa‰�GÒ Ü!/×!:Ñ!:ˆ �IÒäŒ Øð Ü×%Ñ%Ü × Ñ ˜X˜YÐ 'Ø Ú Ló ‰ ˆˆdð!€K�ÑØ €DÛ‰ˆˆ5Ø Ð!Ñ !Ü$)¨%£LˆK˜Ò !Ø Ð"Ñ "؉DØ Ð)Ñ )Ø).ˆK˜ Ò &Ø Ð)Ñ )Ø).ˆK˜ Ò &Ø �.Ñ Ü ŒLÙà 3Ð/°!Ñ3Ó 3�5ðñ Ü Ð+Ô,Øä �4Õä Ñ.Œh× Ñ  Ó-Ò.à øô= �<‰<òÜ ˆcŒ ÜŒ ÜûðúsÃ-FÆGÆ(GÇGÚ__main__)r�rr6)NrYN)r)NN)g{®Gázt?g+‡ÙÎ÷ï?)4Ú__doc__r‘Ú contextlibr¨r–rfrr{r…r™rmrrÚrrÚcontextmanagerÚ__all__r.rrrzrBrjr�ÚEventrƒrŠr�r”rœr§r¥r¾r rÂrÄrßrÁrírîrïrðrñr[rbròrórŸr°r<Úexitr@rrÚr¹sZðñ0NóbÛÛ ÛÛ Û Û Û ÛÛ å÷ð ×%Ñ%€ Ø×*Ñ*€â ?€ò €ò*+÷*ñ*ñZ ‹€÷7:ñ7:÷t#ñ#ò8 $ðˆY�_‰_Ó € ò ò(#ð€ ó!ò4ò* @ò2ó&ðñóð÷(+ñ(+÷Vñó!PòH òBAHóHT ónZóz.ð>€ òò"ó0uòpó.A ðH ˆzÒØ €C‡H�H‰T‹VÕðr