
'''simple docstring'''



from typing import List, Optional, Union

import numpy as np
import torch
import torchaudio.compliance.kaldi as ta_kaldi

from ...feature_extraction_sequence_utils import SequenceFeatureExtractor
from ...feature_extraction_utils import BatchFeature
from ...utils import PaddingStrategy, TensorType, logging


_lowercase          =						logging.get_logger(__name__)




class     UpperCAmelCase_	(						_SCREAMING_SNAKE_CASE					):






						'''simple docstring'''






						_lowercase						: Any										=  ['''input_features''', '''attention_mask''']




						def __init__(   self       ,  _lowercase=80       ,  _lowercase=16_000       ,  _lowercase=80       ,  _lowercase=0.0       ,  _lowercase=True       ,  _lowercase=True       ,  _lowercase=True       ,  **_lowercase       ,  ):

												"""simple docstring"""



												super().__init__(feature_size=_lowercase       ,  sampling_rate=_lowercase       ,  padding_value=_lowercase       ,  **_lowercase )
												_lowerCAmelCase    		=					num_mel_bins
												_lowerCAmelCase    		=					do_ceptral_normalize
												_lowerCAmelCase    		=					normalize_means
												_lowerCAmelCase    		=					normalize_vars
												_lowerCAmelCase    		=					True




						def    _lowercase      (   self       ,  _lowercase       ,  ):

												"""simple docstring"""



												_lowerCAmelCase    		=					waveform * (2**15)  # Kaldi compliance: 16-bit signed integers
												_lowerCAmelCase    		=					torch.from_numpy(_lowercase ).unsqueeze(0 )
												_lowerCAmelCase    		=					ta_kaldi.fbank(_lowercase       ,  num_mel_bins=self.num_mel_bins       ,  sample_frequency=self.sampling_rate )
												return features.numpy()




						@staticmethod
						def    _lowercase      (   _lowercase       ,  _lowercase       ,  _lowercase = True       ,  _lowercase = True       ,  _lowercase = 0.0       ,  ):

												"""simple docstring"""



												if normalize_means:
																		_lowerCAmelCase    		=					x[:input_length].mean(axis=0 )
																		_lowerCAmelCase    		=					np.subtract(_lowercase       ,  _lowercase )
												if normalize_vars:
																		_lowerCAmelCase    		=					x[:input_length].std(axis=0 )
																		_lowerCAmelCase    		=					np.divide(_lowercase       ,  _lowercase )

												if input_length < x.shape[0]:
																		_lowerCAmelCase    		=					padding_value

												# make sure array is in float32
												_lowerCAmelCase    		=					x.astype(np.floataa )

												return x




						def    _lowercase      (   self       ,  _lowercase       ,  _lowercase = None ):

												"""simple docstring"""



												_lowerCAmelCase    		=					attention_mask.sum(-1 ) if attention_mask is not None else [x.shape[0] for x in input_features]
												return [
												    self.utterance_cmvn(_lowercase       ,  _lowercase       ,  self.normalize_means       ,  self.normalize_vars       ,  self.padding_value )
												    for x, n in zip(_lowercase       ,  _lowercase )
												]




						def __call__(   self       ,  _lowercase       ,  _lowercase = False       ,  _lowercase = None       ,  _lowercase = False       ,  _lowercase = None       ,  _lowercase = None       ,  _lowercase = None       ,  _lowercase = None       ,  **_lowercase       ,  ):

												"""simple docstring"""



												if sampling_rate is not None:
																		if sampling_rate != self.sampling_rate:
																								raise ValueError(
																								    F'The model corresponding to this feature extractor: {self} was trained using a sampling rate of'
																								    F' {self.sampling_rate}. Please make sure that the provided `raw_speech` input was sampled with'
																								    F' {self.sampling_rate} and not {sampling_rate}.' )
												else:
																		logger.warning(
																		    """It is strongly recommended to pass the `sampling_rate` argument to this function. """
																		    """Failing to do so can result in silent errors that might be hard to debug.""" )

												_lowerCAmelCase    		=					isinstance(_lowercase       ,  np.ndarray ) and len(raw_speech.shape ) > 1
												if is_batched_numpy and len(raw_speech.shape ) > 2:
																		raise ValueError(F'Only mono-channel audio is supported for input to {self}' )
												_lowerCAmelCase    		=					is_batched_numpy or (
												    isinstance(_lowercase       ,  (list, tuple) ) and (isinstance(raw_speech[0]       ,  (np.ndarray, tuple, list) ))
												)

												if is_batched:
																		_lowerCAmelCase    		=					[np.asarray(_lowercase       ,  dtype=np.floataa ) for speech in raw_speech]
												elif not is_batched and not isinstance(_lowercase       ,  np.ndarray ):
																		_lowerCAmelCase    		=					np.asarray(_lowercase       ,  dtype=np.floataa )
												elif isinstance(_lowercase       ,  np.ndarray ) and raw_speech.dtype is np.dtype(np.floataa ):
																		_lowerCAmelCase    		=					raw_speech.astype(np.floataa )

												# always return batch
												if not is_batched:
																		_lowerCAmelCase    		=					[raw_speech]

												# extract fbank features
												_lowerCAmelCase    		=					[self._extract_fbank_features(_lowercase ) for waveform in raw_speech]

												# convert into correct format for padding
												_lowerCAmelCase    		=					BatchFeature({"""input_features""": features} )

												_lowerCAmelCase    		=					self.pad(
												    _lowercase       ,  padding=_lowercase       ,  max_length=_lowercase       ,  truncation=_lowercase       ,  pad_to_multiple_of=_lowercase       ,  return_attention_mask=_lowercase       ,  **_lowercase       ,  )

												# make sure list is in array format
												_lowerCAmelCase    		=					padded_inputs.get("""input_features""" )
												if isinstance(input_features[0]       ,  _lowercase ):
																		_lowerCAmelCase    		=					[np.asarray(_lowercase       ,  dtype=np.floataa ) for feature in input_features]

												_lowerCAmelCase    		=					padded_inputs.get("""attention_mask""" )
												if attention_mask is not None:
																		_lowerCAmelCase    		=					[np.asarray(_lowercase       ,  dtype=np.intaa ) for array in attention_mask]

												# Utterance-level cepstral mean and variance normalization
												if self.do_ceptral_normalize:
																		_lowerCAmelCase    		=					(
																		    np.array(_lowercase       ,  dtype=np.intaa )
																		    if self._get_padding_strategies(_lowercase       ,  max_length=_lowercase ) is not PaddingStrategy.DO_NOT_PAD
																		    else None
																		)
																		_lowerCAmelCase    		=					self.normalize(
																		    padded_inputs["""input_features"""]       ,  attention_mask=_lowercase )

												if return_tensors is not None:
																		_lowerCAmelCase    		=					padded_inputs.convert_to_tensors(_lowercase )

												return padded_inputs








"""simple docstring"""
from maths.prime_check import is_prime


def 							A						(				__snake_case: int  )    ->		int:

       """simple docstring"""





       if not isinstance(__snake_case ,     __snake_case  ):
              __magic_name__      				=    F"""Input value of [number={number}] must be an integer"""
              raise TypeError(__snake_case  )
       if is_prime(__snake_case  ) and is_prime(number + 2  ):
              return number + 2
       else:
              return -1


if __name__ == "__main__":
 import doctest

 doctest.testmod()