import timeit




class    __lowerCAmelCase  :



 '''simple docstring'''

 def __init__(			self       :		Union[str, Any]       ,			lowerCamelCase       :		Union[str, Any]  ) ->							int:
        if isinstance(lowerCamelCase       ,			lowerCamelCase  ):  # Initializes a matrix identical to the one provided.
               _UpperCamelCase     :       List[str]  						=  arg
               _UpperCamelCase     :       List[str]  						=  len(lowerCamelCase  )
        else:  # Initializes a square matrix of the given size and set values to zero.
               _UpperCamelCase     :       List[str]  						=  arg
               _UpperCamelCase     :       Tuple  						=  [[0 for _ in range(self.n  )] for _ in range(self.n  )]

 def __mul__(			self       :		str       ,			lowerCamelCase       :		Union[str, Any]  ) ->							Any:
        _UpperCamelCase     :       str  						=  Matrix(self.n  )
        for i in range(self.n  ):
               for j in range(self.n  ):
                      for k in range(self.n  ):
                             matrix.t[i][j] += self.t[i][k] * b.t[k][j]
        return matrix







def SCREAMING_SNAKE_CASE				(     lowercase_:	Tuple		,						lowercase_:	Any				):
       _UpperCamelCase     :       Tuple  						=  Matrix([[1, 0], [0, 1]]				)
       while b > 0:
              if b & 1:
                     matrix *= a
              a *= a
              b >>= 1
       return matrix


def SCREAMING_SNAKE_CASE				(     lowercase_:	int		,						lowercase_:	Optional[Any]		,						lowercase_:	List[Any]				):
       # Trivial Cases
       if n == 1:
              return fa
       elif n == 2:
              return fa
       _UpperCamelCase     :       int  						=  Matrix([[1, 1], [1, 0]]				)
       _UpperCamelCase     :       List[Any]  						=  modular_exponentiation(lowercase_		,						n - 2				)
       return fa * matrix.t[0][0] + fa * matrix.t[0][1]


def SCREAMING_SNAKE_CASE				(     lowercase_:	Optional[int]		,						lowercase_:	Tuple		,						lowercase_:	str				):
       # Trivial Cases
       if n == 1:
              return fa
       elif n == 2:
              return fa

       _UpperCamelCase     :       List[Any]  						=  fa
       _UpperCamelCase     :       str  						=  fa
       n -= 2

       while n > 0:
              _UpperCamelCase						,      _UpperCamelCase     :       Tuple  						=  fn_a + fn_a, fn_a
              n -= 1

       return fn_a


def SCREAMING_SNAKE_CASE				(     ):
       _UpperCamelCase     :       str  						=  '\nfrom random import randint\nfrom __main__ import fibonacci_with_matrix_exponentiation\n'
       _UpperCamelCase     :       Tuple  						=  'fibonacci_with_matrix_exponentiation(randint(1,70000), 1, 1)'
       _UpperCamelCase     :       Tuple  						=  timeit.timeit(setup=lowercase_		,						stmt=lowercase_		,						number=100				)
       print('With matrix exponentiation the average execution time is '		,						exec_time / 100				)
       return exec_time


def SCREAMING_SNAKE_CASE				(     ):
       _UpperCamelCase     :       Tuple  						=  '\nfrom random import randint\nfrom __main__ import simple_fibonacci\n'
       _UpperCamelCase     :       Optional[Any]  						=  'simple_fibonacci(randint(1,70000), 1, 1)'
       _UpperCamelCase     :       str  						=  timeit.timeit(setup=lowercase_		,						stmt=lowercase_		,						number=100				)
       print(
           'Without matrix exponentiation the average execution time is '		,						exec_time / 100				)
       return exec_time


def SCREAMING_SNAKE_CASE				(     ):
       matrix_exponentiation_time()
       simple_fibonacci_time()


if __name__ == "__main__":
 main()




import argparse
import json
import re
import string
import sys
from collections import Counter


