+
    –°³j#  ã                  óP  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
HtHt ^ RIHt ]'       d   ^ RIHt ^ RIHt ]P$                  ! ]4      t ! R R	4      t]]]]]]
3,          ]],          R,          ]R,          .R3,          tR
]R&    ! R R4      t ! R R4      tR# )a[  Metrics collection and management system for Dynamo.

This module provides context managers for gathering and reporting metrics during
compilation and runtime.

It includes two main components:
- MetricsContext: A context manager for collecting metrics during compilation, supporting
  nested contexts and various metric types (counters, sets, key-value pairs)
- RuntimeMetricsContext: A specialized context for runtime metrics collection that doesn't
  require explicit context management

The metrics system enables comprehensive monitoring and analysis of both compilation and
execution performance.
)ÚannotationsN)ÚCallable)ÚAnyÚTYPE_CHECKINGÚ	TypeAlias)ÚSelf)ÚIterator)ÚCapturedTracebackc                  óN   € ] tR t^#tRtRR R lltR R ltR R ltR R	 ltR
t	R# )ÚTopNzW
Helper to record a list of metrics, keeping only the top N "most expensive" elements.
c               ó    € V ^8„  d   QhRRRR/# )é   Úat_mostÚintÚreturnÚNone© )Úformats   "Ú^/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_dynamo/metrics_context.pyÚ__annotate__ÚTopN.__annotate__(   s   € ÷ .ñ . ð .¨Tñ .ó    c                	ó    € Wn         . V n        R # ©N©r   Úheap)Úselfr   s   &&r   Ú__init__ÚTopN.__init__(   s   € ØŒØ+-ˆŽ	r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úkeyr   Úvalr   r   r   r   )r   s   "r   r   r   ,   s!   € ÷ "ñ "�sð " ð "¨ñ "r   c                	ó¶   € \        V P                  4      V P                  8  d   \        P                  M\        P
                  pV! V P                  W!34       R # r   )Úlenr   r   ÚheapqÚheappushÚheappushpop)r   r    r!   Úfns   &&& r   ÚaddÚTopN.add,   s6   € ä" 4§9¡9›~°·±Ô<ŒU�^Š^Ä%×BSÑBSˆÙ
ˆ4�9‰9�s�jÖ!r   c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   r   1   s   € ÷ ñ ˜ñ r   c                	ó,   € \        V P                  4      # r   )r#   r   ©r   s   &r   Ú__len__ÚTopN.__len__1   s   € Ü�4—9‘9‹~Ðr   c               ó   € V ^8„  d   QhRR/# )r   r   zIterator[tuple[Any, int]]r   )r   s   "r   r   r   4   s   € ÷ Lñ LÐ3ñ Lr   c                	ó>   € R  \        V P                  RR7       4       # )c              3  ó,   "  € T F
  w  rW!3x € K  	  R # 5ir   r   )Ú.0r!   r    s   &  r   Ú	<genexpr>Ú TopN.__iter__.<locals>.<genexpr>5   s   é € ÐKÑ+J™x˜s�•
Ó+Jùs   ‚T)Úreverse)Úsortedr   r,   s   &r   Ú__iter__ÚTopN.__iter__4   s   € ÙK¬6°$·)±)ÀTÕ+JÓKÐKr   r   N)é   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r(   r-   r7   Ú__static_attributes__r   r   r   r   r   #   s"   † ñ÷.õ"õ
÷Lñ Lr   r   r   Ú
OnExitTypec                  ó®   € ] tR t^>tR R ltR R ltR R ltR R ltR	 R
 ltR R lt	RR R llt
R R ltRR R lltR R ltR R ltR R ltRtR# )ÚMetricsContextc               ó    € V ^8„  d   QhRRRR/# ©r   Úon_exitr@   r   r   r   )r   s   "r   r   ÚMetricsContext.__annotate__?   s   € ÷ Cñ C 
ð C¨tñ Cr   c                óJ   € Wn         / V n        ^ V n        ^ V n        . V n        R# )a)  
Use this class as a contextmanager to create a context under which to accumulate
a set of metrics, e.g., metrics gathered during a compilation. On exit of the
contextmanager, call the provided 'on_exit' function and pass a dictionary of
all metrics set during the lifetime of the contextmanager.
N)Ú_on_exitÚ_metricsÚ_start_time_nsÚ_levelÚ_edits©r   rE   s   &&r   r   ÚMetricsContext.__init__?   s&   € ð  ŒØ(*ˆŒØ#$ˆÔØˆŒØ@BˆŽr   c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   rF   L   s   € ÷ 
ñ 
˜4ñ 
r   c                óœ   € V P                   ^ 8X  d"   / V n        \        P                  ! 4       V n        V ;P                   ^,          un         V # )z
Initialize metrics recording.
)rK   rI   ÚtimeÚtime_nsrJ   r,   s   &r   Ú	__enter__ÚMetricsContext.__enter__L   s8   € ð �;‰;˜!ÔàˆDŒMÜ"&§,¢,£.ˆDÔà�Š�qÕ�Øˆr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Úexc_typeztype[BaseException] | NoneÚ	exc_valuezBaseException | NoneÚ
_tracebackr   r   r   r   )r   s   "r   r   rF   X   s8   € ÷ Rñ Rà,ðRð (ðRð ð	Rð
 
