






from sklearn.metrics import mean_squared_error

import datasets


__a   :							Any						= "\\n@article{scikit-learn,\n title={Scikit-learn: Machine Learning in {P}ython},\n author={Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V.\n         and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P.\n         and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and\n         Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.},\n journal={Journal of Machine Learning Research},\n volume={12},\n pages={2825--2830},\n year={2011}\n}\n"

__a   :							str						= "\\nMean Squared Error(MSE) is the average of the square of difference between the predicted\nand actual values.\n"


__a   :							Union[str, Any]						= "\nArgs:\n    predictions: array-like of shape (n_samples,) or (n_samples, n_outputs)\n        Estimated target values.\n    references: array-like of shape (n_samples,) or (n_samples, n_outputs)\n        Ground truth (correct) target values.\n    sample_weight: array-like of shape (n_samples,), default=None\n        Sample weights.\n    multioutput: {\"raw_values\", \"uniform_average\"} or array-like of shape (n_outputs,), default=\"uniform_average\"\n        Defines aggregating of multiple output values. Array-like value defines weights used to average errors.\n\n        \"raw_values\" : Returns a full set of errors in case of multioutput input.\n\n        \"uniform_average\" : Errors of all outputs are averaged with uniform weight.\n\n    squared : bool, default=True\n        If True returns MSE value, if False returns RMSE (Root Mean Squared Error) value.\n\nReturns:\n    mse : mean squared error.\nExamples:\n\n    >>> mse_metric = datasets.load_metric(\"mse\")\n    >>> predictions = [2.5, 0.0, 2, 8]\n    >>> references = [3, -0.5, 2, 7]\n    >>> results = mse_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {'mse': 0.375}\n    >>> rmse_result = mse_metric.compute(predictions=predictions, references=references, squared=False)\n    >>> print(rmse_result)\n    {'mse': 0.6123724356957945}\n\n    If you're using multi-dimensional lists, then set the config as follows :\n\n    >>> mse_metric = datasets.load_metric(\"mse\", \"multilist\")\n    >>> predictions = [[0.5, 1], [-1, 1], [7, -6]]\n    >>> references = [[0, 2], [-1, 2], [8, -5]]\n    >>> results = mse_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {'mse': 0.7083333333333334}\n    >>> results = mse_metric.compute(predictions=predictions, references=references, multioutput='raw_values')\n    >>> print(results) # doctest: +NORMALIZE_WHITESPACE\n    {'mse': array([0.41666667, 1. ])}\n"


@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION      ,   _KWARGS_DESCRIPTION	)
class    __lowercase   (						datasets.Metric	):







     '''simple docstring'''




     def 		lowerCAmelCase_  (					self							:      int					):


         """simple docstring"""



         return datasets.MetricInfo(
             description=_DESCRIPTION			,						citation=_CITATION			,						inputs_description=_KWARGS_DESCRIPTION			,						features=datasets.Features(self._get_feature_types()					)			,						reference_urls=[
                 """https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html"""
             ]			,						)




     def 		lowerCAmelCase_  (					self							:      List[Any]					):


         """simple docstring"""



         if self.config_name == "multilist":
             return {
                 "predictions": datasets.Sequence(datasets.Value("""float"""					)					),
                 "references": datasets.Sequence(datasets.Value("""float"""					)					),
             }
         else:
             return {
                 "predictions": datasets.Value("""float"""					),
                 "references": datasets.Value("""float"""					),
             }





     def 		lowerCAmelCase_  (					self							:      List[Any]			,						UpperCamelCase_							:      Dict			,						UpperCamelCase_							:      Any			,						UpperCamelCase_							:      Any=None			,						UpperCamelCase_							:      Tuple="uniform_average"			,						UpperCamelCase_							:      str=True					):


         """simple docstring"""



         __A       =						mean_squared_error(
             UpperCamelCase_			,						UpperCamelCase_			,						sample_weight=UpperCamelCase_			,						multioutput=UpperCamelCase_			,						squared=UpperCamelCase_					)

         return {"mse": mse}












import os
from shutil import copyfile
from typing import Any, Dict, List, Optional, Tuple

import sentencepiece as spm

from ...tokenization_utils import PreTrainedTokenizer
from ...utils import logging


__a   :							List[str]						= "▁"

__a   :							int						= {"vocab_file": "spiece.model"}

__a   :							Any						= {
    "vocab_file": {"google/pegasus-xsum": "https://huggingface.co/google/pegasus-xsum/resolve/main/spiece.model"}
}

