




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

UpperCamelCase__ :   Dict						=							logging.get_logger(__name__)

UpperCamelCase__ :   List[Any]						=							{
    'openai/whisper-base': 'https://huggingface.co/openai/whisper-base/resolve/main/config.json',
}

# fmt: off
UpperCamelCase__ :   Dict						=							[
    1, 2, 7, 8, 9, 10, 14, 25,
    26, 27, 28, 29, 31, 58, 59, 60, 61, 62,
    63, 90, 91, 92, 93, 3_57, 3_66, 4_38, 5_32, 6_85,
    7_05, 7_96, 9_30, 10_58, 12_20, 12_67, 12_79, 13_03, 13_43, 13_77,
    13_91, 16_35, 17_82, 18_75, 21_62, 23_61, 24_88, 34_67, 40_08, 42_11,
    46_00, 48_08, 52_99, 58_55, 63_29, 72_03, 96_09, 99_59, 1_05_63, 1_07_86,
    1_14_20, 1_17_09, 1_19_07, 1_31_63, 1_36_97, 1_37_00, 1_48_08, 1_53_06, 1_64_10, 1_67_91,
    1_79_92, 1_92_03, 1_95_10, 2_07_24, 2_23_05, 2_29_35, 2_70_07, 3_01_09, 3_04_20, 3_34_09,
    3_49_49, 4_02_83, 4_04_93, 4_05_49, 4_72_82, 4_91_46, 5_02_57, 5_03_59, 5_03_60, 5_03_61
]
UpperCamelCase__ :   str						=							[
    1, 2, 7, 8, 9, 10, 14, 25,
    26, 27, 28, 29, 31, 58, 59, 60, 61, 62,
    63, 90, 91, 92, 93, 3_59, 5_03, 5_22, 5_42, 8_73,
    8_93, 9_02, 9_18, 9_22, 9_31, 13_50, 18_53, 19_82, 24_60, 26_27,
    32_46, 32_53, 32_68, 35_36, 38_46, 39_61, 41_83, 46_67, 65_85, 66_47,
    72_73, 90_61, 93_83, 1_04_28, 1_09_29, 1_19_38, 1_20_33, 1_23_31, 1_25_62, 1_37_93,
    1_41_57, 1_46_35, 1_52_65, 1_56_18, 1_65_53, 1_66_04, 1_83_62, 1_89_56, 2_00_75, 2_16_75,
    2_25_20, 2_61_30, 2_61_61, 2_64_35, 2_82_79, 2_94_64, 3_16_50, 3_23_02, 3_24_70, 3_68_65,
    4_28_63, 4_74_25, 4_98_70, 5_02_54, 5_02_58, 5_03_60, 5_03_61, 5_03_62
]







