


from collections import OrderedDict
from dataclasses import fields
from typing import Any, Tuple

import numpy as np

from .import_utils import is_torch_available
def 				UpperCamelCase_	(					__snake_case      :    Dict  )->   str:




						'''simple docstring'''
						if is_torch_available():
												import torch

												if isinstance(__snake_case						,      torch.Tensor  ):
																		return True

						return isinstance(__snake_case						,      np.ndarray  )




class      __snake_case				(   _UpperCAmelCase):
					def 	a			(						self       :						Optional[Any]  )							->					Optional[Any]:



											'''simple docstring'''





											__magic_name__					=      fields(self  )

											# Safety and consistency checks
											if not len(_lowerCAmelCase  ):
																	raise ValueError(F'''{self.__class__.__name__} has no fields.'''  )

											__magic_name__					=      getattr(self	,      class_fields[0].name  )
											__magic_name__					=      all(getattr(self	,      field.name  ) is None for field in class_fields[1:]  )

											if other_fields_are_none and isinstance(_lowerCAmelCase	,      _lowerCAmelCase  ):
																	for key, value in first_field.items():
																							__magic_name__					=      value
											else:
																	for field in class_fields:
																							__magic_name__					=      getattr(self	,      field.name  )
																							if v is not None:
																													__magic_name__					=      v
					def __delitem__(						self       :						Dict	,      *_lowerCAmelCase       :						List[str]	,      **_lowerCAmelCase       :						List[str]  )							->					List[str]:



											'''simple docstring'''





											raise Exception(F'''You cannot use ``__delitem__`` on a {self.__class__.__name__} instance.'''  )
					def 	a			(						self       :						Optional[int]	,      *_lowerCAmelCase       :						Optional[Any]	,      **_lowerCAmelCase       :						Optional[Any]  )							->					str:



											'''simple docstring'''





											raise Exception(F'''You cannot use ``setdefault`` on a {self.__class__.__name__} instance.'''  )
					def 	a			(						self       :						Union[str, Any]	,      *_lowerCAmelCase       :						List[str]	,      **_lowerCAmelCase       :						Any  )							->					str:



											'''simple docstring'''





											raise Exception(F'''You cannot use ``pop`` on a {self.__class__.__name__} instance.'''  )
					def 	a			(						self       :						Any	,      *_lowerCAmelCase       :						str	,      **_lowerCAmelCase       :						Optional[int]  )							->					List[Any]:



											'''simple docstring'''





											raise Exception(F'''You cannot use ``update`` on a {self.__class__.__name__} instance.'''  )
					def __getitem__(						self       :						Optional[Any]	,      _lowerCAmelCase       :						Any  )							->					Tuple:



											'''simple docstring'''





											if isinstance(_lowerCAmelCase	,      _lowerCAmelCase  ):
																	__magic_name__					=      dict(self.items()  )
																	return inner_dict[k]
											else:
																	return self.to_tuple()[k]
					def __setattr__(						self       :						str	,      _lowerCAmelCase       :						Optional[Any]	,      _lowerCAmelCase       :						Optional[int]  )							->					int:



											'''simple docstring'''





											if name in self.keys() and value is not None:
																	# Don't call self.__setitem__ to avoid recursion errors
																	super().__setitem__(_lowerCAmelCase	,      _lowerCAmelCase  )
											super().__setattr__(_lowerCAmelCase	,      _lowerCAmelCase  )
					def __setitem__(						self       :						Optional[Any]	,      _lowerCAmelCase       :						Optional[Any]	,      _lowerCAmelCase       :						List[str]  )							->					Optional[int]:



											'''simple docstring'''





											super().__setitem__(_lowerCAmelCase	,      _lowerCAmelCase  )
											# Don't call self.__setattr__ to avoid recursion errors
											super().__setattr__(_lowerCAmelCase	,      _lowerCAmelCase  )







					def 	a			(						self       :						str  )							->					Tuple[Any]:



											'''simple docstring'''





											return tuple(self[k] for k in self.keys()  )





import functools
import operator

from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCamelCase			:					Union[str, Any]         =							logging.get_logger(__name__)

UpperCamelCase			:					List[Any]         =							{
    '''facebook/hubert-base-ls960''': '''https://huggingface.co/facebook/hubert-base-ls960/resolve/main/config.json''',
    # See all Hubert models at https://huggingface.co/models?filter=hubert
}