def SCREAMING_SNAKE_CASE				(     lowercase_:	List[Any]				):

       def remove_articles(lowercase_:	Dict				):
              return re.sub(R'\b(a|an|the)\b'		,						' '		,						lowercase_				)

       def white_space_fix(lowercase_:	Optional[Any]				):
              return " ".join(text.split()				)

       def remove_punc(lowercase_:	List[str]				):
              _UpperCamelCase     :       str  						=  set(string.punctuation				)
              return "".join(ch for ch in text if ch not in exclude				)

       def lower(lowercase_:	List[str]				):
              return text.lower()

       return white_space_fix(remove_articles(remove_punc(lower(lowercase_				)				)				)				)


def SCREAMING_SNAKE_CASE				(     lowercase_:	List[Any]		,						lowercase_:	Tuple				):
       _UpperCamelCase     :       int  						=  normalize_answer(lowercase_				).split()
       _UpperCamelCase     :       int  						=  normalize_answer(lowercase_				).split()
       _UpperCamelCase     :       Union[str, Any]  						=  Counter(lowercase_				) & Counter(lowercase_				)
       _UpperCamelCase     :       Optional[int]  						=  sum(common.values()				)
       if num_same == 0:
              return 0
       _UpperCamelCase     :       Optional[Any]  						=  1.0 * num_same / len(lowercase_				)
       _UpperCamelCase     :       Optional[int]  						=  1.0 * num_same / len(lowercase_				)
       _UpperCamelCase     :       List[str]  						=  (2 * precision * recall) / (precision + recall)
       return fa


def SCREAMING_SNAKE_CASE				(     lowercase_:	str		,						lowercase_:	Union[str, Any]				):
       return normalize_answer(lowercase_				) == normalize_answer(lowercase_				)


def SCREAMING_SNAKE_CASE				(     lowercase_:	Optional[int]		,						lowercase_:	int		,						lowercase_:	Union[str, Any]				):
       _UpperCamelCase     :       Any  						=  []
       for ground_truth in ground_truths:
              _UpperCamelCase     :       Optional[Any]  						=  metric_fn(lowercase_		,						lowercase_				)
              scores_for_ground_truths.append(lowercase_				)
       return max(lowercase_				)


def SCREAMING_SNAKE_CASE				(     lowercase_:	Union[str, Any]		,						lowercase_:	List[Any]				):
       _UpperCamelCase     :       List[Any]  						=  0
       for article in dataset:
              for paragraph in article["paragraphs"]:
                     for qa in paragraph["qas"]:
                            total += 1
                            if qa["id"] not in predictions:
                                   _UpperCamelCase     :       Union[str, Any]  						=  'Unanswered question ' + qa['id'] + ' will receive score 0.'
                                   print(lowercase_		,						file=sys.stderr				)
                                   continue
                            _UpperCamelCase     :       Dict  						=  [x['text'] for x in qa['answers']]
                            _UpperCamelCase     :       List[str]  						=  predictions[qa['id']]
                            exact_match += metric_max_over_ground_truths(lowercase_		,						lowercase_		,						lowercase_				)
                            fa += metric_max_over_ground_truths(lowercase_		,						lowercase_		,						lowercase_				)

       _UpperCamelCase     :       Dict  						=  100.0 * exact_match / total
       _UpperCamelCase     :       Optional[Any]  						=  100.0 * fa / total

       return {"exact_match": exact_match, "f1": fa}


if __name__ == "__main__":
 UpperCAmelCase					=				'''1.1'''
 UpperCAmelCase					=				argparse.ArgumentParser(description='''Evaluation for SQuAD ''' + expected_version)
 parser.add_argument('''dataset_file''', help='''Dataset file''')
 parser.add_argument('''prediction_file''', help='''Prediction File''')
 UpperCAmelCase					=				parser.parse_args()
 with open(args.dataset_file) as dataset_file:
  UpperCAmelCase					=				json.load(dataset_file)
  if dataset_json["version"] != expected_version:
   print(
       '''Evaluation expects v-''' + expected_version + ''', but got dataset with v-''' + dataset_json['''version'''],
       file=sys.stderr,
   )
  UpperCAmelCase					=				dataset_json['''data''']
 with open(args.prediction_file) as prediction_file:
  UpperCAmelCase					=				json.load(prediction_file)
 print(json.dumps(evaluate(dataset, predictions)))



