"""simple docstring"""






import os
from shutil import copyfile
from typing import Any, Dict, List, Optional, Tuple

import sentencepiece as spm

from ...tokenization_utils import AddedToken, BatchEncoding, PreTrainedTokenizer
from ...utils import logging


__lowerCAmelCase					: Union[str, Any]        =logging.get_logger(__name__)

__lowerCAmelCase					: List[Any]        ="""▁"""

__lowerCAmelCase					: str        ={"""vocab_file""": """sentencepiece.bpe.model"""}

__lowerCAmelCase					: List[str]        ={
    """vocab_file""": {
        """facebook/nllb-200-distilled-600M""": (
            """https://huggingface.co/facebook/nllb-200-distilled-600M/blob/main/sentencepiece.bpe.model"""
        ),
    }
}

__lowerCAmelCase					: Tuple        ={
    """facebook/nllb-200-distilled-600M""": 1_0_2_4,
}

# fmt: off
__lowerCAmelCase					: int        =["""ace_Arab""", """ace_Latn""", """acm_Arab""", """acq_Arab""", """aeb_Arab""", """afr_Latn""", """ajp_Arab""", """aka_Latn""", """amh_Ethi""", """apc_Arab""", """arb_Arab""", """ars_Arab""", """ary_Arab""", """arz_Arab""", """asm_Beng""", """ast_Latn""", """awa_Deva""", """ayr_Latn""", """azb_Arab""", """azj_Latn""", """bak_Cyrl""", """bam_Latn""", """ban_Latn""", """bel_Cyrl""", """bem_Latn""", """ben_Beng""", """bho_Deva""", """bjn_Arab""", """bjn_Latn""", """bod_Tibt""", """bos_Latn""", """bug_Latn""", """bul_Cyrl""", """cat_Latn""", """ceb_Latn""", """ces_Latn""", """cjk_Latn""", """ckb_Arab""", """crh_Latn""", """cym_Latn""", """dan_Latn""", """deu_Latn""", """dik_Latn""", """dyu_Latn""", """dzo_Tibt""", """ell_Grek""", """eng_Latn""", """epo_Latn""", """est_Latn""", """eus_Latn""", """ewe_Latn""", """fao_Latn""", """pes_Arab""", """fij_Latn""", """fin_Latn""", """fon_Latn""", """fra_Latn""", """fur_Latn""", """fuv_Latn""", """gla_Latn""", """gle_Latn""", """glg_Latn""", """grn_Latn""", """guj_Gujr""", """hat_Latn""", """hau_Latn""", """heb_Hebr""", """hin_Deva""", """hne_Deva""", """hrv_Latn""", """hun_Latn""", """hye_Armn""", """ibo_Latn""", """ilo_Latn""", """ind_Latn""", """isl_Latn""", """ita_Latn""", """jav_Latn""", """jpn_Jpan""", """kab_Latn""", """kac_Latn""", """kam_Latn""", """kan_Knda""", """kas_Arab""", """kas_Deva""", """kat_Geor""", """knc_Arab""", """knc_Latn""", """kaz_Cyrl""", """kbp_Latn""", """kea_Latn""", """khm_Khmr""", """kik_Latn""", """kin_Latn""", """kir_Cyrl""", """kmb_Latn""", """kon_Latn""", """kor_Hang""", """kmr_Latn""", """lao_Laoo""", """lvs_Latn""", """lij_Latn""", """lim_Latn""", """lin_Latn""", """lit_Latn""", """lmo_Latn""", """ltg_Latn""", """ltz_Latn""", """lua_Latn""", """lug_Latn""", """luo_Latn""", """lus_Latn""", """mag_Deva""", """mai_Deva""", """mal_Mlym""", """mar_Deva""", """min_Latn""", """mkd_Cyrl""", """plt_Latn""", """mlt_Latn""", """mni_Beng""", """khk_Cyrl""", """mos_Latn""", """mri_Latn""", """zsm_Latn""", """mya_Mymr""", """nld_Latn""", """nno_Latn""", """nob_Latn""", """npi_Deva""", """nso_Latn""", """nus_Latn""", """nya_Latn""", """oci_Latn""", """gaz_Latn""", """ory_Orya""", """pag_Latn""", """pan_Guru""", """pap_Latn""", """pol_Latn""", """por_Latn""", """prs_Arab""", """pbt_Arab""", """quy_Latn""", """ron_Latn""", """run_Latn""", """rus_Cyrl""", """sag_Latn""", """san_Deva""", """sat_Beng""", """scn_Latn""", """shn_Mymr""", """sin_Sinh""", """slk_Latn""", """slv_Latn""", """smo_Latn""", """sna_Latn""", """snd_Arab""", """som_Latn""", """sot_Latn""", """spa_Latn""", """als_Latn""", """srd_Latn""", """srp_Cyrl""", """ssw_Latn""", """sun_Latn""", """swe_Latn""", """swh_Latn""", """szl_Latn""", """tam_Taml""", """tat_Cyrl""", """tel_Telu""", """tgk_Cyrl""", """tgl_Latn""", """tha_Thai""", """tir_Ethi""", """taq_Latn""", """taq_Tfng""", """tpi_Latn""", """tsn_Latn""", """tso_Latn""", """tuk_Latn""", """tum_Latn""", """tur_Latn""", """twi_Latn""", """tzm_Tfng""", """uig_Arab""", """ukr_Cyrl""", """umb_Latn""", """urd_Arab""", """uzn_Latn""", """vec_Latn""", """vie_Latn""", """war_Latn""", """wol_Latn""", """xho_Latn""", """ydd_Hebr""", """yor_Latn""", """yue_Hant""", """zho_Hans""", """zho_Hant""", """zul_Latn"""]