class 				lowerCAmelCase_       (					lowercase_							):
				__a     :       List[str]						=     """whisper"""
				__a     :       Dict						=     ["""past_key_values"""]
				__a     :       Optional[int]						=     {"""num_attention_heads""": """encoder_attention_heads""", """hidden_size""": """d_model"""}






				def __init__(			self      ,snake_case__=51865      ,snake_case__=80      ,snake_case__=6      ,snake_case__=4      ,snake_case__=6      ,snake_case__=4      ,snake_case__=1536      ,snake_case__=1536      ,snake_case__=0.0      ,snake_case__=0.0      ,snake_case__=50257      ,snake_case__=True      ,snake_case__=True      ,snake_case__="gelu"      ,snake_case__=256      ,snake_case__=0.0      ,snake_case__=0.0      ,snake_case__=0.0      ,snake_case__=0.02      ,snake_case__=False      ,snake_case__=1500      ,snake_case__=448      ,snake_case__=50256      ,snake_case__=50256      ,snake_case__=50256      ,snake_case__=None      ,snake_case__=[220, 50256]      ,snake_case__=False      ,snake_case__=256      ,snake_case__=False      ,snake_case__=0.05      ,snake_case__=10      ,snake_case__=2      ,snake_case__=0.0      ,snake_case__=10      ,snake_case__=0      ,snake_case__=7      ,**snake_case__      ,):
							SCREAMING_SNAKE_CASE_   : Tuple					  =      vocab_size
							SCREAMING_SNAKE_CASE_   : Any					  =      num_mel_bins
							SCREAMING_SNAKE_CASE_   : Optional[Any]					  =      d_model
							SCREAMING_SNAKE_CASE_   : List[Any]					  =      encoder_layers
							SCREAMING_SNAKE_CASE_   : Optional[Any]					  =      encoder_attention_heads
							SCREAMING_SNAKE_CASE_   : Optional[int]					  =      decoder_layers
							SCREAMING_SNAKE_CASE_   : List[str]					  =      decoder_attention_heads
							SCREAMING_SNAKE_CASE_   : Dict					  =      decoder_ffn_dim
							SCREAMING_SNAKE_CASE_   : Optional[Any]					  =      encoder_ffn_dim
							SCREAMING_SNAKE_CASE_   : Optional[int]					  =      dropout
							SCREAMING_SNAKE_CASE_   : int					  =      attention_dropout
							SCREAMING_SNAKE_CASE_   : Optional[int]					  =      activation_dropout
							SCREAMING_SNAKE_CASE_   : Tuple					  =      activation_function
							SCREAMING_SNAKE_CASE_   : Dict					  =      init_std
							SCREAMING_SNAKE_CASE_   : Tuple					  =      encoder_layerdrop
							SCREAMING_SNAKE_CASE_   : Dict					  =      decoder_layerdrop
							SCREAMING_SNAKE_CASE_   : Any					  =      use_cache
							SCREAMING_SNAKE_CASE_   : List[Any]					  =      encoder_layers
							SCREAMING_SNAKE_CASE_   : int					  =      scale_embedding  # scale factor will be sqrt(d_model) if True
							SCREAMING_SNAKE_CASE_   : Optional[Any]					  =      max_source_positions
							SCREAMING_SNAKE_CASE_   : Dict					  =      max_target_positions

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

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

							SCREAMING_SNAKE_CASE_   : Dict					  =      median_filter_width

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







class 				lowerCAmelCase_       (					lowercase_							):






				@property
				def 		snake_case	(			self ):
							SCREAMING_SNAKE_CASE_   : Any					  =      OrderedDict(
							    [
							        ('input_features', {0: 'batch', 1: 'feature_size', 2: 'encoder_sequence'}),
							    ] )
							if self.use_past:
										SCREAMING_SNAKE_CASE_   : int					  =      {0: 'batch'}
							else:
										SCREAMING_SNAKE_CASE_   : Optional[Any]					  =      {0: 'batch', 1: 'decoder_sequence'}

							if self.use_past:
										self.fill_with_past_key_values_(snake_case__      ,direction='inputs' )

							return common_inputs






				def 		snake_case	(			self      ,snake_case__      ,snake_case__ = -1      ,snake_case__ = -1      ,snake_case__ = False      ,snake_case__ = None      ,snake_case__ = 22050      ,snake_case__ = 5.0      ,snake_case__ = 220      ,):
							SCREAMING_SNAKE_CASE_   : str					  =      OrderedDict()
							SCREAMING_SNAKE_CASE_   : Optional[Any]					  =      OnnxConfig.generate_dummy_inputs(
							    self      ,preprocessor=preprocessor.feature_extractor      ,batch_size=snake_case__      ,framework=snake_case__      ,sampling_rate=snake_case__      ,time_duration=snake_case__      ,frequency=snake_case__      ,)
							SCREAMING_SNAKE_CASE_   : Any					  =      encoder_inputs['input_features'].shape[2]
							SCREAMING_SNAKE_CASE_   : int					  =      encoder_sequence_length // 2 if self.use_past else seq_length

							SCREAMING_SNAKE_CASE_   : List[Any]					  =      super().generate_dummy_inputs(
							    preprocessor.tokenizer      ,snake_case__      ,snake_case__      ,snake_case__      ,snake_case__ )

							SCREAMING_SNAKE_CASE_   : str					  =      encoder_inputs.pop('input_features' )
							SCREAMING_SNAKE_CASE_   : int					  =      decoder_inputs.pop('decoder_input_ids' )

							if "past_key_values" in decoder_inputs:
										SCREAMING_SNAKE_CASE_   : str					  =      decoder_inputs.pop('past_key_values' )

							return dummy_inputs






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







