
    sg1                        U d dl Z d dlZd dlmZ d dlmZ d dlmZ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e   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)DictOptional)
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ef      fdZy)r	   paramsNc                 :    || _         | j                   i | _         y y N)r   )selfr   s     X/var/www/html/venv/lib/python3.12/site-packages/torch/distributed/elastic/metrics/api.py__init__zMetricsConfig.__init__(   s    ;;DK     r   )__name__
__module____qualname__	__slots__r   r   strr     r!   r   r	   r	   %   s"    
IxS#X7 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.emit5   sD    %%&b)?)?(@KDTDTCUUVWbWhWhVij	
r!   Nr"   r#   r$   r   r,   r'   r!   r   r   r   4   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!   Nr4   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   r8   )r   r   r8   s      r   r    zMetricStream.__init__A   s    $r!   metric_namemetric_valuec                     | j                   j                  t        t        j                         | j                  ||             y r   )r8   r,   r   timer   )r   r:   r;   s      r   	add_valuezMetricStream.add_valueE   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_handlerr8   groupc                      || a y | t        |<   y r   )rA   r@   )r8   rB   s     r   r   r   P   s    } $+ %Ur!   c                 J    | t         v r
t         |    }nt        }t        | |      S r   )r@   rA   r   )rB   r8   s     r   r   r   Z   s&    u%*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   b   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frB   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   rB   s   ` r   wrapzprof.<locals>.wrap   s     	q	 
	 r!   r'   )rK   rB   r[   s    ` r   r   r   o   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   funcrB   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   rB   s   ` r   r[   zprofile.<locals>.wrap   s     	t	 
	  r!   r'   )rB   r[   s   ` r   r   r      s    ( Kr!   r:   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>   )r:   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   r:   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   typingr   r   typing_extensionsr   __all__r   r	   ABCr
   r   r   r   r@   r&   __annotations__rA   r   r   rN   r   FutureWarningr   r?   r   r   floatr   r'   r!   r   <module>rt      s@     "  ! (  &RS
 CGG 
= 
 

 
 *,d3%& +*;*= - =&} &Xc] &(S (
( (V -F  G FAC As A# A S7 73 7c 7	7
:u :r!   