ñRr   c                ó^  € V ;P                   ^,          un         V P                   ^ 8  d   \        R4      hV P                   ^ 8X  d@    \        P                  ! 4       pV P	                  V P
                  W@P                  W4       R# R#   \         d    \        P                  R4        R# i ; i)z.
At exit, call the provided on_exit function.
z+MetricsContext level cannot become negativez0Unexpected exception logging compilation metricsN)
rK   ÚAssertionErrorrQ   rR   rH   rJ   rI   Ú	ExceptionÚlogÚ	exception)r   rV   rW   rX   Úend_time_nss   &&&& r   Ú__exit__ÚMetricsContext.__exit__X   sˆ   € ð 	�Š�qÕ�Ø�;‰;˜Œ?Ü Ð!NÓOÐOØ�;‰;˜!ÔðRÜ"Ÿlšl›n�Ø—‘Ø×'Ñ'¨·m±mÀXöñ øô ô RÜ—‘ÐP×QðRús   Á<B Â B,Â+B,c               ó   € V ^8„  d   QhRR/# )r   r   Úboolr   )r   s   "r   r   rF   m   s   € ÷ ñ ˜Tñ r   c                ó    € V P                   ^ 8„  # )z$
True if we've entered the context.
)rK   r,   s   &r   Úin_progressÚMetricsContext.in_progressm   s   € ð �{‰{˜Q‰Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚmetricÚstrÚvaluer   r   r   r   )r   s   "r   r   rF   s   s!   € ÷ 'ñ ' ð '¨Cð '°Dñ 'r   c                óÂ   € V P                   ^ 8X  d   \        RV R24      hWP                  9  d   ^ V P                  V&   V P                  V;;,          V,          uu&   R# )ú'
Increment a metric by a given amount.
zCannot increment ú outside of a MetricsContextN©rK   ÚRuntimeErrorrI   ©r   rg   ri   s   &&&r   Ú	incrementÚMetricsContext.increments   sR   € ð �;‰;˜!ÔÜÐ!2°6°(Ð:VÐWÓXÐXØŸ™Ô&Ø$%ˆD�M‰M˜&Ñ!Ø�‰�f× Õ&Õr   c               ó    € V ^8„  d   QhRRRR/# )r   Úpredzset[str]r   rh   r   )r   s   "r   r   rF   }   s   € ÷ 
ñ 
 (ð 
¨sñ 
r   c                	ó\   a€ R R P                  V3R lV P                   4       4      ,           # )z

c              3  ó–   <"  € T F>  w  rVS,          '       g   K  R RP                  VP                  4       4      ,           x € K@  	  R# 5i)zPrevious Traceback:
Ú N)Újoinr   )r2   ÚeÚkrs   s   &  €r   r3   Ú/MetricsContext._render_edits.<locals>.<genexpr>~   s=   øé € ð $
á#‘�Ø�4�x‰xô :Ð# b§g¡g¨a¯h©h«jÓ&9×9Ò9Û#ùs
   ƒA	›.A	)rw   rL   )r   rs   s   &fr   Ú_render_editsÚMetricsContext._render_edits}   s,   ø€ Ø˜Ÿ™ô $
àŸšó$
ó 
õ 
ð 	
r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rg   rh   ri   r   Ú	overwriterb   r   r   r   )r   s   "r   r   rF   „   s(   € ÷ &ñ &˜#ð & cð &°dð &Àtñ &r   c                óD  € V P                   ^ 8X  d   \        RV R24      hWP                  9   d/   V'       g'   \        V P                  V04      RV R2,           4      hV P                  P                  \        P                  ! ^R7      V034       W P                  V&   R# )zj
Set a metric to a given value. Raises if the metric has been assigned previously
in the current context.
úCannot set rl   z

