
    Ph1                     t   U d dl Z 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	 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       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d!dZd#dededefdZdededefdZdefd Zy)$    N)
namedtuplewraps)DictOptional)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     pC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\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.emit'   sD    %%&b)?)?(@KDTDTCUUVWbWhWhVij	
r    Nr!   r"   r#   r   r+   r&   r    r   r
   r
   &   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__3   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_value7   s,    tyy{DOO[,O	
r    N)r!   r"   r#   r%   r	   r   intr=   r&   r    r   r   r   2   s(    3  
S 
 
r    r   _default_metrics_handlerr7   groupc                      || a y | t        |<   y r   )r?   _metrics_map)r7   r@   s     r   r   r   B   s    } $+ %Ur    c                 J    | t         v r
t         |    }nt        }t        | |      S r   )rB   r?   r   )r@   r7   s     r   r   r   L   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qualnamerH   modules       r   _get_metric_namerM   T   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.successrF   z.failurez.duration.ms)rM   r<   r   	Exceptionr   )argskwargskeystartresultfr@   s        r   wrapperz#prof.<locals>.wrap.<locals>.wrapperv   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   )rX   rY   r@   s   ` r   wrapzprof.<locals>.wrapu   s     	q	 
	 r    r&   )rJ   r@   rZ   s    ` r   r   r   a   s    (" 
Bxr    c                 F     t        j                  dt                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>):
    zDeprecated, use @prof insteadc                 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rQ   )r<   r   r!   rR   r   )rS   rT   
start_timerW   funcr@   s       r   rY   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   )r_   rY   r@   s   ` r   rZ   zprofile.<locals>.wrap   s     	t	 
	  r    )warningswarnDeprecationWarning)r@   rZ   s   ` r   r   r      s!     MM13EF( 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:   rc   s      r   r   r      s     l%%k<@r    c                 h    t        j                  d       t        |       }|j                  ||       y )NzKDeprecated, use put_metric(metric_group)(metric_name, metric_value) instead)r`   ra   r   r=   )rc   r9   r:   metric_streams       r   r   r      s-    MMU 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<   r`   collectionsr   	functoolsr   typingr   r   __all__r   r   ABCr	   r
   r   r   rB   r?   __annotations__r%   r   r   rM   r   r   r>   r   r   floatr   r&   r    r   <module>rr      s       "  ! &RS
 CGG 
= 
 

 
 *;*= - =&} &Xc] &(S (
( (V!HAC As A# A7 73 7c 7:u :r    