

import datasets


UpperCAmelCase_							:					str		 =   '''\
@InProceedings{conneau2018xnli,
  author = "Conneau, Alexis
                 and Rinott, Ruty
                 and Lample, Guillaume
                 and Williams, Adina
                 and Bowman, Samuel R.
                 and Schwenk, Holger
                 and Stoyanov, Veselin",
  title = "XNLI: Evaluating Cross-lingual Sentence Representations",
  booktitle = "Proceedings of the 2018 Conference on Empirical Methods
               in Natural Language Processing",
  year = "2018",
  publisher = "Association for Computational Linguistics",
  location = "Brussels, Belgium",
}
'''

UpperCAmelCase_							:					str		 =   '''\
XNLI is a subset of a few thousand examples from MNLI which has been translated
into a 14 different languages (some low-ish resource). As with MNLI, the goal is
to predict textual entailment (does sentence A imply/contradict/neither sentence
B) and is a classification task (given two sentences, predict one of three
labels).
'''

UpperCAmelCase_							:					Any		 =   '''
Computes XNLI score which is just simple accuracy.
Args:
    predictions: Predicted labels.
    references: Ground truth labels.
Returns:
    \'accuracy\': accuracy
Examples:

    >>> predictions = [0, 1]
    >>> references = [0, 1]
    >>> xnli_metric = datasets.load_metric("xnli")
    >>> results = xnli_metric.compute(predictions=predictions, references=references)
    >>> print(results)
    {\'accuracy\': 1.0}
'''
def 							__SCREAMING_SNAKE_CASE     (   a__    :   Optional[int]			,a__    :   str       )					->				List[Any]:
	return (preds == labels).mean()







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




	def        lowerCAmelCase_       (     self						:     List[str]							):
		return datasets.MetricInfo(
		    description=_DESCRIPTION					,      citation=_CITATION					,      inputs_description=_KWARGS_DESCRIPTION					,      features=datasets.Features(
		        {
		            """predictions""": datasets.Value("""int64""" if self.config_name != """sts-b""" else """float32"""							),
		            """references""": datasets.Value("""int64""" if self.config_name != """sts-b""" else """float32"""							),
		        }							)					,      codebase_urls=[]					,      reference_urls=[]					,      format="""numpy"""					,      )




	def        lowerCAmelCase_       (     self						:     List[Any]					,      __A						:     List[Any]					,      __A						:     Optional[Any]							):
		return {"accuracy": simple_accuracy(__A					,      __A							)}








from typing import List, Optional

import numpy as np

from ...processing_utils import ProcessorMixin
from ...utils import to_numpy






class      lowerCamelCase_      (	_lowercase	):
	_lowercase		:   Union[str, Any]     					=				'''EncodecFeatureExtractor'''
	_lowercase		:   Any     					=				('''T5Tokenizer''', '''T5TokenizerFast''')




	def __init__(     self						:     List[Any]					,      __A						:     Any					,      __A						:     Tuple							):
		super().__init__(__A					,      __A							)
		__A :			Dict		    =			self.feature_extractor
		__A :			List[str]		    =			False




	def        lowerCAmelCase_       (     self						:     Union[str, Any]					,      __A						:     str=None					,      __A						:     Tuple=None					,      __A						:     Dict=True							):
		return self.tokenizer.get_decoder_prompt_ids(task=__A					,      language=__A					,      no_timestamps=__A							)




	def __call__(     self						:     Optional[Any]					,      *__A						:     Tuple					,      **__A						:     Tuple							):
		# For backward compatibility
		if self._in_target_context_manager:
			return self.current_processor(*__A					,      **__A							)

		__A :			str		    =			kwargs.pop("""audio"""					,      __A							)
		__A :			Optional[Any]		    =			kwargs.pop("""sampling_rate"""					,      __A							)
		__A :			int		    =			kwargs.pop("""text"""					,      __A							)
		if len(__A							) > 0:
			__A :			int		    =			args[0]
			__A :			Dict		    =			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 text is not None:
			__A :			Dict		    =			self.tokenizer(__A					,      **__A							)

		if audio is not None:
			__A :			Optional[int]		    =			self.feature_extractor(__A					,      *__A					,      sampling_rate=__A					,      **__A							)

		if audio is None:
			return inputs

		elif text is None:
			return audio_inputs

		else:
			__A :			List[Any]		    =			audio_inputs["""input_values"""]
			if "padding_mask" in audio_inputs:
				__A :			int		    =			audio_inputs["""padding_mask"""]
			return inputs




	def        lowerCAmelCase_       (     self						:     List[str]					,      *__A						:     int					,      **__A						:     Tuple							):
		__A :			Optional[int]		    =			kwargs.pop("""audio"""					,      __A							)
		__A :			List[str]		    =			kwargs.pop("""padding_mask"""					,      __A							)

		if len(__A							) > 0:
			__A :			Dict		    =			args[0]
			__A :			Optional[int]		    =			args[1:]

		if audio_values is not None:
			return self._decode_audio(__A					,      padding_mask=__A							)
		else:
			return self.tokenizer.batch_decode(*__A					,      **__A							)




	def        lowerCAmelCase_       (     self						:     Optional[Any]					,      *__A						:     Dict					,      **__A						:     Any							):
		return self.tokenizer.decode(*__A					,      **__A							)




	def        lowerCAmelCase_       (     self						:     Tuple					,      __A						:     Union[str, Any]					,      __A						:     Optional = None							):
		__A :			List[str]		    =			to_numpy(__A							)
		__A    ,				__A    ,				__A :			Tuple		    =			audio_values.shape

		if padding_mask is None:
			return list(__A							)

		__A :			Union[str, Any]		    =			to_numpy(__A							)

		# match the sequence length of the padding mask to the generated audio arrays by padding with the **non-padding**
		# token (so that the generated audio values are **not** treated as padded tokens)
		__A :			List[str]		    =			seq_len - padding_mask.shape[-1]
		__A :			Tuple		    =			1 - self.feature_extractor.padding_value
		__A :			Optional[int]		    =			np.pad(__A					,      ((0, 0), (0, difference))					,      """constant"""					,      constant_values=__A							)

		__A :			int		    =			audio_values.tolist()
		for i in range(__A							):
			__A :			str		    =			np.asarray(audio_values[i]							)[
			    padding_mask[i][None, :] != self.feature_extractor.padding_value
			]
			__A :			List[Any]		    =			sliced_audio.reshape(__A					,      -1							)

		return audio_values





