Ë
    ÄÓ^jÿ-  ã                   ó>  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ  ej&                  d«      Z ej*                  «       Z ej.                  d«      Zej3                  e«       ej5                  e«       ej7                  ej8                  «       d	e_         ed
«      Z ed«      Z G d„ de «      Z!dde"dz  de#fd„Z$dde"dz  de"fd„Z%dee#   de#fd„Z& G d„ d«      Z'	 dde'dz  dedeeeef   geeedz  f   f   fd„Z(y)é    N)ÚCallableÚSequence)ÚLock)Údefault_timer)ÚAnyÚTypeVar)Ú	ParamSpecÚstrobelight_function_profilerzB%(name)s, line %(lineno)d, %(asctime)s, %(levelname)s: %(message)sFÚ_PÚ_Rc                   ó   — e Zd ZdZy)ÚStrobelightCLIProfilerErrorzC
    Raised when an error happens during strobelight profiling
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_strobelight/cli_function_profiler.pyr   r       s   „ òr   r   ÚpidÚreturnc                 ó~   — d}| xs t        j                  «       } t        j                  |j                  | «      «      S )zFReturns the link to the process's namespace, example: pid:[4026531836]z/proc/{}/ns/pid)ÚosÚgetpidÚreadlinkÚformat)r   ÚPID_NAMESPACE_PATHs     r   Ú_pid_namespace_linkr   &   s3   € à*ÐØ
Ò
”—‘“€CÜ�;‰;Ð)×0Ñ0°Ó5Ó6Ð6r   c                 óˆ   — | xs t        j                  «       } t        | «      }t        ||j	                  d«      dz   d «      S )z"Returns the process's namespace idú[é   éÿÿÿÿ)r   r   r   ÚintÚfind)r   Úlinks     r   Ú_pid_namespacer&   -   s;   € à
Ò
”—‘“€CÜ˜sÓ#€DÜˆt�D—I‘I˜c“N QÑ&¨Ð,Ó-Ð-r   Úcommandc                 ó$   — dj                  | «      S )Nú )Újoin)r'   s    r   Ú_command_to_stringr+   4   s   € Ø�8‰8�GÓÐr   c                   ó  — e Zd ZdZ e«       Zddddddddddd	œ
d
ededede	dedede
e	   dz  de
e	   dz  dedefd„Zd"d„Zd#deddfd„Zd"d„Zd"d„Zdeddfd„Zdefd„Zdeeef   dej*                  d ej,                  dedz  fd!„Zy)$ÚStrobelightCLIFunctionProfileraž  
    Note: this is a Meta only tool.

    StrobelightCLIFunctionProfiler can be used to profile a python function and
    generate a strobelight link with the results. It works on meta servers but
    does not require an fbcode target.
    When stop_at_error is false(default), error during profiling does not prevent
    the work function from running.

    Check function_profiler_example.py for an example.
    FiX  g    ÐcAzpytorch-strobelight-ondemandé<   Né   )
Ústop_at_errorÚmax_profile_duration_secÚsample_eachÚrun_user_nameÚtimeout_wait_for_running_secÚtimeout_wait_for_finished_secÚrecorded_env_variablesÚsample_tagsÚstack_max_lenÚasync_stack_max_lenr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   c       
         ó‚   — || _         || _        || _        || _        || _        || _        d | _        d | _        || _        y ©N)	r0   r1   r2   r3   r4   r5   Úcurrent_run_idÚprofile_resultr7   )Úselfr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   s              r   Ú__init__z'StrobelightCLIFunctionProfiler.__init__H   sN   € ð +ˆÔØ(@ˆÔ%Ø&ˆÔØ*ˆÔØ,HˆÔ)Ø-JˆÔ*ð +/ˆÔØ04ˆÔØ&ˆÕr   r   c                 óà  — t        j                  «       }t        |«      }ddddddddt        | j                  «      › d	t        | j
                  d
