
    vj	                     z    d dl Z d dlZd dlmZmZ d dlZd dlZg dZd Z	 G d d          Z
 G d de          ZdS )	    N)defaultdictdeque)AverageMeterMeterBuffergpu_mem_usagec                  H    t           j                                        } | dz  S )zC
    Compute the GPU memory usage for the current device (MB).
    i   )torchcudamax_memory_allocated)mem_usage_bytess    g/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/modelscope/utils/metric.pyr   r      s"     j5577Ok**    c                       e Zd ZdZddZd Zed             Zed             Zed             Z	ed             Z
ed	             Zd
 Zd ZdS )r   zsTrack a series of values and provide access to smoothed values over a
    window or the global series average.
    2   c                 L    t          |          | _        d| _        d| _        d S )N)maxlen        r   )r   _deque_total_count)selfwindow_sizes     r   __init__zAverageMeter.__init__   s&    ;///r   c                 z    | j                             |           | xj        dz  c_        | xj        |z  c_        d S )N   )r   appendr   r   )r   values     r   updatezAverageMeter.update$   s<    5!!!qur   c                 v    t          j        t          | j                            }t          j        |          S N)nparraylistr   medianr   ds     r   r$   zAverageMeter.median)   s)    HT$+&&''y||r   c                 v    t          j        t          | j                            }|                                S r    )r!   r"   r#   r   meanr%   s     r   avgzAverageMeter.avg.   s*     HT$+&&''vvxxr   c                 <    | j         t          | j        d          z  S )Ngh㈵>)r   maxr   r   s    r   
global_avgzAverageMeter.global_avg4   s    {Sd3333r   c                 P    t          | j                  dk    r| j        d         nd S )Nr   )lenr   r,   s    r   latestzAverageMeter.latest8   s&    "%dk"2"2Q"6"6t{2D@r   c                     | j         S r    )r   r,   s    r   totalzAverageMeter.total<   s
    {r   c                 T    | j                                          d| _        d| _        d S )Nr   r   )r   clearr   r   r,   s    r   resetzAverageMeter.reset@   s(    r   c                 8    | j                                          d S r    )r   r5   r,   s    r   r5   zAverageMeter.clearE   s    r   N)r   )__name__
__module____qualname____doc__r   r   propertyr$   r)   r-   r1   r3   r6   r5    r   r   r   r      s            
  
   X   X
 4 4 X4 A A XA   X  
    r   r   c                   @     e Zd ZdZd
 fd	Zd ZddZddZd	 Z xZ	S )r   z1Computes and stores the average and current value   c                     t          j        t          |          }t                                          |           d S )N)r   )	functoolspartialr   superr   )r   r   factory	__class__s      r   r   zMeterBuffer.__init__L   s6    #LkJJJ!!!!!r   c                 \    |                                  D ]}|                                 d S r    )valuesr6   r   vs     r   r6   zMeterBuffer.resetP   2     	 	AGGIIII	 	r   timec                 D    fd|                                  D             S )Nc                 $    i | ]\  }}|v 	||S r=   r=   ).0krI   
filter_keys      r   
<dictcomp>z2MeterBuffer.get_filtered_meter.<locals>.<dictcomp>U   s$    AAAAq1r   )items)r   rP   s    `r   get_filtered_meterzMeterBuffer.get_filtered_meterT   s%    AAAAAAAAr   Nc                     |i }|                     |           |                                D ]N\  }}t          |t          j                  r|                                }| |                              |           Od S r    )r   rR   
isinstancer	   Tensordetach)r   rG   kwargsrO   rI   s        r   r   zMeterBuffer.updateW   s}    >FfLLNN 	 	DAq!U\** HHJJGNN1	 	r   c                 \    |                                  D ]}|                                 d S r    )rG   r5   rH   s     r   clear_meterszMeterBuffer.clear_meters`   rJ   r   )r?   )rK   r    )
r8   r9   r:   r;   r   r6   rS   r   rZ   __classcell__)rE   s   @r   r   r   I   s        ;;" " " " " "  B B B B         r   r   )rA   oscollectionsr   r   numpyr!   r	   __all__r   r   r   r=   r   r   <module>r`      s        				 * * * * * * * *       + + +, , , , , , , ,^    +     r   