from collections import OrderedDict
from typing import TYPE_CHECKING, Any, Mapping, Optional, Union

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig, OnnxSeqaSeqConfigWithPast
from ...utils import logging


if TYPE_CHECKING:
				from ...feature_extraction_utils import FeatureExtractionMixin
				from ...tokenization_utils_base import PreTrainedTokenizerBase
				from ...utils import TensorType

__SCREAMING_SNAKE_CASE						:   Any         =			logging.get_logger(__name__)

__SCREAMING_SNAKE_CASE						:   Tuple         =			{
    'openai/whisper-base': 'https://huggingface.co/openai/whisper-base/resolve/main/config.json',
}

# fmt: off
__SCREAMING_SNAKE_CASE						:   Any         =			[
    1, 2, 7, 8, 9, 1_0, 1_4, 2_5,
    2_6, 2_7, 2_8, 2_9, 3_1, 5_8, 5_9, 6_0, 6_1, 6_2,
    6_3, 9_0, 9_1, 9_2, 9_3, 3_5_7, 3_6_6, 4_3_8, 5_3_2, 6_8_5,
    7_0_5, 7_9_6, 9_3_0, 1_0_5_8, 1_2_2_0, 1_2_6_7, 1_2_7_9, 1_3_0_3, 1_3_4_3, 1_3_7_7,
    1_3_9_1, 1_6_3_5, 1_7_8_2, 1_8_7_5, 2_1_6_2, 2_3_6_1, 2_4_8_8, 3_4_6_7, 4_0_0_8, 4_2_1_1,
    4_6_0_0, 4_8_0_8, 5_2_9_9, 5_8_5_5, 6_3_2_9, 7_2_0_3, 9_6_0_9, 9_9_5_9, 1_0_5_6_3, 1_0_7_8_6,
    1_1_4_2_0, 1_1_7_0_9, 1_1_9_0_7, 1_3_1_6_3, 1_3_6_9_7, 1_3_7_0_0, 1_4_8_0_8, 1_5_3_0_6, 1_6_4_1_0, 1_6_7_9_1,
    1_7_9_9_2, 1_9_2_0_3, 1_9_5_1_0, 2_0_7_2_4, 2_2_3_0_5, 2_2_9_3_5, 2_7_0_0_7, 3_0_1_0_9, 3_0_4_2_0, 3_3_4_0_9,
    3_4_9_4_9, 4_0_2_8_3, 4_0_4_9_3, 4_0_5_4_9, 4_7_2_8_2, 4_9_1_4_6, 5_0_2_5_7, 5_0_3_5_9, 5_0_3_6_0, 5_0_3_6_1
]
__SCREAMING_SNAKE_CASE						:   List[Any]         =			[
    1, 2, 7, 8, 9, 1_0, 1_4, 2_5,
    2_6, 2_7, 2_8, 2_9, 3_1, 5_8, 5_9, 6_0, 6_1, 6_2,
    6_3, 9_0, 9_1, 9_2, 9_3, 3_5_9, 5_0_3, 5_2_2, 5_4_2, 8_7_3,
    8_9_3, 9_0_2, 9_1_8, 9_2_2, 9_3_1, 1_3_5_0, 1_8_5_3, 1_9_8_2, 2_4_6_0, 2_6_2_7,
    3_2_4_6, 3_2_5_3, 3_2_6_8, 3_5_3_6, 3_8_4_6, 3_9_6_1, 4_1_8_3, 4_6_6_7, 6_5_8_5, 6_6_4_7,
    7_2_7_3, 9_0_6_1, 9_3_8_3, 1_0_4_2_8, 1_0_9_2_9, 1_1_9_3_8, 1_2_0_3_3, 1_2_3_3_1, 1_2_5_6_2, 1_3_7_9_3,
    1_4_1_5_7, 1_4_6_3_5, 1_5_2_6_5, 1_5_6_1_8, 1_6_5_5_3, 1_6_6_0_4, 1_8_3_6_2, 1_8_9_5_6, 2_0_0_7_5, 2_1_6_7_5,
    2_2_5_2_0, 2_6_1_3_0, 2_6_1_6_1, 2_6_4_3_5, 2_8_2_7_9, 2_9_4_6_4, 3_1_6_5_0, 3_2_3_0_2, 3_2_4_7_0, 3_6_8_6_5,
    4_2_8_6_3, 4_7_4_2_5, 4_9_8_7_0, 5_0_2_5_4, 5_0_2_5_8, 5_0_3_6_0, 5_0_3_6_1, 5_0_3_6_2
]



