o
    )j(                     @   s   d dl mZ d dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ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)accuracy_scoref1_score)Metrics)
OutputKeys)default_group)torch_nested_detachtorch_nested_numpify   )Metric)METRICS
MetricKeys)Z	group_keymodule_namec                       s^   e Zd ZdZejejf 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 )SequenceClassificationMetrica  The metric computation class for sequence classification tasks.

    This metric class calculates accuracy/F1 of all the input batches.

    Args:
        label_name: The key of label column in the 'inputs' arg.
        logit_name: The key of logits column in the 'inputs' arg.
    c                    s.   t  j|i | g | _g | _|| _|| _d S N)super__init__predslabels
label_name
logit_name)selfr   r   argskwargs	__class__ r/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/metrics/sequence_classification_metric.pyr      s
   
z%SequenceClassificationMetric.__init__outputsinputsc                 C   s@   || j  }|| j }| jtt| | jtt| d S r   )r   r   r   appendr	   r   r   )r   r   r   Zground_truthsZeval_resultsr   r   r   add(   s   



z SequenceClassificationMetric.addc              
   C   s   t j| jdd}t j| jdd}t|jdksJ dt j|dd}|jd dkrKtjt	||tj
t||ddtjt||ddi}|tj
 |tj< |S tjt	||tjt||d	di}|tj |tj< |S )
Nr   )Zaxis   zOnly support predictions with shape: (batch_size, num_labels),multi-label classification is not supported in this metric class.r
   micro)Zaveragemacrobinary)npZconcatenater   r   lenshapeZargmaxr   ZACCURACYr   ZMicro_F1r   ZMacro_F1ZF1Z	Binary_F1)r   r   r   Z	preds_maxZmetricsr   r   r   evaluate0   s(   z%SequenceClassificationMetric.evaluateotherc                 C   s    | j |j  | j|j d S r   )r   extendr   )r   r*   r   r   r   mergeK   s   z"SequenceClassificationMetric.mergec                 C   s   | j | j| j| jfS r   )r   r   r   r   )r   r   r   r   __getstate__O   s   z)SequenceClassificationMetric.__getstate__c                 C   s    |    |\| _| _| _| _d S r   )r   r   r   r   r   )r   stater   r   r   __setstate__R   s   z)SequenceClassificationMetric.__setstate__)r*   r   )__name__
__module____qualname____doc__r   ZLABELSZLOGITSr   r   r!   r)   r,   r-   r/   __classcell__r   r   r   r   r      s    

r   )typingr   numpyr&   Zsklearn.metricsr   r   Zmodelscope.metainfor   Zmodelscope.outputsr   Zmodelscope.utils.registryr   Zmodelscope.utils.tensor_utilsr   r	   baser   builderr   r   Zregister_moduleZseq_cls_metricr   r   r   r   r   <module>   s   