






import itertools
import random
import unittest

import numpy as np

from transformers import is_speech_available
from transformers.testing_utils import require_torch, require_torchaudio

from ...test_sequence_feature_extraction_common import SequenceFeatureExtractionTestMixin


if is_speech_available():
	from transformers import SpeechaTextFeatureExtractor

lowercase    				=   random.Random()





def 		__UpperCAmelCase     (	a_				,	a_=1.0				,	a_=None				,	a_=None):
							if rng is None:
														snake_case_           =				global_rng

							snake_case_           =				[]
							for batch_idx in range(shape[0]):
														values.append([])
														for _ in range(shape[1]):
																					values[-1].append(rng.random() * scale)

							return values




@require_torch
@require_torchaudio
class 					UpperCamelCase_ (     unittest.TestCase							):



	'''simple docstring'''




	def __init__(			self			,     a			,     a=7			,     a=4_00			,     a=20_00			,     a=24			,     a=24			,     a=0.0			,     a=1_60_00			,     a=True			,     a=True			,     )			->       Any:
								snake_case_           =				parent
								snake_case_           =				batch_size
								snake_case_           =				min_seq_length
								snake_case_           =				max_seq_length
								snake_case_           =				(self.max_seq_length - self.min_seq_length) // (self.batch_size - 1)
								snake_case_           =				feature_size
								snake_case_           =				num_mel_bins
								snake_case_           =				padding_value
								snake_case_           =				sampling_rate
								snake_case_           =				return_attention_mask
								snake_case_           =				do_normalize




	def 				_UpperCamelCase     (			self   )			->       str:
								return {
								    "feature_size": self.feature_size,
								    "num_mel_bins": self.num_mel_bins,
								    "padding_value": self.padding_value,
								    "sampling_rate": self.sampling_rate,
								    "return_attention_mask": self.return_attention_mask,
								    "do_normalize": self.do_normalize,
								}






	def 				_UpperCamelCase     (			self			,     a=False			,     a=False   )			->       List[str]:
								def _flatten(a   ):
															return list(itertools.chain(*a   )   )

								if equal_length:
															snake_case_           =				[floats_list((self.max_seq_length, self.feature_size)   ) for _ in range(self.batch_size   )]
								else:
															# make sure that inputs increase in size
															snake_case_           =				[
															    floats_list((x, self.feature_size)   )
															    for x in range(self.min_seq_length			,     self.max_seq_length			,     self.seq_length_diff   )
															]
								if numpify:
															snake_case_           =				[np.asarray(a   ) for x in speech_inputs]
								return speech_inputs






