
    uj                         d dl mZ d dlZd dlmZ d dlmZ d dlm	Z	 ddl
mZ ddlmZmZ  ej        e	ej        	           G d
 de                      ZdS )    )DictN)Metrics)
OutputKeys)default_group   )Metric)METRICS
MetricKeys)	group_keymodule_namec                   T     e Zd ZdZ fdZdedefdZd ZddZd	 Z	d
 Z
ddZ xZS )AveragePrecisionMetriczThe metric computation class for multi average precision classes.

    This metric class calculates multi average precision for the whole input batches.
    c                      t                      j        |i | g | _        g | _        |                    dd          | _        d S )N	threshold      ?)super__init__predslabelsgetthresh)selfargskwargs	__class__s      m/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/modelscope/metrics/map_metric.pyr   zAveragePrecisionMetric.__init__   sF    $)&)))
jjc22    outputsinputsc                    t           j        |v rt           j        nt           j        }||         }||         }t           j        t           j        t           j        t           j        t           j        fD ]}||v r||         
||         } nt          |          t          |          k    sJ |D ]}| j        	                    |           |D ]r}t          |t                    rA| j        	                    |                                                    dd                     X| j        	                    |           sd S )N  )r   LABELLABELSCAPTIONTEXTBOXESSCOREStyper   append
isinstancestrr   stripreplace)	r   r   r   
label_nameground_truthseval_resultskeytruthresults	            r   addzAveragePrecisionMetric.add   s?   )3)9V)C)CZ%%IZ
z*z*"JOZ5E!:#4
 	 	C g~~'#,":&s|M""d<&8&88888" 	& 	&EKu%%%%" 	* 	*F%%% *
!!&,,.."8"8b"A"ABBBB
!!&))))		* 	*r   c                 
   t          | j                  t          | j                  k    sJ |                     | j        | j        | j                  }t
          j        |                                                                iS N)	lenr   r   _calculate_ap_scorer   r
   mAPmeanitem)r   scoress     r   evaluatezAveragePrecisionMetric.evaluate0   sc    4:#dk"2"22222))$*dk4;OO 2 2 4 455r   otherc                     | j                             |j                    | j                            |j                   d S r7   )r   extendr   )r   r?   s     r   mergezAveragePrecisionMetric.merge5   s8    
%+&&&5<(((((r   c                 *    | j         | j        | j        fS r7   )r   r   r   )r   s    r   __getstate__z#AveragePrecisionMetric.__getstate__9   s    z4;33r   c                 X    |                                   |\  | _        | _        | _        d S r7   )r   r   r   r   )r   states     r   __setstate__z#AveragePrecisionMetric.__setstate__<   s%    /4,
DKr   r   c                 (   t          j        |          }t          j        |          }t          j        |d d d df         |d d d df         k     |d d d df         |d d d df                   }t          j        |d d dd f         |d d dd f         k     |d d dd f         |d d dd f                   }t          j        ||gd          }|d d df         |d d df         z
  |d d df         |d d df         z
  z  }	|d d df         |d d df         z
  |d d df         |d d df         z
  z  }
|d d df         |d d df         z
  }|d d df         |d d df         z
  }||z  }||	|
z   |z
  dz   z  }||k    |dk    z  |dk    z  S )N   r   )axisr      gư>)nparraywhereconcatenate)r   r   r   r   hypsrefsab	interactsarea_predictionsarea_targetsinteracts_winteracts_harea_interactsiouss                  r   r9   z*AveragePrecisionMetric._calculate_ap_score@   s   xxHT!!!RaR%[42A2;.QQQUT!!!RaR%[IIHT!!!QRR%[4122;.QQQUT!!!QRR%[IINAq6222	 AJaaad3AJaaad#%QQQT
T!!!Q$Z/DAJaaad4KL1o	!!!Q$71o	!!!Q$7${2|+n<tCE;?3{QGGr   )r?   r   )r   )__name__
__module____qualname____doc__r   r   r5   r>   rB   rD   rG   r9   __classcell__)r   s   @r   r   r      s         
3 3 3 3 3*4 * * * * *(6 6 6
) ) ) )4 4 45 5 5H H H H H H H Hr   r   )typingr   numpyrL   modelscope.metainfor   modelscope.outputsr   modelscope.utils.registryr   baser   builderr	   r
   register_modulemulti_average_precisionr    r   r   <module>rj      s              ' ' ' ' ' ' ) ) ) ) ) ) 3 3 3 3 3 3       ( ( ( ( ( ( ( ( )HJ J J>H >H >H >H >HV >H >HJ J>H >H >Hr   