o
    ߥiG                     @   s   d dl Z d dlmZ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 d d	lmZ e Zejeejd
G dd de
ZdS )    N)DictListUnion)	DataFrame)Metrics)Metric)METRICS
MetricKeys)InputFormat)
get_logger)default_group)	group_keymodule_namec                	   @   s   e Zd ZdZddefddZddd	Zd
eee	e f deee	e
eef  f ddfddZdeeeeef f fddZdddZdedefddZdS )TranslationEvaluationMetricz2The metric class for translation evaluation.

          9@gap_thresholdc                 C   s2   || _ t | _t | _t | _t | _t | _dS )aJ  Build a translation evaluation metric, following the designed
            Kendall's tau correlation from WMT Metrics Shared Task competitions.

            Args:
                gap_threshold: The score gap denoting the available hypothesis pair.

            Returns:
                A metric for translation evaluation.
        N)r   listlp
segment_id	raw_scorescoreinput_format)selfr    r   d/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/metrics/translation_evaluation_metric.py__init__   s   
z$TranslationEvaluationMetric.__init__returnNc                 C   s6   | j   | j  | j  | j  | j  dS )z(Clear all the stored variables.
        N)r   clearr   r   r   r   )r   r   r   r   r   +   s   




z!TranslationEvaluationMetric.clearoutputsinputsc                 C   s^   |  j |d 7  _ |  j|d 7  _|  j|d 7  _|  j|d 7  _|  j|d 7  _dS )zCollect the related results for processing.

            Args:
                outputs: Dict containing 'scores'
                inputs: Dict containing 'labels' and 'segment_ids'

        r   r   r   r   r   Nr   r   r   r   r   )r   r   r   r   r   r   add7   s   
zTranslationEvaluationMetric.addc           	   	   C   s
  | j | j| j| j| jd}t|d}t }|j D ]h}t	d|j
  ||j|k }t }t|j  D ]'}||j |k }| |||j
d | < t	d|||j
d |  d f  q5t| t| }|||j
d < t	d|j
|f  t	d	 || q|S )
zCompute the Kendall's tau correlation.

            Returns:
                A dict denoting Kendall's tau correlation.

        r    )dataz&Evaluation results for %s input format_z	%s: %fd   _avgz1Average evaluation result for %s input format: %f )r   r   r   r   r   r   dictuniqueloggerinfovaluesortedcompute_kendall_tausumvalueslenupdate)	r   r"   correlationr   input_format_datatemp_correlationr   sub_dataavg_correlationr   r   r   evaluateJ   sN   	


z$TranslationEvaluationMetric.evaluateotherc                 C   sT   |  j |j 7  _ |  j|j7  _|  j|j7  _|  j|j7  _|  j|j7  _dS )zMerge the predictions from other TranslationEvaluationMetric objects.

            Args:
                other: Another TranslationEvaluationMetric object.

        N)r   r   segment_idsr   r   r   )r   r8   r   r   r   mergev   s   z!TranslationEvaluationMetric.mergecsv_datac           	      C   s6  d }}t |j D ]z}||j|k }|d}tdt|D ]d}t|d t|D ]X}| j| | j|  | jkrX| j| | j| krI|d7 }q+| j| | j| k rW|d7 }q+| j| | j|  | j kr| j| | j| k ru|d7 }q+| j| | j| kr|d7 }q+q q|| dkrt	
d dS || ||  S )zCompute kendall's tau correlation.

            Args:
                csv_data: The pandas dataframe.

            Returns:
                float: THe kendall's Tau correlation.

        r   records   znWe don't have available pairs when evaluation. Marking the kendall tau correlation as the lowest value (-1.0).g      )r,   r   r(   to_dictranger0   r   r   r   r)   warning)	r   r;   concordiscorr   group_csv_dataexamplesijr   r   r   r-      sD   



z/TranslationEvaluationMetric.compute_kendall_tau)r   )r   N)r8   r   r   N)__name__
__module____qualname____doc__floatr   r   r   strr   r   intr!   r7   r:   r   r-   r   r   r   r   r      s    


,r   )	importlibtypingr   r   r   pandasr   modelscope.metainfor   modelscope.metrics.baser   modelscope.metrics.builderr   r	   )modelscope.models.nlp.unite.configurationr
   modelscope.utils.loggerr   modelscope.utils.registryr   r)   register_moduletranslation_evaluation_metricr   r   r   r   r   <module>   s   