

'''simple docstring'''





import json
import os
import unittest

from transformers import BatchEncoding, LEDTokenizer, LEDTokenizerFast
from transformers.models.led.tokenization_led import VOCAB_FILES_NAMES
from transformers.testing_utils import require_tokenizers, require_torch
from transformers.utils import cached_property

from ...test_tokenization_common import TokenizerTesterMixin


@require_tokenizers
class  UpperCAmelCase (							UpperCAmelCase__  , unittest.TestCase    ):

		'''simple docstring'''






		SCREAMING_SNAKE_CASE_           =					LEDTokenizer
		SCREAMING_SNAKE_CASE_           =					LEDTokenizerFast
		SCREAMING_SNAKE_CASE_           =					True
		def 			UpperCamelCase(					self		)  ->     str:






							'''simple docstring'''



							super().setUp()
							lowerCamelCase_  				=      [
							    'l',
							    'o',
							    'w',
							    'e',
							    'r',
							    's',
							    't',
							    'i',
							    'd',
							    'n',
							    '\u0120',
							    '\u0120l',
							    '\u0120n',
							    '\u0120lo',
							    '\u0120low',
							    'er',
							    '\u0120lowest',
							    '\u0120newer',
							    '\u0120wider',
							    '<unk>',
							]
							lowerCamelCase_  				=      dict(zip(SCREAMING_SNAKE_CASE_   ,			range(len(SCREAMING_SNAKE_CASE_		)		)		)		)
							lowerCamelCase_  				=      ['#version: 0.2', '\u0120 l', '\u0120l o', '\u0120lo w', 'e r', '']
							lowerCamelCase_  				=      {'unk_token': '<unk>'}

							lowerCamelCase_  				=      os.path.join(self.tmpdirname   ,			VOCAB_FILES_NAMES['vocab_file']		)
							lowerCamelCase_  				=      os.path.join(self.tmpdirname   ,			VOCAB_FILES_NAMES['merges_file']		)
							with open(self.vocab_file   ,			'w'   ,			encoding='utf-8'		) as fp:
												fp.write(json.dumps(SCREAMING_SNAKE_CASE_		) + '\n'		)
							with open(self.merges_file   ,			'w'   ,			encoding='utf-8'		) as fp:
												fp.write('\n'.join(SCREAMING_SNAKE_CASE_		)		)
		def 			UpperCamelCase(					self   ,			**SCREAMING_SNAKE_CASE_		)  ->     int:






							'''simple docstring'''



							kwargs.update(self.special_tokens_map		)
							return self.tokenizer_class.from_pretrained(self.tmpdirname   ,			**SCREAMING_SNAKE_CASE_		)
		def 			UpperCamelCase(					self   ,			**SCREAMING_SNAKE_CASE_		)  ->     Tuple:






							'''simple docstring'''



							kwargs.update(self.special_tokens_map		)
							return self.rust_tokenizer_class.from_pretrained(self.tmpdirname   ,			**SCREAMING_SNAKE_CASE_		)
		def 			UpperCamelCase(					self   ,			SCREAMING_SNAKE_CASE_		)  ->     Optional[int]:






							'''simple docstring'''



							return "lower newer", "lower newer"
		@cached_property
		def 			UpperCamelCase(					self		)  ->     str:






							'''simple docstring'''



							return LEDTokenizer.from_pretrained('allenai/led-base-16384'		)
		@cached_property
		def 			UpperCamelCase(					self		)  ->     Any:






							'''simple docstring'''



							return LEDTokenizerFast.from_pretrained('allenai/led-base-16384'		)
		@require_torch
		def 			UpperCamelCase(					self		)  ->     List[str]:






							'''simple docstring'''



							lowerCamelCase_  				=      ['A long paragraph for summarization.', 'Another paragraph for summarization.']
							lowerCamelCase_  				=      [0, 250, 251, 17818, 13, 39186, 1938, 4, 2]

							for tokenizer in [self.default_tokenizer, self.default_tokenizer_fast]:
												lowerCamelCase_  				=      tokenizer(SCREAMING_SNAKE_CASE_   ,			max_length=len(SCREAMING_SNAKE_CASE_		)   ,			padding=SCREAMING_SNAKE_CASE_   ,			return_tensors='pt'		)
												self.assertIsInstance(SCREAMING_SNAKE_CASE_   ,			SCREAMING_SNAKE_CASE_		)

												self.assertEqual((2, 9)   ,			batch.input_ids.shape		)
												self.assertEqual((2, 9)   ,			batch.attention_mask.shape		)
												lowerCamelCase_  				=      batch.input_ids.tolist()[0]
												self.assertListEqual(SCREAMING_SNAKE_CASE_   ,			SCREAMING_SNAKE_CASE_		)
		@require_torch
		def 			UpperCamelCase(					self		)  ->     Optional[Any]:






							'''simple docstring'''



							lowerCamelCase_  				=      ['A long paragraph for summarization.', 'Another paragraph for summarization.']
							for tokenizer in [self.default_tokenizer, self.default_tokenizer_fast]:
												lowerCamelCase_  				=      tokenizer(SCREAMING_SNAKE_CASE_   ,			padding=SCREAMING_SNAKE_CASE_   ,			return_tensors='pt'		)
												self.assertIn('input_ids'   ,			SCREAMING_SNAKE_CASE_		)
												self.assertIn('attention_mask'   ,			SCREAMING_SNAKE_CASE_		)
												self.assertNotIn('labels'   ,			SCREAMING_SNAKE_CASE_		)
												self.assertNotIn('decoder_attention_mask'   ,			SCREAMING_SNAKE_CASE_		)
		@require_torch
		def 			UpperCamelCase(					self		)  ->     Optional[int]:






							'''simple docstring'''



							lowerCamelCase_  				=      [
							    'Summary of the text.',
							    'Another summary.',
							]
							for tokenizer in [self.default_tokenizer, self.default_tokenizer_fast]:
												lowerCamelCase_  				=      tokenizer(text_target=SCREAMING_SNAKE_CASE_   ,			max_length=32   ,			padding='max_length'   ,			return_tensors='pt'		)
												self.assertEqual(32   ,			targets['input_ids'].shape[1]		)
		@require_torch
		def 			UpperCamelCase(					self		)  ->     List[Any]:






							'''simple docstring'''



							for tokenizer in [self.default_tokenizer, self.default_tokenizer_fast]:
												lowerCamelCase_  				=      tokenizer(
												    ['I am a small frog' * 1024, 'I am a small frog']   ,			padding=SCREAMING_SNAKE_CASE_   ,			truncation=SCREAMING_SNAKE_CASE_   ,			return_tensors='pt'		)
												self.assertIsInstance(SCREAMING_SNAKE_CASE_   ,			SCREAMING_SNAKE_CASE_		)
												self.assertEqual(batch.input_ids.shape   ,			(2, 5122)		)
		@require_torch
		def 			UpperCamelCase(					self		)  ->     Union[str, Any]:






							'''simple docstring'''



							lowerCamelCase_  				=      ['A long paragraph for summarization.']
							lowerCamelCase_  				=      [
							    'Summary of the text.',
							]
							for tokenizer in [self.default_tokenizer, self.default_tokenizer_fast]:
												lowerCamelCase_  				=      tokenizer(SCREAMING_SNAKE_CASE_   ,			return_tensors='pt'		)
												lowerCamelCase_  				=      tokenizer(text_target=SCREAMING_SNAKE_CASE_   ,			return_tensors='pt'		)
												lowerCamelCase_  				=      inputs['input_ids']
												lowerCamelCase_  				=      targets['input_ids']
												self.assertTrue((input_ids[:, 0] == tokenizer.bos_token_id).all().item()		)
												self.assertTrue((labels[:, 0] == tokenizer.bos_token_id).all().item()		)
												self.assertTrue((input_ids[:, -1] == tokenizer.eos_token_id).all().item()		)
												self.assertTrue((labels[:, -1] == tokenizer.eos_token_id).all().item()		)
		@require_torch
		def 			UpperCamelCase(					self		)  ->     Tuple:






							'''simple docstring'''



							for tokenizer in [self.default_tokenizer, self.default_tokenizer_fast]:
												lowerCamelCase_  				=      ['Summary of the text.', 'Another summary.']
												lowerCamelCase_  				=      [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -1, -1]]

												lowerCamelCase_  				=      tokenizer(SCREAMING_SNAKE_CASE_   ,			padding=SCREAMING_SNAKE_CASE_		)
												lowerCamelCase_  				=      [[0] * len(SCREAMING_SNAKE_CASE_		) for x in encoded_output['input_ids']]
												lowerCamelCase_  				=      tokenizer.pad(SCREAMING_SNAKE_CASE_		)
												self.assertSequenceEqual(outputs['global_attention_mask']   ,			SCREAMING_SNAKE_CASE_		)
		def 			UpperCamelCase(					self		)  ->     Optional[int]:






							'''simple docstring'''



							pass






		def 			UpperCamelCase(					self		)  ->     Optional[int]:






							'''simple docstring'''



							for tokenizer, pretrained_name, kwargs in self.tokenizers_list:
												with self.subTest(f'''{tokenizer.__class__.__name__} ({pretrained_name})'''		):
																	lowerCamelCase_  				=      self.rust_tokenizer_class.from_pretrained(SCREAMING_SNAKE_CASE_   ,			**SCREAMING_SNAKE_CASE_		)
																	lowerCamelCase_  				=      self.tokenizer_class.from_pretrained(SCREAMING_SNAKE_CASE_   ,			**SCREAMING_SNAKE_CASE_		)
																	lowerCamelCase_  				=      'A, <mask> AllenNLP sentence.'
																	lowerCamelCase_  				=      tokenizer_r.encode_plus(SCREAMING_SNAKE_CASE_   ,			add_special_tokens=SCREAMING_SNAKE_CASE_   ,			return_token_type_ids=SCREAMING_SNAKE_CASE_		)
																	lowerCamelCase_  				=      tokenizer_p.encode_plus(SCREAMING_SNAKE_CASE_   ,			add_special_tokens=SCREAMING_SNAKE_CASE_   ,			return_token_type_ids=SCREAMING_SNAKE_CASE_		)
																	self.assertEqual(sum(tokens_r['token_type_ids']		)   ,			sum(tokens_p['token_type_ids']		)		)
																	self.assertEqual(
																	    sum(tokens_r['attention_mask']		) / len(tokens_r['attention_mask']		)   ,			sum(tokens_p['attention_mask']		) / len(tokens_p['attention_mask']		)   ,			)

																	lowerCamelCase_  				=      tokenizer_r.convert_ids_to_tokens(tokens_r['input_ids']		)
																	lowerCamelCase_  				=      tokenizer_p.convert_ids_to_tokens(tokens_p['input_ids']		)
																	self.assertSequenceEqual(tokens_p['input_ids']   ,			[0, 250, 6, 50264, 3823, 487, 21992, 3645, 4, 2]		)
																	self.assertSequenceEqual(tokens_r['input_ids']   ,			[0, 250, 6, 50264, 3823, 487, 21992, 3645, 4, 2]		)

																	self.assertSequenceEqual(
																	    SCREAMING_SNAKE_CASE_   ,			['<s>', 'A', ',', '<mask>', 'ĠAllen', 'N', 'LP', 'Ġsentence', '.', '</s>']		)
																	self.assertSequenceEqual(
																	    SCREAMING_SNAKE_CASE_   ,			['<s>', 'A', ',', '<mask>', 'ĠAllen', 'N', 'LP', 'Ġsentence', '.', '</s>']		)







