


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 lowerCAmelCase_		(				datasets.Metric ):

 '''simple docstring'''

 def 		UpperCamelCase__  (			self      ):
       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 		UpperCamelCase__  (			self	,   _UpperCAmelCase	,   _UpperCAmelCase      ):
       snake_case_ =   0.0
       for i, j in zip(_UpperCAmelCase	,   _UpperCAmelCase      ):
             n_correct += 1.0 if math_equivalence.is_equiv(_UpperCAmelCase	,   _UpperCAmelCase      ) else 0.0
       snake_case_ =   n_correct / len(_UpperCAmelCase      )
       return {
           "accuracy": accuracy,
       }



from math import sqrt

import numpy as np
from sympy import symbols

# Coefficient
# Speed of light (m/s)
UpperCAmelCase    =					2_9979_2458

# Symbols
UpperCAmelCase,							UpperCAmelCase,							UpperCAmelCase,							UpperCAmelCase    =					symbols("""ct x y z""")






def  __lowerCAmelCase					(SCREAMING_SNAKE_CASE      )->						float:




      """simple docstring"""

      if velocity > c:
            raise ValueError('''Speed must not exceed light speed 299,792,458 [m/s]!'''      )
      elif velocity < 1:
            # Usually the speed should be much higher than 1 (c order of magnitude)
            raise ValueError('''Speed must be greater than or equal to 1!'''      )

      return velocity / c






def  __lowerCAmelCase					(SCREAMING_SNAKE_CASE      )->						float:




      """simple docstring"""

      return 1 / sqrt(1 - beta(SCREAMING_SNAKE_CASE      ) ** 2      )






def  __lowerCAmelCase					(SCREAMING_SNAKE_CASE      )->						np.ndarray:




      """simple docstring"""

      return np.array(
          [
              [gamma(SCREAMING_SNAKE_CASE      ), -gamma(SCREAMING_SNAKE_CASE      ) * beta(SCREAMING_SNAKE_CASE      ), 0, 0],
              [-gamma(SCREAMING_SNAKE_CASE      ) * beta(SCREAMING_SNAKE_CASE      ), gamma(SCREAMING_SNAKE_CASE      ), 0, 0],
              [0, 0, 1, 0],
              [0, 0, 0, 1],
          ]      )






def  __lowerCAmelCase					(SCREAMING_SNAKE_CASE      ,      SCREAMING_SNAKE_CASE = None      )->						np.ndarray:




      """simple docstring"""

      if event is None:
            snake_case_ =   np.array([ct, x, y, z]      )  # Symbolic four vector
      else:
            event[0] *= c  # x0 is ct (speed of light * time)

      return transformation_matrix(SCREAMING_SNAKE_CASE      ) @ event


if __name__ == "__main__":
   import doctest

   doctest.testmod()

   # Example of symbolic vector:
   UpperCAmelCase    =					transform(2997_9245)
   print("""Example of four vector: """)
   print(f'''ct\' = {four_vector[0]}''')
   print(f'''x\' = {four_vector[1]}''')
   print(f'''y\' = {four_vector[2]}''')
   print(f'''z\' = {four_vector[3]}''')

   # Substitute symbols with numerical values
   UpperCAmelCase    =					{ct: c, x: 1, y: 1, z: 1}
   UpperCAmelCase    =					[four_vector[i].subs(sub_dict) for i in range(4)]

   print(f'''\n{numerical_vector}''')