§
    ž²ÅjG  ã                   ó®   — U d dl Z d dlmZmZmZmZmZ d dlmZ ee	e	ee
ef         eee                  ee         gdf         Zeed<    G d„ d¦  «        ZdS )é    N)ÚAnyÚCallableÚDictÚOptionalÚType)Ú	TypeAliasÚ
OnExitTypec                   óþ   — e Zd Zdefd„Zdd„Zdeee                  dee         de	ddfd	„Z
defd
„Zdededdfd„Zdede	ddfd„Zdedede	ddfd„Zdeee	f         ddfd„Zdeee	f         ddfd„Zdede	ddfd„ZdS )ÚMetricsContextÚon_exitc                 ó>   — || _         i | _        d| _        d| _        dS )aQ  
        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.
        r   N)Ú_on_exitÚ_metricsÚ_start_time_nsÚ_level)Úselfr   s     úNC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/metrics_context.pyÚ__init__zMetricsContext.__init__   s%   € ð  ˆŒØ(*ˆŒØ#$ˆÔØˆŒˆˆó    Úreturnc                 óz   — | j         dk    ri | _        t          j        ¦   «         | _        | xj         dz  c_         | S )z/
        Initialize metrics recording.
        r   é   )r   r   ÚtimeÚtime_nsr   ©r   s    r   Ú	__enter__zMetricsContext.__enter__   s;   € ð Œ;˜!ÒÐàˆDŒMÝ"&¤,¡.¤.ˆDÔàˆŒ�qÑˆŒØˆr   Úexc_typeÚ	exc_valueÚ
_tracebackNc                 óÆ   — | xj         dz  c_         | j         dk    sJ ‚| j         dk    r8t          j        ¦   «         }|                      | j        || j        ||¦  «         dS dS )z>
        At exit, call the provided on_exit function.
        r   r   N)r   r   r   r   r   r   )r   r   r   r   Úend_time_nss        r   Ú__exit__zMetricsContext.__exit__%   sw   € ð 	ˆŒ�qÑˆŒØŒ{˜aÒÐÐÐØŒ;˜!ÒÐÝœ,™.œ.ˆKØ�MŠMØÔ# [°$´-ÀÈ9ñô ð ð ð ð Ðr   c                 ó   — | j         dk    S )z4
        True if we've entered the context.
        r   )r   r   s    r   Úin_progresszMetricsContext.in_progress6   s   € ð Œ{˜QŠÐr   ÚmetricÚvaluec                 ó’   — | j         dk    rt          d|› d�¦  «        ‚|| j        vr
d| j        |<   | j        |xx         |z  cc<   dS )z7
        Increment a metric by a given amount.
        r   zCannot increment ú outside of a MetricsContextN©r   ÚRuntimeErrorr   ©r   r%   r&   s      r   Ú	incrementzMetricsContext.increment<   sh   € ð Œ;˜!ÒÐÝÐW°6ÐWÐWÐWÑXÔXÐXØ˜œÐ&Ð&Ø$%ˆDŒM˜&Ñ!ØŒ�fÐÐÔ Ñ&ÐÐÑÐÐr   c                 óŽ   — | j         dk    rt          d|› d�¦  «        ‚|| j        v rt          d|› d�¦  «        ‚|| j        |<   dS )z‚
        Set a metric to a given value. Raises if the metric has been assigned previously
        in the current context.
        r   úCannot set r(   zMetric 'z-' has already been set in the current contextNr)   r+   s      r   ÚsetzMetricsContext.setF   sl   € ð
 Œ;˜!ÒÐÝÐQ¨VÐQÐQÐQÑRÔRÐRØ�T”]Ð"Ð"ÝØP˜6ÐPÐPÐPñô ð ð !&ˆŒ�fÑÐÐr   Úkeyc                 óˆ   — | j         dk    rt          d|› d�¦  «        ‚|| j        vr
