o
    *j	                     @   sb   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d Z	G dd dZ
G dd	 d	eZdS )
    N)defaultdictdeque)AverageMeterMeterBuffergpu_mem_usagec                  C   s   t j } | d S )zC
    Compute the GPU memory usage for the current device (MB).
    i   )torchcudaZmax_memory_allocated)Zmem_usage_bytes r	   X/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/utils/metric.pyr      s   
r   c                   @   sn   e Zd ZdZdddZdd Zedd Zed	d
 Zedd Z	edd Z
edd Zdd Zd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                 C   s   t |d| _d| _d| _d S )N)maxlen        r   )r   _deque_total_count)selfwindow_sizer	   r	   r
   __init__   s   
zAverageMeter.__init__c                 C   s,   | j | |  jd7  _|  j|7  _d S )N   )r   appendr   r   )r   valuer	   r	   r
   update$   s   zAverageMeter.updatec                 C   s   t t| j}t |S N)nparraylistr   medianr   dr	   r	   r
   r   )   s   
zAverageMeter.medianc                 C   s   t t| j}| S r   )r   r   r   r   meanr   r	   r	   r
   avg.   s   zAverageMeter.avgc                 C   s   | j t| jd S )Ngh㈵>)r   maxr   r   r	   r	   r
   
global_avg4   s   zAverageMeter.global_avgc                 C   s   t | jdkr| jd S d S )Nr   )lenr   r"   r	   r	   r
   latest8   s   zAverageMeter.latestc                 C   s   | j S r   )r   r"   r	   r	   r
   total<   s   zAverageMeter.totalc                 C   s   | j   d| _d| _d S )Nr   r   )r   clearr   r   r"   r	   r	   r
   reset@   s   

zAverageMeter.resetc                 C   s   | j   d S r   )r   r(   r"   r	   r	   r
   r(   E   s   zAverageMeter.clearN)r   )__name__
__module____qualname____doc__r   r   propertyr   r    r#   r&   r'   r)   r(   r	   r	   r	   r
   r      s     





r   c                       sF   e Zd ZdZd fdd	Zdd Zddd	ZdddZdd Z  Z	S )r   z1Computes and stores the average and current value   c                    s   t jt|d}t | d S )N)r   )	functoolspartialr   superr   )r   r   factory	__class__r	   r
   r   L   s   zMeterBuffer.__init__c                 C      |   D ]}|  qd S r   )valuesr)   r   vr	   r	   r
   r)   P      
zMeterBuffer.resettimec                    s    fdd|   D S )Nc                    s   i | ]\}} |v r||qS r	   r	   ).0kr9   
filter_keyr	   r
   
<dictcomp>U   s    z2MeterBuffer.get_filtered_meter.<locals>.<dictcomp>)items)r   r?   r	   r>   r
   get_filtered_meterT   s   zMeterBuffer.get_filtered_meterNc                 K   sN   |d u ri }| | | D ]\}}t|tjr| }| |  | qd S r   )r   rA   
isinstancer   ZTensordetach)r   r7   kwargsr=   r9   r	   r	   r
   r   W   s   
zMeterBuffer.updatec                 C   r6   r   )r7   r(   r8   r	   r	   r
   clear_meters`   r:   zMeterBuffer.clear_meters)r/   )r;   r   )
r*   r+   r,   r-   r   r)   rB   r   rF   __classcell__r	   r	   r4   r
   r   I   s    

	r   )r0   oscollectionsr   r   numpyr   r   __all__r   r   r   r	   r	   r	   r
   <module>   s   /