

"""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

_A							=  logging.get_logger(__name__)

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

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


  '''simple docstring'''







  SCREAMING_SNAKE_CASE					      =  'whisper'
  SCREAMING_SNAKE_CASE					      =  ['past_key_values']
  SCREAMING_SNAKE_CASE					      =  {'num_attention_heads': 'encoder_attention_heads', 'hidden_size': 'd_model'}



  def __init__(self							,       _lowerCamelCase=51865							,       _lowerCamelCase=80							,       _lowerCamelCase=6							,       _lowerCamelCase=4							,       _lowerCamelCase=6							,       _lowerCamelCase=4							,       _lowerCamelCase=1536							,       _lowerCamelCase=1536							,       _lowerCamelCase=0.0							,       _lowerCamelCase=0.0							,       _lowerCamelCase=50257							,       _lowerCamelCase=True							,       _lowerCamelCase=True							,       _lowerCamelCase="gelu"							,       _lowerCamelCase=256							,       _lowerCamelCase=0.0							,       _lowerCamelCase=0.0							,       _lowerCamelCase=0.0							,       _lowerCamelCase=0.02							,       _lowerCamelCase=False							,       _lowerCamelCase=1500							,       _lowerCamelCase=448							,       _lowerCamelCase=50256							,       _lowerCamelCase=50256							,       _lowerCamelCase=50256							,       _lowerCamelCase=None							,       _lowerCamelCase=[220, 50256]							,       _lowerCamelCase=False							,       _lowerCamelCase=256							,       _lowerCamelCase=False							,       _lowerCamelCase=0.05							,       _lowerCamelCase=10							,       _lowerCamelCase=2							,       _lowerCamelCase=0.0							,       _lowerCamelCase=10							,       _lowerCamelCase=0							,       _lowerCamelCase=7							,       **_lowerCamelCase							,       ):


        """simple docstring"""

        UpperCAmelCase__			:							Dict							=    vocab_size
        UpperCAmelCase__			:							Optional[int]							=    num_mel_bins
        UpperCAmelCase__			:							Any							=    d_model
        UpperCAmelCase__			:							List[str]							=    encoder_layers
        UpperCAmelCase__			:							Union[str, Any]							=    encoder_attention_heads
        UpperCAmelCase__			:							List[str]							=    decoder_layers
        UpperCAmelCase__			:							str							=    decoder_attention_heads
        UpperCAmelCase__			:							Optional[int]							=    decoder_ffn_dim
        UpperCAmelCase__			:							str							=    encoder_ffn_dim
        UpperCAmelCase__			:							Optional[int]							=    dropout
        UpperCAmelCase__			:							str							=    attention_dropout
        UpperCAmelCase__			:							Any							=    activation_dropout
        UpperCAmelCase__			:							int							=    activation_function
        UpperCAmelCase__			:							Optional[int]							=    init_std
        UpperCAmelCase__			:							Dict							=    encoder_layerdrop
        UpperCAmelCase__			:							Optional[int]							=    decoder_layerdrop
        UpperCAmelCase__			:							Dict							=    use_cache
        UpperCAmelCase__			:							Optional[int]							=    encoder_layers
        UpperCAmelCase__			:							int							=    scale_embedding  # scale factor will be sqrt(d_model) if True
        UpperCAmelCase__			:							Optional[int]							=    max_source_positions
        UpperCAmelCase__			:							Union[str, Any]							=    max_target_positions

        # Audio Classification-specific parameters. Feel free to ignore for other classes.
        UpperCAmelCase__			:							List[str]							=    classifier_proj_size
        UpperCAmelCase__			:							str							=    use_weighted_layer_sum

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

        UpperCAmelCase__			:							List[Any]							=    median_filter_width

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




class       lowerCamelCase	(       lowerCAmelCase__   ):


  '''simple docstring'''







  @property
  def  _a      (self	):


        """simple docstring"""

        UpperCAmelCase__			:							Optional[int]							=    OrderedDict(
            [
                ("""input_features""", {0: """batch""", 1: """feature_size""", 2: """encoder_sequence"""}),
            ]	)
        if self.use_past:
              UpperCAmelCase__			:							int							=    {0: """batch"""}
        else:
              UpperCAmelCase__			:							Any							=    {0: """batch""", 1: """decoder_sequence"""}

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

        return common_inputs



  def  _a      (self							,       _lowerCamelCase							,       _lowerCamelCase = -1							,       _lowerCamelCase = -1							,       _lowerCamelCase = False							,       _lowerCamelCase = None							,       _lowerCamelCase = 22050							,       _lowerCamelCase = 5.0							,       _lowerCamelCase = 220							,       ):


        """simple docstring"""

        UpperCAmelCase__			:							List[Any]							=    OrderedDict()
        UpperCAmelCase__			:							int							=    OnnxConfig.generate_dummy_inputs(
            self							,       preprocessor=preprocessor.feature_extractor							,       batch_size=_lowerCamelCase							,       framework=_lowerCamelCase							,       sampling_rate=_lowerCamelCase							,       time_duration=_lowerCamelCase							,       frequency=_lowerCamelCase							,       )
        UpperCAmelCase__			:							List[str]							=    encoder_inputs["""input_features"""].shape[2]
        UpperCAmelCase__			:							List[Any]							=    encoder_sequence_length // 2 if self.use_past else seq_length

        UpperCAmelCase__			:							Optional[int]							=    super().generate_dummy_inputs(
            preprocessor.tokenizer							,       _lowerCamelCase							,       _lowerCamelCase							,       _lowerCamelCase							,       _lowerCamelCase	)

        UpperCAmelCase__			:							Tuple							=    encoder_inputs.pop("""input_features"""	)
        UpperCAmelCase__			:							Dict							=    decoder_inputs.pop("""decoder_input_ids"""	)

        if "past_key_values" in decoder_inputs:
              UpperCAmelCase__			:							Optional[int]							=    decoder_inputs.pop("""past_key_values"""	)

        return dummy_inputs




  @property
  def  _a      (self	):


        """simple docstring"""

        return 1e-3




"""simple docstring"""
import unittest

from transformers import is_torch_available
from transformers.testing_utils import require_sentencepiece, require_tokenizers, require_torch, slow, torch_device


if is_torch_available():
    from transformers import AutoModelForSeqaSeqLM, AutoTokenizer

@require_torch
@require_sentencepiece
@require_tokenizers
class       lowerCamelCase	(       unittest.TestCase   ):


  '''simple docstring'''







  @slow
  def  _a      (self	):


        """simple docstring"""

        UpperCAmelCase__			:							Dict							=    AutoModelForSeqaSeqLM.from_pretrained("""google/mt5-small"""							,       return_dict=_lowerCamelCase	).to(_lowerCamelCase	)
        UpperCAmelCase__			:							Optional[Any]							=    AutoTokenizer.from_pretrained("""google/mt5-small"""	)

        UpperCAmelCase__			:							Any							=    tokenizer("""Hello there"""							,       return_tensors="""pt"""	).input_ids
        UpperCAmelCase__			:							str							=    tokenizer("""Hi I am"""							,       return_tensors="""pt"""	).input_ids

        UpperCAmelCase__			:							Tuple							=    model(input_ids.to(_lowerCamelCase	)							,       labels=labels.to(_lowerCamelCase	)	).loss
        UpperCAmelCase__			:							Union[str, Any]							=    -(labels.shape[-1] * loss.item())

        UpperCAmelCase__			:							List[str]							=    -84.9_127
        self.assertTrue(abs(mtf_score - EXPECTED_SCORE	) < 1e-4	)