z  «      › d|› d|› �g}| j                  r;|j                  d«       |j                  dj                  | j                  «      «       t        j                  dt        |«      «       t        j                  |d¬«      }|j                  j                  d«      }t        j                  d|«       |j                   dk7  rt#        d|› �«      ‚t%        j&                  d|«      x}r t        |j)                  d«      «      | _        y t#        d|› �«      ‚)NÚstrobeclientÚrunz
--profilerÚpyperfz--eventÚcyclesz--asyncz--sample-intervalz--duration-msiè  z--pidú:z--sample-tagsú,úrunning command: %sT©Úcapture_outputúutf-8úoutput:
{%s}r   z:failed to start strobelight profiling, error in run_async:zINFO Run Id: (-?\d+)r!   z9failed to start strobelight profiling, unexpected result )r   r   r&   r#   r2   r1   r7   Úappendr*   ÚloggerÚdebugr+   Ú
subprocessrB   ÚstderrÚdecodeÚ
returncoder   ÚreÚsearchÚgroupr<   )r>   Ú	processIdÚ	namespacer'   ÚresultÚoutputÚmatchs          r   Ú
_run_asyncz)StrobelightCLIFunctionProfiler._run_asyncb   sW  € Ü—I‘I“Kˆ	Ü" 9Ó-ˆ	àØØØØØØØÜ�4×#Ñ#Ó$Ð%ØÜ�4×0Ñ0°4Ñ7Ó8Ð9ØØˆk˜˜9˜+Ð&ð
ˆð  ×ÒØ�N‰N˜?Ô+Ø�N‰N˜3Ÿ8™8 D×$4Ñ$4Ó5Ô6ä�‰Ð*Ô,>¸wÓ,GÔHÜ—‘ ¸Ô=ˆØ—‘×%Ñ% gÓ.ˆÜ�‰�_ fÔ-à×Ñ Ò!Ü-ØLÈVÈHÐUóð ô —I‘IÐ5°vÓ>Ð>ˆ5Ð>Ü"% e§k¡k°!£nÓ"5ˆDÔØä)ØGÈÀxÐPó
ð 	
r   Úcounterc                 óD  — |dkD  rt        d«      ‚ddd| j                  › g}t        j                  dt	        |«      «       t        j                  |d¬«      }|j                  j                  d	«      }t        j                  d
|«       |j                  dk7  rt        d|› �«      ‚t        j                  d|«      x}rU|j                  d«      }|dk(  ry |dk(  r*t        j                  d«       | j                  |dz   «       y t        d|› d�«      ‚t        d|› d�«      ‚)Né   z*wait_for_running called more than 20 timesrA   ÚgetRunStatusú--run-idrG   TrH   rJ   rK   r   zAfailed to start strobelight profiling, error in wait_for_running:zProfile run status: (.*)r!   ÚRUNNINGÚ	PREPARINGé
   zunexpected z phaseúunexpected output
: r)   )r   r<   rM   rN   r+   rO   rB   rP   rQ   rR   rS   rT   rU   ÚtimeÚsleepÚ_wait_for_running)r>   r\   r'   rX   rY   rZ   Úcurrent_statuss          r   rg   z0StrobelightCLIFunctionProfiler._wait_for_running‹   s#  € Ø�RŠ<Ü-Ø<óð ð " >°:À$×BUÑBUÐAVÐXˆÜ�‰Ð*Ô,>¸wÓ,GÔHÜ—‘ ¸Ô=ˆØ—‘×%Ñ% gÓ.ˆÜ�‰�_ fÔ-à×Ñ Ò!Ü-ØSÐTZÐS[Ð\óð ô —I‘IÐ8¸&ÓAÐAˆ5ÐAØ"Ÿ[™[¨›^ˆNØ Ò*ØØ ;Ò.Ü—
‘
˜2”Ø×&Ñ& w°¡{Ô3Øä1°KÀÐ?OÈvÐ2VÓWÐWä)Ð,AÀ&ÀÈÐ*KÓLÐLr   c                 óî  — dddt        | j                  «      g}t        j                  dt	        |«      «       t        j                  |d¬«      }|j                  j                  d«      }t        j                  d|«       |j                  d	k7  rt        d
|› �«      ‚t        j                  d|«      x}r2|j                  d«      }|j                  d«      ry t        d|› d�«      ‚t        d|› d�«      ‚)NrA   ÚstopRunr`   rG   TrH   rJ   rK   r   z<failed to stop strobelight profiling, return code is not 0 :úINFO ::1:(.*)r!   zSuccess!z*failed to stop strobelight profiling, got z resultrd   r)   )Ústrr<   rM   rN   r+   rO   rB   rP   rQ   rR   r   rS   rT   rU   Ú__contains__)r>   r'   rX   rY   rZ   rh   s         r   Ú	_stop_runz(StrobelightCLIFunctionProfiler._stop_run©   sï   € Ø! 9¨j¼#¸d×>QÑ>QÓ:RÐSˆÜ�‰Ð*Ô,>¸wÓ,GÔHÜ—‘ ¸Ô=ˆØ—‘×%Ñ% gÓ.ˆÜ�‰�_ fÔ-à×Ñ Ò!Ü-ØNÈvÈhÐWóð ô —I‘I˜o¨vÓ6Ð6ˆ5Ð6Ø"Ÿ[™[¨›^ˆNØ×*Ñ*¨:Ô6Øä1Ø@ÀÐ@PÐPWÐXóð ô *Ð,AÀ&ÀÈÐ*KÓLÐLr   c                 óà  — dddt        | j                  «      g}t        j                  dt	        |«      «       t        j                  |d¬«      }|j                  j                  d«      }t        j                  d|«       |j                  d	k7  rt        d
|› �«      ‚t        j                  d|«      x}rg|j                  d«      }|j                  d«      r&t        j                   d«       | j#                  «        y |j                  d«      st        d|› �«      ‚g | _        t        j&                  d|«      D ]2  }| xj$                  |d	   z  c_        t        j)                  |d	   «       Œ4 y )NrA   r_   r`   rG   TrH   rJ   rK   r   z<failed to extract profiling results, return code is not 0 : rk   r!   zProfile run status: PROCESSINGrc   z!Profile run finished with SUCCESSz9failed to extract profiling results, unexpected response zF(Total samples(.*)|GraphProfiler(.*)|Icicle view \(python stack\)(.*)))rl   r<   rM   rN   r+   rO   rB   rP   rQ   rR   r   rS   rT   rU   rm   re   rf   Ú_get_resultsr=   ÚfindallÚinfo)r>   r'   rX   rY   rZ   rh   Úitems          r   rp   z+StrobelightCLIFunctionProfiler._get_resultsÀ   sK  € Ø! >°:¼sÀ4×CVÑCVÓ?WÐXˆÜ�‰Ð*Ô,>¸wÓ,GÔHÜ—‘ ¸Ô=ˆØ—‘×%Ñ% gÓ.ˆÜ�‰�_ fÔ-à×Ñ Ò!Ü-ØNÈvÈhÐWóð ô —I‘I˜o¨vÓ6Ð6ˆ5Ð6Ø"Ÿ[™[¨›^ˆNØ×*Ñ*Ð+KÔLÜ—
‘
˜2”Ø×!Ñ!Ô#ØØ#×0Ñ0Ð1TÔUÜ1ØOÐPVÈxÐXóð ð !ˆÔÜ—J‘JØUØó
ò 	!ˆDð ×Ò 4¨¡7Ñ*ÕÜ�K‰K˜˜Q™Õ ñ	!r   Úcollect_resultsc                 óì   — 	 | j                  «        t        j                  d«       t        j                  d«       |sy | j	                  «        y # t
        $ r t        j                  dd¬«       Y y w xY w)Nzstrobelight profiling stoppedzcollection stoppedzerror during stop_strobelightT©Úexc_info)rn   rM   rr   rN   rp   Ú	ExceptionÚwarning)r>   rt   s     r   Ú_stop_strobelight_no_throwz9StrobelightCLIFunctionProfiler._stop_strobelight_no_throwß   s`   € ð	Kà�N‰NÔÜ�K‰KÐ7Ô8ä�L‰LÐ-Ô.á"Øà×ÑÕøÜò 	KÜ�N‰NÐ:ÀTˆNÖJð	Kús   ‚<A ¿A Á A3Á2A3c                 ó,  — d}	 | j                  «        d}t        j                  d| j                  «       | j	                  «        t        j                  d«       y# t
        $ r. t        j                  dd¬«       |r| j                  d¬«       Y yw xY w)NFTzstrobelight run id is: %szstrobelight profiling runningzerror during start_strobelight:rv   ©rt   )r[   rM   rr   r<   rg   rx   ry   rz   )r>   Ústrobelight_starteds     r   Ú_start_strobelightz1StrobelightCLIFunctionProfiler._start_strobelightò   s…   € Ø#Ðð	Ø�O‰OÔØ"&ÐÜ�K‰KÐ3°T×5HÑ5HÔIØ×"Ñ"Ô$Ü�K‰KÐ7Ô8Øøäò 	Ü�N‰NÐ<ÀtˆNÔLÙ"Ø×/Ñ/ÀÐ/ÔFÙð		ús   „AA Á4BÂBÚwork_functionÚargsÚkwargsc                 ó`  — d | _         d | _        t        j                  j	                  d«      x}�r$|s4| j
                  rt        d«      ‚t        j                  d«        ||i |¤ŽS | j                  «       }|s]| j
                  r)t        j                  j                  «        t        d«      ‚ ||i |¤Ž}t        j                  j                  «        |S 	 t        j                  d«       t        «       } ||i |¤Ž}t        «       }||z
  }	t        j                  d|	«       | j                  d¬«       t        j                  j                  «        |S y # t        $ rN}