__a   :							Any						= {
    "google/pegasus-xsum": 512,
}


__a   :							Union[str, Any]						= logging.get_logger(__name__)


class    __lowercase   (						lowercase_	):







     '''simple docstring'''
     SCREAMING_SNAKE_CASE     =					VOCAB_FILES_NAMES

     SCREAMING_SNAKE_CASE     =					VOCAB_FILES_NAMES
     SCREAMING_SNAKE_CASE     =					PRETRAINED_VOCAB_FILES_MAP
     SCREAMING_SNAKE_CASE     =					PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
     SCREAMING_SNAKE_CASE     =					["input_ids", "attention_mask"]




     def __init__(					self							:      List[str]			,						UpperCamelCase_							:      int			,						UpperCamelCase_							:      Dict="<pad>"			,						UpperCamelCase_							:      Dict="</s>"			,						UpperCamelCase_							:      Optional[Any]="<unk>"			,						UpperCamelCase_							:      List[Any]="<mask_2>"			,						UpperCamelCase_							:      List[Any]="<mask_1>"			,						UpperCamelCase_							:      str=None			,						UpperCamelCase_							:      Dict=103			,						UpperCamelCase_							:      Optional[Dict[str, Any]] = None			,						**UpperCamelCase_							:      int			,						):


         """simple docstring"""



         __A       =						offset
         if additional_special_tokens is not None:
             if not isinstance(UpperCamelCase_			,						UpperCamelCase_					):
                 raise TypeError(
                     F"additional_special_tokens should be of type {type(UpperCamelCase_					)}, but is"
                     F" {type(UpperCamelCase_					)}"					)

             __A       =						(
                 ([mask_token_sent] + additional_special_tokens)
                 if mask_token_sent not in additional_special_tokens and mask_token_sent is not None
                 else additional_special_tokens
             )
             # fill additional tokens with ..., <unk_token_102> in case not all additional tokens are already taken
             additional_special_tokens_extended += [
                 F"<unk_{i}>" for i in range(len(UpperCamelCase_					)			,						self.offset - 1					)
             ]

             if len(set(UpperCamelCase_					)					) != len(UpperCamelCase_					):
                 raise ValueError(
                     """Please make sure that the provided additional_special_tokens do not contain an incorrectly"""
                     F" shifted list of <unk_x> tokens. Found {additional_special_tokens_extended}."					)
             __A       =						additional_special_tokens_extended
         else:
             __A       =						[mask_token_sent] if mask_token_sent is not None else []
             additional_special_tokens += [F"<unk_{i}>" for i in range(2			,						self.offset					)]

         __A       =						{} if sp_model_kwargs is None else sp_model_kwargs

         super().__init__(
             eos_token=UpperCamelCase_			,						unk_token=UpperCamelCase_			,						mask_token=UpperCamelCase_			,						pad_token=UpperCamelCase_			,						mask_token_sent=UpperCamelCase_			,						offset=UpperCamelCase_			,						additional_special_tokens=UpperCamelCase_			,						sp_model_kwargs=self.sp_model_kwargs			,						**UpperCamelCase_			,						)
         __A       =						mask_token_sent
         __A       =						vocab_file
         __A       =						spm.SentencePieceProcessor(**self.sp_model_kwargs					)
         self.sp_model.Load(UpperCamelCase_					)

         # add special tokens to encoder dict
         __A       =						{
             0: self.pad_token,
             1: self.eos_token,
         }

         if self.mask_token_sent is not None:
             self.encoder.update(
                 {
                     2: self.mask_token_sent,
                     3: self.mask_token,
                 }					)

         if self.offset > 0:
             # entries 2-104 are only used for pretraining and called <mask_1>, <mask_2>, unk_2, ...unk_102
             # mask_token_sent is already added to list -> so start at 1
             self.encoder.update({i + 3: additional_special_tokens[i] for i in range(1			,						self.offset - 1					)}					)

         __A       =						{v: k for k, v in self.encoder.items()}




     @property
     def 		lowerCAmelCase_  (					self							:      Any					):


         """simple docstring"""



         return len(self.sp_model					) + self.offset




     def 		lowerCAmelCase_  (					self							:      Any					):


         """simple docstring"""



         __A       =						{self.convert_ids_to_tokens(UpperCamelCase_					): i for i in range(self.vocab_size					)}
         vocab.update(self.added_tokens_encoder					)
         return vocab




     def __getstate__(					self							:      Tuple					):


         """simple docstring"""



         __A       =						self.__dict__.copy()
         __A       =						None
         return state




     def __setstate__(					self							:      Tuple			,						UpperCamelCase_							:      Dict					):


         """simple docstring"""



         __A       =						d

         # for backward compatibility
         if not hasattr(self			,						"""sp_model_kwargs"""					):
             __A       =						{}

         __A       =						spm.SentencePieceProcessor(**self.sp_model_kwargs					)
         self.sp_model.Load(self.vocab_file					)




     def 		lowerCAmelCase_  (					self							:      Tuple			,						UpperCamelCase_							:      str					):


         """simple docstring"""



         return self.sp_model.encode(UpperCamelCase_			,						out_type=UpperCamelCase_					)




     def 		lowerCAmelCase_  (					self							:      str			,						UpperCamelCase_							:      str					):


         """simple docstring"""



         if token in self.decoder:
             return self.decoder[token]
         elif token in self.added_tokens_decoder:
             return self.added_tokens_decoder[token]
         __A       =						self.sp_model.piece_to_id(UpperCamelCase_					)
         return sp_id + self.offset




     def 		lowerCAmelCase_  (					self							:      int			,						UpperCamelCase_							:      int					):


         """simple docstring"""



         if index in self.encoder:
             return self.encoder[index]
         elif index in self.added_tokens_encoder:
             return self.added_tokens_encoder[index]
         else:
             __A       =						self.sp_model.IdToPiece(index - self.offset					)
         return token




     def 		lowerCAmelCase_  (					self							:      Optional[int]			,						UpperCamelCase_							:      List[str]					):


         """simple docstring"""



         __A       =						[]
         __A       =						""""""
         for token in tokens:
             # make sure that special tokens are not decoded using sentencepiece model
             if token in self.all_special_tokens:
                 out_string += self.sp_model.decode(UpperCamelCase_					) + token
                 __A       =						[]
             else:
                 current_sub_tokens.append(UpperCamelCase_					)
         out_string += self.sp_model.decode(UpperCamelCase_					)
         return out_string.strip()




     def 		lowerCAmelCase_  (					self							:      Any			,						UpperCamelCase_							:      List[Any]=False					):


         """simple docstring"""



         return 1




     def 		lowerCAmelCase_  (					self							:      Optional[int]			,						UpperCamelCase_							:      Tuple					):


         """simple docstring"""



         __A       =						set(self.all_special_ids					)  # call it once instead of inside list comp
         all_special_ids.remove(self.unk_token_id					)  # <unk> is only sometimes special

         return [1 if x in all_special_ids else 0 for x in seq]




     def 		lowerCAmelCase_  (					self							:      int			,						UpperCamelCase_							:      List			,						UpperCamelCase_							:      Optional[List] = None			,						UpperCamelCase_							:      bool = False					):


         """simple docstring"""



         if already_has_special_tokens:
             return self._special_token_mask(UpperCamelCase_					)
         elif token_ids_a is None:
             return self._special_token_mask(UpperCamelCase_					) + [1]
         else:
             return self._special_token_mask(token_ids_a + token_ids_a					) + [1]




     def 		lowerCAmelCase_  (					self							:      List[Any]			,						UpperCamelCase_							:      str			,						UpperCamelCase_							:      Optional[Any]=None					):


         """simple docstring"""



         if token_ids_a is None:
             return token_ids_a + [self.eos_token_id]
         # We don't expect to process pairs, but leave the pair logic for API consistency
         return token_ids_a + token_ids_a + [self.eos_token_id]





     def 		lowerCAmelCase_  (					self							:      List[Any]			,						UpperCamelCase_							:      str			,						UpperCamelCase_							:      Optional[str] = None					):


         """simple docstring"""



         if not os.path.isdir(UpperCamelCase_					):
             logger.error(F"Vocabulary path ({save_directory}) should be a directory"					)
             return
         __A       =						os.path.join(
             UpperCamelCase_			,						(filename_prefix + """-""" if filename_prefix else """""") + VOCAB_FILES_NAMES["""vocab_file"""]					)

         if os.path.abspath(self.vocab_file					) != os.path.abspath(UpperCamelCase_					) and os.path.isfile(self.vocab_file					):
             copyfile(self.vocab_file			,						UpperCamelCase_					)
         elif not os.path.isfile(self.vocab_file					):
             with open(UpperCamelCase_			,						"""wb"""					) as fi:
                 __A       =						self.sp_model.serialized_model_proto()
                 fi.write(UpperCamelCase_					)

         return (out_vocab_file,)




