





'''simple docstring'''

import re
import string

import numpy as np

import datasets


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

lowercase__						:      List[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'

lowercase__						:      Optional[int]	=    '\n'
@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION						,						_KWARGS_DESCRIPTION			)
class     __lowerCAmelCase					(   datasets.Metric			):






       """simple docstring"""





       def snake_case__						(							self       :		str					)   ->					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 snake_case__						(							self       :		int	,			lowerCAmelCase__       :		int	,			lowerCAmelCase__       :		Optional[int]	,			lowerCAmelCase__       :		Dict=None	,			lowerCAmelCase__       :		Union[str, Any]=False	,			lowerCAmelCase__       :		Dict=False	,			lowerCAmelCase__       :		List[str]=False	,			)   ->					Tuple:

            '''simple docstring'''




            if regexes_to_ignore is not None:
                 for s in regexes_to_ignore:
                      _UpperCamelCase       =	np.array([re.sub(lowerCAmelCase__	,			''''''	,			lowerCAmelCase__					) for x in predictions]					)
                      _UpperCamelCase       =	np.array([re.sub(lowerCAmelCase__	,			''''''	,			lowerCAmelCase__					) for x in references]					)
            else:
                 _UpperCamelCase       =	np.asarray(lowerCAmelCase__					)
                 _UpperCamelCase       =	np.asarray(lowerCAmelCase__					)

            if ignore_case:
                 _UpperCamelCase       =	np.char.lower(lowerCAmelCase__					)
                 _UpperCamelCase       =	np.char.lower(lowerCAmelCase__					)

            if ignore_punctuation:
                 _UpperCamelCase       =	string.punctuation.maketrans(''''''	,			''''''	,			string.punctuation					)
                 _UpperCamelCase       =	np.char.translate(lowerCAmelCase__	,			table=lowerCAmelCase__					)
                 _UpperCamelCase       =	np.char.translate(lowerCAmelCase__	,			table=lowerCAmelCase__					)

            if ignore_numbers:
                 _UpperCamelCase       =	string.digits.maketrans(''''''	,			''''''	,			string.digits					)
                 _UpperCamelCase       =	np.char.translate(lowerCAmelCase__	,			table=lowerCAmelCase__					)
                 _UpperCamelCase       =	np.char.translate(lowerCAmelCase__	,			table=lowerCAmelCase__					)

            _UpperCamelCase       =	predictions == references

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










'''simple docstring'''

from __future__ import annotations







def  a__    (    lowercase :					list[int], lowercase :					list[int], lowercase :					int				)		->		tuple[float, list[float]]:





     """simple docstring"""

     _UpperCamelCase       =	list(range(len(lowercase				)				)				)
     _UpperCamelCase       =	[v / w for v, w in zip(lowercase, lowercase				)]
     index.sort(key=lambda lowercase				: ratio[i], reverse=lowercase				)

     _UpperCamelCase       =	0
     _UpperCamelCase       =	[0] * len(lowercase				)
     for i in index:
          if weight[i] <= capacity:
               _UpperCamelCase       =	1
               max_value += value[i]
               capacity -= weight[i]
          else:
               _UpperCamelCase       =	capacity / weight[i]
               max_value += value[i] * capacity / weight[i]
               break

     return max_value, fractions


if __name__ == "__main__":
   import doctest

   doctest.testmod()



