


'''simple docstring'''
import re
import string

import numpy as np

import datasets


__SCREAMING_SNAKE_CASE					:				List[Any]									=		'''
Returns the rate at which the input predicted strings exactly match their references, ignoring any strings input as part of the regexes_to_ignore list.
'''

__SCREAMING_SNAKE_CASE					:				List[Any]									=		'''
Args:
    predictions: List of predicted texts.
    references: List of reference texts.
    regexes_to_ignore: List, defaults to None. Regex expressions of characters to
        ignore when calculating the exact matches. Note: these regexes are removed
        from the input data before the changes based on the options below (e.g. ignore_case,
        ignore_punctuation, ignore_numbers) are applied.
    ignore_case: Boolean, defaults to False. If true, turns everything
        to lowercase so that capitalization differences are ignored.
    ignore_punctuation: Boolean, defaults to False. If true, removes all punctuation before
        comparing predictions and references.
    ignore_numbers: Boolean, defaults to False. If true, removes all punctuation before
        comparing predictions and references.
Returns:
    exact_match: Dictionary containing exact_match rate. Possible values are between 0.0 and 100.0, inclusive.
Examples:
    >>> exact_match = datasets.load_metric("exact_match")
    >>> refs = ["the cat", "theater", "YELLING", "agent007"]
    >>> preds = ["cat?", "theater", "yelling", "agent"]
    >>> results = exact_match.compute(references=refs, predictions=preds)
    >>> print(round(results["exact_match"], 1))
    25.0

    >>> exact_match = datasets.load_metric("exact_match")
    >>> refs = ["the cat", "theater", "YELLING", "agent007"]
    >>> preds = ["cat?", "theater", "yelling", "agent"]
    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=["the ", "yell"], ignore_case=True, ignore_punctuation=True)
    >>> print(round(results["exact_match"], 1))
    50.0


    >>> exact_match = datasets.load_metric("exact_match")
    >>> refs = ["the cat", "theater", "YELLING", "agent007"]
    >>> preds = ["cat?", "theater", "yelling", "agent"]
    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=["the ", "yell", "YELL"], ignore_case=True, ignore_punctuation=True)
    >>> print(round(results["exact_match"], 1))
    75.0

    >>> exact_match = datasets.load_metric("exact_match")
    >>> refs = ["the cat", "theater", "YELLING", "agent007"]
    >>> preds = ["cat?", "theater", "yelling", "agent"]
    >>> results = exact_match.compute(references=refs, predictions=preds, regexes_to_ignore=["the ", "yell", "YELL"], ignore_case=True, ignore_punctuation=True, ignore_numbers=True)
    >>> print(round(results["exact_match"], 1))
    100.0

    >>> exact_match = datasets.load_metric("exact_match")
    >>> refs = ["The cat sat on the mat.", "Theaters are great.", "It\'s like comparing oranges and apples."]
    >>> preds = ["The cat sat on the mat?", "Theaters are great.", "It\'s like comparing apples and oranges."]
    >>> results = exact_match.compute(references=refs, predictions=preds)
    >>> print(round(results["exact_match"], 1))
    33.3

'''

__SCREAMING_SNAKE_CASE					:				List[str]									=		'''
'''






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

						"""simple docstring"""






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

													if ignore_case:
																				A_			    =		np.char.lower(lowerCAmelCase	)
																				A_			    =		np.char.lower(lowerCAmelCase	)

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

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

													A_			    =		predictions == references

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









'''simple docstring'''
import pytest
import requests

from datasets.utils.file_utils import http_head

from .utils import OfflineSimulationMode, RequestWouldHangIndefinitelyError, offline







@pytest.mark.integration
def       a_				(	):
							with offline(OfflineSimulationMode.CONNECTION_TIMES_OUT ):
														with pytest.raises(UpperCamelCase_ ):
																					requests.request("GET"						,  "https://huggingface.co" )
														with pytest.raises(requests.exceptions.ConnectTimeout ):
																					requests.request("GET"						,  "https://huggingface.co"						,  timeout=1.0 )







@pytest.mark.integration
def       a_				(	):
							with offline(OfflineSimulationMode.CONNECTION_FAILS ):
														with pytest.raises(requests.exceptions.ConnectionError ):
																					requests.request("GET"						,  "https://huggingface.co" )







def       a_				(	):
							with offline(OfflineSimulationMode.HF_DATASETS_OFFLINE_SET_TO_1 ):
														with pytest.raises(UpperCamelCase_ ):
																					http_head("https://huggingface.co" )