'''simple docstring'''

from __future__ import annotations

from collections import deque
class     __lowerCAmelCase		:





      '''simple docstring'''






      def __init__(self       :       str  ,		UpperCamelCase       :       list[str]					):

             '''simple docstring'''







             lowercase__      =					[]
             self.adlist.append(
                 {'''value''': '''''', '''next_states''': [], '''fail_state''': 0, '''output''': []}					)

             for keyword in keywords:
                    self.add_keyword(UpperCamelCase					)
             self.set_fail_transitions()



      def  UpperCamelCase__						(self       :       Optional[int]  ,		UpperCamelCase       :       int  ,		UpperCamelCase       :       str					):

             '''simple docstring'''







             for state in self.adlist[current_state]["next_states"]:
                    if char == self.adlist[state]["value"]:
                           return state
             return None



      def  UpperCamelCase__						(self       :       Optional[Any]  ,		UpperCamelCase       :       str					):

             '''simple docstring'''







             lowercase__      =					0
             for character in keyword:
                    lowercase__      =					self.find_next_state(UpperCamelCase  ,		UpperCamelCase					)
                    if next_state is None:
                           self.adlist.append(
                               {
                                   '''value''': character,
                                   '''next_states''': [],
                                   '''fail_state''': 0,
                                   '''output''': [],
                               }					)
                           self.adlist[current_state]["next_states"].append(len(self.adlist					) - 1					)
                           lowercase__      =					len(self.adlist					) - 1
                    else:
                           lowercase__      =					next_state
             self.adlist[current_state]["output"].append(UpperCamelCase					)



      def  UpperCamelCase__						(self       :       List[str]					):

             '''simple docstring'''







             lowercase__      =					deque()
             for node in self.adlist[0]["next_states"]:
                    q.append(UpperCamelCase					)
                    lowercase__      =					0
             while q:
                    lowercase__      =					q.popleft()
                    for child in self.adlist[r]["next_states"]:
                           q.append(UpperCamelCase					)
                           lowercase__      =					self.adlist[r]['''fail_state''']
                           while (
                               self.find_next_state(UpperCamelCase  ,		self.adlist[child]['''value''']					) is None
                               and state != 0
                           ):
                                  lowercase__      =					self.adlist[state]['''fail_state''']
                           lowercase__      =					self.find_next_state(
                               UpperCamelCase  ,		self.adlist[child]['''value''']					)
                           if self.adlist[child]["fail_state"] is None:
                                  lowercase__      =					0
                           lowercase__      =					(
                               self.adlist[child]['''output''']
                               + self.adlist[self.adlist[child]['''fail_state''']]['''output''']
                           )






      def  UpperCamelCase__						(self       :       Optional[int]  ,		UpperCamelCase       :       str					):

             '''simple docstring'''







             lowercase__      =					{}  # returns a dict with keywords and list of its occurrences
             lowercase__      =					0
             for i in range(len(UpperCamelCase					)					):
                    while (
                        self.find_next_state(UpperCamelCase  ,		string[i]					) is None
                        and current_state != 0
                    ):
                           lowercase__      =					self.adlist[current_state]['''fail_state''']
                    lowercase__      =					self.find_next_state(UpperCamelCase  ,		string[i]					)
                    if next_state is None:
                           lowercase__      =					0
                    else:
                           lowercase__      =					next_state
                           for key in self.adlist[current_state]["output"]:
                                  if key not in result:
                                         lowercase__      =					[]
                                  result[key].append(i - len(UpperCamelCase					) + 1					)
             return result


if __name__ == "__main__":
 import doctest

 doctest.testmod()




