



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

lowerCAmelCase__					  =  logging.get_logger(__name__)

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

# fmt: off
lowerCAmelCase__					  =  [
    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
]
lowerCAmelCase__					  =  [
    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 				snake_case__(_UpperCamelCase      ):

					"""simple docstring"""






					lowercase_								=		"""whisper"""
					lowercase_								=		["""past_key_values"""]
					lowercase_								=		{"""num_attention_heads""": """encoder_attention_heads""", """hidden_size""": """d_model"""}







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

									# Audio Classification-specific parameters. Feel free to ignore for other classes.
									lowercase__					:   Any													=					classifier_proj_size
									lowercase__					:   Any													=					use_weighted_layer_sum

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

									lowercase__					:   Tuple													=					median_filter_width

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






class 				snake_case__(_UpperCamelCase      ):

					"""simple docstring"""






					@property
					def 			snake_case					(							self :     Union[str, Any]					):
									lowercase__					:   str													=					OrderedDict(
									    [
									        ("input_features", {0: "batch", 1: "feature_size", 2: "encoder_sequence"}),
									    ]					)
									if self.use_past:
													lowercase__					:   List[Any]													=					{0: "batch"}
									else:
													lowercase__					:   Union[str, Any]													=					{0: "batch", 1: "decoder_sequence"}

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

									return common_inputs







					def 			snake_case					(							self :     List[Any]				,       SCREAMING_SNAKE_CASE :     Union["PreTrainedTokenizerBase", "FeatureExtractionMixin"]				,       SCREAMING_SNAKE_CASE :     int = -1				,       SCREAMING_SNAKE_CASE :     int = -1				,       SCREAMING_SNAKE_CASE :     bool = False				,       SCREAMING_SNAKE_CASE :     Optional["TensorType"] = None				,       SCREAMING_SNAKE_CASE :     int = 22_050				,       SCREAMING_SNAKE_CASE :     float = 5.0				,       SCREAMING_SNAKE_CASE :     int = 220				,       ):
									lowercase__					:   Optional[Any]													=					OrderedDict()
									lowercase__					:   Optional[int]													=					OnnxConfig.generate_dummy_inputs(
									    self				,       preprocessor=preprocessor.feature_extractor				,       batch_size=SCREAMING_SNAKE_CASE				,       framework=SCREAMING_SNAKE_CASE				,       sampling_rate=SCREAMING_SNAKE_CASE				,       time_duration=SCREAMING_SNAKE_CASE				,       frequency=SCREAMING_SNAKE_CASE				,       )
									lowercase__					:   str													=					encoder_inputs["input_features"].shape[2]
									lowercase__					:   Tuple													=					encoder_sequence_length // 2 if self.use_past else seq_length

									lowercase__					:   Optional[Any]													=					super().generate_dummy_inputs(
									    preprocessor.tokenizer				,       SCREAMING_SNAKE_CASE				,       SCREAMING_SNAKE_CASE				,       SCREAMING_SNAKE_CASE				,       SCREAMING_SNAKE_CASE					)

									lowercase__					:   Optional[int]													=					encoder_inputs.pop("input_features"					)
									lowercase__					:   Dict													=					decoder_inputs.pop("decoder_input_ids"					)

									if "past_key_values" in decoder_inputs:
													lowercase__					:   Union[str, Any]													=					decoder_inputs.pop("past_key_values"					)

									return dummy_inputs







					@property
					def 			snake_case					(							self :     int					):
									return 1E-3









def  __lowerCamelCase (       lowerCamelCase__						):

				"""simple docstring"""


				lowercase__					:   Union[str, Any]													=					[]
				lowercase__					:   Tuple													=					[]
				lowercase__					:   Any													=					{
				    "^": 3,
				    "*": 2,
				    "/": 2,
				    "%": 2,
				    "+": 1,
				    "-": 1,
				}  # Priority of each operator
				lowercase__					:   Any													=					len(lowerCamelCase__						) if (len(lowerCamelCase__						) > 7) else 7

				# Print table header for output
				print(
				    "Symbol".center(8						)					,			"Stack".center(lowerCamelCase__						)					,			"Postfix".center(lowerCamelCase__						)					,			sep=" | "					,			)
				print("-" * (print_width * 3 + 7)						)

				for x in infix:
								if x.isalpha() or x.isdigit():
												post_fix.append(lowerCamelCase__						)  # if x is Alphabet / Digit, add it to Postfix
								elif x == "(":
												stack.append(lowerCamelCase__						)  # if x is "(" push to Stack
								elif x == ")":  # if x is ")" pop stack until "(" is encountered
												while stack[-1] != "(":
																post_fix.append(stack.pop()						)  # Pop stack & add the content to Postfix
												stack.pop()
								else:
												if len(lowerCamelCase__						) == 0:
																stack.append(lowerCamelCase__						)  # If stack is empty, push x to stack
												else:  # while priority of x is not > priority of element in the stack
																while len(lowerCamelCase__						) > 0 and priority[x] <= priority[stack[-1]]:
																				post_fix.append(stack.pop()						)  # pop stack & add to Postfix
																stack.append(lowerCamelCase__						)  # push x to stack

								print(
								    x.center(8						)					,			("".join(lowerCamelCase__						)).ljust(lowerCamelCase__						)					,			("".join(lowerCamelCase__						)).ljust(lowerCamelCase__						)					,			sep=" | "					,			)  # Output in tabular format

				while len(lowerCamelCase__						) > 0:  # while stack is not empty
								post_fix.append(stack.pop()						)  # pop stack & add to Postfix
								print(
								    " ".center(8						)					,			("".join(lowerCamelCase__						)).ljust(lowerCamelCase__						)					,			("".join(lowerCamelCase__						)).ljust(lowerCamelCase__						)					,			sep=" | "					,			)  # Output in tabular format

				return "".join(lowerCamelCase__						)  # return Postfix as str


def  __lowerCamelCase (       lowerCamelCase__						):

				"""simple docstring"""


				lowercase__					:   Optional[int]													=					list(infix[::-1]						)  # reverse the infix equation

				for i in range(len(lowerCamelCase__						)						):
								if infix[i] == "(":
												lowercase__					:   Tuple													=					")"  # change "(" to ")"
								elif infix[i] == ")":
												lowercase__					:   Optional[Any]													=					"("  # change ")" to "("

				return (infix_2_postfix("".join(lowerCamelCase__						)						))[
				    ::-1
				]  # call infix_2_postfix on Infix, return reverse of Postfix


if __name__ == "__main__":
				lowerCAmelCase__					  =  input('''\nEnter an Infix Equation = ''')  # Input an Infix equation
				lowerCAmelCase__					  =  ''''''.join(Infix.split())  # Remove spaces from the input
				print('''\n\t''', Infix, '''(Infix) -> ''', infix_2_prefix(Infix), '''(Prefix)''')