class        lowercase_   (					__snake_case		):
							_lowerCamelCase						=		'whisper'
							_lowerCamelCase						=		['past_key_values']
							_lowerCamelCase						=		{'num_attention_heads': 'encoder_attention_heads', 'hidden_size': 'd_model'}



							def __init__(						self				,    lowercase_=51_865				,    lowercase_=80				,    lowercase_=6				,    lowercase_=4				,    lowercase_=6				,    lowercase_=4				,    lowercase_=1_536				,    lowercase_=1_536				,    lowercase_=0.0				,    lowercase_=0.0				,    lowercase_=50_257				,    lowercase_=True				,    lowercase_=True				,    lowercase_="gelu"				,    lowercase_=256				,    lowercase_=0.0				,    lowercase_=0.0				,    lowercase_=0.0				,    lowercase_=0.02				,    lowercase_=False				,    lowercase_=1_500				,    lowercase_=448				,    lowercase_=50_256				,    lowercase_=50_256				,    lowercase_=50_256				,    lowercase_=None				,    lowercase_=[220, 50_256]				,    lowercase_=False				,    lowercase_=256				,    lowercase_=False				,    lowercase_=0.05				,    lowercase_=10				,    lowercase_=2				,    lowercase_=0.0				,    lowercase_=10				,    lowercase_=0				,    lowercase_=7				,    **lowercase_				,    ):
													_snake_case						:					Dict    =   vocab_size
													_snake_case						:					Optional[int]    =   num_mel_bins
													_snake_case						:					Union[str, Any]    =   d_model
													_snake_case						:					List[Any]    =   encoder_layers
													_snake_case						:					List[str]    =   encoder_attention_heads
													_snake_case						:					List[Any]    =   decoder_layers
													_snake_case						:					Tuple    =   decoder_attention_heads
													_snake_case						:					Optional[int]    =   decoder_ffn_dim
													_snake_case						:					str    =   encoder_ffn_dim
													_snake_case						:					Optional[int]    =   dropout
													_snake_case						:					Union[str, Any]    =   attention_dropout
													_snake_case						:					Dict    =   activation_dropout
													_snake_case						:					Optional[Any]    =   activation_function
													_snake_case						:					int    =   init_std
													_snake_case						:					int    =   encoder_layerdrop
													_snake_case						:					List[Any]    =   decoder_layerdrop
													_snake_case						:					List[Any]    =   use_cache
													_snake_case						:					Any    =   encoder_layers
													_snake_case						:					str    =   scale_embedding  # scale factor will be sqrt(d_model) if True
													_snake_case						:					Dict    =   max_source_positions
													_snake_case						:					Dict    =   max_target_positions

													# Audio Classification-specific parameters. Feel free to ignore for other classes.
													_snake_case						:					Tuple    =   classifier_proj_size
													_snake_case						:					Optional[int]    =   use_weighted_layer_sum

													# fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
													_snake_case						:					List[str]    =   apply_spec_augment
													_snake_case						:					Any    =   mask_time_prob
													_snake_case						:					Union[str, Any]    =   mask_time_length
													_snake_case						:					int    =   mask_time_min_masks
													_snake_case						:					List[Any]    =   mask_feature_prob
													_snake_case						:					List[Any]    =   mask_feature_length
													_snake_case						:					List[Any]    =   mask_feature_min_masks

													_snake_case						:					Any    =   median_filter_width

													super().__init__(
													    pad_token_id=lowercase_				,    bos_token_id=lowercase_				,    eos_token_id=lowercase_				,    is_encoder_decoder=lowercase_				,    decoder_start_token_id=lowercase_				,    suppress_tokens=lowercase_				,    begin_suppress_tokens=lowercase_				,    **lowercase_				,    )




class        lowercase_   (					__snake_case		):



							@property
							def 	UpperCamelCase	(						self    ):
													_snake_case						:					Optional[Any]    =   OrderedDict(
													    [
													        ("input_features", {0: "batch", 1: "feature_size", 2: "encoder_sequence"}),
													    ]    )
													if self.use_past:
																			_snake_case						:					Tuple    =   {0: "batch"}
													else:
																			_snake_case						:					str    =   {0: "batch", 1: "decoder_sequence"}

													if self.use_past:
																			self.fill_with_past_key_values_(lowercase_				,    direction="inputs"    )

													return common_inputs



							def 	UpperCamelCase	(						self				,    lowercase_				,    lowercase_ = -1				,    lowercase_ = -1				,    lowercase_ = False				,    lowercase_ = None				,    lowercase_ = 22_050				,    lowercase_ = 5.0				,    lowercase_ = 220				,    ):
													_snake_case						:					Optional[int]    =   OrderedDict()
													_snake_case						:					Optional[Any]    =   OnnxConfig.generate_dummy_inputs(
													    self				,    preprocessor=preprocessor.feature_extractor				,    batch_size=lowercase_				,    framework=lowercase_				,    sampling_rate=lowercase_				,    time_duration=lowercase_				,    frequency=lowercase_				,    )
													_snake_case						:					List[Any]    =   encoder_inputs["input_features"].shape[2]
													_snake_case						:					Optional[int]    =   encoder_sequence_length // 2 if self.use_past else seq_length

													_snake_case						:					List[Any]    =   super().generate_dummy_inputs(
													    preprocessor.tokenizer				,    lowercase_				,    lowercase_				,    lowercase_				,    lowercase_    )

													_snake_case						:					Optional[int]    =   encoder_inputs.pop("input_features"    )
													_snake_case						:					List[str]    =   decoder_inputs.pop("decoder_input_ids"    )

													if "past_key_values" in decoder_inputs:
																			_snake_case						:					Dict    =   decoder_inputs.pop("past_key_values"    )

													return dummy_inputs



							@property
							def 	UpperCamelCase	(						self    ):
													return 1e-3
def  snake_case						(__lowercase ,      __lowercase						)	->	str:

						'''simple docstring'''



						_snake_case						:					Tuple    =   ""
						for word_or_phrase in separated:
												if not isinstance(__lowercase ,      __lowercase						):
																		raise Exception("join() accepts only strings to be joined"						)
												joined += word_or_phrase + separator
						return joined.strip(__lowercase						)


if __name__ == "__main__":
				from doctest import testmod

				testmod()