t        j                  dd¬	«       | j                  d¬«       t        j                  j                  «        |
‚d }
~
ww xY w)
NFzconcurrent runs not supportedz%failed to start strobelight profilingzcollection startedzwork function took %s secondsTr|   zwork function throw exceptionrv   )r<   r=   r-   Ú_lockÚacquirer0   r   rM   ry   r~   ÚreleaserN   Útimerrr   rz   rx   )r>   r   r€   r�   ÚlockedÚstartedrX   ÚstartÚendÚ
total_timeÚerrors              r   Úprofilez&StrobelightCLIFunctionProfiler.profile  sˆ  € ð #ˆÔØ"ˆÔä3×9Ñ9×AÑAÀ%ÓHÐHˆ6ÑHÙØ×%Ò%Ü5Ð6UÓVÐVä—‘Ð>Ô?Ù$ dÐ5¨fÑ5Ð5à×-Ñ-Ó/ˆGÙØ×%Ò%Ü2×8Ñ8×@Ñ@ÔBÜ5Ø?óð ñ '¨Ð7°Ñ7�Ü.×4Ñ4×<Ñ<Ô>Ø�ðÜ—‘Ð1Ô2Ü›�Ù&¨Ð7°Ñ7�Ü“g�Ø  5™[�
Ü—‘Ð;¸ZÔHØ×/Ñ/ÀÐ/ÔEÜ.×4Ñ4×<Ñ<Ô>Ø�ð øô ò Ü—‘Ð>È�ÔNØ×/Ñ/ÀÐ/ÔFÜ.×4Ñ4×<Ñ<Ô>Ø�ûð	ús   ÃA=E Å	F-ÅA	F(Æ(F-)r   N)r   )r   r   r   r   r   rƒ   Úboolr#   Úfloatrl   Úlistr?   r[   rg   rn   rp   rz   r~   r   r   r   r€   r�   r�   r   r   r   r-   r-   8   s2  „ ñ
ñ ‹F€Eð
 $Ø(/Ø Ø;Ø,.Ø-/Ø37Ø(,Ø Ø#&ò'ð ð'ð #&ð	'ð
 ð'ð ð'ð '*ð'ð (+ð'ð !% S¡	¨DÑ 0ð'ð ˜#‘Y Ñ%ð'ð ð'ð !ó'ó4'
ñRM¨ð M°Tó Mó<Mó.!ð>KàðKð 
óKð& Dó ð (Ø% b¨" fÑ-ð(Ø68·g±gð(ØIKÏÉð(à	ˆd‰ô(r   r-   Úprofilerr�   c                 ó€   ‡ — ‰ st        di |¤ŽŠ dt        t        t        f   dt        t        t        d z  f   fˆ fd„}|S )Nr   r   c                 óš   •‡ — t        j                  ‰ «      dt        j                  dt        j                  dt
        d z  fˆˆ fd„«       }|S )Nr€   r�   r   c                  ó0   •—  ‰j                   ‰g| ¢­i |¤ŽS r;   )r�   )r€   r�   r‘   r   s     €€r   Úwrapper_functionz@strobelight.<locals>.strobelight_inner.<locals>.wrapper_function;  s"   ø€ ð $�8×#Ñ# MÐC°DÒC¸FÑCÐCr   )Ú	functoolsÚwrapsr   r€   r�   r   )r   r•   r‘   s   ` €r   Ústrobelight_innerz&strobelight.<locals>.strobelight_inner8  sN   ù€ ô 
