o
    5ti%                     @   s   d dl mZmZmZmZ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 ddlmZmZmZ erBd d	lmZmZmZmZ d
ZdZdZdZG dd deZG dd deZG dd deZdS )    )TYPE_CHECKINGAnyCallableDictOptionalTupleUnion)Dataset)Literal   )EvaluationModule)add_start_docstrings   )"EVALUATOR_COMPUTE_RETURN_DOCSTRING EVALUTOR_COMPUTE_START_DOCSTRING	Evaluator)PipelinePreTrainedModelPreTrainedTokenizerTFPreTrainedModela  
        input_column (`str`, defaults to `"text"`):
            the name of the column containing the input text in the dataset specified by `data`.
        label_column (`str`, defaults to `"label"`):
            the name of the column containing the labels in the dataset specified by `data`.
        generation_kwargs (`Dict`, *optional*, defaults to `None`):
            The generation kwargs are passed to the pipeline and set the text generation strategy.
a  
    Examples:
    ```python
    >>> from evaluate import evaluator
    >>> from datasets import load_dataset
    >>> task_evaluator = evaluator("text2text-generation")
    >>> data = load_dataset("cnn_dailymail", "3.0.0", split="validation[:40]")
    >>> results = task_evaluator.compute(
    >>>     model_or_pipeline="facebook/bart-large-cnn",
    >>>     data=data,
    >>>     input_column="article",
    >>>     label_column="highlights",
    >>>     metric="rouge",
    >>> )
    ```
a  
    Examples:
    ```python
    >>> from evaluate import evaluator
    >>> from datasets import load_dataset
    >>> task_evaluator = evaluator("summarization")
    >>> data = load_dataset("cnn_dailymail", "3.0.0", split="validation[:40]")
    >>> results = task_evaluator.compute(
    >>>     model_or_pipeline="facebook/bart-large-cnn",
    >>>     data=data,
    >>>     input_column="article",
    >>>     label_column="highlights",
    >>> )
    ```
a  
    Examples:
    ```python
    >>> from evaluate import evaluator
    >>> from datasets import load_dataset
    >>> task_evaluator = evaluator("translation")
    >>> data = load_dataset("wmt19", "fr-de", split="validation[:40]")
    >>> data = data.map(lambda x: {"text": x["translation"]["de"], "label": x["translation"]["fr"]})
    >>> results = task_evaluator.compute(
    >>>     model_or_pipeline="Helsinki-NLP/opus-mt-de-fr",
    >>>     data=data,
    >>> )
    ```
c                #       s   e Zd ZdZdZddiZd& fdd	Zd	d
 Zee	e
ee														d'deededdf deeef dee dee deeef deeedf  ded dedededee d ed!ed"ed#eeeef ef f fd$d%Z  ZS )(Text2TextGenerationEvaluatora&  
    Text2Text generation evaluator.
    This Text2Text generation evaluator can currently be loaded from [`evaluator`] using the default task name
    `text2text-generation`.
    Methods in this class assume a data format compatible with the [`~transformers.Text2TextGenerationPipeline`].
    	generated
truncationTtext2text-generationNc                       t  j||d d S N)default_metric_namesuper__init__selftaskr   	__class__ [/home/ubuntu/.local/lib/python3.10/site-packages/evaluate/evaluator/text2text_generation.pyr   c      z%Text2TextGenerationEvaluator.__init__c                    s   d fdd|D iS )Npredictionsc                    s   g | ]
}| j  d  qS )_text)PREDICTION_PREFIX).0predr!   r%   r&   
<listcomp>g   s    zFText2TextGenerationEvaluator.predictions_processor.<locals>.<listcomp>r%   )r!   r(   label_mappingr%   r-   r&   predictions_processorf   s   z2Text2TextGenerationEvaluator.predictions_processorsimpleffffff?'  textlabelmodel_or_pipeliner   r   r   datasubsetsplitmetric	tokenizerr   strategyr1   	bootstrapconfidence_leveln_resamplesdevicerandom_stateinput_columnlabel_columngeneration_kwargsreturnc                    s>   |d ur
| j | t j|||||||||	|
|||d}|S )N)r6   r7   r8   r9   r:   r;   r<   r?   r@   rA   rB   rC   rD   )PIPELINE_KWARGSupdater   computer!   r6   r7   r8   r9   r:   r;   r<   r?   r@   rA   rB   rC   rD   rE   resultr#   r%   r&   rI   i   s$   z$Text2TextGenerationEvaluator.compute)r   NNNNNNNr1   r2   r3   NNr4   r5   N)__name__
__module____qualname____doc__r*   rG   r   r0   r   r   TASK_DOCUMENTATION_KWARGSr    TEXT2TEXT_TASK_DOCSTRING_EXAMPLEr   strr   r	   r   r   r
   floatintdictr   r   r   rI   __classcell__r%   r%   r#   r&   r   X   sv    


	
r   c                #       s   e Zd ZdZdZddiZd$ fdd	Zeee	e
e									
						d%deededdf deeef dee dee deeef deeedf  ded dedededee deded ed!eeeef ef f fd"d#Z  ZS )&SummarizationEvaluatora  
    Text summarization evaluator.
    This text summarization evaluator can currently be loaded from [`evaluator`] using the default task name
    `summarization`.
    Methods in this class assume a data format compatible with the [`SummarizationEvaluator`].
    summaryr   TsummarizationNc                    r   r   r   r    r#   r%   r&   r      r'   zSummarizationEvaluator.__init__r1   r2   r3   r4   r5   r6   r   r   r   r7   r8   r9   r:   r;   r   r<   r=   r?   r@   rA   rB   rC   rD   rE   rF   c                    ,   t  j|||||||||	|
||||d}|S N)r6   r7   r8   r9   r:   r;   r<   r?   r@   rA   rB   rC   rD   rE   r   rI   rJ   r#   r%   r&   rI      "   zSummarizationEvaluator.compute)rZ   NrL   )rM   rN   rO   rP   r*   rG   r   r   r   rQ   r   $SUMMARIZATION_TASK_DOCSTRING_EXAMPLEr   rS   r   r	   r   r   r
   rT   rU   rV   r   r   r   rI   rW   r%   r%   r#   r&   rX      t    


	
rX   c                #       s   e Zd ZdZdZddiZd# fdd	Zeee	e
e										
					d$deededdf deeef dee dee deeef deeedf  ded dedededee dededed eeeef ef f fd!d"Z  ZS )%TranslationEvaluatora  
    Translation evaluator.
    This translation generation evaluator can currently be loaded from [`evaluator`] using the default task name
    `translation`.
    Methods in this class assume a data format compatible with the [`~transformers.TranslationPipeline`].
    translationr   TNc                    r   r   r   r    r#   r%   r&   r      r'   zTranslationEvaluator.__init__r1   r2   r3   r4   r5   r6   r   r   r   r7   r8   r9   r:   r;   r   r<   r=   r?   r@   rA   rB   rC   rD   rE   rF   c                    r[   r\   r]   rJ   r#   r%   r&   rI      r^   zTranslationEvaluator.compute)rb   NrL   )rM   rN   rO   rP   r*   rG   r   r   r   rQ   r   "TRANSLATION_TASK_DOCSTRING_EXAMPLEr   rS   r   r	   r   r   r
   rT   rU   rV   r   r   r   rI   rW   r%   r%   r#   r&   ra      r`   ra   N) typingr   r   r   r   r   r   r   datasetsr	   typing_extensionsr
   moduler   utils.file_utilsr   baser   r   r   transformersr   r   r   r   rQ   rR   r_   rc   r   rX   ra   r%   r%   r%   r&   <module>   s   $	@;