@require_torch
@require_torchaudio
class 					UpperCamelCase_ (     snake_case_			,   unittest.TestCase							):



	'''simple docstring'''




	lowerCAmelCase						=					SpeechaTextFeatureExtractor if is_speech_available() else None




	def 				_UpperCamelCase     (			self   )			->       List[Any]:
								snake_case_           =				SpeechaTextFeatureExtractionTester(self   )




	def 				_UpperCamelCase     (			self			,     a   )			->       Any:
								self.assertTrue(np.all(np.mean(a			,     axis=0   ) < 1E-3   )   )
								self.assertTrue(np.all(np.abs(np.var(a			,     axis=0   ) - 1   ) < 1E-3   )   )




	def 				_UpperCamelCase     (			self   )			->       str:
								# Tests that all call wrap to encode_plus and batch_encode_plus
								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								# create three inputs of length 800, 1000, and 1200
								snake_case_           =				[floats_list((1, x)   )[0] for x in range(8_00			,     14_00			,     2_00   )]
								snake_case_           =				[np.asarray(a   ) for speech_input in speech_inputs]

								# Test feature size
								snake_case_           =				feature_extractor(a			,     padding=a			,     return_tensors='np'   ).input_features
								self.assertTrue(input_features.ndim == 3   )
								self.assertTrue(input_features.shape[-1] == feature_extractor.feature_size   )

								# Test not batched input
								snake_case_           =				feature_extractor(speech_inputs[0]			,     return_tensors='np'   ).input_features
								snake_case_           =				feature_extractor(np_speech_inputs[0]			,     return_tensors='np'   ).input_features
								self.assertTrue(np.allclose(a			,     a			,     atol=1E-3   )   )

								# Test batched
								snake_case_           =				feature_extractor(a			,     return_tensors='np'   ).input_features
								snake_case_           =				feature_extractor(a			,     return_tensors='np'   ).input_features
								for enc_seq_a, enc_seq_a in zip(a			,     a   ):
															self.assertTrue(np.allclose(a			,     a			,     atol=1E-3   )   )

								# Test 2-D numpy arrays are batched.
								snake_case_           =				[floats_list((1, x)   )[0] for x in (8_00, 8_00, 8_00)]
								snake_case_           =				np.asarray(a   )
								snake_case_           =				feature_extractor(a			,     return_tensors='np'   ).input_features
								snake_case_           =				feature_extractor(a			,     return_tensors='np'   ).input_features
								for enc_seq_a, enc_seq_a in zip(a			,     a   ):
															self.assertTrue(np.allclose(a			,     a			,     atol=1E-3   )   )




	def 				_UpperCamelCase     (			self   )			->       Optional[Any]:
								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								snake_case_           =				[floats_list((1, x)   )[0] for x in range(8_00			,     14_00			,     2_00   )]

								snake_case_           =				['longest', 'max_length', 'do_not_pad']
								snake_case_           =				[None, 16, None]
								for max_length, padding in zip(a			,     a   ):
															snake_case_           =				feature_extractor(
															    a			,     padding=a			,     max_length=a			,     return_attention_mask=a   )
															snake_case_           =				inputs.input_features
															snake_case_           =				inputs.attention_mask
															snake_case_           =				[np.sum(a   ) for x in attention_mask]

															self._check_zero_mean_unit_variance(input_features[0][: fbank_feat_lengths[0]]   )
															self._check_zero_mean_unit_variance(input_features[1][: fbank_feat_lengths[1]]   )
															self._check_zero_mean_unit_variance(input_features[2][: fbank_feat_lengths[2]]   )




	def 				_UpperCamelCase     (			self   )			->       List[Any]:
								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								snake_case_           =				[floats_list((1, x)   )[0] for x in range(8_00			,     14_00			,     2_00   )]

								snake_case_           =				['longest', 'max_length', 'do_not_pad']
								snake_case_           =				[None, 16, None]
								for max_length, padding in zip(a			,     a   ):
															snake_case_           =				feature_extractor(
															    a			,     max_length=a			,     padding=a			,     return_tensors='np'			,     return_attention_mask=a   )
															snake_case_           =				inputs.input_features
															snake_case_           =				inputs.attention_mask
															snake_case_           =				[np.sum(a   ) for x in attention_mask]

															self._check_zero_mean_unit_variance(input_features[0][: fbank_feat_lengths[0]]   )
															self.assertTrue(input_features[0][fbank_feat_lengths[0] :].sum() < 1E-6   )
															self._check_zero_mean_unit_variance(input_features[1][: fbank_feat_lengths[1]]   )
															self.assertTrue(input_features[0][fbank_feat_lengths[1] :].sum() < 1E-6   )
															self._check_zero_mean_unit_variance(input_features[2][: fbank_feat_lengths[2]]   )




	def 				_UpperCamelCase     (			self   )			->       Optional[int]:
								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								snake_case_           =				[floats_list((1, x)   )[0] for x in range(8_00			,     14_00			,     2_00   )]
								snake_case_           =				feature_extractor(
								    a			,     padding='max_length'			,     max_length=4			,     truncation=a			,     return_tensors='np'			,     return_attention_mask=a			,     )
								snake_case_           =				inputs.input_features
								snake_case_           =				inputs.attention_mask
								snake_case_           =				np.sum(attention_mask == 1			,     axis=1   )

								self._check_zero_mean_unit_variance(input_features[0, : fbank_feat_lengths[0]]   )
								self._check_zero_mean_unit_variance(input_features[1]   )
								self._check_zero_mean_unit_variance(input_features[2]   )




	def 				_UpperCamelCase     (			self   )			->       Any:
								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								snake_case_           =				[floats_list((1, x)   )[0] for x in range(8_00			,     14_00			,     2_00   )]
								snake_case_           =				feature_extractor(
								    a			,     padding='longest'			,     max_length=4			,     truncation=a			,     return_tensors='np'			,     return_attention_mask=a			,     )
								snake_case_           =				inputs.input_features
								snake_case_           =				inputs.attention_mask
								snake_case_           =				np.sum(attention_mask == 1			,     axis=1   )

								self._check_zero_mean_unit_variance(input_features[0, : fbank_feat_lengths[0]]   )
								self._check_zero_mean_unit_variance(input_features[1, : fbank_feat_lengths[1]]   )
								self._check_zero_mean_unit_variance(input_features[2]   )

								# make sure that if max_length < longest -> then pad to max_length
								self.assertEqual(input_features.shape			,     (3, 4, 24)   )

								snake_case_           =				[floats_list((1, x)   )[0] for x in range(8_00			,     14_00			,     2_00   )]
								snake_case_           =				feature_extractor(
								    a			,     padding='longest'			,     max_length=16			,     truncation=a			,     return_tensors='np'			,     return_attention_mask=a			,     )
								snake_case_           =				inputs.input_features
								snake_case_           =				inputs.attention_mask
								snake_case_           =				np.sum(attention_mask == 1			,     axis=1   )

								self._check_zero_mean_unit_variance(input_features[0, : fbank_feat_lengths[0]]   )
								self._check_zero_mean_unit_variance(input_features[1, : fbank_feat_lengths[1]]   )
								self._check_zero_mean_unit_variance(input_features[2]   )

								# make sure that if max_length < longest -> then pad to max_length
								self.assertEqual(input_features.shape			,     (3, 6, 24)   )




	def 				_UpperCamelCase     (			self   )			->       Tuple:
								import torch

								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								snake_case_           =				np.random.rand(1_00			,     32   ).astype(np.floataa   )
								snake_case_           =				np_speech_inputs.tolist()

								for inputs in [py_speech_inputs, np_speech_inputs]:
															snake_case_           =				feature_extractor.pad([{'input_features': inputs}]			,     return_tensors='np'   )
															self.assertTrue(np_processed.input_features.dtype == np.floataa   )
															snake_case_           =				feature_extractor.pad([{'input_features': inputs}]			,     return_tensors='pt'   )
															self.assertTrue(pt_processed.input_features.dtype == torch.floataa   )




	def 				_UpperCamelCase     (			self			,     a   )			->       List[Any]:
								from datasets import load_dataset

								snake_case_           =				load_dataset('hf-internal-testing/librispeech_asr_dummy'			,     'clean'			,     split='validation'   )
								# automatic decoding with librispeech
								snake_case_           =				ds.sort('id'   ).select(range(a   )   )[:num_samples]['audio']

								return [x["array"] for x in speech_samples]






	def 				_UpperCamelCase     (			self   )			->       Tuple:
								# fmt: off
								snake_case_           =				np.array([
								    -1.5_745, -1.7_713, -1.7_020, -1.6_069, -1.2_250, -1.1_105, -0.9_072, -0.8_241,
								    -1.2_310, -0.8_098, -0.3_320, -0.4_101, -0.7_985, -0.4_996, -0.8_213, -0.9_128,
								    -1.0_420, -1.1_286, -1.0_440, -0.7_999, -0.8_405, -1.2_275, -1.5_443, -1.4_625,
								]   )
								# fmt: on

								snake_case_           =				self._load_datasamples(1   )
								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								snake_case_           =				feature_extractor(a			,     return_tensors='pt'   ).input_features
								self.assertEquals(input_features.shape			,     (1, 5_84, 24)   )
								self.assertTrue(np.allclose(input_features[0, 0, :30]			,     a			,     atol=1E-4   )   )













