


'''simple docstring'''





import math_equivalence  # From: git+https://github.com/hendrycks/math.git

import datasets


UpperCAmelCase__  			=				'''\
@article{hendrycksmath2021,
  title={Measuring Mathematical Problem Solving With the MATH Dataset},
  author={Dan Hendrycks
    and Collin Burns
    and Saurav Kadavath
    and Akul Arora
    and Steven Basart
    and Eric Tang
    and Dawn Song
    and Jacob Steinhardt},
  journal={arXiv preprint arXiv:2103.03874},
  year={2021}
}
'''


UpperCAmelCase__  			=				'''\
This metric is used to assess performance on the Mathematics Aptitude Test of Heuristics (MATH) dataset.
It first canonicalizes the inputs (e.g., converting "1/2" to "\\frac{1}{2}") and then computes accuracy.
'''


UpperCAmelCase__  			=				r'''
Calculates accuracy after canonicalizing inputs.

Args:
    predictions: list of predictions to score. Each prediction
        is a string that contains natural language and LaTex.
    references: list of reference for each prediction. Each
        reference is a string that contains natural language
        and LaTex.
Returns:
    accuracy: accuracy after canonicalizing inputs
        (e.g., converting "1/2" to "\\frac{1}{2}")

Examples:
    >>> metric = datasets.load_metric("competition_math")
    >>> results = metric.compute(references=["\\frac{1}{2}"], predictions=["1/2"])
    >>> print(results)
    {\'accuracy\': 1.0}
'''
@datasets.utils.file_utils.add_end_docstrings(_DESCRIPTION      ,  _KWARGS_DESCRIPTION   )
class 						a__					(					datasets.Metric   ):





			'''simple docstring'''

			def 					lowerCAmelCase     (  self							:			Any	)      ->		Optional[int]:
						return datasets.MetricInfo(
						    description=_DESCRIPTION			,    citation=_CITATION			,    inputs_description=_KWARGS_DESCRIPTION			,    features=datasets.Features(
						        {
						            'predictions': datasets.Value('string'	),
						            'references': datasets.Value('string'	),
						        }	)			,    homepage='https://github.com/hendrycks/math'			,    codebase_urls=['https://github.com/hendrycks/math']			,    )

			def 					lowerCAmelCase     (  self							:			Tuple			,    lowerCAmelCase_							:			str			,    lowerCAmelCase_							:			Tuple	)      ->		Any:
						__A=	0.0
						for i, j in zip(lowerCAmelCase_			,    lowerCAmelCase_	):
									n_correct += 1.0 if math_equivalence.is_equiv(lowerCAmelCase_			,    lowerCAmelCase_	) else 0.0
						__A=	n_correct / len(lowerCAmelCase_	)
						return {
						    "accuracy": accuracy,
						}







'''simple docstring'''





import re

from filelock import FileLock


try:
					import nltk

					UpperCAmelCase__  			=				True
except (ImportError, ModuleNotFoundError):
					UpperCAmelCase__  			=				False

if NLTK_AVAILABLE:
					with FileLock('''.lock''') as lock:
										nltk.download('''punkt''', quiet=True)






def 						UpperCAmelCase__(				_SCREAMING_SNAKE_CASE					: str ):






			"""simple docstring"""




			re.sub('<n>','',_SCREAMING_SNAKE_CASE )  # remove pegasus newline char
			assert NLTK_AVAILABLE, "nltk must be installed to separate newlines between sentences. (pip install nltk)"
			return "\n".join(nltk.sent_tokenize(_SCREAMING_SNAKE_CASE ) )



