






import copy
from typing import Dict

from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ..auto.configuration_auto import CONFIG_MAPPING
from ..bit import BitConfig


lowerCamelCase										=  logging.get_logger(__name__)

lowerCamelCase										=  {
    '''google/vit-hybrid-base-bit-384''': '''https://huggingface.co/vit-hybrid-base-bit-384/resolve/main/config.json''',
    # See all ViT hybrid models at https://huggingface.co/models?filter=vit
}

class 					snake_case_							(       lowercase_      ):







   """simple docstring"""



   __lowerCAmelCase      =						"""vit-hybrid"""

   def __init__(    self:	int   ,       snake_case__:	List[str]=None   ,       snake_case__:	Optional[Any]=768   ,       snake_case__:	Dict=12   ,       snake_case__:	Union[str, Any]=12   ,       snake_case__:	Optional[int]=3_072   ,       snake_case__:	int="gelu"   ,       snake_case__:	Any=0.0   ,       snake_case__:	List[str]=0.0   ,       snake_case__:	str=0.02   ,       snake_case__:	str=1E-12   ,       snake_case__:	List[Any]=224   ,       snake_case__:	Tuple=1   ,       snake_case__:	Tuple=3   ,       snake_case__:	Optional[Any]=[1, 1_024, 24, 24]   ,       snake_case__:	Union[str, Any]=True   ,       **snake_case__:	Optional[Any]   ,       )  ->		List[str]:


       """simple docstring"""



       super().__init__(**snake_case__	)

       if backbone_config is None:
           logger.info('`backbone_config` is `None`. Initializing the config with a `BiT` backbone.'	)
           _lowercase     =	{
               'global_padding': 'same',
               'layer_type': 'bottleneck',
               'depths': [3, 4, 9],
               'out_features': ['stage3'],
               'embedding_dynamic_padding': True,
           }

       if isinstance(snake_case__   ,       snake_case__	):
           if "model_type" in backbone_config:
               _lowercase     =	CONFIG_MAPPING[backbone_config['model_type']]
           else:
               logger.info(
                   '`model_type` is not found in `backbone_config`. Use `Bit` as the backbone configuration class.'	)
               _lowercase     =	BitConfig
           _lowercase     =	backbone_config_class(**snake_case__	)

       _lowercase     =	backbone_featmap_shape
       _lowercase     =	backbone_config
       _lowercase     =	hidden_size
       _lowercase     =	num_hidden_layers
       _lowercase     =	num_attention_heads
       _lowercase     =	intermediate_size
       _lowercase     =	hidden_act
       _lowercase     =	hidden_dropout_prob
       _lowercase     =	attention_probs_dropout_prob
       _lowercase     =	initializer_range
       _lowercase     =	layer_norm_eps
       _lowercase     =	image_size
       _lowercase     =	patch_size
       _lowercase     =	num_channels
       _lowercase     =	qkv_bias

   def 			SCREAMING_SNAKE_CASE__				(    self:	List[Any]	)  ->		Dict[str, any]:


       """simple docstring"""



       _lowercase     =	copy.deepcopy(self.__dict__	)
       _lowercase     =	self.backbone_config.to_dict()
       _lowercase     =	self.__class__.model_type
       return output








import functools
import operator

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


lowerCamelCase										=  logging.get_logger(__name__)

lowerCamelCase										=  {
    '''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_							(       lowercase_      ):







   """simple docstring"""



   __lowerCAmelCase      =						"""hubert"""

   def __init__(    self:	Any   ,       snake_case__:	str=32   ,       snake_case__:	int=768   ,       snake_case__:	Dict=12   ,       snake_case__:	Optional[int]=12   ,       snake_case__:	List[str]=3_072   ,       snake_case__:	Optional[Any]="gelu"   ,       snake_case__:	Optional[int]=0.1   ,       snake_case__:	List[str]=0.1   ,       snake_case__:	Optional[int]=0.1   ,       snake_case__:	List[str]=True   ,       snake_case__:	Union[str, Any]=0.0   ,       snake_case__:	Union[str, Any]=0.1   ,       snake_case__:	List[str]=0.1   ,       snake_case__:	List[Any]=0.02   ,       snake_case__:	Dict=1E-5   ,       snake_case__:	Any="group"   ,       snake_case__:	Union[str, Any]="gelu"   ,       snake_case__:	List[str]=(512, 512, 512, 512, 512, 512, 512)   ,       snake_case__:	Union[str, Any]=(5, 2, 2, 2, 2, 2, 2)   ,       snake_case__:	Any=(10, 3, 3, 3, 3, 2, 2)   ,       snake_case__:	int=False   ,       snake_case__:	Any=128   ,       snake_case__:	Dict=16   ,       snake_case__:	Optional[Any]=False   ,       snake_case__:	Tuple=True   ,       snake_case__:	int=0.05   ,       snake_case__:	List[Any]=10   ,       snake_case__:	Tuple=2   ,       snake_case__:	List[Any]=0.0   ,       snake_case__:	Optional[int]=10   ,       snake_case__:	Optional[int]=0   ,       snake_case__:	Union[str, Any]="sum"   ,       snake_case__:	Union[str, Any]=False   ,       snake_case__:	int=False   ,       snake_case__:	Any=256   ,       snake_case__:	Union[str, Any]=0   ,       snake_case__:	Optional[int]=1   ,       snake_case__:	List[str]=2   ,       **snake_case__:	Optional[int]   ,       )  ->		Any:


       """simple docstring"""



       super().__init__(**snake_case__   ,       pad_token_id=snake_case__   ,       bos_token_id=snake_case__   ,       eos_token_id=snake_case__	)
       _lowercase     =	hidden_size
       _lowercase     =	feat_extract_norm
       _lowercase     =	feat_extract_activation
       _lowercase     =	list(snake_case__	)
       _lowercase     =	list(snake_case__	)
       _lowercase     =	list(snake_case__	)
       _lowercase     =	conv_bias
       _lowercase     =	num_conv_pos_embeddings
       _lowercase     =	num_conv_pos_embedding_groups
       _lowercase     =	len(self.conv_dim	)
       _lowercase     =	num_hidden_layers
       _lowercase     =	intermediate_size
       _lowercase     =	hidden_act
       _lowercase     =	num_attention_heads
       _lowercase     =	hidden_dropout
       _lowercase     =	attention_dropout
       _lowercase     =	activation_dropout
       _lowercase     =	feat_proj_layer_norm
       _lowercase     =	feat_proj_dropout
       _lowercase     =	final_dropout
       _lowercase     =	layerdrop
       _lowercase     =	layer_norm_eps
       _lowercase     =	initializer_range
       _lowercase     =	vocab_size
       _lowercase     =	do_stable_layer_norm
       _lowercase     =	use_weighted_layer_sum
       _lowercase     =	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
       _lowercase     =	apply_spec_augment
       _lowercase     =	mask_time_prob
       _lowercase     =	mask_time_length
       _lowercase     =	mask_time_min_masks
       _lowercase     =	mask_feature_prob
       _lowercase     =	mask_feature_length
       _lowercase     =	mask_feature_min_masks

       # ctc loss
       _lowercase     =	ctc_loss_reduction
       _lowercase     =	ctc_zero_infinity

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


       """simple docstring"""



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