
import functools
import operator

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


lowercase					:							Any   =      logging.get_logger(__name__)

lowercase					:							List[Any]   =      {
    "facebook/wav2vec2-base-960h": "https://huggingface.co/facebook/wav2vec2-base-960h/resolve/main/config.json",
    # See all Wav2Vec2 models at https://huggingface.co/models?filter=wav2vec2
}


class 		__UpperCAmelCase   (      _UpperCAmelCase		):
							__lowercase   	= '''wav2vec2'''


							def __init__( self					,     lowerCAmelCase_=32					,     lowerCAmelCase_=7_68					,     lowerCAmelCase_=12					,     lowerCAmelCase_=12					,     lowerCAmelCase_=30_72					,     lowerCAmelCase_="gelu"					,     lowerCAmelCase_=0.1					,     lowerCAmelCase_=0.1					,     lowerCAmelCase_=0.1					,     lowerCAmelCase_=0.0					,     lowerCAmelCase_=0.0					,     lowerCAmelCase_=0.1					,     lowerCAmelCase_=0.1					,     lowerCAmelCase_=0.02					,     lowerCAmelCase_=1E-5					,     lowerCAmelCase_="group"					,     lowerCAmelCase_="gelu"					,     lowerCAmelCase_=(5_12, 5_12, 5_12, 5_12, 5_12, 5_12, 5_12)					,     lowerCAmelCase_=(5, 2, 2, 2, 2, 2, 2)					,     lowerCAmelCase_=(10, 3, 3, 3, 3, 2, 2)					,     lowerCAmelCase_=False					,     lowerCAmelCase_=1_28					,     lowerCAmelCase_=16					,     lowerCAmelCase_=False					,     lowerCAmelCase_=True					,     lowerCAmelCase_=0.05					,     lowerCAmelCase_=10					,     lowerCAmelCase_=2					,     lowerCAmelCase_=0.0					,     lowerCAmelCase_=10					,     lowerCAmelCase_=0					,     lowerCAmelCase_=3_20					,     lowerCAmelCase_=2					,     lowerCAmelCase_=0.1					,     lowerCAmelCase_=1_00					,     lowerCAmelCase_=2_56					,     lowerCAmelCase_=2_56					,     lowerCAmelCase_=0.1					,     lowerCAmelCase_="sum"					,     lowerCAmelCase_=False					,     lowerCAmelCase_=False					,     lowerCAmelCase_=2_56					,     lowerCAmelCase_=(5_12, 5_12, 5_12, 5_12, 15_00)					,     lowerCAmelCase_=(5, 3, 3, 1, 1)					,     lowerCAmelCase_=(1, 2, 3, 1, 1)					,     lowerCAmelCase_=5_12					,     lowerCAmelCase_=0					,     lowerCAmelCase_=1					,     lowerCAmelCase_=2					,     lowerCAmelCase_=False					,     lowerCAmelCase_=3					,     lowerCAmelCase_=2					,     lowerCAmelCase_=3					,     lowerCAmelCase_=None					,     lowerCAmelCase_=None					,     **lowerCAmelCase_					,     ):





								"""simple docstring"""






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

								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
								_snake_case     		=	apply_spec_augment
								_snake_case     		=	mask_time_prob
								_snake_case     		=	mask_time_length
								_snake_case     		=	mask_time_min_masks
								_snake_case     		=	mask_feature_prob
								_snake_case     		=	mask_feature_length
								_snake_case     		=	mask_feature_min_masks

								# parameters for pretraining with codevector quantized representations
								_snake_case     		=	num_codevectors_per_group
								_snake_case     		=	num_codevector_groups
								_snake_case     		=	contrastive_logits_temperature
								_snake_case     		=	feat_quantizer_dropout
								_snake_case     		=	num_negatives
								_snake_case     		=	codevector_dim
								_snake_case     		=	proj_codevector_dim
								_snake_case     		=	diversity_loss_weight

								# ctc loss
								_snake_case     		=	ctc_loss_reduction
								_snake_case     		=	ctc_zero_infinity

								# adapter
								_snake_case     		=	add_adapter
								_snake_case     		=	adapter_kernel_size
								_snake_case     		=	adapter_stride
								_snake_case     		=	num_adapter_layers
								_snake_case     		=	output_hidden_size or hidden_size
								_snake_case     		=	adapter_attn_dim

								# SequenceClassification-specific parameter. Feel free to ignore for other classes.
								_snake_case     		=	classifier_proj_size

								# XVector-specific parameters. Feel free to ignore for other classes.
								_snake_case     		=	list(A_						)
								_snake_case     		=	list(A_						)
								_snake_case     		=	list(A_						)
								_snake_case     		=	xvector_output_dim




							@property
							def 				lowerCamelCase       ( self						):





								"""simple docstring"""






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



'''simple docstring'''







from ..utils import DummyObject, requires_backends


class 		__UpperCAmelCase   (      metaclass=_lowerCamelCase		):
							__lowercase   	= ["""torch""", """torchsde"""]


							def __init__( self					,     *lowerCAmelCase_					,     **lowerCAmelCase_						):





								"""simple docstring"""






								requires_backends(self					,     ['torch', 'torchsde']						)


							@classmethod
							def 				lowerCamelCase       ( cls					,     *lowerCAmelCase_					,     **lowerCAmelCase_						):





								"""simple docstring"""






								requires_backends(cls					,     ['torch', 'torchsde']						)




							@classmethod
							def 				lowerCamelCase       ( cls					,     *lowerCAmelCase_					,     **lowerCAmelCase_						):





								"""simple docstring"""






								requires_backends(cls					,     ['torch', 'torchsde']						)

