



import re
import string

import numpy as np

import datasets


snake_case_			:     List[Any]  	=  '\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'

snake_case_			:     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'

snake_case_			:     Union[str, Any]  	=  '\n'






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





	def      UpperCamelCase_  (			self :    Any			):







							'''simple docstring'''
							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 :    Any			,lowerCamelCase__ :    Any			,lowerCamelCase__ :    Dict			,lowerCamelCase__ :    Optional[Any]=None			,lowerCamelCase__ :    Dict=False			,lowerCamelCase__ :    Union[str, Any]=False			,lowerCamelCase__ :    Dict=False			,):







							'''simple docstring'''
							if regexes_to_ignore is not None:
													for s in regexes_to_ignore:
																			_UpperCamelCase :		Tuple			    =       np.array([re.sub(lowerCamelCase__			,''			,lowerCamelCase__			) for x in predictions]			)
																			_UpperCamelCase :		Dict			    =       np.array([re.sub(lowerCamelCase__			,''			,lowerCamelCase__			) for x in references]			)
							else:
													_UpperCamelCase :		Dict			    =       np.asarray(lowerCamelCase__			)
													_UpperCamelCase :		List[Any]			    =       np.asarray(lowerCamelCase__			)

							if ignore_case:
													_UpperCamelCase :		List[Any]			    =       np.char.lower(lowerCamelCase__			)
													_UpperCamelCase :		str			    =       np.char.lower(lowerCamelCase__			)

							if ignore_punctuation:
													_UpperCamelCase :		Optional[Any]			    =       string.punctuation.maketrans(''			,''			,string.punctuation			)
													_UpperCamelCase :		Optional[int]			    =       np.char.translate(lowerCamelCase__			,table=lowerCamelCase__			)
													_UpperCamelCase :		Optional[Any]			    =       np.char.translate(lowerCamelCase__			,table=lowerCamelCase__			)

							if ignore_numbers:
													_UpperCamelCase :		Optional[Any]			    =       string.digits.maketrans(''			,''			,string.digits			)
													_UpperCamelCase :		List[Any]			    =       np.char.translate(lowerCamelCase__			,table=lowerCamelCase__			)
													_UpperCamelCase :		Any			    =       np.char.translate(lowerCamelCase__			,table=lowerCamelCase__			)

							_UpperCamelCase :		Optional[Any]			    =       predictions == references

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







'''simple docstring'''
from __future__ import annotations

import time
from collections.abc import Sequence
from random import randint

from matplotlib import pyplot as plt






def A__   (					UpperCAmelCase_  ,  UpperCAmelCase_  ,  UpperCAmelCase_							):
						if not arr:
												return None, None, 0
						if low == high:
												return low, high, arr[low]

						_UpperCamelCase :		str			    =       (low + high) // 2
						_UpperCamelCase    ,      _UpperCamelCase    ,      _UpperCamelCase :		Dict			    =       max_subarray(UpperCAmelCase_  ,  UpperCAmelCase_  ,  UpperCAmelCase_							)
						_UpperCamelCase    ,      _UpperCamelCase    ,      _UpperCamelCase :		List[Any]			    =       max_subarray(UpperCAmelCase_  ,  mid + 1  ,  UpperCAmelCase_							)
						_UpperCamelCase    ,      _UpperCamelCase    ,      _UpperCamelCase :		Tuple			    =       max_cross_sum(UpperCAmelCase_  ,  UpperCAmelCase_  ,  UpperCAmelCase_  ,  UpperCAmelCase_							)
						if left_sum >= right_sum and left_sum >= cross_sum:
												return left_low, left_high, left_sum
						elif right_sum >= left_sum and right_sum >= cross_sum:
												return right_low, right_high, right_sum
						return cross_left, cross_right, cross_sum






def A__   (					UpperCAmelCase_  ,  UpperCAmelCase_  ,  UpperCAmelCase_  ,  UpperCAmelCase_							):
						_UpperCamelCase    ,      _UpperCamelCase :		Optional[Any]			    =       float('-inf'							), -1
						_UpperCamelCase    ,      _UpperCamelCase :		int			    =       float('-inf'							), -1

						_UpperCamelCase :		int | float			    =       0
						for i in range(UpperCAmelCase_  ,  low - 1  ,  -1							):
												summ += arr[i]
												if summ > left_sum:
																		_UpperCamelCase :		Optional[int]			    =       summ
																		_UpperCamelCase :		Union[str, Any]			    =       i

						_UpperCamelCase :		List[Any]			    =       0
						for i in range(mid + 1  ,  high + 1							):
												summ += arr[i]
												if summ > right_sum:
																		_UpperCamelCase :		List[Any]			    =       summ
																		_UpperCamelCase :		List[str]			    =       i

						return max_left, max_right, (left_sum + right_sum)






def A__   (					UpperCAmelCase_							):
						_UpperCamelCase :		List[str]			    =       [randint(1  ,  UpperCAmelCase_							) for _ in range(UpperCAmelCase_							)]
						_UpperCamelCase :		Optional[Any]			    =       time.time()
						max_subarray(UpperCAmelCase_  ,  0  ,  input_size - 1							)
						_UpperCamelCase :		str			    =       time.time()
						return end - start






def A__   (					):
						_UpperCamelCase :		Any			    =       [1_0, 1_0_0, 1_0_0_0, 1_0_0_0_0, 5_0_0_0_0, 1_0_0_0_0_0, 2_0_0_0_0_0, 3_0_0_0_0_0, 4_0_0_0_0_0, 5_0_0_0_0_0]
						_UpperCamelCase :		Dict			    =       [time_max_subarray(UpperCAmelCase_							) for input_size in input_sizes]
						print('No of Inputs\t\tTime Taken'							)
						for input_size, runtime in zip(UpperCAmelCase_  ,  UpperCAmelCase_							):
												print(UpperCAmelCase_  ,  '\t\t'  ,  UpperCAmelCase_							)
						plt.plot(UpperCAmelCase_  ,  UpperCAmelCase_							)
						plt.xlabel('Number of Inputs'							)
						plt.ylabel('Time taken in seconds'							)
						plt.show()


if __name__ == "__main__":
					from doctest import testmod

					testmod()