class 				_A		( lowerCAmelCase			):
      snake_case__    :     List[Any]													=			VOCAB_FILES_NAMES
      snake_case__    :     Union[str, Any]													=			PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
      snake_case__    :     Tuple													=			PRETRAINED_VOCAB_FILES_MAP
      snake_case__    :     str													=			['input_ids', 'attention_mask']

      snake_case__    :     int													=			[]
      snake_case__    :     Tuple													=			[]

      def __init__(		self	, __lowerCAmelCase	, __lowerCAmelCase="<s>"	, __lowerCAmelCase="</s>"	, __lowerCAmelCase="</s>"	, __lowerCAmelCase="<s>"	, __lowerCAmelCase="<unk>"	, __lowerCAmelCase="<pad>"	, __lowerCAmelCase="<mask>"	, __lowerCAmelCase=None	, __lowerCAmelCase=None	, __lowerCAmelCase=None	, __lowerCAmelCase = None	, __lowerCAmelCase=None	, __lowerCAmelCase=False	, **__lowerCAmelCase	, ):







            """simple docstring"""



            lowercase														=			AddedToken(__A	, lstrip=__A	, rstrip=__A		) if isinstance(__A	, __A		) else mask_token

            lowercase														=			{} if sp_model_kwargs is None else sp_model_kwargs
            lowercase														=			legacy_behaviour

            super().__init__(
                bos_token=__A	, eos_token=__A	, unk_token=__A	, sep_token=__A	, cls_token=__A	, pad_token=__A	, mask_token=__A	, tokenizer_file=__A	, src_lang=__A	, tgt_lang=__A	, additional_special_tokens=__A	, sp_model_kwargs=self.sp_model_kwargs	, legacy_behaviour=__A	, **__A	, )

            lowercase														=			spm.SentencePieceProcessor(**self.sp_model_kwargs		)
            self.sp_model.Load(str(__A		)		)
            lowercase														=			vocab_file
            # Original fairseq vocab and spm vocab must be "aligned":
            # Vocab    |    0    |    1    |   2    |    3    |  4   |  5   |  6   |   7  |   8  |  9
            # -------- | ------- | ------- | ------ | ------- | ---- | ---- | ---- | ---- | ---- | ----
            # fairseq  | '<s>'   | '<pad>' | '</s>' | '<unk>' | 'an' | '▁n' | '▁m' | '▁t' | '▁k' | '▁a'
            # spm      | '<unk>' | '<s>'   | '</s>' | 'an'    | '▁n' | '▁m' | '▁t' | '▁k' | '▁a' | '▁s'

            # Mimic fairseq token-to-id alignment for the first 4 token
            lowercase														=			{"""<s>""": 0, """<pad>""": 1, """</s>""": 2, """<unk>""": 3}

            # The first "real" token "," has position 4 in the original fairseq vocab and position 3 in the spm vocab
            lowercase														=			1

            lowercase														=			len(self.sp_model		)
            lowercase														=			{
                code: self.sp_model_size + i + self.fairseq_offset for i, code in enumerate(__A		)
            }
            lowercase														=			{v: k for k, v in self.lang_code_to_id.items()}
            lowercase														=			len(self.sp_model		) + len(self.lang_code_to_id		) + self.fairseq_offset

            self.fairseq_tokens_to_ids.update(self.lang_code_to_id		)
            lowercase														=			{v: k for k, v in self.fairseq_tokens_to_ids.items()}
            lowercase														=			list(self.lang_code_to_id.keys()		)

            if additional_special_tokens is not None:
                  # Only add those special tokens if they are not already there.
                  self._additional_special_tokens.extend(
                      [t for t in additional_special_tokens if t not in self._additional_special_tokens]		)

            lowercase														=			src_lang if src_lang is not None else """eng_Latn"""
            lowercase														=			self.lang_code_to_id[self._src_lang]
            lowercase														=			tgt_lang
            self.set_src_lang_special_tokens(self._src_lang		)

      def __getstate__(		self		):







            """simple docstring"""



            lowercase														=			self.__dict__.copy()
            lowercase														=			None
            lowercase														=			self.sp_model.serialized_model_proto()
            return state

      def __setstate__(		self	, __lowerCAmelCase		):







            """simple docstring"""



            lowercase														=			d

            # for backward compatibility
            if not hasattr(self	, """sp_model_kwargs"""		):
                  lowercase														=			{}

            lowercase														=			spm.SentencePieceProcessor(**self.sp_model_kwargs		)
            self.sp_model.LoadFromSerializedProto(self.sp_model_proto		)

      @property
      def        A__ (		self		):







            """simple docstring"""



            return len(self.sp_model		) + len(self.lang_code_to_id		) + self.fairseq_offset + 1  # Plus 1 for the mask token

      @property
      def        A__ (		self		):







            """simple docstring"""



            return self._src_lang

      @src_lang.setter
      def        A__ (		self	, __lowerCAmelCase		):







            """simple docstring"""



            lowercase														=			new_src_lang
            self.set_src_lang_special_tokens(self._src_lang		)

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = None	, __lowerCAmelCase = False		):







            """simple docstring"""



            if already_has_special_tokens:
                  return super().get_special_tokens_mask(
                      token_ids_a=__A	, token_ids_a=__A	, already_has_special_tokens=__A		)

            lowercase														=			[1] * len(self.prefix_tokens		)
            lowercase														=			[1] * len(self.suffix_tokens		)
            if token_ids_a is None:
                  return prefix_ones + ([0] * len(__A		)) + suffix_ones
            return prefix_ones + ([0] * len(__A		)) + ([0] * len(__A		)) + suffix_ones

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = None		):







            """simple docstring"""



            if token_ids_a is None:
                  return self.prefix_tokens + token_ids_a + self.suffix_tokens
            # We don't expect to process pairs, but leave the pair logic for API consistency
            return self.prefix_tokens + token_ids_a + token_ids_a + self.suffix_tokens

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = None		):







            """simple docstring"""



            lowercase														=			[self.sep_token_id]
            lowercase														=			[self.cls_token_id]

            if token_ids_a is None:
                  return len(cls + token_ids_a + sep		) * [0]
            return len(cls + token_ids_a + sep + sep + token_ids_a + sep		) * [0]

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, **__lowerCAmelCase		):







            """simple docstring"""



            if src_lang is None or tgt_lang is None:
                  raise ValueError("""Translation requires a `src_lang` and a `tgt_lang` for this model"""		)
            lowercase														=			src_lang
            lowercase														=			self(__A	, add_special_tokens=__A	, return_tensors=__A	, **__A		)
            lowercase														=			self.convert_tokens_to_ids(__A		)
            lowercase														=			tgt_lang_id
            return inputs

      def        A__ (		self		):







            """simple docstring"""



            lowercase														=			{self.convert_ids_to_tokens(__A		): i for i in range(self.vocab_size		)}
            vocab.update(self.added_tokens_encoder		)
            return vocab

      def        A__ (		self	, __lowerCAmelCase		):







            """simple docstring"""



            return self.sp_model.encode(__A	, out_type=__A		)

      def        A__ (		self	, __lowerCAmelCase		):







            """simple docstring"""



            if token in self.fairseq_tokens_to_ids:
                  return self.fairseq_tokens_to_ids[token]
            lowercase														=			self.sp_model.PieceToId(__A		)

            # Need to return unknown token if the SP model returned 0
            return spm_id + self.fairseq_offset if spm_id else self.unk_token_id

      def        A__ (		self	, __lowerCAmelCase		):







            """simple docstring"""



            if index in self.fairseq_ids_to_tokens:
                  return self.fairseq_ids_to_tokens[index]
            return self.sp_model.IdToPiece(index - self.fairseq_offset		)

      def        A__ (		self	, __lowerCAmelCase		):







            """simple docstring"""



            lowercase														=			"""""".join(__A		).replace(__A	, """ """		).strip()
            return out_string

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = None		):







            """simple docstring"""



            if not os.path.isdir(__A		):
                  logger.error(f'Vocabulary path ({save_directory}) should be a directory'		)
                  return
            lowercase														=			os.path.join(
                __A	, (filename_prefix + """-""" if filename_prefix else """""") + VOCAB_FILES_NAMES["""vocab_file"""]		)

            if os.path.abspath(self.vocab_file		) != os.path.abspath(__A		) and os.path.isfile(self.vocab_file		):
                  copyfile(self.vocab_file	, __A		)
            elif not os.path.isfile(self.vocab_file		):
                  with open(__A	, """wb"""		) as fi:
                        lowercase														=			self.sp_model.serialized_model_proto()
                        fi.write(__A		)

            return (out_vocab_file,)

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = "eng_Latn"	, __lowerCAmelCase = None	, __lowerCAmelCase = "fra_Latn"	, **__lowerCAmelCase	, ):







            """simple docstring"""



            lowercase														=			src_lang
            lowercase														=			tgt_lang
            return super().prepare_seqaseq_batch(__A	, __A	, **__A		)

      def        A__ (		self		):







            """simple docstring"""



            return self.set_src_lang_special_tokens(self.src_lang		)

      def        A__ (		self		):







            """simple docstring"""



            return self.set_tgt_lang_special_tokens(self.tgt_lang		)

      def        A__ (		self	, __lowerCAmelCase		):







            """simple docstring"""



            lowercase														=			self.lang_code_to_id[src_lang]
            if self.legacy_behaviour:
                  lowercase														=			[]
                  lowercase														=			[self.eos_token_id, self.cur_lang_code]
            else:
                  lowercase														=			[self.cur_lang_code]
                  lowercase														=			[self.eos_token_id]







      def        A__ (		self	, __lowerCAmelCase		):







            """simple docstring"""



            lowercase														=			self.lang_code_to_id[lang]
            if self.legacy_behaviour:
                  lowercase														=			[]
                  lowercase														=			[self.eos_token_id, self.cur_lang_code]
            else:
                  lowercase														=			[self.cur_lang_code]
                  lowercase														=			[self.eos_token_id]






