code: 
  
  
  
  
  
  
  """simple docstring"""
  import inspect
  from typing import Callable, List, Optional, Set, Tuple, Union
  
  import torch
  from packaging import version
  from safetensors.torch import storage_ptr, storage_size
  from torch import nn
  
  from .utils import logging
  
  
  snake_case   :   List[str]    		=		[nn.LayerNorm]
  
  snake_case   :   Optional[Any]    		=		logging.get_logger(__name__)
  
  snake_case   :   List[Any]    		=		version.parse(version.parse(torch.__version__).base_version)
  
  snake_case   :   List[Any]    		=		parsed_torch_version_base >= version.parse("""2.0""")
  snake_case   :   Dict    		=		parsed_torch_version_base >= version.parse("""1.12""")
  snake_case   :   Optional[int]    		=		parsed_torch_version_base >= version.parse("""1.11""")
  snake_case   :   Dict    		=		parsed_torch_version_base < version.parse("""1.11""")
  
  
  def        A	(							__snake_case:   Optional[int]   ,    __snake_case:   Tuple   ,    __snake_case:   str   ,    __snake_case:   Dict   ,    self:   List[Any]     )						->		List[Any]:
  
         """simple docstring"""
  
  
  
  
  
         from torch import _softmax_backward_data
  
         if is_torch_less_than_1_11:
                return _softmax_backward_data(__snake_case   ,    __snake_case   ,    parent.dim   ,    self     )
         else:
                return _softmax_backward_data(__snake_case   ,    __snake_case   ,    parent.dim   ,    self.dtype     )
  
  
  def        A	(							__snake_case:   nn.Linear   ,    __snake_case:   torch.LongTensor   ,    __snake_case:   int = 0     )						->		nn.Linear:
  
         """simple docstring"""
  
  
  
  
  
         __magic_name__										=						index.to(layer.weight.device     )
         __magic_name__										=						layer.weight.index_select(__snake_case   ,    __snake_case     ).clone().detach()
         if layer.bias is not None:
                if dim == 1:
                       __magic_name__										=						layer.bias.clone().detach()
                else:
                       __magic_name__										=						layer.bias[index].clone().detach()
         __magic_name__										=						list(layer.weight.size()     )
         __magic_name__										=						len(__snake_case     )
         __magic_name__										=						nn.Linear(new_size[1]   ,    new_size[0]   ,    bias=layer.bias is not None     ).to(layer.weight.device     )
         __magic_name__										=						False
         new_layer.weight.copy_(W.contiguous()     )
         __magic_name__										=						True
         if layer.bias is not None:
                __magic_name__										=						False
                new_layer.bias.copy_(b.contiguous()     )
                __magic_name__										=						True
         return new_layer
  
  
  
  class 					UpperCamelCase__   (							nn.Module):
  
  
  
  
  
  
  
      """simple docstring"""
  
  
  
  
  
  
  
      def __init__(		self   :  Optional[int]							,						UpperCamelCase_   :  Dict							,						UpperCamelCase_   :  Any   ):
  
  
  
  
  
             '''simple docstring'''
  
             super().__init__()
             __magic_name__										=						nf
             __magic_name__										=						nn.Parameter(torch.empty(UpperCamelCase_							,						UpperCamelCase_   )   )
             __magic_name__										=						nn.Parameter(torch.zeros(UpperCamelCase_   )   )
             nn.init.normal_(self.weight							,						std=0.02   )
  
  
  
  
  
  
  
      def 							a__ (		self   :  Optional[int]							,						UpperCamelCase_   :  List[Any]   ):
  
  
  
  
  
             '''simple docstring'''
  
             __magic_name__										=						x.size()[:-1] + (self.nf,)
             __magic_name__										=						torch.addmm(self.bias							,						x.view(-1							,						x.size(-1   )   )							,						self.weight   )
             __magic_name__										=						x.view(UpperCamelCase_   )
             return x
  
  
  def        A	(							__snake_case:   ConvaD   ,    __snake_case:   torch.LongTensor   ,    __snake_case:   int = 1     )						->		ConvaD:
  
         """simple docstring"""
  
  
  
  
  
         __magic_name__										=						index.to(layer.weight.device     )
         __magic_name__										=						layer.weight.index_select(__snake_case   ,    __snake_case     ).clone().detach()
         if dim == 0:
                __magic_name__										=						layer.bias.clone().detach()
         else:
                __magic_name__										=						layer.bias[index].clone().detach()
         __magic_name__										=						list(layer.weight.size()     )
         __magic_name__										=						len(__snake_case     )
         __magic_name__										=						ConvaD(new_size[1]   ,    new_size[0]     ).to(layer.weight.device     )
         __magic_name__										=						False
         new_layer.weight.copy_(W.contiguous()     )
         __magic_name__										=						True
         __magic_name__										=						False
         new_layer.bias.copy_(b.contiguous()     )
         __magic_name__										=						True
         return new_layer
  
  
  def        A	(							__snake_case:   Union[nn.Linear, ConvaD]   ,    __snake_case:   torch.LongTensor   ,    __snake_case:   Optional[int] = None     )						->		Union[nn.Linear, ConvaD]:
  
         """simple docstring"""
  
  
  
  
  
         if isinstance(__snake_case   ,    nn.Linear     ):
                return prune_linear_layer(__snake_case   ,    __snake_case   ,    dim=0 if dim is None else dim     )
         elif isinstance(__snake_case   ,    __snake_case     ):
                return prune_convad_layer(__snake_case   ,    __snake_case   ,    dim=1 if dim is None else dim     )
         else:
                raise ValueError(F"""Can't prune layer of class {layer.__class__}"""     )
  
  
  def        A	(							__snake_case:   Callable[..., torch.Tensor]   ,    __snake_case:   int   ,    __snake_case:   int   ,    *__snake_case:   Union[str, Any]     )						->		torch.Tensor:
  
         """simple docstring"""
  
  
  
  
  
         assert len(__snake_case     ) > 0, F"""{input_tensors} has to be a tuple/list of tensors"""
  
         # inspect.signature exist since python 3.5 and is a python method -> no problem with backward compatibility
         __magic_name__										=						len(inspect.signature(__snake_case     ).parameters     )
         if num_args_in_forward_chunk_fn != len(__snake_case     ):
                raise ValueError(
                    F"""forward_chunk_fn expects {num_args_in_forward_chunk_fn} arguments, but only {len(__snake_case     )} input """
                    'tensors are given'     )
  
         if chunk_size > 0:
                __magic_name__										=						input_tensors[0].shape[chunk_dim]
                for input_tensor in input_tensors:
                       if input_tensor.shape[chunk_dim] != tensor_shape:
                              raise ValueError(
                                  F"""All input tenors have to be of the same shape: {tensor_shape}, """
                                  F"""found shape {input_tensor.shape[chunk_dim]}"""     )
  
                if input_tensors[0].shape[chunk_dim] % chunk_size != 0:
                       raise ValueError(
                           F"""The dimension to be chunked {input_tensors[0].shape[chunk_dim]} has to be a multiple of the chunk """
                           F"""size {chunk_size}"""     )
  
                __magic_name__										=						input_tensors[0].shape[chunk_dim] // chunk_size
  
                # chunk input tensor into tuples
                __magic_name__										=						tuple(input_tensor.chunk(__snake_case   ,    dim=__snake_case     ) for input_tensor in input_tensors     )
                # apply forward fn to every tuple
                __magic_name__										=						tuple(forward_fn(*__snake_case     ) for input_tensors_chunk in zip(*__snake_case     )     )
                # concatenate output at same dimension
                return torch.cat(__snake_case   ,    dim=__snake_case     )
  
         return forward_fn(*__snake_case     )
  
  
  def        A	(							__snake_case:   List[int]   ,    __snake_case:   int   ,    __snake_case:   int   ,    __snake_case:   Set[int]     )						->		Tuple[Set[int], torch.LongTensor]:
  
         """simple docstring"""
  
  
  
  
  
         __magic_name__										=						torch.ones(__snake_case   ,    __snake_case     )
         __magic_name__										=						set(__snake_case     ) - already_pruned_heads  # Convert to set and remove already pruned heads
         for head in heads:
                # Compute how many pruned heads are before the head and move the index accordingly
                __magic_name__										=						head - sum(1 if h < head else 0 for h in already_pruned_heads     )
                __magic_name__										=						0
         __magic_name__										=						mask.view(-1     ).contiguous().eq(1     )
         __magic_name__										=						torch.arange(len(__snake_case     )     )[mask].long()
         return heads, index
  
  
  def        A	(							*__snake_case:   Union[torch.Tensor, List[torch.Tensor]]   ,    __snake_case:   Optional[str] = None     )						->		Tuple[torch.Tensor, ...]:
  
         """simple docstring"""
  
  
  
  
  
         return torch.meshgrid(*__snake_case   ,    indexing=__snake_case     )
  
  
  
  
  
  
  def        A	(							__snake_case:   torch.Tensor     )						->		Tuple[torch.device, int, int]:
  
         """simple docstring"""
  
  
  
  
  
         return tensor.device, storage_ptr(__snake_case     ), storage_size(__snake_case     )
