o
    ߥi                     @   s|   d dl mZ 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mZ d	Zejeejd
G dd de
ZdS )    )zip_longest)DictN)Metrics)default_group   )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 )
BleuMetriczThe metric computation bleu for text generation classes.

    This metric class calculates accuracy for the whole input batches.
    c                    sP   t  j|i | |dd| _|dd| _|dd| _t | _t | _d S )Neval_tokenized_bleuFhyp_namehypref_nameref)	super__init__getr   r   r   listrefshyps)selfargskwargs	__class__ R/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/metrics/bleu_metric.pyr      s   zBleuMetric.__init__outputsinputsc                 C   s(   | j || j  | j|| j  d S N)r   extendr   r   r   )r   r    r!   r   r   r   add   s   zBleuMetric.addc                 C   sH   | j rtj| jtt| j dd}nt| jtt| j }tj|j	iS )Nnone)tokenize)
r   	sacrebleucorpus_bleur   r   r   r   r	   BLEU_4score)r   bleur   r   r   evaluate!   s   zBleuMetric.evaluateotherc                 C   s    | j |j  | j|j d S r"   )r   r#   r   )r   r-   r   r   r   merge,   s   zBleuMetric.mergec                 C   s   | j | j| j| j| jfS r"   r   r   r   r   r   )r   r   r   r   __getstate__0   s   zBleuMetric.__getstate__c                 C   s   |\| _ | _| _| _| _d S r"   r/   )r   stater   r   r   __setstate__3   s   zBleuMetric.__setstate__)r-   r   )__name__
__module____qualname____doc__r   r   r$   r,   r.   r0   r2   __classcell__r   r   r   r   r      s    
r   )	itertoolsr   typingr   r'   modelscope.metainfor   modelscope.utils.registryr   baser   builderr   r	   EVAL_BLEU_ORDERregister_moduleBLEUr   r   r   r   r   <module>   s    