+
    –°³j"  ã                  óÐ   € R t ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHt ^ RI	t	^RI
Ht ]P                   ! R R4      4       t ! R R	4      tR
 R ltR R lt ! R R4      tR R ltR# )aN  
Dynamo profiling implementation.

This module provides profiling functionality for Dynamo, including:
- ProfileMetrics: Class for collecting and aggregating performance metrics like
  execution time, operator counts, and fusion statistics
- ProfileResult: Class for analyzing and reporting profiling results
- Utilities for tracking missed/uncaptured operations
- Functions for instrumenting FX graphs with profiling capabilities

The profiler helps measure and optimize the performance of Dynamo-compiled code
by tracking both captured and total operations, timing, and graph statistics.
)ÚannotationsN)ÚAny)ÚSelf)Ú
print_oncec                  óŒ   € ] tR t^t$ RtR]R&   ^ tR]R&   ^ tR]R&   ^ tR]R&   R R	 lt	R
 R lt
R R ltR R ltR R ltRtR# )ÚProfileMetricsg        ÚfloatÚmicrosecondsÚintÚ	operatorsÚfusionsÚgraphsc               ó    € V ^8„  d   QhRRRR/# ©é   Úotherr   Úreturn© )Úformats   "ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_dynamo/profiler.pyÚ__annotate__ÚProfileMetrics.__annotate__"   ó   € ÷ ñ ˜dð  tñ ó    c                	óØ   € V ;P                   VP                   ,          un         V ;P                  VP                  ,          un        V ;P                  VP                  ,          un        V # ©N©r	   r   r   ©Úselfr   s   &&r   Ú__iadd__ÚProfileMetrics.__iadd__"   sB   € Ø×Ò˜U×/Ñ/Õ/ÕØ�Š˜%Ÿ/™/Õ)�Ø�Š˜Ÿ™Õ%�Øˆr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   r   )r   s   "r   r   r   (   s   € ÷ 
ñ 
˜^ð 
°ñ 
r   c                	ó  € \        V\        4      '       g   \        R \        V4       24      h\        V P                  VP                  ,           V P
                  VP
                  ,           V P                  VP                  ,           4      # )zExpected ProfileMetrics, got )Ú
isinstancer   ÚAssertionErrorÚtyper	   r   r   r   s   &&r   Ú__add__ÚProfileMetrics.__add__(   sg   € Ü˜%¤×0Ò0Ü Ð#@ÄÀeÃÀÐ!NÓOÐOÜØ×Ñ × 2Ñ 2Õ2Ø�N‰N˜UŸ_™_Õ,Ø�L‰L˜5Ÿ=™=Õ(ó
ð 	
r   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   r   r   )r   s   "r   r   r   1   s   € ÷ 	
ñ 	
 ð 	
¨ñ 	
r   c           	     	ó>  € \        V\        4      '       d   \        WV4      p\        V P                  \	        ^VP                  4      ,          V P
                  \	        ^VP
                  4      ,          V P                  \	        ^VP                  4      ,          4      # )é   )r#   r
   r   r	   Úmaxr   r   r   s   &&r   Ú__truediv__ÚProfileMetrics.__truediv__1   sq   € Ü�eœS×!Ò!Ü" 5°Ó7ˆEÜØ×Ñ¤ A u×'9Ñ'9Ó :Õ:à�N‰NœS  E§O¡OÓ4Õ4à�L‰Lœ3˜q %§-¡-Ó0Õ0ó
ð 	
r   c               ó   € V ^8„  d   QhRR/# ©r   r   Ústrr   )r   s   "r   r   r   <   s   € ÷ Jñ J˜ñ Jr   c                	ó>   € V P                   R  RV P                  R  R2# )z4.0%z ops z time©r   r	   ©r   s   &r   Ú__str__ÚProfileMetrics.__str__<   s%   € Ø—.‘. Ð& e¨D×,=Ñ,=¸dÐ+CÀ5ÐIÐIr   c               ó   € V ^8„  d   QhRR/# )r   r   zlist[float]r   )r   s   "r   r   r   ?   s   € ÷ 3ñ 3�{ñ 3r   c                	ó2   € V P                   V P                  .# r   r2   r3   s   &r   ÚtocsvÚProfileMetrics.tocsv?   s   € Ø—‘ × 1Ñ 1Ð2Ð2r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r	   Ú__annotations__r   r   r   r   r&   r,   r4   r8   Ú__static_attributes__r   r   r   r   r      sH   ‡ à€L�%ÓØ€IˆsÓØ€GˆSÓØ€FˆCƒOõõ
õ	
õJ÷3ñ 3r   r   c                  óR   € ] tR t^CtR R ltR R ltR R ltR R ltR	 R
 ltRt	R# )ÚProfileResultc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úcapturedr   ÚtotalÚunique_graphsr
   r   ÚNoner   )r   s   "r   r   ÚProfileResult.__annotate__D   s,   € ÷ 0ñ 0Ø&ð0Ø/=ð0ØNQð0à	ñ0r   c                	óv   € T;'       g    \        4       V n        T;'       g    \        4       V n        W0n        R # r   )r   rC   rD   rE   )r   rC   rD   rE   s   &&&&r   Ú__init__ÚProfileResult.__init__D   s.   € ð )1×(DÐ(D´NÓ4DˆŒØ%*×%>Ð%>¬nÓ.>ˆŒ