style_context: 
  
  
  
  
  
  
  """simple docstring"""
  from typing import List, Optional, Union
  
  import numpy as np
  
  from ...feature_extraction_sequence_utils import SequenceFeatureExtractor
  from ...feature_extraction_utils import BatchFeature
  from ...utils import PaddingStrategy, TensorType, logging
  
  
  snake_case   :   Tuple    		=		logging.get_logger(__name__)
  
  
  
  class 					UpperCamelCase__   (							a_):
  
  
  
  
  
  
  
      """simple docstring"""
      __UpperCAmelCase											=   ["""input_values""", """attention_mask"""]
  
  
  
  
  
  
  
      def __init__(		self   :  Union[str, Any]							,						UpperCamelCase_   :  int=1							,						UpperCamelCase_   :  Optional[int]=1_6_0_0_0							,						UpperCamelCase_   :  List[str]=0.0							,						UpperCamelCase_   :  Optional[int]=False							,						UpperCamelCase_   :  Tuple=True							,						**UpperCamelCase_   :  Tuple							,						):
  
  
  
  
  
             '''simple docstring'''
  
             super().__init__(feature_size=UpperCamelCase_							,						sampling_rate=UpperCamelCase_							,						padding_value=UpperCamelCase_							,						**UpperCamelCase_   )
             __magic_name__										=						return_attention_mask
             __magic_name__										=						do_normalize
  
  
  
  
  
  
  
      @staticmethod
      def 							a__ (		UpperCamelCase_   :  List[np.ndarray]							,						UpperCamelCase_   :  List[np.ndarray]							,						UpperCamelCase_   :  float = 0.0   ):
  
  
  
  
  
             '''simple docstring'''
  
             if attention_mask is not None:
                    __magic_name__										=						np.array(UpperCamelCase_							,						np.intaa   )
                    __magic_name__										=						[]
  
                    for vector, length in zip(UpperCamelCase_							,						attention_mask.sum(-1   )   ):
                           __magic_name__										=						(vector - vector[:length].mean()) / np.sqrt(vector[:length].var() + 1e-7   )
                           if length < normed_slice.shape[0]:
                                  __magic_name__										=						padding_value
  
                           normed_input_values.append(UpperCamelCase_   )
             else:
                    __magic_name__										=						[(x - x.mean()) / np.sqrt(x.var() + 1e-7   ) for x in input_values]
  
             return normed_input_values
  
  
  
  
  
  
  
      def __call__(		self   :  Any							,						UpperCamelCase_   :  Union[np.ndarray, List[float], List[np.ndarray], List[List[float]]]							,						UpperCamelCase_   :  Union[bool, str, PaddingStrategy] = False							,						UpperCamelCase_   :  Optional[int] = None							,						UpperCamelCase_   :  bool = False							,						UpperCamelCase_   :  Optional[int] = None							,						UpperCamelCase_   :  Optional[bool] = None							,						UpperCamelCase_   :  Optional[Union[str, TensorType]] = None							,						UpperCamelCase_   :  Optional[int] = None							,						**UpperCamelCase_   :  Any							,						):
  
  
  
  
  
             '''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.'   )
  
             __magic_name__										=						isinstance(UpperCamelCase_							,						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}"""   )
             __magic_name__										=						is_batched_numpy or (
                 isinstance(UpperCamelCase_							,						(list, tuple)   ) and (isinstance(raw_speech[0]							,						(np.ndarray, tuple, list)   ))
             )
  
             # always return batch
             if not is_batched:
                    __magic_name__										=						[raw_speech]
  
             # convert into correct format for padding
             __magic_name__										=						BatchFeature({'input_values': raw_speech}   )
  
             __magic_name__										=						self.pad(
                 UpperCamelCase_							,						padding=UpperCamelCase_							,						max_length=UpperCamelCase_							,						truncation=UpperCamelCase_							,						pad_to_multiple_of=UpperCamelCase_							,						return_attention_mask=UpperCamelCase_							,						)
  
             # convert input values to correct format
             __magic_name__										=						padded_inputs['input_values']
             if not isinstance(input_values[0]							,						np.ndarray   ):
                    __magic_name__										=						[np.asarray(UpperCamelCase_							,						dtype=np.floataa   ) for array in input_values]
             elif (
                 not isinstance(UpperCamelCase_							,						np.ndarray   )
                 and isinstance(input_values[0]							,						np.ndarray   )
                 and input_values[0].dtype is np.dtype(np.floataa   )
             ):
                    __magic_name__										=						[array.astype(np.floataa   ) for array in input_values]
             elif isinstance(UpperCamelCase_							,						np.ndarray   ) and input_values.dtype is np.dtype(np.floataa   ):
                    __magic_name__										=						input_values.astype(np.floataa   )
  
             # convert attention_mask to correct format
             __magic_name__										=						padded_inputs.get('attention_mask'   )
             if attention_mask is not None:
                    __magic_name__										=						[np.asarray(UpperCamelCase_							,						dtype=np.intaa   ) for array in attention_mask]
  
             # zero-mean and unit-variance normalization
             if self.do_normalize:
                    __magic_name__										=						(
                        attention_mask
                        if self._get_padding_strategies(UpperCamelCase_							,						max_length=UpperCamelCase_   ) is not PaddingStrategy.DO_NOT_PAD
                        else None
                    )
                    __magic_name__										=						self.zero_mean_unit_var_norm(
                        padded_inputs['input_values']							,						attention_mask=UpperCamelCase_							,						padding_value=self.padding_value   )
  
             if return_tensors is not None:
                    __magic_name__										=						padded_inputs.convert_to_tensors(UpperCamelCase_   )
  
             return padded_inputs