


"""simple docstring"""







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_       :       Optional[Any]      						=  logging.get_logger(__name__)

lowerCamelCase_       :       Union[str, Any]      						=  {
    """openai/whisper-base""": """https://huggingface.co/openai/whisper-base/resolve/main/config.json""",
}

# fmt: off
lowerCamelCase_       :       Optional[int]      						=  [
    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_       :       Dict      						=  [
    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 				__A    (	_SCREAMING_SNAKE_CASE      ):






 """simple docstring"""




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


 def __init__(		self			,   __A=5_1865			,   __A=80			,   __A=6			,   __A=4			,   __A=6			,   __A=4			,   __A=1536			,   __A=1536			,   __A=0.0			,   __A=0.0			,   __A=5_0257			,   __A=True			,   __A=True			,   __A="gelu"			,   __A=256			,   __A=0.0			,   __A=0.0			,   __A=0.0			,   __A=0.02			,   __A=False			,   __A=1500			,   __A=448			,   __A=5_0256			,   __A=5_0256			,   __A=5_0256			,   __A=None			,   __A=[220, 5_0256]			,   __A=False			,   __A=256			,   __A=False			,   __A=0.05			,   __A=10			,   __A=2			,   __A=0.0			,   __A=10			,   __A=0			,   __A=7			,   **__A			,   ) ->					List[str]:
     a					=vocab_size
     a					=num_mel_bins
     a					=d_model
     a					=encoder_layers
     a					=encoder_attention_heads
     a					=decoder_layers
     a					=decoder_attention_heads
     a					=decoder_ffn_dim
     a					=encoder_ffn_dim
     a					=dropout
     a					=attention_dropout
     a					=activation_dropout
     a					=activation_function
     a					=init_std
     a					=encoder_layerdrop
     a					=decoder_layerdrop
     a					=use_cache
     a					=encoder_layers
     a					=scale_embedding  # scale factor will be sqrt(d_model) if True
     a					=max_source_positions
     a					=max_target_positions

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

     # fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
     a					=apply_spec_augment
     a					=mask_time_prob
     a					=mask_time_length
     a					=mask_time_min_masks
     a					=mask_feature_prob
     a					=mask_feature_length
     a					=mask_feature_min_masks

     a					=median_filter_width

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






class 				__A    (	_SCREAMING_SNAKE_CASE      ):






 """simple docstring"""




 @property
 def 				SCREAMING_SNAKE_CASE							(		self						) ->					Mapping[str, Mapping[int, str]]:
     a					=OrderedDict(
         [
             ('''input_features''', {0: '''batch''', 1: '''feature_size''', 2: '''encoder_sequence'''}),
         ]						)
     if self.use_past:
         a					={0: '''batch'''}
     else:
         a					={0: '''batch''', 1: '''decoder_sequence'''}

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

     return common_inputs


 def 				SCREAMING_SNAKE_CASE							(		self			,   __A			,   __A = -1			,   __A = -1			,   __A = False			,   __A = None			,   __A = 2_2050			,   __A = 5.0			,   __A = 220			,   ) ->					Mapping[str, Any]:
     a					=OrderedDict()
     a					=OnnxConfig.generate_dummy_inputs(
         self			,   preprocessor=preprocessor.feature_extractor			,   batch_size=__A			,   framework=__A			,   sampling_rate=__A			,   time_duration=__A			,   frequency=__A			,   )
     a					=encoder_inputs['''input_features'''].shape[2]
     a					=encoder_sequence_length // 2 if self.use_past else seq_length

     a					=super().generate_dummy_inputs(
         preprocessor.tokenizer			,   __A			,   __A			,   __A			,   __A						)

     a					=encoder_inputs.pop('''input_features'''						)
     a					=decoder_inputs.pop('''decoder_input_ids'''						)

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

     return dummy_inputs





 @property
 def 				SCREAMING_SNAKE_CASE							(		self						) ->					float:
     return 1E-3



"""simple docstring"""







from ...processing_utils import ProcessorMixin






class 				__A    (	_SCREAMING_SNAKE_CASE      ):






 """simple docstring"""




 __lowerCAmelCase			 =  "WhisperFeatureExtractor"
 __lowerCAmelCase			 =  "WhisperTokenizer"


 def __init__(		self			,   __A			,   __A						) ->					Dict:
     super().__init__(__A			,   __A						)
     a					=self.feature_extractor
     a					=False


 def 				SCREAMING_SNAKE_CASE							(		self			,   __A=None			,   __A=None			,   __A=True						) ->					int:
     return self.tokenizer.get_decoder_prompt_ids(task=__A			,   language=__A			,   no_timestamps=__A						)


 def __call__(		self			,   *__A			,   **__A						) ->					Tuple:
     # For backward compatibility
     if self._in_target_context_manager:
         return self.current_processor(*__A			,   **__A						)

     a					=kwargs.pop('''audio'''			,   __A						)
     a					=kwargs.pop('''sampling_rate'''			,   __A						)
     a					=kwargs.pop('''text'''			,   __A						)
     if len(__A						) > 0:
         a					=args[0]
         a					=args[1:]

     if audio is None and text is None:
         raise ValueError('''You need to specify either an `audio` or `text` input to process.'''						)

     if audio is not None:
         a					=self.feature_extractor(__A			,   *__A			,   sampling_rate=__A			,   **__A						)
     if text is not None:
         a					=self.tokenizer(__A			,   **__A						)

     if text is None:
         return inputs

     elif audio is None:
         return encodings
     else:
         a					=encodings['''input_ids''']
         return inputs


 def 				SCREAMING_SNAKE_CASE							(		self			,   *__A			,   **__A						) ->					Optional[Any]:
     return self.tokenizer.batch_decode(*__A			,   **__A						)


 def 				SCREAMING_SNAKE_CASE							(		self			,   *__A			,   **__A						) ->					Union[str, Any]:
     return self.tokenizer.decode(*__A			,   **__A						)





 def 				SCREAMING_SNAKE_CASE							(		self			,   __A			,   __A="np"						) ->					Optional[Any]:
     return self.tokenizer.get_prompt_ids(__A			,   return_tensors=__A						)