class      __snake_case				(   _UpperCAmelCase):
					SCREAMING_SNAKE_CASE_		:       Tuple								=			"hubert"
					def __init__(						self       :						List[Any]	,      _lowerCAmelCase       :						Any=3_2	,      _lowerCAmelCase       :						Optional[Any]=7_6_8	,      _lowerCAmelCase       :						str=1_2	,      _lowerCAmelCase       :						List[Any]=1_2	,      _lowerCAmelCase       :						Optional[int]=3_0_7_2	,      _lowerCAmelCase       :						int="gelu"	,      _lowerCAmelCase       :						List[str]=0.1	,      _lowerCAmelCase       :						Union[str, Any]=0.1	,      _lowerCAmelCase       :						Optional[Any]=0.1	,      _lowerCAmelCase       :						Optional[int]=True	,      _lowerCAmelCase       :						Any=0.0	,      _lowerCAmelCase       :						Tuple=0.1	,      _lowerCAmelCase       :						Optional[int]=0.1	,      _lowerCAmelCase       :						str=0.02	,      _lowerCAmelCase       :						str=1E-5	,      _lowerCAmelCase       :						Dict="group"	,      _lowerCAmelCase       :						Tuple="gelu"	,      _lowerCAmelCase       :						List[str]=(5_1_2, 5_1_2, 5_1_2, 5_1_2, 5_1_2, 5_1_2, 5_1_2)	,      _lowerCAmelCase       :						List[str]=(5, 2, 2, 2, 2, 2, 2)	,      _lowerCAmelCase       :						Union[str, Any]=(1_0, 3, 3, 3, 3, 2, 2)	,      _lowerCAmelCase       :						Any=False	,      _lowerCAmelCase       :						Union[str, Any]=1_2_8	,      _lowerCAmelCase       :						Any=1_6	,      _lowerCAmelCase       :						Tuple=False	,      _lowerCAmelCase       :						Dict=True	,      _lowerCAmelCase       :						Union[str, Any]=0.05	,      _lowerCAmelCase       :						Optional[int]=1_0	,      _lowerCAmelCase       :						str=2	,      _lowerCAmelCase       :						Any=0.0	,      _lowerCAmelCase       :						Tuple=1_0	,      _lowerCAmelCase       :						int=0	,      _lowerCAmelCase       :						Tuple="sum"	,      _lowerCAmelCase       :						Tuple=False	,      _lowerCAmelCase       :						str=False	,      _lowerCAmelCase       :						Tuple=2_5_6	,      _lowerCAmelCase       :						List[str]=0	,      _lowerCAmelCase       :						int=1	,      _lowerCAmelCase       :						int=2	,      **_lowerCAmelCase       :						Optional[Any]	,      )							->					Dict:



											'''simple docstring'''





											super().__init__(**_lowerCAmelCase	,      pad_token_id=_lowerCAmelCase	,      bos_token_id=_lowerCAmelCase	,      eos_token_id=_lowerCAmelCase  )
											__magic_name__					=      hidden_size
											__magic_name__					=      feat_extract_norm
											__magic_name__					=      feat_extract_activation
											__magic_name__					=      list(_lowerCAmelCase  )
											__magic_name__					=      list(_lowerCAmelCase  )
											__magic_name__					=      list(_lowerCAmelCase  )
											__magic_name__					=      conv_bias
											__magic_name__					=      num_conv_pos_embeddings
											__magic_name__					=      num_conv_pos_embedding_groups
											__magic_name__					=      len(self.conv_dim  )
											__magic_name__					=      num_hidden_layers
											__magic_name__					=      intermediate_size
											__magic_name__					=      hidden_act
											__magic_name__					=      num_attention_heads
											__magic_name__					=      hidden_dropout
											__magic_name__					=      attention_dropout
											__magic_name__					=      activation_dropout
											__magic_name__					=      feat_proj_layer_norm
											__magic_name__					=      feat_proj_dropout
											__magic_name__					=      final_dropout
											__magic_name__					=      layerdrop
											__magic_name__					=      layer_norm_eps
											__magic_name__					=      initializer_range
											__magic_name__					=      vocab_size
											__magic_name__					=      do_stable_layer_norm
											__magic_name__					=      use_weighted_layer_sum
											__magic_name__					=      classifier_proj_size

											if (
											    (len(self.conv_stride  ) != self.num_feat_extract_layers)
											    or (len(self.conv_kernel  ) != self.num_feat_extract_layers)
											    or (len(self.conv_dim  ) != self.num_feat_extract_layers)
											):
																	raise ValueError(
																	    'Configuration for convolutional layers is incorrect. It is required that `len(config.conv_dim)` =='
																	    ' `len(config.conv_stride)` == `len(config.conv_kernel)`, but is `len(config.conv_dim) ='
																	    F''' {len(self.conv_dim  )}`, `len(config.conv_stride) = {len(self.conv_stride  )}`,'''
																	    F''' `len(config.conv_kernel) = {len(self.conv_kernel  )}`.'''  )

											# fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
											__magic_name__					=      apply_spec_augment
											__magic_name__					=      mask_time_prob
											__magic_name__					=      mask_time_length
											__magic_name__					=      mask_time_min_masks
											__magic_name__					=      mask_feature_prob
											__magic_name__					=      mask_feature_length
											__magic_name__					=      mask_feature_min_masks

											# ctc loss
											__magic_name__					=      ctc_loss_reduction
											__magic_name__					=      ctc_zero_infinity







					@property
					def 	a			(						self       :						Optional[int]  )							->					Any:



											'''simple docstring'''





											return functools.reduce(operator.mul	,      self.conv_stride	,      1  )