'''simple docstring'''






from scipy.stats import pearsonr, spearmanr
from sklearn.metrics import fa_score, matthews_corrcoef

import datasets


lowercase				='\\n@inproceedings{wang2019glue,\n  title={{GLUE}: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding},\n  author={Wang, Alex and Singh, Amanpreet and Michael, Julian and Hill, Felix and Levy, Omer and Bowman, Samuel R.},\n  note={In the Proceedings of ICLR.},\n  year={2019}\n}\n'

lowercase				='\\nGLUE, the General Language Understanding Evaluation benchmark\n(https://gluebenchmark.com/) is a collection of resources for training,\nevaluating, and analyzing natural language understanding systems.\n'

lowercase				='\nCompute GLUE evaluation metric associated to each GLUE dataset.\nArgs:\n    predictions: list of predictions to score.\n        Each translation should be tokenized into a list of tokens.\n    references: list of lists of references for each translation.\n        Each reference should be tokenized into a list of tokens.\nReturns: depending on the GLUE subset, one or several of:\n    "accuracy": Accuracy\n    "f1": F1 score\n    "pearson": Pearson Correlation\n    "spearmanr": Spearman Correlation\n    "matthews_correlation": Matthew Correlation\nExamples:\n\n    >>> glue_metric = datasets.load_metric(\'glue\', \'sst2\')  # \'sst2\' or any of ["mnli", "mnli_mismatched", "mnli_matched", "qnli", "rte", "wnli", "hans"]\n    >>> references = [0, 1]\n    >>> predictions = [0, 1]\n    >>> results = glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'accuracy\': 1.0}\n\n    >>> glue_metric = datasets.load_metric(\'glue\', \'mrpc\')  # \'mrpc\' or \'qqp\'\n    >>> references = [0, 1]\n    >>> predictions = [0, 1]\n    >>> results = glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'accuracy\': 1.0, \'f1\': 1.0}\n\n    >>> glue_metric = datasets.load_metric(\'glue\', \'stsb\')\n    >>> references = [0., 1., 2., 3., 4., 5.]\n    >>> predictions = [0., 1., 2., 3., 4., 5.]\n    >>> results = glue_metric.compute(predictions=predictions, references=references)\n    >>> print({"pearson": round(results["pearson"], 2), "spearmanr": round(results["spearmanr"], 2)})\n    {\'pearson\': 1.0, \'spearmanr\': 1.0}\n\n    >>> glue_metric = datasets.load_metric(\'glue\', \'cola\')\n    >>> references = [0, 1]\n    >>> predictions = [0, 1]\n    >>> results = glue_metric.compute(predictions=predictions, references=references)\n    >>> print(results)\n    {\'matthews_correlation\': 1.0}\n'