i | j        |<   || j        |         |<   dS )a=  
        Treats a give 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   r.   r(   Nr)   )r   r%   r0   r&   s       r   Úset_key_valuezMetricsContext.set_key_valueS   s[   € ð Œ;˜!ÒÐÝÐQ¨VÐQÐQÐQÑRÔRÐRØ˜œÐ&Ð&Ø$&ˆDŒM˜&Ñ!Ø%*ˆŒ�fÔ˜cÑ"Ð"Ð"r   Úvaluesc                 óô   — | j         dk    rt          d¦  «        ‚| j                             ¦   «         |                     ¦   «         z  }|rt          d|› d�¦  «        ‚| j                             |¦  «         dS )z¢
        Set multiple metrics directly. This method does NOT increment. Raises if any
        metric has been assigned previously in the current context.
        r   ú1Cannot update metrics outside of a MetricsContextz
Metric(s) z- have already been set in the current contextN)r   r*   r   ÚkeysÚupdate)r   r3   Úexistings      r   r7   zMetricsContext.updatea   s†   € ð
 Œ;˜!ÒÐÝÐRÑSÔSÐSØ”=×%Ò%Ñ'Ô'¨&¯+ª+©-¬-Ñ7ˆØð 	ÝØT˜XÐTÐTÐTñô ð ð 	Œ×Ò˜VÑ$Ô$Ð$Ð$Ð$r   c                 ó~   — | j         dk    rt          d¦  «        ‚| j         dk    r|                      |¦  «         dS dS )zA
        Update, but only when at the outermost context.
        r   r5   r   N)r   r*   r7   )r   r3   s     r   Úupdate_outerzMetricsContext.update_outero   sM   € ð Œ;˜!ÒÐÝÐRÑSÔSÐSØŒ;˜!ÒÐØ�KŠK˜ÑÔÐÐÐð Ðr   c                 óÀ   — | j         dk    rt          d|› d�¦  «        ‚|| j        vrt          ¦   «         | j        |<   | j        |                              |¦  «         dS )z8
        Records a metric as a set() of values.
        r   zCannot add r(   N)r   r*   r   r/   Úaddr+   s      r   Ú
add_to_setzMetricsContext.add_to_setx   si   € ð Œ;˜!ÒÐÝÐQ¨VÐQÐQÐQÑRÔRÐRØ˜œÐ&Ð&Ý$'¡E¤EˆDŒM˜&Ñ!ØŒ�fÔ×!Ò! %Ñ(Ô(Ð(Ð(Ð(r   )r   r   )Ú__name__Ú
__module__Ú__qualname__r	   r   r   r   r   ÚBaseExceptionr   r"   Úboolr$   ÚstrÚintr,   r/   r2   r   r7   r:   r=   © r   r   r   r      s¦  € € € € € ð
 
ð 
ð 
ð 
ð 
ð
ð 
ð 
ð 
ðà˜4 Ô.Ô/ðð ˜MÔ*ðð ð	ð
 
ðð ð ð ð"˜Tð ð ð ð ð' ð '¨Cð '°Dð 'ð 'ð 'ð 'ð&˜#ð & cð &¨dð &ð &ð &ð &ð+ Cð +¨cð +¸#ð +À$ð +ð +ð +ð +ð%˜T # s (œ^ð %°ð %ð %ð %ð %ð  4¨¨S¨¤>ð  °dð  ð  ð  ð  ð) ð )¨Sð )°Tð )ð )ð )ð )ð )ð )r   r   )r   Útypingr   r   r   r   r   Útyping_extensionsr   rD   rC   rA   r	   Ú__annotations__r   rE   r   r   ú<module>rI      sÒ   ðØ €€€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð !Øˆ#ˆt�C˜�HŒ~˜x¨¨]Ô(;Ô<¸hÀ}Ô>UÐVØð
ô€
ˆIð ð ñ ðt)ð t)ð t)ð t)ð t)ñ t)ô t)ð t)ð t)ð t)r   