"""simple docstring"""






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

from ... import PreTrainedTokenizer
from ...configuration_utils import PretrainedConfig
from ...file_utils import TensorType, is_torch_available
from ...onnx import OnnxConfig, OnnxConfigWithPast, OnnxSeqaSeqConfigWithPast
from ...onnx.utils import compute_effective_axis_dimension
from ...utils import logging


__lowerCAmelCase					: Tuple        =logging.get_logger(__name__)

__lowerCAmelCase					: Tuple        ={
    """facebook/blenderbot_small-90M""": """https://huggingface.co/facebook/blenderbot_small-90M/resolve/main/config.json""",
    # See all BlenderbotSmall models at https://huggingface.co/models?filter=blenderbot_small
}





class 				_A		( lowerCAmelCase			):
      snake_case__    :     int													=			'blenderbot-small'
      snake_case__    :     Optional[Any]													=			['past_key_values']
      snake_case__    :     Optional[Any]													=			{'num_attention_heads': 'encoder_attention_heads', 'hidden_size': 'd_model'}

      def __init__(		self	, __lowerCAmelCase=5_0265	, __lowerCAmelCase=512	, __lowerCAmelCase=8	, __lowerCAmelCase=2048	, __lowerCAmelCase=16	, __lowerCAmelCase=8	, __lowerCAmelCase=2048	, __lowerCAmelCase=16	, __lowerCAmelCase=0.0	, __lowerCAmelCase=0.0	, __lowerCAmelCase=True	, __lowerCAmelCase=True	, __lowerCAmelCase="gelu"	, __lowerCAmelCase=512	, __lowerCAmelCase=0.1	, __lowerCAmelCase=0.0	, __lowerCAmelCase=0.0	, __lowerCAmelCase=0.0_2	, __lowerCAmelCase=1	, __lowerCAmelCase=False	, __lowerCAmelCase=0	, __lowerCAmelCase=1	, __lowerCAmelCase=2	, __lowerCAmelCase=2	, **__lowerCAmelCase	, ):







            """simple docstring"""



            lowercase														=			vocab_size
            lowercase														=			max_position_embeddings
            lowercase														=			d_model
            lowercase														=			encoder_ffn_dim
            lowercase														=			encoder_layers
            lowercase														=			encoder_attention_heads
            lowercase														=			decoder_ffn_dim
            lowercase														=			decoder_layers
            lowercase														=			decoder_attention_heads
            lowercase														=			dropout
            lowercase														=			attention_dropout
            lowercase														=			activation_dropout
            lowercase														=			activation_function
            lowercase														=			init_std
            lowercase														=			encoder_layerdrop
            lowercase														=			decoder_layerdrop
            lowercase														=			use_cache
            lowercase														=			encoder_layers
            lowercase														=			scale_embedding  # scale factor will be sqrt(d_model) if True

            super().__init__(
                pad_token_id=__lowerCAmelCase	, bos_token_id=__lowerCAmelCase	, eos_token_id=__lowerCAmelCase	, is_encoder_decoder=__lowerCAmelCase	, decoder_start_token_id=__lowerCAmelCase	, forced_eos_token_id=__lowerCAmelCase	, **__lowerCAmelCase	, )