RuntimeError: Metric 'z]' has already been set in the current context (see above for current and previous traceback).©ÚskipN)rK   rn   rI   r{   rL   Úappendr	   Úextract)r   rg   ri   r~   s   &&&&r   ÚsetÚMetricsContext.set„   sš   € ð
 �;‰;˜!ÔÜ ¨V¨HÐ4PÐQÓRÐRØ—]‘]Ô"¯9ÜØ×"Ñ" F 8Ó,Ø.¨v¨hð 7Bð BõBóð ð
 	�‰×ÑÔ-×5Ò5¸1Ô=À¸xÐHÔIØ %�‰�fÓr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rg   rh   r    ri   r   r   r   r   )r   s   "r   r   rF   ”   s(   € ÷ +ñ + Cð +¨cð +¸#ð +À$ñ +r   c                ó®   € V P                   ^ 8X  d   \        RV R24      hWP                  9  d   / V P                  V&   W0P                  V,          V&   R# )a  
Treats a given metric as a dictionary and set the k and value within it.
Note that the metric must be a dictionary or not present.

We allow this to be called multiple times (i.e. for features, it's not uncommon
for them to be used multiple times within a single compilation).
r€   rl   Nrm   )r   rg   r    ri   s   &&&&r   Úset_key_valueÚMetricsContext.set_key_value”   sN   € ð �;‰;˜!ÔÜ ¨V¨HÐ4PÐQÓRÐRØŸ™Ô&Ø$&ˆD�M‰M˜&Ñ!Ø%*�‰�fÕ˜cÓ"r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úvaluesúdict[str, Any]r~   rb   r   r   r   )r   s   "r   r   rF   ¢   s!   € ÷ %ñ %˜^ð %¸ð %Èñ %r   c                óü  € V P                   ^ 8X  d   \        R4      hV P                  P                  4       VP                  4       ,          pV'       dE   V'       g=   \        V P	                  \        VP                  4       4      4      RV R2,           4      hV P                  P                  \        P                  ! ^R7      \        VP                  4       4      34       V P                  P                  V4       R# )z«
Set multiple metrics directly. This method does NOT increment. Raises if any
metric has been assigned previously in the current context and overwrite is
not set to True.
ú1Cannot update metrics outside of a MetricsContextz

RuntimeError: Metric(s) z_ have already been set in the current context.  (see above for current and previous traceback).r�   N)rK   rn   rI   Úkeysr{   r…   rL   rƒ   r	   r„   Úupdate)r   rŒ   r~   Úexistings   &&& r   r‘   ÚMetricsContext.update¢   s¿   € ð �;‰;˜!ÔÜÐRÓSÐSØ—=‘=×%Ñ%Ó'¨&¯+©+«-Õ7ˆßŸIÜØ×"Ñ"¤3 v§{¡{£}Ó#5Ó6Ø0°°
ð ;Bð BõBóð ð
 	�‰×ÑÔ-×5Ò5¸1Ô=¼sÀ6Ç;Á;Ã=Ó?QÐRÔSØ�‰×Ñ˜VÖ$r   c               ó    € V ^8„  d   QhRRRR/# )r   rŒ   r�   r   r   r   )r   s   "r   r   rF   ´   s   € ÷  ñ   >ð  °dñ  r   c                ó†   € V P                   ^ 8X  d   \        R4      hV P                   ^8X  d   V P                  V4       R# R# )z1
