


"""simple docstring"""


import re
import string

import numpy as np

import datasets


UpperCamelCase						:				Tuple             =      "\nReturns the rate at which the input predicted strings exactly match their references, ignoring any strings input as part of the regexes_to_ignore list.\n"

UpperCamelCase						:				List[Any]             =      "\nArgs:\n    predictions: List of predicted texts.\n    references: List of reference texts.\n    regexes_to_ignore: List, defaults to None. Regex expressions of characters to\n        ignore when calculating the exact matches. Note: these regexes are removed\n        from the input data before the changes based on the options below (e.g. ignore_case,\n        ignore_punctuation, ignore_numbers) are applied.\n    ignore_case: Boolean, defaults to False. If true, turns everything\n        to lowercase so that capitalization differences are ignored.\n    ignore_punctuation: Boolean, defaults to False. If true, removes all punctuation before\n        comparing predictions and references.\n    ignore_numbers: Boolean, defaults to False. If true, removes all punctuation before\n        comparing predictions and references.\nReturns:\n    exact_match: Dictionary containing exact_match rate. Possible values are between 0.0 and 100.0, inclusive.\nExamples:\n    >>> exact_match = datasets.load_metric(\"exact_match\")\n    >>> refs = [\"the cat\", \"theater\", \"YELLING\", \"agent007\"]\n    >>> preds = [\"cat?\", \"theater\", \"yelling\", \"agent\"]\n    >>> results = exact_match.compute(references=refs, predictions=preds)\n    >>> print(round(results[\"exact_match\"], 1))\n    25.0\n\n    >>> exact_match = datasets.load_metric(\"exact_match\")\n    >>> refs = [\"the cat\", \"theater\", \"YELLING\", \"agent007\"]\n    >>> preds = [\"cat?\", \"theater\", \"yelling\", \"agent\"]\n    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=[\"the \", \"yell\"], ignore_case=True, ignore_punctuation=True)\n    >>> print(round(results[\"exact_match\"], 1))\n    50.0\n\n\n    >>> exact_match = datasets.load_metric(\"exact_match\")\n    >>> refs = [\"the cat\", \"theater\", \"YELLING\", \"agent007\"]\n    >>> preds = [\"cat?\", \"theater\", \"yelling\", \"agent\"]\n    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=[\"the \", \"yell\", \"YELL\"], ignore_case=True, ignore_punctuation=True)\n    >>> print(round(results[\"exact_match\"], 1))\n    75.0\n\n    >>> exact_match = datasets.load_metric(\"exact_match\")\n    >>> refs = [\"the cat\", \"theater\", \"YELLING\", \"agent007\"]\n    >>> preds = [\"cat?\", \"theater\", \"yelling\", \"agent\"]\n    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=[\"the \", \"yell\", \"YELL\"], ignore_case=True, ignore_punctuation=True, ignore_numbers=True)\n    >>> print(round(results[\"exact_match\"], 1))\n    100.0\n\n    >>> exact_match = datasets.load_metric(\"exact_match\")\n    >>> refs = [\"The cat sat on the mat.\", \"Theaters are great.\", \"It's like comparing oranges and apples.\"]\n    >>> preds = [\"The cat sat on the mat?\", \"Theaters are great.\", \"It's like comparing apples and oranges.\"]\n    >>> results = exact_match.compute(references=refs, predictions=preds)\n    >>> print(round(results[\"exact_match\"], 1))\n    33.3\n\n"

UpperCamelCase						:				Union[str, Any]             =      "\n"



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







						def __a						(							self   :    Dict		):
								return datasets.MetricInfo(
								    description=_DESCRIPTION			,			citation=_CITATION			,			inputs_description=_KWARGS_DESCRIPTION			,			features=datasets.Features(
								        {
								            'predictions': datasets.Value('string'			,			id='sequence'		),
								            'references': datasets.Value('string'			,			id='sequence'		),
								        }		)			,			reference_urls=[]			,			)







						def __a						(							self   :    Optional[Any]			,			_lowercase   :    Optional[int]			,			_lowercase   :    Optional[Any]			,			_lowercase   :    int=None			,			_lowercase   :    List[Any]=False			,			_lowercase   :    Tuple=False			,			_lowercase   :    List[Any]=False			,			):
								if regexes_to_ignore is not None:
										for s in regexes_to_ignore:
												A					       = np.array([re.sub(_lowercase			,			''			,			_lowercase		) for x in predictions]		)
												A					       = np.array([re.sub(_lowercase			,			''			,			_lowercase		) for x in references]		)
								else:
										A					       = np.asarray(_lowercase		)
										A					       = np.asarray(_lowercase		)

								if ignore_case:
										A					       = np.char.lower(_lowercase		)
										A					       = np.char.lower(_lowercase		)

								if ignore_punctuation:
										A					       = string.punctuation.maketrans(''			,			''			,			string.punctuation		)
										A					       = np.char.translate(_lowercase			,			table=_lowercase		)
										A					       = np.char.translate(_lowercase			,			table=_lowercase		)

								if ignore_numbers:
										A					       = string.digits.maketrans(''			,			''			,			string.digits		)
										A					       = np.char.translate(_lowercase			,			table=_lowercase		)
										A					       = np.char.translate(_lowercase			,			table=_lowercase		)

								A					       = predictions == references

								return {"exact_match": np.mean(_lowercase		) * 100}