class 				_A		( lowerCAmelCase			):

      @property
      def        A__ (		self		):







            """simple docstring"""



            if self.task in ["default", "seq2seq-lm"]:
                  lowercase														=			OrderedDict(
                      [
                          ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                          ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                      ]		)

                  if self.use_past:
                        lowercase														=			{0: """batch"""}
                        lowercase														=			{0: """batch""", 1: """past_decoder_sequence + sequence"""}
                  else:
                        lowercase														=			{0: """batch""", 1: """decoder_sequence"""}
                        lowercase														=			{0: """batch""", 1: """decoder_sequence"""}

                  if self.use_past:
                        self.fill_with_past_key_values_(__lowerCAmelCase	, direction="""inputs"""		)
            elif self.task == "causal-lm":
                  # TODO: figure this case out.
                  lowercase														=			OrderedDict(
                      [
                          ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                          ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                      ]		)
                  if self.use_past:
                        lowercase							,							lowercase														=			self.num_layers
                        for i in range(__lowerCAmelCase		):
                              lowercase														=			{0: """batch""", 2: """past_sequence + sequence"""}
                              lowercase														=			{0: """batch""", 2: """past_sequence + sequence"""}
            else:
                  lowercase														=			OrderedDict(
                      [
                          ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
                          ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
                          ("""decoder_input_ids""", {0: """batch""", 1: """decoder_sequence"""}),
                          ("""decoder_attention_mask""", {0: """batch""", 1: """decoder_sequence"""}),
                      ]		)

            return common_inputs

      @property
      def        A__ (		self		):







            """simple docstring"""



            if self.task in ["default", "seq2seq-lm"]:
                  lowercase														=			super().outputs
            else:
                  lowercase														=			super(__lowerCAmelCase	, self		).outputs
                  if self.use_past:
                        lowercase							,							lowercase														=			self.num_layers
                        for i in range(__lowerCAmelCase		):
                              lowercase														=			{0: """batch""", 2: """past_sequence + sequence"""}
                              lowercase														=			{0: """batch""", 2: """past_sequence + sequence"""}
            return common_outputs

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = -1	, __lowerCAmelCase = -1	, __lowerCAmelCase = False	, __lowerCAmelCase = None	, ):







            """simple docstring"""



            lowercase														=			self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
                __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase		)

            # Generate decoder inputs
            lowercase														=			seq_length if not self.use_past else 1
            lowercase														=			self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
                __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase		)
            lowercase														=			{f'decoder_{name}': tensor for name, tensor in decoder_inputs.items()}
            lowercase														=			dict(**__lowerCAmelCase	, **__lowerCAmelCase		)

            if self.use_past:
                  if not is_torch_available():
                        raise ValueError("""Cannot generate dummy past_keys inputs without PyTorch installed."""		)
                  else:
                        import torch
                  lowercase							,							lowercase														=			common_inputs["""input_ids"""].shape
                  lowercase														=			common_inputs["""decoder_input_ids"""].shape[1]
                  lowercase							,							lowercase														=			self.num_attention_heads
                  lowercase														=			(
                      batch,
                      num_encoder_attention_heads,
                      encoder_seq_length,
                      self._config.hidden_size // num_encoder_attention_heads,
                  )
                  lowercase														=			decoder_seq_length + 3
                  lowercase														=			(
                      batch,
                      num_decoder_attention_heads,
                      decoder_past_length,
                      self._config.hidden_size // num_decoder_attention_heads,
                  )

                  lowercase														=			torch.cat(
                      [common_inputs["""decoder_attention_mask"""], torch.ones(__lowerCAmelCase	, __lowerCAmelCase		)]	, dim=1		)

                  lowercase														=			[]
                  # If the number of encoder and decoder layers are present in the model configuration, both are considered
                  lowercase							,							lowercase														=			self.num_layers
                  lowercase														=			min(__lowerCAmelCase	, __lowerCAmelCase		)
                  lowercase														=			max(__lowerCAmelCase	, __lowerCAmelCase		) - min_num_layers
                  lowercase														=			"""encoder""" if num_encoder_layers > num_decoder_layers else """decoder"""

                  for _ in range(__lowerCAmelCase		):
                        common_inputs["past_key_values"].append(
                            (
                                torch.zeros(__lowerCAmelCase		),
                                torch.zeros(__lowerCAmelCase		),
                                torch.zeros(__lowerCAmelCase		),
                                torch.zeros(__lowerCAmelCase		),
                            )		)
                  # TODO: test this.
                  lowercase														=			encoder_shape if remaining_side_name == """encoder""" else decoder_shape
                  for _ in range(__lowerCAmelCase	, __lowerCAmelCase		):
                        common_inputs["past_key_values"].append((torch.zeros(__lowerCAmelCase		), torch.zeros(__lowerCAmelCase		))		)
            return common_inputs

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = -1	, __lowerCAmelCase = -1	, __lowerCAmelCase = False	, __lowerCAmelCase = None	, ):







            """simple docstring"""



            lowercase														=			self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
                __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase		)

            if self.use_past:
                  if not is_torch_available():
                        raise ValueError("""Cannot generate dummy past_keys inputs without PyTorch installed."""		)
                  else:
                        import torch
                  lowercase							,							lowercase														=			common_inputs["""input_ids"""].shape
                  # Not using the same length for past_key_values
                  lowercase														=			seqlen + 2
                  lowercase							,							lowercase														=			self.num_layers
                  lowercase							,							lowercase														=			self.num_attention_heads
                  lowercase														=			(
                      batch,
                      num_encoder_attention_heads,
                      past_key_values_length,
                      self._config.hidden_size // num_encoder_attention_heads,
                  )

                  lowercase														=			common_inputs["""attention_mask"""].dtype
                  lowercase														=			torch.cat(
                      [common_inputs["""attention_mask"""], torch.ones(__lowerCAmelCase	, __lowerCAmelCase	, dtype=__lowerCAmelCase		)]	, dim=1		)
                  lowercase														=			[
                      (torch.zeros(__lowerCAmelCase		), torch.zeros(__lowerCAmelCase		)) for _ in range(__lowerCAmelCase		)
                  ]
            return common_inputs

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = -1	, __lowerCAmelCase = -1	, __lowerCAmelCase = False	, __lowerCAmelCase = None	, ):







            """simple docstring"""



            lowercase														=			compute_effective_axis_dimension(
                __lowerCAmelCase	, fixed_dimension=OnnxConfig.default_fixed_batch	, num_token_to_add=0		)

            # If dynamic axis (-1) we forward with a fixed dimension of 8 tokens to avoid optimizations made by ONNX
            lowercase														=			tokenizer.num_special_tokens_to_add(__lowerCAmelCase		)
            lowercase														=			compute_effective_axis_dimension(
                __lowerCAmelCase	, fixed_dimension=OnnxConfig.default_fixed_sequence	, num_token_to_add=__lowerCAmelCase		)

            # Generate dummy inputs according to compute batch and sequence
            lowercase														=			[""" """.join([tokenizer.unk_token]		) * seq_length] * batch_size
            lowercase														=			dict(tokenizer(__lowerCAmelCase	, return_tensors=__lowerCAmelCase		)		)
            return common_inputs

      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase = -1	, __lowerCAmelCase = -1	, __lowerCAmelCase = False	, __lowerCAmelCase = None	, ):







            """simple docstring"""



            if self.task in ["default", "seq2seq-lm"]:
                  lowercase														=			self._generate_dummy_inputs_for_default_and_seqaseq_lm(
                      __lowerCAmelCase	, batch_size=__lowerCAmelCase	, seq_length=__lowerCAmelCase	, is_pair=__lowerCAmelCase	, framework=__lowerCAmelCase		)

            elif self.task == "causal-lm":
                  lowercase														=			self._generate_dummy_inputs_for_causal_lm(
                      __lowerCAmelCase	, batch_size=__lowerCAmelCase	, seq_length=__lowerCAmelCase	, is_pair=__lowerCAmelCase	, framework=__lowerCAmelCase		)
            else:
                  lowercase														=			self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
                      __lowerCAmelCase	, batch_size=__lowerCAmelCase	, seq_length=__lowerCAmelCase	, is_pair=__lowerCAmelCase	, framework=__lowerCAmelCase		)

            return common_inputs







      def        A__ (		self	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase		):







            """simple docstring"""



            if self.task in ["default", "seq2seq-lm"]:
                  lowercase														=			super()._flatten_past_key_values_(__lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase		)
            else:
                  lowercase														=			super(__lowerCAmelCase	, self		)._flatten_past_key_values_(
                      __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase	, __lowerCAmelCase		)