import itertools
import random
import unittest

import numpy as np

from transformers import ASTFeatureExtractor
from transformers.testing_utils import require_torch, require_torchaudio
from transformers.utils.import_utils import is_torch_available

from ...test_sequence_feature_extraction_common import SequenceFeatureExtractionTestMixin


lowercase    				=   random.Random()

if is_torch_available():
	import torch





def 		__UpperCAmelCase     (	a_				,	a_=1.0				,	a_=None				,	a_=None):
							if rng is None:
														snake_case_           =				global_rng

							snake_case_           =				[]
							for batch_idx in range(shape[0]):
														values.append([])
														for _ in range(shape[1]):
																					values[-1].append(rng.random() * scale)

							return values




class 					UpperCamelCase_ (     unittest.TestCase							):



	'''simple docstring'''




	def __init__(			self			,     a			,     a=7			,     a=4_00			,     a=20_00			,     a=1			,     a=0.0			,     a=1_60_00			,     a=True			,     a=True			,     )			->       Tuple:
								snake_case_           =				parent
								snake_case_           =				batch_size
								snake_case_           =				min_seq_length
								snake_case_           =				max_seq_length
								snake_case_           =				(self.max_seq_length - self.min_seq_length) // (self.batch_size - 1)
								snake_case_           =				feature_size
								snake_case_           =				padding_value
								snake_case_           =				sampling_rate
								snake_case_           =				return_attention_mask
								snake_case_           =				do_normalize




	def 				_UpperCamelCase     (			self   )			->       Union[str, Any]:
								return {
								    "feature_size": self.feature_size,
								    "padding_value": self.padding_value,
								    "sampling_rate": self.sampling_rate,
								    "return_attention_mask": self.return_attention_mask,
								    "do_normalize": self.do_normalize,
								}






	def 				_UpperCamelCase     (			self			,     a=False			,     a=False   )			->       Optional[int]:
								def _flatten(a   ):
															return list(itertools.chain(*a   )   )

								if equal_length:
															snake_case_           =				floats_list((self.batch_size, self.max_seq_length)   )
								else:
															# make sure that inputs increase in size
															snake_case_           =				[
															    _flatten(floats_list((x, self.feature_size)   )   )
															    for x in range(self.min_seq_length			,     self.max_seq_length			,     self.seq_length_diff   )
															]

								if numpify:
															snake_case_           =				[np.asarray(a   ) for x in speech_inputs]

								return speech_inputs






