
    iw                        U d dl Z d dlZd dlmZ d dlmZ d dlmZ g dZ edg d      Z	 G d d	      Z
 G d
 de j                        Z G d de      Z G d de      Z G d d      Zi Zeeef   ed<    e       aeed<   d%dededz  fdZdefdZd Zd&defdZ ede      d%d       Zd'dededefd Z ed!e      dededefd"       Zd#efd$Zy)(    N)
namedtuplewraps)
deprecated)MetricsConfigMetricHandlerConsoleMetricHandlerNullMetricHandlerMetricStream	configure	getStreamprofprofile
put_metricpublish_metricget_elapsed_time_ms
MetricDatar   )	timestamp
group_namenamevaluec                   0    e Zd ZdgZddeeef   dz  fdZy)r   paramsNc                 :    || _         | j                   i | _         y y N)r   )selfr   s     _/var/www/html/engine/venv/lib/python3.12/site-packages/torch/distributed/elastic/metrics/api.py__init__zMetricsConfig.__init__'   s    ;;DK     r   )__name__
__module____qualname__	__slots__dictstrr    r   r   r   r   $   s"    
ItCH~4 r   r   c                   6    e Zd Zej                  defd       Zy)r   metric_datac                      y r   r&   r   r(   s     r   emitzMetricHandler.emit.   s    r   N)r    r!   r"   abcabstractmethodr   r+   r&   r   r   r   r   -   s!    
  r   r   c                       e Zd ZdefdZy)r	   r(   c           
          t        d|j                   d|j                   d|j                   d|j                          y )N[z][z]: =)printr   r   r   r   r*   s     r   r+   zConsoleMetricHandler.emit4   sD    %%&b)?)?(@KDTDTCUUVWbWhWhVij	
r   Nr    r!   r"   r   r+   r&   r   r   r	   r	   3   s    

 
r   r	   c                       e Zd ZdefdZy)r
   r(   c                      y r   r&   r*   s     r   r+   zNullMetricHandler.emit;   s    r   Nr3   r&   r   r   r
   r
   :   s    
 r   r
   c                   ,    e Zd ZdedefdZdedefdZy)r   r   handlerc                      || _         || _        y r   )r   r7   )r   r   r7   s      r   r   zMetricStream.__init__@   s    $r   metric_namemetric_valuec                     | j                   j                  t        t        j                         | j                  ||             y r   )r7   r+   r   timer   )r   r9   r:   s      r   	add_valuezMetricStream.add_valueD   s,    tyy{DOO[,O	
r   N)r    r!   r"   r%   r   r   intr=   r&   r   r   r   r   ?   s(    3  
S 
 
r   r   _metrics_map_default_metrics_handlerr7   groupc                      || a y | t        |<   y r   )r@   r?   )r7   rA   s     r   r   r   O   s    } $+ %Ur   c                 N    t         j                  | t              }t        | |      S r   )r?   getr@   r   )rA   r7   s     r   r   r   Y   s"    u&>?Gw''r   c                     | j                   }|j                  d      }t        |      dk(  r0| j                  }|r|j                  d      d   dz   |d   z   S |d   S |S )N.   r   )r"   splitlenr!   )fnqualnamerI   modules       r   _get_metric_namerN   ^   s`    HNN3E
5zQ<<$R(3.q998Or   c                 &    fd}| r ||       S |S )a  
    @profile decorator publishes duration.ms, count, success, failure metrics for the function that it decorates.

    The metric name defaults to the qualified name (``class_name.def_name``) of the function.
    If the function does not belong to a class, it uses the leaf module name instead.

    Usage

    ::

     @metrics.prof
     def x():
         pass


     @metrics.prof(group="agent")
     def y():
         pass
    c                 2     t                fd       }|S )Nc                  $   t              }	 t        j                         } | i |}t        | dd       	 t        | dt	        |             |S # t        $ r t        | dd        w xY w# t        | dt	                     w xY wNz.successrG   z.failurez.duration.ms)rN   r<   r   	Exceptionr   )argskwargskeystartresultfrA   s        r   wrapperz#prof.<locals>.wrap.<locals>.wrapper   s    "1%CT		D+F+cU(+Q6
 cU,/1DU1KUSM  cU(+Q6 cU,/1DU1KUSs   ,A A11A4 4Br   )rY   rZ   rA   s   ` r   wrapzprof.<locals>.wrap   s     	q	 
	 r   r&   )rK   rA   r[   s    ` r   r   r   k   s    *" 
Bxr   zDeprecated, use `@prof` instead)categoryc                       fd}|S )z
    @profile decorator adds latency and success/failure metrics to any given function.

    Usage

    ::

     @metrics.profile("my_metric_group")
     def some_function(<arguments>):
    c                 2     t                fd       }|S )Nc            	      ^   	 t        j                          } | i |}t        j                   dd       	 t        j                   dt	        |             |S # t        $ r t        j                   dd        w xY w# t        j                   dt	                     w xY wrR   )r<   r   r    rS   r   )rT   rU   
start_timerX   funcrA   s       r   rZ   z&profile.<locals>.wrap.<locals>.wrapper   s    !YY[
t.v.ux&@!D }}o\2'
3	 M  ux&@!D
 }}o\2'
3	s   6A %BB %B,r   )ra   rZ   rA   s   ` r   r[   zprofile.<locals>.wrap   s     	t	 
	& r   r&   )rA   r[   s   ` r   r   r      s    . Kr   r9   r:   metric_groupc                 :    t        |      j                  | |       y)z
    Publish a metric data point.

    Usage

    ::

     put_metric("metric_name", 1)
     put_metric("metric_name", 1, "metric_group_name")
    Nr   r=   )r9   r:   rb   s      r   r   r      s     l%%k<@r   zMDeprecated, use `put_metric(metric_group)(metric_name, metric_value)` insteadc                 >    t        |       }|j                  ||       y r   rd   )rb   r9   r:   metric_streams       r   r   r      s    
 l+MK6r   start_time_in_secondsc                 L    t        j                          }t        || z
  dz        S )z<Return the elapsed time in millis from the given start time.i  )r<   r>   )rg   end_times     r   r   r      s#    yy{H00D899r   r   )Ntorchelastic)rj   ) r,   r<   collectionsr   	functoolsr   typing_extensionsr   __all__r   r   ABCr   r	   r
   r   r?   r$   r%   __annotations__r@   r   r   rN   r   FutureWarningr   r>   r   r   floatr   r&   r   r   <module>rs      s=     "  (  &RS
 CGG 
= 
 

 
 *,d3%& +*;*= - =&} &S4Z &(S (

) )X -F# G#LAC As A# A S7 73 7c 7	7
:u :r   