�‰˜Ó	'ð	D¤B§G¡Gð 	D´r·y±yð 	DÄRÈ$ÁYõ 	Dó 
(ð	Dð  Ðr   r   )r-   r   r   r   )r‘   r�   r˜   s   `  r   Ústrobelightr™   2  sH   ø€ ñ Ü1Ñ;°FÑ;ˆð Ü¤¤B Ñ'ð ä	”"”b˜4‘i�-Ñ	 õ ð Ðr   r;   ))r–   Úloggingr   rS   rO   re   Úcollections.abcr   r   Ú	threadingr   Útimeitr   r†   Útypingr   r   Útyping_extensionsr	   Ú	getLoggerrM   ÚStreamHandlerÚconsole_handlerÚ	FormatterÚ	formatterÚsetFormatterÚ
addHandlerÚsetLevelÚINFOÚ	propagater   r   rx   r   r#   rl   r   r&   r+   r-   r™   r   r   r   ú<module>rª      sR  ðó Û Û 	Û 	Û Û ß .Ý Ý )ß Ý 'ð 
ˆ×	Ñ	Ð:Ó	;€à'�'×'Ñ'Ó)€ØˆG×ÑØHó€	ð × Ñ ˜YÔ 'à × Ñ �/Ô "Ø ‡��—‘Ô Ø€Ô áˆtƒ_€ÙˆTƒ]€ô )ô ñ7˜S 4™Zð 7°3ó 7ñ.˜˜d™
ð .¨có .ð ¨¡ð °#ó ÷rñ rðv 7;ñØ,¨tÑ3ðØFIðàˆx˜˜B˜ÑÐ  (¨2¨r°D©y¨=Ñ"9Ð9Ñ:ôr   