Ø"/Ör   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   rG   K   r   r   c                	óØ   € V ;P                   VP                   ,          un         V ;P                  VP                  ,          un        V ;P                  VP                  ,          un        V # r   ©rC   rD   rE   r   s   &&r   r   ÚProfileResult.__iadd__K   sB   € Ø�Š˜Ÿ™Õ'�Ø�
Š
�e—k‘kÕ!�
Ø×Ò˜e×1Ñ1Õ1ÕØˆr   c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   rG   Q   s   € ÷ *ñ *˜ñ *r   c                	ó<   € V P                   V P                  ,          # r   )rC   rD   r3   s   &r   ÚpercentÚProfileResult.percentQ   s   € Ø�}‰}˜tŸz™zÕ)Ð)r   c               ó   € V ^8„  d   QhRR/# r/   r   )r   s   "r   r   rG   T   s   € ÷ 
ñ 
˜ñ 
r   c                	óî   € V P                   R  RV P                  P                  R  RV P                  P                  R RV P                  P                  R R2\        V P                  4       4      ,           # )Ú2z graphs z graph calls Ú4Ú/z = )rE   rC   r   r   rD   r0   rQ   r3   s   &r   r4   ÚProfileResult.__str__T   sj   € à×!Ñ! !Ð$ H¨T¯]©]×-AÑ-AÀ!Ð,DÀMØ�}‰}×&Ñ& qÐ)¨¨4¯:©:×+?Ñ+?ÀÐ*BÀ#ðGä�$—,‘,“.Ó!õ"ð	
r   c               ó   € V ^8„  d   QhRR/# )r   r   ú	list[Any]r   )r   s   "r   r   rG   [   s   € ÷ #ñ #�yñ #r   c                	óà   € V P                   V P                  P                  V P                  P                  V P                  P                  .V P                  4       P                  4       ,           # r   )rE   rC   r   r   rD   rQ   r8   r3   s   &r   r8   ÚProfileResult.tocsv[   sU   € à×ÑØ�M‰M× Ñ Ø�M‰M×#Ñ#Ø�J‰J× Ñ ð	
ð
 �L‰L‹N× Ñ Ó"õ#ð 	#r   rM   N)
r:   r;   r<   r=   rI   r   rQ   r4   r8   r?   r   r   r   rA   rA   C   s    † õ0õõ*õ
÷#ñ #r   rA   c               ó   € V ^8„  d   QhRR/# )r   r   Úboolr   )r   s   "r   r   r   d   s   € ÷ >ñ >˜dñ >r   c                 óF   € \         P                  P                  R 4      R8H  # )ÚTORCHDYNAMO_PRINT_MISSINGÚ1)ÚosÚenvironÚgetr   r   r   Úshould_print_missingre   d   s   € Ü�:‰:�>‰>Ð5Ó6¸#Ñ=Ð=r   c               ó    € V ^8„  d   QhRRRR/# )r   Ústackz	list[str]r   rF   r   )r   s   "r   r   r   h   s   € ÷ 3ñ 3˜ð 3 tñ 3r   c                ó
  € \         ;QJ d    R  V  4       F  '       g   K   RM	  RM! R  V  4       4      '       d   R# V  Uu. uF  pRV9  g   K  RV9  g   K  VNK  	  p p\        RRP                  V RR 4      4       R# u upi )	c              3  ó,   "  € T F
  pR V9   x € K  	  R# 5i)z/torch/autograd/profiler.pyNr   )Ú.0Úxs   & r   Ú	<genexpr>Ú print_missing.<locals>.<genexpr>i   s   é € Ð
=±u°!Ð(¨AÖ-³uùs   ‚TFNz	<built-inzsite-packages/torch/ÚMISSINGz >> éýÿÿÿ)Úanyr   Újoin)rg   rk   s   & r   Úprint_missingrr   h   sv   € ß
ƒsÑ
=±uÓ
=‡s‡s‚sÑ
=±uÓ
=×=Ò=ÙáóÙˆa˜[°Ñ1ŒÐ6LÐTUÑ6U�ˆ‘5ð 
ð ô ˆy˜&Ÿ+™+ e¨B¨C jÓ1Ö2ùòs   Á	B ÁB ÁB c                  ó>   € ] tR t^qt$ ^ tR]R&   R R ltR R ltRtR# )	ÚProfilerr
   rE   c               ó   € V ^8„  d   QhRR/# )r   r   rF   r   )r   s   "r   r   ÚProfiler.__annotate__t   s   € ÷ 