@require_torch
@require_torchaudio
class 					UpperCamelCase_ (     snake_case_			,   unittest.TestCase							):



	'''simple docstring'''




	lowerCAmelCase						=					ASTFeatureExtractor




	def 				_UpperCamelCase     (			self   )			->       Optional[int]:
								snake_case_           =				ASTFeatureExtractionTester(self   )




	def 				_UpperCamelCase     (			self   )			->       Union[str, Any]:
								# Tests that all call wrap to encode_plus and batch_encode_plus
								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								# create three inputs of length 800, 1000, and 1200
								snake_case_           =				[floats_list((1, x)   )[0] for x in range(8_00			,     14_00			,     2_00   )]
								snake_case_           =				[np.asarray(a   ) for speech_input in speech_inputs]

								# Test not batched input
								snake_case_           =				feat_extract(speech_inputs[0]			,     return_tensors='np'   ).input_values
								snake_case_           =				feat_extract(np_speech_inputs[0]			,     return_tensors='np'   ).input_values
								self.assertTrue(np.allclose(a			,     a			,     atol=1E-3   )   )

								# Test batched
								snake_case_           =				feat_extract(a			,     padding=a			,     return_tensors='np'   ).input_values
								snake_case_           =				feat_extract(a			,     padding=a			,     return_tensors='np'   ).input_values
								for enc_seq_a, enc_seq_a in zip(a			,     a   ):
															self.assertTrue(np.allclose(a			,     a			,     atol=1E-3   )   )

								# Test 2-D numpy arrays are batched.
								snake_case_           =				[floats_list((1, x)   )[0] for x in (8_00, 8_00, 8_00)]
								snake_case_           =				np.asarray(a   )
								snake_case_           =				feat_extract(a			,     return_tensors='np'   ).input_values
								snake_case_           =				feat_extract(a			,     return_tensors='np'   ).input_values
								for enc_seq_a, enc_seq_a in zip(a			,     a   ):
															self.assertTrue(np.allclose(a			,     a			,     atol=1E-3   )   )




	@require_torch
	def 				_UpperCamelCase     (			self   )			->       List[str]:
								import torch

								snake_case_           =				self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()   )
								snake_case_           =				np.random.rand(1_00   ).astype(np.floataa   )
								snake_case_           =				np_speech_inputs.tolist()

								for inputs in [py_speech_inputs, np_speech_inputs]:
															snake_case_           =				feature_extractor.pad([{'input_values': inputs}]			,     return_tensors='np'   )
															self.assertTrue(np_processed.input_values.dtype == np.floataa   )
															snake_case_           =				feature_extractor.pad([{'input_values': inputs}]			,     return_tensors='pt'   )
															self.assertTrue(pt_processed.input_values.dtype == torch.floataa   )




	def 				_UpperCamelCase     (			self			,     a   )			->       Tuple:
								from datasets import load_dataset

								snake_case_           =				load_dataset('hf-internal-testing/librispeech_asr_dummy'			,     'clean'			,     split='validation'   )
								# automatic decoding with librispeech
								snake_case_           =				ds.sort('id'   ).select(range(a   )   )[:num_samples]['audio']

								return [x["array"] for x in speech_samples]






	@require_torch
	def 				_UpperCamelCase     (			self   )			->       Optional[int]:
								# fmt: off
								snake_case_           =				torch.tensor(
								    [-0.9_894, -1.2_776, -0.9_066, -1.2_776, -0.9_349, -1.2_609, -1.0_386, -1.2_776,
								     -1.1_561, -1.2_776, -1.2_052, -1.2_723, -1.2_190, -1.2_132, -1.2_776, -1.1_133,
								     -1.1_953, -1.1_343, -1.1_584, -1.2_203, -1.1_770, -1.2_474, -1.2_381, -1.1_936,
								     -0.9_270, -0.8_317, -0.8_049, -0.7_706, -0.7_565, -0.7_869]   )
								# fmt: on

								snake_case_           =				self._load_datasamples(1   )
								snake_case_           =				ASTFeatureExtractor()
								snake_case_           =				feature_extractor(a			,     return_tensors='pt'   ).input_values
								self.assertEquals(input_values.shape			,     (1, 10_24, 1_28)   )
								self.assertTrue(torch.allclose(input_values[0, 0, :30]			,     a			,     atol=1E-4   )   )





