
    9i	                     l    S SK r S SKrS SKJrJr  S SKrS SKr/ SQrS r	 " S S5      r
 " S S\5      rg)	    N)defaultdictdeque)AverageMeterMeterBuffergpu_mem_usagec                  H    [         R                  R                  5       n U S-  $ )z;
Compute the GPU memory usage for the current device (MB).
i   )torchcudamax_memory_allocated)mem_usage_bytess    W/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/utils/metric.pyr   r      s!     jj557Ok**    c                       \ rS rSrSrSS jrS r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       rS
 rS rSrg)r      zkTrack a series of values and provide access to smoothed values over a
window or the global series average.
c                 <    [        US9U l        SU l        SU l        g )N)maxlen        r   )r   _deque_total_count)selfwindow_sizes     r   __init__AverageMeter.__init__   s    ;/r   c                     U R                   R                  U5        U =R                  S-  sl        U =R                  U-  sl        g )N   )r   appendr   r   )r   values     r   updateAverageMeter.update$   s0    5!qur   c                     [         R                  " [        U R                  5      5      n[         R                  " U5      $ N)nparraylistr   medianr   ds     r   r&   AverageMeter.median)   s'    HHT$++&'yy|r   c                 t    [         R                  " [        U R                  5      5      nUR	                  5       $ r"   )r#   r$   r%   r   meanr'   s     r   avgAverageMeter.avg.   s&     HHT$++&'vvxr   c                 H    U R                   [        U R                  S5      -  $ )Ngh㈵>)r   maxr   r   s    r   
global_avgAverageMeter.global_avg4   s    {{Sd333r   c                 V    [        U R                  5      S:  a  U R                  S   $ S $ )Nr   )lenr   r0   s    r   latestAverageMeter.latest8   s%    "%dkk"2Q"6t{{2@D@r   c                     U R                   $ r"   )r   r0   s    r   totalAverageMeter.total<   s    {{r   c                 T    U R                   R                  5         SU l        SU l        g )Nr   r   )r   clearr   r   r0   s    r   resetAverageMeter.reset@   s     r   c                 8    U R                   R                  5         g r"   )r   r<   r0   s    r   r<   AverageMeter.clearE   s    r   )r   r   r   N)2   )__name__
__module____qualname____firstlineno____doc__r   r   propertyr&   r,   r1   r6   r9   r=   r<   __static_attributes__ r   r   r   r      s    

    
 4 4 A A  
r   r   c                   P   ^  \ rS rSrSrS	U 4S jjrS rS
S jrSS jrS r	Sr
U =r$ )r   I   z1Computes and stores the average and current valuec                 V   > [         R                  " [        US9n[        TU ]  U5        g )N)r   )	functoolspartialr   superr   )r   r   factory	__class__s      r   r   MeterBuffer.__init__L   s"    ##LkJ!r   c                 R    U R                  5        H  nUR                  5         M     g r"   )valuesr=   r   vs     r   r=   MeterBuffer.resetP       AGGI r   c                 f    U R                  5        VVs0 s H  u  p#X;   d  M  X#_M     snn$ s  snnf r"   )items)r   
filter_keykrV   s       r   get_filtered_meterMeterBuffer.get_filtered_meterT   s*    !%AAAAs   --c                     Uc  0 nUR                  U5        UR                  5        HG  u  p4[        U[        R                  5      (       a  UR                  5       nX   R                  U5        MI     g r"   )r   rZ   
isinstancer	   Tensordetach)r   rT   kwargsr\   rV   s        r   r   MeterBuffer.updateW   sT    >FfLLNDA!U\\**HHJGNN1 #r   c                 R    U R                  5        H  nUR                  5         M     g r"   )rT   r<   rU   s     r   clear_metersMeterBuffer.clear_meters`   rX   r   rI   )   )timer"   )rB   rC   rD   rE   rF   r   r=   r]   r   rf   rH   __classcell__)rQ   s   @r   r   r   I   s%    ;"B r   r   )rM   oscollectionsr   r   numpyr#   r	   __all__r   r   r   rI   r   r   <module>ro      s9     	 *  +, ,^+ r   