
'''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__      :		Tuple       							=  "\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__      :		Optional[int]       							=  "\n"

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





       """simple docstring"""




       def        UpperCamelCase				(							self      )    ->			str:
          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        UpperCamelCase				(							self       ,							A__       ,							A__       ,							A__=None       ,							A__=False       ,							A__=False       ,							A__=False       ,							)    ->			Optional[Any]:
          if regexes_to_ignore is not None:
             for s in regexes_to_ignore:
                _SCREAMING_SNAKE_CASE      =				np.array([re.sub(A__       ,							""""""       ,							A__      ) for x in predictions]      )
                _SCREAMING_SNAKE_CASE      =				np.array([re.sub(A__       ,							""""""       ,							A__      ) for x in references]      )
          else:
             _SCREAMING_SNAKE_CASE      =				np.asarray(A__      )
             _SCREAMING_SNAKE_CASE      =				np.asarray(A__      )

          if ignore_case:
             _SCREAMING_SNAKE_CASE      =				np.char.lower(A__      )
             _SCREAMING_SNAKE_CASE      =				np.char.lower(A__      )

          if ignore_punctuation:
             _SCREAMING_SNAKE_CASE      =				string.punctuation.maketrans(""""""       ,							""""""       ,							string.punctuation      )
             _SCREAMING_SNAKE_CASE      =				np.char.translate(A__       ,							table=A__      )
             _SCREAMING_SNAKE_CASE      =				np.char.translate(A__       ,							table=A__      )

          if ignore_numbers:
             _SCREAMING_SNAKE_CASE      =				string.digits.maketrans(""""""       ,							""""""       ,							string.digits      )
             _SCREAMING_SNAKE_CASE      =				np.char.translate(A__       ,							table=A__      )
             _SCREAMING_SNAKE_CASE      =				np.char.translate(A__       ,							table=A__      )

          _SCREAMING_SNAKE_CASE      =				predictions == references

          return {"exact_match": np.mean(A__      ) * 1_00}








'''simple docstring'''



def    lowerCAmelCase_	(				SCREAMING_SNAKE_CASE_						)     ->     str:




   """simple docstring"""
   return "".join([hex(SCREAMING_SNAKE_CASE_						)[2:].zfill(2						).upper() for byte in list(SCREAMING_SNAKE_CASE_						)]						)
def    lowerCAmelCase_	(				SCREAMING_SNAKE_CASE_						)     ->     bytes:




   """simple docstring"""
   # Check data validity, following RFC3548
   # https://www.ietf.org/rfc/rfc3548.txt
   if (len(SCREAMING_SNAKE_CASE_						) % 2) != 0:
      raise ValueError(
          """Base16 encoded data is invalid:
Data does not have an even number of hex digits."""						)
   # Check the character set - the standard base16 alphabet
   # is uppercase according to RFC3548 section 6
   if not set(SCREAMING_SNAKE_CASE_						) <= set("""0123456789ABCDEF"""						):
      raise ValueError(
          """Base16 encoded data is invalid:
Data is not uppercase hex or it contains invalid characters."""						)
   # For every two hexadecimal digits (= a byte), turn it into an integer.
   # Then, string the result together into bytes, and return it.
   return bytes(int(data[i] + data[i + 1]    ,      16						) for i in range(0    ,      len(SCREAMING_SNAKE_CASE_						)    ,      2						)						)


if __name__ == "__main__":
     import doctest

     doctest.testmod()