def lowerCamelCase__     (		__lowerCamelCase			:				Optional[Any]			,       __lowerCamelCase			:				str				):







   '''simple docstring'''




   return float((preds == labels).mean()				)





def lowerCamelCase__     (		__lowerCamelCase			:				Tuple			,       __lowerCamelCase			:				Union[str, Any]				):







   '''simple docstring'''




   _UpperCAmelCase  :  Union[str, Any]				       =simple_accuracy(__lowerCamelCase			,       __lowerCamelCase				)
   _UpperCAmelCase  :  List[Any]				       =float(fa_score(y_true=__lowerCamelCase			,       y_pred=__lowerCamelCase				)				)
   return {
       "accuracy": acc,
       "f1": fa,
   }





def lowerCamelCase__     (		__lowerCamelCase			:				str			,       __lowerCamelCase			:				int				):







   '''simple docstring'''




   _UpperCAmelCase  :  Dict				       =float(pearsonr(__lowerCamelCase			,       __lowerCamelCase				)[0]				)
   _UpperCAmelCase  :  int				       =float(spearmanr(__lowerCamelCase			,       __lowerCamelCase				)[0]				)
   return {
       "pearson": pearson_corr,
       "spearmanr": spearman_corr,
   }






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






       def      lowerCAmelCase						(     self)		->    str:




          '''simple docstring'''
          if self.config_name not in [
              "sst2",
              "mnli",
              "mnli_mismatched",
              "mnli_matched",
              "cola",
              "stsb",
              "mrpc",
              "qqp",
              "qnli",
              "rte",
              "wnli",
              "hans",
          ]:
             raise KeyError(
                 'You should supply a configuration name selected in '
                 '["sst2", "mnli", "mnli_mismatched", "mnli_matched", '
                 '"cola", "stsb", "mrpc", "qqp", "qnli", "rte", "wnli", "hans"]')
          return datasets.MetricInfo(
              description=_DESCRIPTION    ,				citation=_CITATION    ,				inputs_description=_KWARGS_DESCRIPTION    ,				features=datasets.Features(
                  {
                      'predictions': datasets.Value('int64' if self.config_name != 'stsb' else 'float32'),
                      'references': datasets.Value('int64' if self.config_name != 'stsb' else 'float32'),
                  })    ,				codebase_urls=[]    ,				reference_urls=[]    ,				format='numpy'    ,				)






       def      lowerCAmelCase						(     self    ,				snake_case    ,				snake_case)		->    int:




          '''simple docstring'''
          if self.config_name == "cola":
             return {"matthews_correlation": matthews_corrcoef(snake_case    ,				snake_case)}
          elif self.config_name == "stsb":
             return pearson_and_spearman(snake_case    ,				snake_case)
          elif self.config_name in ["mrpc", "qqp"]:
             return acc_and_fa(snake_case    ,				snake_case)
          elif self.config_name in ["sst2", "mnli", "mnli_mismatched", "mnli_matched", "qnli", "rte", "wnli", "hans"]:
             return {"accuracy": simple_accuracy(snake_case    ,				snake_case)}
          else:
             raise KeyError(
                 'You should supply a configuration name selected in '
                 '["sst2", "mnli", "mnli_mismatched", "mnli_matched", '
                 '"cola", "stsb", "mrpc", "qqp", "qnli", "rte", "wnli", "hans"]')

