





"""simple docstring"""




import warnings
from contextlib import contextmanager

from ...processing_utils import ProcessorMixin
from .feature_extraction_wavaveca import WavaVecaFeatureExtractor
from .tokenization_wavaveca import WavaVecaCTCTokenizer


class 			__UpperCamelCase							(		a__		):
							lowerCamelCase  :   Optional[int]    ="""Wav2Vec2FeatureExtractor"""
							lowerCamelCase  :   Dict    ="""AutoTokenizer"""






							def __init__(  self ,   lowerCAmelCase__ ,   lowerCAmelCase__ )      ->					Optional[Any]:
								super().__init__(lowerCAmelCase__ ,   lowerCAmelCase__ )
								a :						int      =							self.feature_extractor
								a :						Optional[Any]      =							False






							@classmethod
							def        __a  (  cls ,   lowerCAmelCase__ ,   **lowerCAmelCase__ )      ->					int:
								try:
									return super().from_pretrained(lowerCAmelCase__ ,   **lowerCAmelCase__ )
								except OSError:
									warnings.warn(
									    f"""Loading a tokenizer inside {cls.__name__} from a config that does not"""
									    " include a `tokenizer_class` attribute is deprecated and will be "
									    "removed in v5. Please add `'tokenizer_class': 'Wav2Vec2CTCTokenizer'`"
									    " attribute to either your `config.json` or `tokenizer_config.json` "
									    "file to suppress this warning: " ,   lowerCAmelCase__ ,   )

									a :						List[Any]      =							WavaVecaFeatureExtractor.from_pretrained(lowerCAmelCase__ ,   **lowerCAmelCase__ )
									a :						str      =							WavaVecaCTCTokenizer.from_pretrained(lowerCAmelCase__ ,   **lowerCAmelCase__ )

									return cls(feature_extractor=lowerCAmelCase__ ,   tokenizer=lowerCAmelCase__ )






							def __call__(  self ,   *lowerCAmelCase__ ,   **lowerCAmelCase__ )      ->					Optional[int]:
								# 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." )
									a :						Any      =							kwargs.pop("raw_speech" )
								else:
									a :						Dict      =							kwargs.pop("audio" ,   lowerCAmelCase__ )
								a :						List[str]      =							kwargs.pop("sampling_rate" ,   lowerCAmelCase__ )
								a :						int      =							kwargs.pop("text" ,   lowerCAmelCase__ )
								if len(lowerCAmelCase__ ) > 0:
									a :						int      =							args[0]
									a :						List[Any]      =							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:
									a :						Dict      =							self.feature_extractor(lowerCAmelCase__ ,   *lowerCAmelCase__ ,   sampling_rate=lowerCAmelCase__ ,   **lowerCAmelCase__ )
								if text is not None:
									a :						Tuple      =							self.tokenizer(lowerCAmelCase__ ,   **lowerCAmelCase__ )

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






							def        __a  (  self ,   *lowerCAmelCase__ ,   **lowerCAmelCase__ )      ->					Optional[int]:
								# For backward compatibility
								if self._in_target_context_manager:
									return self.current_processor.pad(*lowerCAmelCase__ ,   **lowerCAmelCase__ )

								a :						str      =							kwargs.pop("input_features" ,   lowerCAmelCase__ )
								a :						int      =							kwargs.pop("labels" ,   lowerCAmelCase__ )
								if len(lowerCAmelCase__ ) > 0:
									a :						int      =							args[0]
									a :						Union[str, Any]      =							args[1:]

								if input_features is not None:
									a :						Tuple      =							self.feature_extractor.pad(lowerCAmelCase__ ,   *lowerCAmelCase__ ,   **lowerCAmelCase__ )
								if labels is not None:
									a :						Any      =							self.tokenizer.pad(lowerCAmelCase__ ,   **lowerCAmelCase__ )

								if labels is None:
									return input_features
								elif input_features is None:
									return labels
								else:
									a :						int      =							labels["input_ids"]
									return input_features






							def        __a  (  self ,   *lowerCAmelCase__ ,   **lowerCAmelCase__ )      ->					Optional[int]:
								return self.tokenizer.batch_decode(*lowerCAmelCase__ ,   **lowerCAmelCase__ )






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






							@contextmanager
							def        __a  (  self )      ->					Optional[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." )
								a :						int      =							True
								a :						Dict      =							self.tokenizer
								yield
								a :						Tuple      =							self.feature_extractor
								a :						Dict      =							False









"""simple docstring"""




import random
import unittest

import numpy as np

import transformers
from transformers import is_flax_available, is_torch_available
from transformers.testing_utils import is_pt_flax_cross_test, require_flax


if is_flax_available():
		import os

		import jax.numpy as jnp
		from jax import jit

		from transformers import AutoTokenizer, FlaxAutoModelForCausalLM
		from transformers.modeling_flax_pytorch_utils import load_flax_weights_in_pytorch_model

		a		:					Optional[Any]	      =     '''0.12'''  # assumed parallelism: 8


if is_torch_available():
		import torch






def  _SCREAMING_SNAKE_CASE						(      _lowercase		:       List[str]       ,			_lowercase		:       Any       ,			_lowercase		:       Union[str, Any]=None   )					->Union[str, Any]:






	'''simple docstring'''






	if rng is None:
		a :						Dict      =							random.Random()

	a :						Any      =							1
	for dim in shape:
		total_dims *= dim

	a :						Dict      =							[]
	for _ in range(_lowercase   ):
		values.append(rng.randint(0       ,			vocab_size - 1   )   )

	a :						Dict      =							np.array(_lowercase       ,			dtype=jnp.intaa   ).reshape(_lowercase   )

	return output






def  _SCREAMING_SNAKE_CASE						(      _lowercase		:       List[str]       ,			_lowercase		:       int=None   )					->Optional[Any]:






	'''simple docstring'''






	a :						str      =							ids_tensor(_lowercase       ,			vocab_size=2       ,			rng=_lowercase   )
	# make sure that at least one token is attended to for each batch
	a :						Union[str, Any]      =							1
	return attn_mask


@require_flax
class 			__UpperCamelCase							:
							lowerCamelCase  :   Dict    =None
							lowerCamelCase  :   List[Any]    =()






							def        __a  (  self )      ->					Union[str, Any]:
								a,			a :						List[Any]      =							self.model_tester.prepare_config_and_inputs_for_common()

								# cut to half length & take max batch_size 3
								a :						Any      =							2
								a :						List[Any]      =							inputs["input_ids"].shape[-1] // 2
								a :						Union[str, Any]      =							inputs["input_ids"][:max_batch_size, :sequence_length]

								a :						Optional[Any]      =							jnp.ones_like(lowerCAmelCase__ )
								a :						Any      =							attention_mask[:max_batch_size, :sequence_length]

								# generate max 5 tokens
								a :						int      =							input_ids.shape[-1] + 5
								if config.eos_token_id is not None and config.pad_token_id is None:
									# hack to allow generate for models such as GPT2 as is done in `generate()`
									a :						List[str]      =							config.eos_token_id
								return config, input_ids, attention_mask, max_length






							@is_pt_flax_cross_test
							def        __a  (  self )      ->					List[Any]:
								a,			a,			a,			a :						int      =							self._get_input_ids_and_config()
								a :						Dict      =							False
								a :						Tuple      =							max_length
								a :						List[Any]      =							0

								for model_class in self.all_generative_model_classes:
									a :						List[str]      =							model_class(lowerCAmelCase__ )

									a :						int      =							model_class.__name__[4:]  # Skip the "Flax" at the beginning
									a :						List[Any]      =							getattr(lowerCAmelCase__ ,   lowerCAmelCase__ )
									a :						Any      =							pt_model_class(lowerCAmelCase__ ).eval()
									a :						int      =							load_flax_weights_in_pytorch_model(lowerCAmelCase__ ,   flax_model.params )

									a :						Optional[Any]      =							flax_model.generate(lowerCAmelCase__ ).sequences
									a :						Tuple      =							pt_model.generate(torch.tensor(lowerCAmelCase__ ,   dtype=torch.long ) )

									if flax_generation_outputs.shape[-1] > pt_generation_outputs.shape[-1]:
										a :						List[str]      =							flax_generation_outputs[:, : pt_generation_outputs.shape[-1]]

									self.assertListEqual(pt_generation_outputs.numpy().tolist() ,   flax_generation_outputs.tolist() )






							def        __a  (  self )      ->					Optional[Any]:
								a,			a,			a,			a :						Optional[Any]      =							self._get_input_ids_and_config()
								a :						List[str]      =							False
								a :						Tuple      =							max_length

								for model_class in self.all_generative_model_classes:
									a :						Dict      =							model_class(lowerCAmelCase__ )

									a :						Union[str, Any]      =							model.generate(lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						Dict      =							jit(model.generate )
									a :						int      =							jit_generate(lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )






							def        __a  (  self )      ->					Any:
								a,			a,			a,			a :						List[Any]      =							self._get_input_ids_and_config()
								a :						Dict      =							True
								a :						Any      =							max_length

								for model_class in self.all_generative_model_classes:
									a :						int      =							model_class(lowerCAmelCase__ )

									a :						Optional[int]      =							model.generate(lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						List[Any]      =							jit(model.generate )
									a :						List[Any]      =							jit_generate(lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )






							def        __a  (  self )      ->					Dict:
								a,			a,			a,			a :						str      =							self._get_input_ids_and_config()
								a :						str      =							False
								a :						Union[str, Any]      =							max_length
								a :						Optional[int]      =							2

								for model_class in self.all_generative_model_classes:
									a :						List[Any]      =							model_class(lowerCAmelCase__ )

									a :						Optional[Any]      =							model.generate(lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						Union[str, Any]      =							jit(model.generate )
									a :						Optional[int]      =							jit_generate(lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )






							def        __a  (  self )      ->					Optional[Any]:
								a,			a,			a,			a :						Optional[Any]      =							self._get_input_ids_and_config()
								a :						Optional[Any]      =							False
								a :						Tuple      =							max_length
								a :						List[Any]      =							2
								a :						Any      =							2

								for model_class in self.all_generative_model_classes:
									a :						Any      =							model_class(lowerCAmelCase__ )

									a :						List[str]      =							model.generate(lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[0] ,   input_ids.shape[0] * config.num_return_sequences )






							def        __a  (  self )      ->					Optional[int]:
								a,			a,			a,			a :						List[str]      =							self._get_input_ids_and_config()
								a :						Optional[int]      =							True
								a :						Dict      =							max_length
								a :						Dict      =							0.8
								a :						Any      =							10
								a :						Union[str, Any]      =							0.3
								a :						List[Any]      =							1
								a :						Optional[int]      =							8
								a :						List[Any]      =							9

								for model_class in self.all_generative_model_classes:
									a :						Tuple      =							model_class(lowerCAmelCase__ )

									a :						Any      =							model.generate(lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						Tuple      =							jit(model.generate )
									a :						Dict      =							jit_generate(lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )






							def        __a  (  self )      ->					Optional[int]:
								a,			a,			a,			a :						Dict      =							self._get_input_ids_and_config()
								a :						Dict      =							max_length
								a :						List[str]      =							1
								a :						List[str]      =							8
								a :						List[str]      =							9

								for model_class in self.all_generative_model_classes:
									a :						Dict      =							model_class(lowerCAmelCase__ )

									a :						str      =							model.generate(lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						List[str]      =							jit(model.generate )
									a :						Union[str, Any]      =							jit_generate(lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )






							def        __a  (  self )      ->					int:
								a,			a,			a,			a :						Tuple      =							self._get_input_ids_and_config()
								a :						List[Any]      =							max_length
								a :						Dict      =							2
								a :						List[Any]      =							1
								a :						List[str]      =							8
								a :						Any      =							9

								for model_class in self.all_generative_model_classes:
									a :						Optional[int]      =							model_class(lowerCAmelCase__ )

									a :						List[str]      =							model.generate(lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						int      =							jit(model.generate )
									a :						Optional[int]      =							jit_generate(lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )






							def        __a  (  self )      ->					Optional[int]:
								a,			a,			a,			a :						List[str]      =							self._get_input_ids_and_config()

								# pad attention mask on the left
								a :						str      =							attention_mask.at[(0, 0)].set(0 )

								a :						Any      =							False
								a :						Union[str, Any]      =							max_length

								for model_class in self.all_generative_model_classes:
									a :						Union[str, Any]      =							model_class(lowerCAmelCase__ )

									a :						Union[str, Any]      =							model.generate(lowerCAmelCase__ ,   attention_mask=lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						List[Any]      =							jit(model.generate )
									a :						int      =							jit_generate(lowerCAmelCase__ ,   attention_mask=lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )






							def        __a  (  self )      ->					List[str]:
								a,			a,			a,			a :						Union[str, Any]      =							self._get_input_ids_and_config()

								# pad attention mask on the left
								a :						Any      =							attention_mask.at[(0, 0)].set(0 )

								a :						Dict      =							True
								a :						List[Any]      =							max_length

								for model_class in self.all_generative_model_classes:
									a :						List[str]      =							model_class(lowerCAmelCase__ )

									a :						int      =							model.generate(lowerCAmelCase__ ,   attention_mask=lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						Any      =							jit(model.generate )
									a :						List[str]      =							jit_generate(lowerCAmelCase__ ,   attention_mask=lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )






							def        __a  (  self )      ->					str:
								a,			a,			a,			a :						Dict      =							self._get_input_ids_and_config()

								# pad attention mask on the left
								a :						Union[str, Any]      =							attention_mask.at[(0, 0)].set(0 )

								a :						int      =							2
								a :						Any      =							max_length

								for model_class in self.all_generative_model_classes:
									a :						Optional[Any]      =							model_class(lowerCAmelCase__ )

									a :						List[Any]      =							model.generate(lowerCAmelCase__ ,   attention_mask=lowerCAmelCase__ ).sequences
									self.assertEqual(generation_outputs.shape[-1] ,   lowerCAmelCase__ )

									a :						List[Any]      =							jit(model.generate )
									a :						Dict      =							jit_generate(lowerCAmelCase__ ,   attention_mask=lowerCAmelCase__ ).sequences

									self.assertListEqual(generation_outputs.tolist() ,   jit_generation_outputs.tolist() )


@require_flax
class 			__UpperCamelCase							(		unittest.TestCase		):






							def        __a  (  self )      ->					List[Any]:
								a :						Any      =							AutoTokenizer.from_pretrained("hf-internal-testing/tiny-bert" )
								a :						Tuple      =							FlaxAutoModelForCausalLM.from_pretrained("hf-internal-testing/tiny-bert-flax-only" )

								a :						int      =							"Hello world"
								a :						int      =							tokenizer(lowerCAmelCase__ ,   return_tensors="np" ).input_ids

								# typos are quickly detected (the correct argument is `do_sample`)
								with self.assertRaisesRegex(lowerCAmelCase__ ,   "do_samples" ):
									model.generate(lowerCAmelCase__ ,   do_samples=lowerCAmelCase__ )

								# arbitrary arguments that will not be used anywhere are also not accepted
								with self.assertRaisesRegex(lowerCAmelCase__ ,   "foo" ):
									a :						str      =							{"foo": "bar"}
									model.generate(lowerCAmelCase__ ,   **lowerCAmelCase__ )