Update, but only when at the outermost context.
r�   N)rK   rn   r‘   )r   rŒ   s   &&r   Úupdate_outerÚMetricsContext.update_outer´   s9   € ð �;‰;˜!ÔÜÐRÓSÐSØ�;‰;˜!ÔØ�K‰K˜Öñ r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rg   rh   ri   r   r   r   r   )r   s   "r   r   rF   ½   s!   € ÷ )ñ ) ð )¨Sð )°Tñ )r   c                óØ   € V P                   ^ 8X  d   \        RV R24      hWP                  9  d   \        4       V P                  V&   V P                  V,          P	                  V4       R# )z(
Records a metric as a set() of values.
zCannot add rl   N)rK   rn   rI   r…   r(   ro   s   &&&r   Ú
add_to_setÚMetricsContext.add_to_set½   sV   € ð �;‰;˜!ÔÜ ¨V¨HÐ4PÐQÓRÐRØŸ™Ô&Ü$'£EˆD�M‰M˜&Ñ!Ø�‰�fÕ×!Ñ! %Ö(r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rg   rh   r    r   r!   r   r   r   r   )r   s   "r   r   rF   Ç   s(   € ÷ ,ñ , ð ,¨#ð ,°Cð ,¸Dñ ,r   c                ó¾   € V P                   ^ 8X  d   R# WP                  9  d   \        4       V P                  V&   V P                  V,          P                  W#4       R# )z+
Records a metric as a TopN set of values.
N)rK   rI   r   r(   )r   rg   r    r!   s   &&&&r   Ú	add_top_nÚMetricsContext.add_top_nÇ   sD   € ð �;‰;˜!ÔÙØŸ™Ô&Ü$(£FˆD�M‰M˜&Ñ!Ø�‰�fÕ×!Ñ! #Ö+r   )rL   rK   rI   rH   rJ   N)F)r:   r;   r<   r=   r   rS   r_   rd   rp   r{   r…   r‰   r‘   r–   rš   rž   r?   r   r   r   rB   rB   >   sE   † õCõ
õRõ*õ'õ
÷&õ +÷%õ$ õ)÷,ñ ,r   rB   c                  ó>   € ] tR t^ÒtR R ltR	R R lltR R ltRtR# )
ÚRuntimeMetricsContextc               ó    € V ^8„  d   QhRRRR/# rD   r   )r   s   "r   r   Ú"RuntimeMetricsContext.__annotate__Ó   s   € ÷ %ñ % 
ð %¨tñ %r   c                ó.   € Wn         / V n        ^ V n        R# )z§
Similar to MetricsContext, but used to gather the runtime metrics that are
decoupled from compilation, where there's not a natural place to insert a
context manager.
N)rH   rI   rJ   rM   s   &&r   r   ÚRuntimeMetricsContext.__init__Ó   s   € ð  ŒØ(*ˆŒØ#$ˆÖr   Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rg   rh   ri   r   Úextrazdict[str, Any] | Noner   r   r   )r   s   "r   r   r£   Ý   s,   € ÷ )ñ )Øð)Ø"%ð)Ø.Cð)à	ñ)r   c                ól  € V P                   '       g   \        P                  ! 4       V n        WP                   9  d   ^ V P                   V&   V P                   V;;,          V,          uu&   V'       dB   VP	                  4        F+  w  rEW@P                   9  g   K  Vf   K  WPP                   V&   K-  	  R# R# )rk   N)rI   rQ   rR   rJ   Úitems)r   rg   ri   r§   ry   Úvs   &&&&  r   rp   ÚRuntimeMetricsContext.incrementÝ   s{   € ð �}�}ˆ}ä"&§,¢,£.ˆDÔØŸ™Ô&Ø$%ˆD�M‰M˜&Ñ!Ø�‰�f× Õ&ÓçØŸ™ž‘�ØŸM™MÖ)¨a¬mØ'(—M‘M !Ó$ó &ñ r   c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   r£   ï   s   € ÷ #ñ #˜ñ #r   c                ó  € V P                   '       dH    \        P                  ! 4       pV P                  V P                  WP                   RR4       / V n         R# R#   \
         d    \        P                  R4        L-i ; i  / T n         i ; i)zG
Call the on_exit function with the metrics gathered so far and reset.
Nz,Unexpected exception logging runtime metrics)rI   rQ   rR   rH   rJ   r[   r\   r]   )r   r^   s   & r   ÚfinishÚRuntimeMetricsContext.finishï   st   € ð �=�=ˆ=ð#Ü"Ÿlšl›n�Ø—‘Ø×'Ñ'¨·m±mÀTÈ4ôð !#�–ñ øô ô NÜ—‘ÐLÖMðNûð !#�•ús#   ”=A Á A?Á<B Á>A?Á?B Â	B)rI   rH   rJ   r   )r:   r;   r<   r=   r   rp   r®   r?   r   r   r   r¡   r¡   Ò   s   † õ%÷)÷$#ñ #r   r¡   )Ú__conditional_annotations__r>   Ú
__future__r   r$   ÚloggingrQ   Úcollections.abcr   Útypingr   r   r   Útyping_extensionsr   r   Útorch.utils._tracebackr	   Ú	getLoggerr:   r\   r   r   Údictrh   ÚtypeÚBaseExceptionr@   Ú__annotations__rB   r¡   )r°   s   @r   Ú<module>r¼      s¥   øðôõ #ã Û Û Ý $ß 0Ñ 0Ý "÷ Ý(å 4ð ×Ò˜Ó!€÷Lñ Lð* !Øˆ#ˆt�C˜�H�~˜t MÕ2°TÕ9¸=È4Õ;OÐPØð
õ€
ˆIó ÷Q,ñ Q,÷h*#ó *#r   