o
    ߥiN                     @   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)	group_keymodule_namec                       sZ   e Zd ZdZ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 )
LossMetriczhThe metric class to calculate average loss of batches.

    Args:
        loss_key: The key of loss
    c                    s"   t  j|i | || _g | _d S N)super__init__loss_keylosses)selfr   argskwargs	__class__ R/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/metrics/loss_metric.pyr      s   
zLossMetric.__init__outputsinputsc                 C   s"   || j  }| jtt| d S r   )r   r   appendr	   r   )r   r   r   lossr   r   r   add   s   
zLossMetric.addc                 C   s   t jtt| jiS r   )r   LOSSfloatnpaverager   r   r   r   r   evaluate#   s   zLossMetric.evaluateotherc                 C   s   | j |j  d S r   )r   extend)r   r(   r   r   r   merge&   s   zLossMetric.mergec                 C   s   | j S r   )r   r&   r   r   r   __getstate__)   s   zLossMetric.__getstate__c                 C   s   |    || _d S r   )r   r   )r   stater   r   r   __setstate__,   s   
zLossMetric.__setstate__)r(   r   )__name__
__module____qualname____doc__r   r"   r   r   r!   r'   r*   r+   r-   __classcell__r   r   r   r   r      s    
r   )typingr   numpyr$   sklearn.metricsr   r   modelscope.metainfor   modelscope.outputsr   modelscope.utils.registryr   modelscope.utils.tensor_utilsr   r	   baser   builderr   r   register_moduleloss_metricr   r   r   r   r   <module>   s   