o
    ߥi	                     @   s   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 dd	lmZ dd
lmZmZ ejeejdG dd deZdS )    )DictN)Metrics)
OutputKeys)"remove_space_between_chinese_chars)default_group)torch_nested_numpify   )Metric)METRICS
MetricKeys)	group_keymodule_namec                       sT   e Zd ZdZ fddZdedefddZdd	 ZdddZdd Z	dd Z
  ZS )AccuracyMetriczThe metric computation class for classification classes.

    This metric class calculates accuracy for the whole input batches.
    c                    s"   t  j|i | g | _g | _d S N)super__init__predslabels)selfargskwargs	__class__ V/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/metrics/accuracy_metric.pyr      s   
zAccuracyMetric.__init__outputsinputsc           	      C   s   t j|v rt jnt j}|| }d }t jt jt jt jt jt jfD ]}||v r1|| d ur1|| } nqt|t|ks<J t|}|D ]}| j	
| qBt|}|D ](}t|trst|tra|d }t|tsjJ d| j
t| qQ| j
| qQd S )Nr   zboth truth and pred are str)r   LABELLABELSCAPTIONTEXTBOXESSCOREStyper   r   append
isinstancestrlistr   r   )	r   r   r   
label_nameground_truthseval_resultskeytruthresultr   r   r   add   s.   

zAccuracyMetric.addc                 C   sD   t | jt | jksJ tjtdd t| j| jD  	 iS )Nc                 S   s   g | ]\}}||kqS r   r   ).0predrefr   r   r   
<listcomp>8   s    z+AccuracyMetric.evaluate.<locals>.<listcomp>)
lenr   r   r   ACCURACYnpasarrayzipmeanitemr   r   r   r   evaluate5   s   zAccuracyMetric.evaluateotherc                 C   s    | j |j  | j|j d S r   )r   extendr   )r   r<   r   r   r   merge=   s   zAccuracyMetric.mergec                 C   s   | j | jfS r   )r   r   r:   r   r   r   __getstate__A   s   zAccuracyMetric.__getstate__c                 C   s   |    |\| _| _d S r   )r   r   r   )r   stater   r   r   __setstate__D   s   zAccuracyMetric.__setstate__)r<   r   )__name__
__module____qualname____doc__r   r   r.   r;   r>   r?   rA   __classcell__r   r   r   r   r      s    
r   )typingr   numpyr5   modelscope.metainfor   modelscope.outputsr   modelscope.utils.chinese_utilsr   modelscope.utils.registryr   modelscope.utils.tensor_utilsr   baser	   builderr
   r   register_moduleaccuracyr   r   r   r   r   <module>   s   