

from sklearn.metrics import accuracy_score

import datasets


lowerCamelCase_					  =   '''
Accuracy is the proportion of correct predictions among the total number of cases processed. It can be computed with:
Accuracy = (TP + TN) / (TP + TN + FP + FN)
 Where:
TP: True positive
TN: True negative
FP: False positive
FN: False negative
'''


lowerCamelCase_					  =   '''
Args:
    predictions (`list` of `int`): Predicted labels.
    references (`list` of `int`): Ground truth labels.
    normalize (`boolean`): If set to False, returns the number of correctly classified samples. Otherwise, returns the fraction of correctly classified samples. Defaults to True.
    sample_weight (`list` of `float`): Sample weights Defaults to None.

Returns:
    accuracy (`float` or `int`): Accuracy score. Minimum possible value is 0. Maximum possible value is 1.0, or the number of examples input, if `normalize` is set to `True`.. A higher score means higher accuracy.

Examples:

    Example 1-A simple example
        >>> accuracy_metric = datasets.load_metric("accuracy")
        >>> results = accuracy_metric.compute(references=[0, 1, 2, 0, 1, 2], predictions=[0, 1, 1, 2, 1, 0])
        >>> print(results)
        {\'accuracy\': 0.5}

    Example 2-The same as Example 1, except with `normalize` set to `False`.
        >>> accuracy_metric = datasets.load_metric("accuracy")
        >>> results = accuracy_metric.compute(references=[0, 1, 2, 0, 1, 2], predictions=[0, 1, 1, 2, 1, 0], normalize=False)
        >>> print(results)
        {\'accuracy\': 3.0}

    Example 3-The same as Example 1, except with `sample_weight` set.
        >>> accuracy_metric = datasets.load_metric("accuracy")
        >>> results = accuracy_metric.compute(references=[0, 1, 2, 0, 1, 2], predictions=[0, 1, 1, 2, 1, 0], sample_weight=[0.5, 2, 0.7, 0.5, 9, 0.4])
        >>> print(results)
        {\'accuracy\': 0.8778625954198473}
'''


lowerCamelCase_					  =   '''
@article{scikit-learn,
  title={Scikit-learn: Machine Learning in {P}ython},
  author={Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V.
         and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P.
         and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and
         Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.},
  journal={Journal of Machine Learning Research},
  volume={12},
  pages={2825--2830},
  year={2011}
}
'''







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







      def       lowerCAmelCase_       (	self  )		->			Optional[Any]:
        return datasets.MetricInfo(
            description=_DESCRIPTION				,    citation=_CITATION				,    inputs_description=_KWARGS_DESCRIPTION				,    features=datasets.Features(
                {
                    """predictions""": datasets.Sequence(datasets.Value("""int32"""  )  ),
                    """references""": datasets.Sequence(datasets.Value("""int32"""  )  ),
                }
                if self.config_name == """multilabel"""
                else {
                    """predictions""": datasets.Value("""int32"""  ),
                    """references""": datasets.Value("""int32"""  ),
                }  )				,    reference_urls=["""https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html"""]				,    )







      def       lowerCAmelCase_       (	self				,    lowerCamelCase				,    lowerCamelCase				,    lowerCamelCase=True				,    lowerCamelCase=None  )		->			Dict:
        return {
            "accuracy": float(
                accuracy_score(lowerCamelCase				,    lowerCamelCase				,    normalize=lowerCamelCase				,    sample_weight=lowerCamelCase  )  )
        }


import warnings
from contextlib import contextmanager

from ...processing_utils import ProcessorMixin







class 					__lowerCamelCase							(      __snake_case      ):
      lowerCamelCase_      : Dict  			=   'AutoFeatureExtractor'
      lowerCamelCase_      : Optional[int]  			=   'Speech2Text2Tokenizer'







      def __init__(	self				,    lowerCamelCase				,    lowerCamelCase  )		->			List[str]:
        super().__init__(lowerCamelCase				,    lowerCamelCase  )
        snake_case_					= self.feature_extractor
        snake_case_					= False







      def __call__(	self				,    *lowerCamelCase				,    **lowerCamelCase  )		->			Dict:
        # For backward compatibility
        if self._in_target_context_manager:
          return self.current_processor(*lowerCamelCase				,    **lowerCamelCase  )

        if "raw_speech" in kwargs:
          warnings.warn("""Using `raw_speech` as a keyword argument is deprecated. Use `audio` instead."""  )
          snake_case_					= kwargs.pop("""raw_speech"""  )
        else:
          snake_case_					= kwargs.pop("""audio"""				,    lowerCamelCase  )
        snake_case_					= kwargs.pop("""sampling_rate"""				,    lowerCamelCase  )
        snake_case_					= kwargs.pop("""text"""				,    lowerCamelCase  )
        if len(lowerCamelCase  ) > 0:
          snake_case_					= args[0]
          snake_case_					= args[1:]

        if audio is None and text is None:
          raise ValueError("""You need to specify either an `audio` or `text` input to process."""  )

        if audio is not None:
          snake_case_					= self.feature_extractor(lowerCamelCase				,    *lowerCamelCase				,    sampling_rate=lowerCamelCase				,    **lowerCamelCase  )
        if text is not None:
          snake_case_					= self.tokenizer(lowerCamelCase				,    **lowerCamelCase  )

        if text is None:
          return inputs
        elif audio is None:
          return encodings
        else:
          snake_case_					= encodings["""input_ids"""]
          return inputs







      def       lowerCAmelCase_       (	self				,    *lowerCamelCase				,    **lowerCamelCase  )		->			int:
        return self.tokenizer.batch_decode(*lowerCamelCase				,    **lowerCamelCase  )







      def       lowerCAmelCase_       (	self				,    *lowerCamelCase				,    **lowerCamelCase  )		->			Union[str, Any]:
        return self.tokenizer.decode(*lowerCamelCase				,    **lowerCamelCase  )







      @contextmanager
      def       lowerCAmelCase_       (	self  )		->			Any:
        warnings.warn(
            """`as_target_processor` is deprecated and will be removed in v5 of Transformers. You can process your """
            """labels by using the argument `text` of the regular `__call__` method (either in the same call as """
            """your audio inputs, or in a separate call."""  )
        snake_case_					= True
        snake_case_					= self.tokenizer
        yield
        snake_case_					= self.feature_extractor
        snake_case_					= False