





import functools
import operator

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


UpperCAmelCase_      							=     logging.get_logger(__name__)

UpperCAmelCase_      							=     {
    """asapp/sew-tiny-100k""": """https://huggingface.co/asapp/sew-tiny-100k/resolve/main/config.json""",
    # See all SEW models at https://huggingface.co/models?filter=sew
}
class 			UpperCamelCase_		(  _lowerCamelCase					):
					lowerCAmelCase_							=	'''sew'''




					def __init__(		self				,						lowerCAmelCase_=32				,						lowerCAmelCase_=768				,						lowerCAmelCase_=12				,						lowerCAmelCase_=12				,						lowerCAmelCase_=3072				,						lowerCAmelCase_=2				,						lowerCAmelCase_="gelu"				,						lowerCAmelCase_=0.1				,						lowerCAmelCase_=0.1				,						lowerCAmelCase_=0.1				,						lowerCAmelCase_=0.0				,						lowerCAmelCase_=0.1				,						lowerCAmelCase_=0.1				,						lowerCAmelCase_=0.02				,						lowerCAmelCase_=1E-5				,						lowerCAmelCase_="group"				,						lowerCAmelCase_="gelu"				,						lowerCAmelCase_=(64, 128, 128, 128, 128, 256, 256, 256, 256, 512, 512, 512, 512)				,						lowerCAmelCase_=(5, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1)				,						lowerCAmelCase_=(10, 3, 1, 3, 1, 3, 1, 3, 1, 2, 1, 2, 1)				,						lowerCAmelCase_=False				,						lowerCAmelCase_=128				,						lowerCAmelCase_=16				,						lowerCAmelCase_=True				,						lowerCAmelCase_=0.05				,						lowerCAmelCase_=10				,						lowerCAmelCase_=2				,						lowerCAmelCase_=0.0				,						lowerCAmelCase_=10				,						lowerCAmelCase_=0				,						lowerCAmelCase_="mean"				,						lowerCAmelCase_=False				,						lowerCAmelCase_=False				,						lowerCAmelCase_=256				,						lowerCAmelCase_=0				,						lowerCAmelCase_=1				,						lowerCAmelCase_=2				,						**lowerCAmelCase_				,						)		->							Union[str, Any]:
										super().__init__(**lowerCAmelCase_				,						pad_token_id=lowerCAmelCase_				,						bos_token_id=lowerCAmelCase_				,						eos_token_id=lowerCAmelCase_  )
										_snake_case									=				hidden_size
										_snake_case									=				feat_extract_norm
										_snake_case									=				feat_extract_activation
										_snake_case									=				list(lowerCAmelCase_  )
										_snake_case									=				list(lowerCAmelCase_  )
										_snake_case									=				list(lowerCAmelCase_  )
										_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									=				squeeze_factor
										_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

										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)`,'
															    F'''but is `len(config.conv_dim) = {len(self.conv_dim  )}`, `len(config.conv_stride)'''
															    F'''= {len(self.conv_stride  )}`, `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

										# ctc loss
										_snake_case									=				ctc_loss_reduction
										_snake_case									=				ctc_zero_infinity

										# sequence classification
										_snake_case									=				use_weighted_layer_sum
										_snake_case									=				classifier_proj_size






					@property
					def 	lowerCAmelCase			(		self  )		->							Optional[Any]:
										return functools.reduce(operator.mul				,						self.conv_stride				,						1  )










from collections import deque

from .hash_table import HashTable
class 			UpperCamelCase_		(  _lowerCamelCase					):




					def __init__(		self				,						*lowerCAmelCase_				,						**lowerCAmelCase_  )		->							Any:
										super().__init__(*lowerCAmelCase_				,						**lowerCAmelCase_  )




					def 	lowerCAmelCase			(		self				,						lowerCAmelCase_				,						lowerCAmelCase_  )		->							Optional[int]:
										_snake_case									=				deque([]  ) if self.values[key] is None else self.values[key]
										self.values[key].appendleft(lowerCAmelCase_  )
										_snake_case									=				self.values[key]




					def 	lowerCAmelCase			(		self  )		->							Optional[int]:
										return (
										    sum(self.charge_factor - len(lowerCAmelCase_  ) for slot in self.values  )
										    / self.size_table
										    * self.charge_factor
										)






					def 	lowerCAmelCase			(		self				,						lowerCAmelCase_				,						lowerCAmelCase_=None  )		->							str:
										if not (
										    len(self.values[key]  ) == self.charge_factor and self.values.count(lowerCAmelCase_  ) == 0
										):
															return key
										return super()._collision_resolution(lowerCAmelCase_				,						lowerCAmelCase_  )