ñ 
˜$ñ 
r   c                	ó¨   € \         P                  P                  \         P                  P                  P                  .\        4       R 7      V n        R# ))Ú
activitiesÚ
with_stackN)ÚtorchÚprofilerÚprofileÚProfilerActivityÚCPUre   Úprofr3   s   &r   rI   ÚProfiler.__init__t   s9   € Ü—N‘N×*Ñ*ÜŸ™×7Ñ7×;Ñ;Ð<Ü+Ó-ð +ó 
ˆŽ	r   c               ó   € V ^8„  d   QhRR/# )r   r   rA   r   )r   s   "r   r   rv   z   s   € ÷ .
ñ .
˜ñ .
r   c           	     	ó4  € ^ p^ p^ p^ p^ pRpRp\        V P                  P                  4       R R7      pV EF  p	V	P                  R8X  d+   V	P                  P
                  pV^,          pV^,          pK?  V	P                  P                  V8¼  d­   V	P                  P
                  pV	P                  P
                  V8:  d+   V^,          pW9P                  P                  4       ,          pM%\        4       '       d   \        V	P                  4       V^,          pWYP                  P                  4       ,          pEK  EK	  	  \        P                  p
^ \        n        V^,          p\        \        VVW!,
          VR7      \        VVV^,
          R7      V
R7      # )é    c                ó.   € V P                   P                  # r   )Ú
time_rangeÚstart)rk   s   &r   Ú<lambda>Ú"Profiler.results.<locals>.<lambda>ƒ   s   € ¸!¿,¹,×:LÒ:Lr   )ÚkeyÚTORCHDYNAMO)r	   r   r   r   r   rM   éÿÿÿÿ)Úsortedr   ÚeventsÚnamer…   Úendr†   Ú
elapsed_usre   rr   rg   rt   rE   rA   r   )r   Úcaptured_regionsÚcaptured_opsÚcaptured_microsecondsÚ	total_opsÚtotal_microsecondsÚlast_op_end_timeÚcaptured_region_end_timer�   ÚerE   s   &          r   ÚresultsÚProfiler.resultsz   si  € ØÐØˆØ !ÐØˆ	ØÐàÐØ#%Ð Ü˜Ÿ	™	×(Ñ(Ó*Ñ0LÔMˆÜˆAØ�v‰v˜Ô&Ø+,¯<©<×+;Ñ+;Ð(Ø  AÕ%Ð à˜Q•’	Ø—‘×#Ñ#Ð'7Ô7Ø#$§<¡<×#3Ñ#3Ð Ø—<‘<×#Ñ#Ð'?Ô?Ø  AÕ%�LØ)¯\©\×-DÑ-DÓ-FÕFÑ)Ü)×+Ò+Ü! !§'¡'Ô*Ø˜Q•�	Ø"§l¡l×&=Ñ&=Ó&?Õ?Ó"âñ! ô$ !×.Ñ.ˆØ!"ŒÔà�Q�ˆ	äÜ#Ø2Ø&Ø$Õ7Ø'ô	ô !Ø/Ø#Ø! A�ôð
 (ô
ð 	
r   )r   N)	r:   r;   r<   r=   rE   r>   rI   r™   r?   r   r   r   rt   rt   q   s   ‡ Ø€M�3Óõ
÷.
ñ .
r   rt   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úgmztorch.fx.GraphModuleÚexample_inputsrZ   r   r   r   )r   s   "r   r   r   «   s#   € ÷ ñ Ð0ð À)ð ÐPSñ r   c                óT   a € R  V 3R llp\         ;P                  ^,          un        V# )c               ó    € V ^8„  d   QhRRRR/# )r   Úargsr   r   r   )r   s   "r   r   Ú)fx_insert_profiling.<locals>.__annotate__¬   s   € ÷ %ñ %˜ð % ñ %r   c                 ó°   <€ \         P                  P                  R 4      ;_uu_ 4        SP                  ! V !  uuRRR4       #   + '       g   i     R# ; i)rŠ   N)rz   r{   Úrecord_functionÚforward)r    rœ   s   *€r   Ú_wrappedÚ%fx_insert_profiling.<locals>._wrapped¬   s3   ø€ Ü�^‰^×+Ñ+¨M×:Õ:Ø—:’:˜tÑ$÷ ;×:×:Ó:ús   ©AÁA	)rt   rE   )rœ   r�   r¥   s   f& r   Úfx_insert_profilingr§   «   s%   ø€ ÷%ð %ô ×Ò˜aÕÕØ€Or   )Ú__doc__Ú
__future__r   Údataclassesrb   Útypingr   Útyping_extensionsr   rz   Úutilsr   Ú	dataclassr   rA   re   rr   rt   r§   r   r   r   Ú<module>r¯      sf   ðñõ #ã Û 	Ý Ý "ã å ð ×Ñ÷$3ð $3ó ð$3÷N#ñ #õB>õ3÷7
ñ 7
÷tr   