"""simple docstring"""


import os
import unittest

from transformers.models.transfo_xl.tokenization_transfo_xl import VOCAB_FILES_NAMES, TransfoXLTokenizer

from ...test_tokenization_common import TokenizerTesterMixin



class 			lowerCamelCase__						(   UpperCAmelCase_							,    unittest.TestCase			):
						lowerCAmelCase       =     TransfoXLTokenizer
						lowerCAmelCase       =     False
						lowerCAmelCase       =     False







						def __a						(							self   :    Union[str, Any]		):
								super().setUp()

								A					       = [
								    '<unk>',
								    '[CLS]',
								    '[SEP]',
								    'want',
								    'unwanted',
								    'wa',
								    'un',
								    'running',
								    ',',
								    'low',
								    'l',
								]
								A					       = os.path.join(self.tmpdirname			,			VOCAB_FILES_NAMES['vocab_file']		)
								with open(self.vocab_file			,			'w'			,			encoding='utf-8'		) as vocab_writer:
										vocab_writer.write(''.join([x + '\n' for x in vocab_tokens]		)		)







						def __a						(							self   :    int			,			**_lowercase   :    List[str]		):
								A					       = True
								return TransfoXLTokenizer.from_pretrained(self.tmpdirname			,			**_lowercase		)







						def __a						(							self   :    int			,			_lowercase   :    List[Any]		):
								A					       = '<unk> UNwanted , running'
								A					       = '<unk> unwanted, running'
								return input_text, output_text







						def __a						(							self   :    List[str]		):
								A					       = TransfoXLTokenizer(vocab_file=self.vocab_file			,			lower_case=_lowercase		)

								A					       = tokenizer.tokenize('<unk> UNwanted , running'		)
								self.assertListEqual(_lowercase			,			['<unk>', 'unwanted', ',', 'running']		)

								self.assertListEqual(tokenizer.convert_tokens_to_ids(_lowercase		)			,			[0, 4, 8, 7]		)







						def __a						(							self   :    int		):
								A					       = TransfoXLTokenizer(lower_case=_lowercase		)

								self.assertListEqual(
								    tokenizer.tokenize(' \tHeLLo ! how  \n Are yoU ?  '		)			,			['hello', '!', 'how', 'are', 'you', '?']		)







						def __a						(							self   :    Optional[Any]		):
								A					       = TransfoXLTokenizer(lower_case=_lowercase		)

								self.assertListEqual(
								    tokenizer.tokenize(' \tHeLLo ! how  \n Are yoU ?  '		)			,			['HeLLo', '!', 'how', 'Are', 'yoU', '?']		)







						def __a						(							self   :    str		):
								A					       = TransfoXLTokenizer(lower_case=_lowercase		)
								A					       = 'Hello (bracket) and side-scrolled [and] Henry\'s $5,000 with 3.34 m. What\'s up!?'
								A					       = [
								    'Hello',
								    '(',
								    'bracket',
								    ')',
								    'and',
								    'side',
								    '@-@',
								    'scrolled',
								    '[',
								    'and',
								    ']',
								    'Henry',
								    '\'s',
								    '$',
								    '5',
								    '@,@',
								    '000',
								    'with',
								    '3',
								    '@.@',
								    '34',
								    'm',
								    '.',
								    'What',
								    '\'s',
								    'up',
								    '!',
								    '?',
								]

								self.assertListEqual(tokenizer.tokenize(_lowercase		)			,			_lowercase		)

								self.assertEqual(tokenizer.convert_tokens_to_string(_lowercase		)			,			_lowercase		)







						def __a						(							self   :    Dict		):
								A					       = self.get_tokenizer()
								A					       = len(_lowercase		)

								tokenizer.add_tokens(['new1', 'new2']		)
								tokenizer.move_added_token('new1'			,			1		)

								# Check that moved token is not copied (duplicate)
								self.assertEqual(len(_lowercase		)			,			original_len + 2		)
								# Check that token is moved to specified id
								self.assertEqual(tokenizer.encode('new1'		)			,			[1]		)
								self.assertEqual(tokenizer.decode([1]		)			,			'new1'		)





