


'''simple docstring'''
import os
from shutil import copyfile
from typing import List, Optional, Tuple

from tokenizers import processors

from ...tokenization_utils import AddedToken, BatchEncoding
from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import is_sentencepiece_available, logging


if is_sentencepiece_available():
  from .tokenization_nllb import NllbTokenizer
else:
  UpperCamelCase__    					=      None


UpperCamelCase__    					=      logging.get_logger(__name__)


UpperCamelCase__    					=      {'''vocab_file''': '''sentencepiece.bpe.model''', '''tokenizer_file''': '''tokenizer.json'''}

UpperCamelCase__    					=      {
    '''vocab_file''': {
        '''facebook/nllb-200-distilled-600M''': (
            '''https://huggingface.co/facebook/nllb-200-distilled-600M/resolve/main/sentencepiece.bpe.model'''
        ),
    },
    '''tokenizer_file''': {
        '''facebook/nllb-200-distilled-600M''': (
            '''https://huggingface.co/facebook/nllb-200-distilled-600M/resolve/main/tokenizer.json'''
        ),
    },
}

UpperCamelCase__    					=      {
    '''facebook/nllb-large-en-ro''': 1_0_2_4,
    '''facebook/nllb-200-distilled-600M''': 1_0_2_4,
}

# fmt: off
UpperCamelCase__    					=      ['''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 			lowerCamelCase_   (	__a      ):
      lowerCAmelCase__		     =     VOCAB_FILES_NAMES
      lowerCAmelCase__		     =     PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
      lowerCAmelCase__		     =     PRETRAINED_VOCAB_FILES_MAP
      lowerCAmelCase__		     =     ['input_ids', 'attention_mask']
      lowerCAmelCase__		     =     NllbTokenizer

      lowerCAmelCase__		     =     []
      lowerCAmelCase__		     =     []






      def __init__(					self				:    Optional[int]						,						_A				:    Optional[Any]=None						,						_A				:    int=None						,						_A				:    str="<s>"						,						_A				:    List[Any]="</s>"						,						_A				:    int="</s>"						,						_A				:    Tuple="<s>"						,						_A				:    Optional[int]="<unk>"						,						_A				:    List[str]="<pad>"						,						_A				:    Union[str, Any]="<mask>"						,						_A				:    List[Any]=None						,						_A				:    List[Any]=None						,						_A				:    List[Any]=None						,						_A				:    int=False						,						**_A				:    Any						,						):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[int]													=				AddedToken(_A						,						lstrip=_A						,						rstrip=_A ) if isinstance(_A						,						_A ) else mask_token
          UpperCAmelCase__			:		List[str]													=				legacy_behaviour
          super().__init__(
              vocab_file=_A						,						tokenizer_file=_A						,						bos_token=_A						,						eos_token=_A						,						sep_token=_A						,						cls_token=_A						,						unk_token=_A						,						pad_token=_A						,						mask_token=_A						,						src_lang=_A						,						tgt_lang=_A						,						additional_special_tokens=_A						,						legacy_behaviour=_A						,						**_A						,						)

          UpperCAmelCase__			:		List[str]													=				vocab_file
          UpperCAmelCase__			:		List[Any]													=				False if not self.vocab_file else True

          UpperCAmelCase__			:		Optional[int]													=				FAIRSEQ_LANGUAGE_CODES.copy()

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

          self.add_special_tokens({'''additional_special_tokens''': _additional_special_tokens} )
          UpperCAmelCase__			:		Any													=				{
              lang_code: self.convert_tokens_to_ids(_A ) for lang_code in FAIRSEQ_LANGUAGE_CODES
          }

          UpperCAmelCase__			:		Optional[int]													=				src_lang if src_lang is not None else '''eng_Latn'''
          UpperCAmelCase__			:		Any													=				self.convert_tokens_to_ids(self._src_lang )
          UpperCAmelCase__			:		Optional[Any]													=				tgt_lang
          self.set_src_lang_special_tokens(self._src_lang )






      @property
      def lowercase_							(					self				:    str ):


          '''simple docstring'''


          return self._src_lang






      @src_lang.setter
      def lowercase_							(					self				:    Any						,						_A				:    str ):


          '''simple docstring'''


          UpperCAmelCase__			:		int													=				new_src_lang
          self.set_src_lang_special_tokens(self._src_lang )






      def lowercase_							(					self				:    Optional[int]						,						_A				:    List[int]						,						_A				:    Optional[List[int]] = 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 lowercase_							(					self				:    Optional[Any]						,						_A				:    List[int]						,						_A				:    Optional[List[int]] = None ):


          '''simple docstring'''


          UpperCAmelCase__			:		Union[str, Any]													=				[self.sep_token_id]
          UpperCAmelCase__			:		List[Any]													=				[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 lowercase_							(					self				:    List[Any]						,						_A				:    Tuple						,						_A				:    str						,						_A				:    Optional[str]						,						_A				:    Optional[str]						,						**_A				:    Union[str, Any] ):


          '''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''' )
          UpperCAmelCase__			:		Union[str, Any]													=				src_lang
          UpperCAmelCase__			:		Tuple													=				self(_A						,						add_special_tokens=_A						,						return_tensors=_A						,						**_A )
          UpperCAmelCase__			:		List[Any]													=				self.convert_tokens_to_ids(_A )
          UpperCAmelCase__			:		Any													=				tgt_lang_id
          return inputs






      def lowercase_							(					self				:    List[Any]						,						_A				:    List[str]						,						_A				:    str = "eng_Latn"						,						_A				:    Optional[List[str]] = None						,						_A				:    str = "fra_Latn"						,						**_A				:    Union[str, Any]						,						):


          '''simple docstring'''


          UpperCAmelCase__			:		Tuple													=				src_lang
          UpperCAmelCase__			:		Dict													=				tgt_lang
          return super().prepare_seqaseq_batch(_A						,						_A						,						**_A )






      def lowercase_							(					self				:    Union[str, Any] ):


          '''simple docstring'''


          return self.set_src_lang_special_tokens(self.src_lang )






      def lowercase_							(					self				:    Union[str, Any] ):


          '''simple docstring'''


          return self.set_tgt_lang_special_tokens(self.tgt_lang )






      def lowercase_							(					self				:    Tuple						,						_A				:    Optional[int] ):


          '''simple docstring'''


          UpperCAmelCase__			:		Tuple													=				self.convert_tokens_to_ids(_A )

          if self.legacy_behaviour:
              UpperCAmelCase__			:		Dict													=				[]
              UpperCAmelCase__			:		Optional[Any]													=				[self.eos_token_id, self.cur_lang_code]
          else:
              UpperCAmelCase__			:		List[Any]													=				[self.cur_lang_code]
              UpperCAmelCase__			:		List[Any]													=				[self.eos_token_id]

          UpperCAmelCase__			:		List[str]													=				self.convert_ids_to_tokens(self.prefix_tokens )
          UpperCAmelCase__			:		List[str]													=				self.convert_ids_to_tokens(self.suffix_tokens )

          UpperCAmelCase__			:		Tuple													=				processors.TemplateProcessing(
              single=prefix_tokens_str + ['''$A'''] + suffix_tokens_str						,						pair=prefix_tokens_str + ['''$A''', '''$B'''] + suffix_tokens_str						,						special_tokens=list(zip(prefix_tokens_str + suffix_tokens_str						,						self.prefix_tokens + self.suffix_tokens ) )						,						)






      def lowercase_							(					self				:    List[Any]						,						_A				:    str ):


          '''simple docstring'''


          UpperCAmelCase__			:		List[str]													=				self.convert_tokens_to_ids(_A )
          if self.legacy_behaviour:
              UpperCAmelCase__			:		List[Any]													=				[]
              UpperCAmelCase__			:		Optional[Any]													=				[self.eos_token_id, self.cur_lang_code]
          else:
              UpperCAmelCase__			:		str													=				[self.cur_lang_code]
              UpperCAmelCase__			:		Optional[int]													=				[self.eos_token_id]

          UpperCAmelCase__			:		Tuple													=				self.convert_ids_to_tokens(self.prefix_tokens )
          UpperCAmelCase__			:		Dict													=				self.convert_ids_to_tokens(self.suffix_tokens )

          UpperCAmelCase__			:		int													=				processors.TemplateProcessing(
              single=prefix_tokens_str + ['''$A'''] + suffix_tokens_str						,						pair=prefix_tokens_str + ['''$A''', '''$B'''] + suffix_tokens_str						,						special_tokens=list(zip(prefix_tokens_str + suffix_tokens_str						,						self.prefix_tokens + self.suffix_tokens ) )						,						)






      def lowercase_							(					self				:    str						,						_A				:    str						,						_A				:    Optional[str] = None ):


          '''simple docstring'''


          if not self.can_save_slow_tokenizer:
              raise ValueError(
                  '''Your fast tokenizer does not have the necessary information to save the vocabulary for a slow '''
                  '''tokenizer.''' )

          if not os.path.isdir(_A ):
              logger.error(f"""Vocabulary path ({save_directory}) should be a directory.""" )
              return
          UpperCAmelCase__			:		Optional[int]													=				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 ):
              copyfile(self.vocab_file						,						_A )

          return (out_vocab_file,)




'''simple docstring'''
import unittest

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

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
  import torch

  from transformers import (
      DebertaVaForMaskedLM,
      DebertaVaForMultipleChoice,
      DebertaVaForQuestionAnswering,
      DebertaVaForSequenceClassification,
      DebertaVaForTokenClassification,
      DebertaVaModel,
  )
  from transformers.models.deberta_va.modeling_deberta_va import DEBERTA_V2_PRETRAINED_MODEL_ARCHIVE_LIST




class 			lowerCamelCase_   (	__a      ):






      def __init__(					self				:    Optional[Any]						,						_A				:    Optional[Any]						,						_A				:    List[str]=13						,						_A				:    Any=7						,						_A				:    str=True						,						_A				:    Any=True						,						_A				:    Any=True						,						_A				:    Optional[int]=True						,						_A				:    int=99						,						_A				:    Optional[int]=32						,						_A				:    List[Any]=5						,						_A				:    Optional[Any]=4						,						_A				:    Dict=37						,						_A				:    Any="gelu"						,						_A				:    str=0.1						,						_A				:    int=0.1						,						_A				:    Optional[Any]=512						,						_A				:    Optional[Any]=16						,						_A				:    List[Any]=2						,						_A				:    str=0.0_2						,						_A				:    Optional[Any]=False						,						_A				:    Any=True						,						_A				:    Dict="None"						,						_A				:    List[str]=3						,						_A				:    List[str]=4						,						_A				:    Tuple=None						,						):


          '''simple docstring'''


          UpperCAmelCase__			:		Tuple													=				parent
          UpperCAmelCase__			:		Union[str, Any]													=				batch_size
          UpperCAmelCase__			:		Dict													=				seq_length
          UpperCAmelCase__			:		Dict													=				is_training
          UpperCAmelCase__			:		Optional[Any]													=				use_input_mask
          UpperCAmelCase__			:		Optional[Any]													=				use_token_type_ids
          UpperCAmelCase__			:		Union[str, Any]													=				use_labels
          UpperCAmelCase__			:		Tuple													=				vocab_size
          UpperCAmelCase__			:		Tuple													=				hidden_size
          UpperCAmelCase__			:		Any													=				num_hidden_layers
          UpperCAmelCase__			:		Tuple													=				num_attention_heads
          UpperCAmelCase__			:		List[Any]													=				intermediate_size
          UpperCAmelCase__			:		Union[str, Any]													=				hidden_act
          UpperCAmelCase__			:		Any													=				hidden_dropout_prob
          UpperCAmelCase__			:		Any													=				attention_probs_dropout_prob
          UpperCAmelCase__			:		int													=				max_position_embeddings
          UpperCAmelCase__			:		Optional[int]													=				type_vocab_size
          UpperCAmelCase__			:		Union[str, Any]													=				type_sequence_label_size
          UpperCAmelCase__			:		int													=				initializer_range
          UpperCAmelCase__			:		Any													=				num_labels
          UpperCAmelCase__			:		Optional[Any]													=				num_choices
          UpperCAmelCase__			:		List[Any]													=				relative_attention
          UpperCAmelCase__			:		int													=				position_biased_input
          UpperCAmelCase__			:		str													=				pos_att_type
          UpperCAmelCase__			:		Union[str, Any]													=				scope






      def lowercase_							(					self				:    Tuple ):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[Any]													=				ids_tensor([self.batch_size, self.seq_length]						,						self.vocab_size )

          UpperCAmelCase__			:		Any													=				None
          if self.use_input_mask:
              UpperCAmelCase__			:		Tuple													=				ids_tensor([self.batch_size, self.seq_length]						,						vocab_size=2 )

          UpperCAmelCase__			:		Optional[Any]													=				None
          if self.use_token_type_ids:
              UpperCAmelCase__			:		List[str]													=				ids_tensor([self.batch_size, self.seq_length]						,						self.type_vocab_size )

          UpperCAmelCase__			:		Dict													=				None
          UpperCAmelCase__			:		Any													=				None
          UpperCAmelCase__			:		Dict													=				None
          if self.use_labels:
              UpperCAmelCase__			:		int													=				ids_tensor([self.batch_size]						,						self.type_sequence_label_size )
              UpperCAmelCase__			:		List[str]													=				ids_tensor([self.batch_size, self.seq_length]						,						self.num_labels )
              UpperCAmelCase__			:		Dict													=				ids_tensor([self.batch_size]						,						self.num_choices )

          UpperCAmelCase__			:		Optional[Any]													=				self.get_config()

          return config, input_ids, token_type_ids, input_mask, sequence_labels, token_labels, choice_labels






      def lowercase_							(					self				:    List[str] ):


          '''simple docstring'''


          return DebertaVaConfig(
              vocab_size=self.vocab_size						,						hidden_size=self.hidden_size						,						num_hidden_layers=self.num_hidden_layers						,						num_attention_heads=self.num_attention_heads						,						intermediate_size=self.intermediate_size						,						hidden_act=self.hidden_act						,						hidden_dropout_prob=self.hidden_dropout_prob						,						attention_probs_dropout_prob=self.attention_probs_dropout_prob						,						max_position_embeddings=self.max_position_embeddings						,						type_vocab_size=self.type_vocab_size						,						initializer_range=self.initializer_range						,						relative_attention=self.relative_attention						,						position_biased_input=self.position_biased_input						,						pos_att_type=self.pos_att_type						,						)






      def lowercase_							(					self				:    Dict						,						_A				:    Optional[int] ):


          '''simple docstring'''


          self.parent.assertListEqual(list(result.loss.size() )						,						[] )






      def lowercase_							(					self				:    int						,						_A				:    int						,						_A				:    Any						,						_A				:    Tuple						,						_A				:    List[Any]						,						_A				:    str						,						_A				:    Union[str, Any]						,						_A				:    Any ):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[Any]													=				DebertaVaModel(config=_A )
          model.to(_A )
          model.eval()
          UpperCAmelCase__			:		str													=				model(_A						,						attention_mask=_A						,						token_type_ids=_A )[0]
          UpperCAmelCase__			:		List[str]													=				model(_A						,						token_type_ids=_A )[0]
          UpperCAmelCase__			:		List[Any]													=				model(_A )[0]

          self.parent.assertListEqual(list(sequence_output.size() )						,						[self.batch_size, self.seq_length, self.hidden_size] )






      def lowercase_							(					self				:    Optional[Any]						,						_A				:    Tuple						,						_A				:    List[Any]						,						_A				:    Optional[Any]						,						_A				:    int						,						_A				:    List[Any]						,						_A				:    Optional[int]						,						_A				:    str ):


          '''simple docstring'''


          UpperCAmelCase__			:		Dict													=				DebertaVaForMaskedLM(config=_A )
          model.to(_A )
          model.eval()
          UpperCAmelCase__			:		Any													=				model(_A						,						attention_mask=_A						,						token_type_ids=_A						,						labels=_A )

          self.parent.assertEqual(result.logits.shape						,						(self.batch_size, self.seq_length, self.vocab_size) )






      def lowercase_							(					self				:    str						,						_A				:    str						,						_A				:    Any						,						_A				:    Any						,						_A				:    List[Any]						,						_A				:    Dict						,						_A				:    Tuple						,						_A				:    Tuple ):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[Any]													=				self.num_labels
          UpperCAmelCase__			:		Union[str, Any]													=				DebertaVaForSequenceClassification(_A )
          model.to(_A )
          model.eval()
          UpperCAmelCase__			:		str													=				model(_A						,						attention_mask=_A						,						token_type_ids=_A						,						labels=_A )
          self.parent.assertListEqual(list(result.logits.size() )						,						[self.batch_size, self.num_labels] )
          self.check_loss_output(_A )






      def lowercase_							(					self				:    Any						,						_A				:    List[str]						,						_A				:    List[str]						,						_A				:    Optional[int]						,						_A				:    Tuple						,						_A				:    Dict						,						_A				:    List[str]						,						_A				:    Optional[int] ):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[Any]													=				self.num_labels
          UpperCAmelCase__			:		int													=				DebertaVaForTokenClassification(config=_A )
          model.to(_A )
          model.eval()
          UpperCAmelCase__			:		List[Any]													=				model(_A						,						attention_mask=_A						,						token_type_ids=_A						,						labels=_A )
          self.parent.assertEqual(result.logits.shape						,						(self.batch_size, self.seq_length, self.num_labels) )






      def lowercase_							(					self				:    str						,						_A				:    List[str]						,						_A				:    str						,						_A				:    Optional[int]						,						_A				:    Optional[int]						,						_A				:    Union[str, Any]						,						_A				:    Dict						,						_A				:    Optional[int] ):


          '''simple docstring'''


          UpperCAmelCase__			:		str													=				DebertaVaForQuestionAnswering(config=_A )
          model.to(_A )
          model.eval()
          UpperCAmelCase__			:		int													=				model(
              _A						,						attention_mask=_A						,						token_type_ids=_A						,						start_positions=_A						,						end_positions=_A						,						)
          self.parent.assertEqual(result.start_logits.shape						,						(self.batch_size, self.seq_length) )
          self.parent.assertEqual(result.end_logits.shape						,						(self.batch_size, self.seq_length) )






      def lowercase_							(					self				:    Any						,						_A				:    Tuple						,						_A				:    Optional[int]						,						_A				:    Optional[int]						,						_A				:    str						,						_A				:    List[str]						,						_A				:    Any						,						_A				:    int ):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[Any]													=				DebertaVaForMultipleChoice(config=_A )
          model.to(_A )
          model.eval()
          UpperCAmelCase__			:		Optional[Any]													=				input_ids.unsqueeze(1 ).expand(-1						,						self.num_choices						,						-1 ).contiguous()
          UpperCAmelCase__			:		str													=				token_type_ids.unsqueeze(1 ).expand(-1						,						self.num_choices						,						-1 ).contiguous()
          UpperCAmelCase__			:		Dict													=				input_mask.unsqueeze(1 ).expand(-1						,						self.num_choices						,						-1 ).contiguous()
          UpperCAmelCase__			:		List[str]													=				model(
              _A						,						attention_mask=_A						,						token_type_ids=_A						,						labels=_A						,						)
          self.parent.assertEqual(result.logits.shape						,						(self.batch_size, self.num_choices) )






      def lowercase_							(					self				:    Optional[int] ):


          '''simple docstring'''


          UpperCAmelCase__			:		int													=				self.prepare_config_and_inputs()
          (
              (
              UpperCAmelCase__
          )						,						(
              UpperCAmelCase__
          )						,						(
              UpperCAmelCase__
          )						,						(
              UpperCAmelCase__
          )						,						(
              UpperCAmelCase__
          )						,						(
              UpperCAmelCase__
          )						,						(
              UpperCAmelCase__
          )						,						
          )			:		Any													=				config_and_inputs
          UpperCAmelCase__			:		Optional[int]													=				{'''input_ids''': input_ids, '''token_type_ids''': token_type_ids, '''attention_mask''': input_mask}
          return config, inputs_dict




@require_torch
class 			lowerCamelCase_   (	__a     ,       __a     ,       unittest.TestCase      ):
      lowerCAmelCase__		     =     (
          (
              DebertaVaModel,
              DebertaVaForMaskedLM,
              DebertaVaForSequenceClassification,
              DebertaVaForTokenClassification,
              DebertaVaForQuestionAnswering,
              DebertaVaForMultipleChoice,
          )
          if is_torch_available()
          else ()
      )
      lowerCAmelCase__		     =     (
          {
              'feature-extraction': DebertaVaModel,
              'fill-mask': DebertaVaForMaskedLM,
              'question-answering': DebertaVaForQuestionAnswering,
              'text-classification': DebertaVaForSequenceClassification,
              'token-classification': DebertaVaForTokenClassification,
              'zero-shot': DebertaVaForSequenceClassification,
          }
          if is_torch_available()
          else {}
      )

      lowerCAmelCase__		     =     True
      lowerCAmelCase__		     =     False
      lowerCAmelCase__		     =     False
      lowerCAmelCase__		     =     False
      lowerCAmelCase__		     =     False






      def lowercase_							(					self				:    Optional[Any] ):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[Any]													=				DebertaVaModelTester(self )
          UpperCAmelCase__			:		Tuple													=				ConfigTester(self						,						config_class=_A						,						hidden_size=37 )






      def lowercase_							(					self				:    str ):


          '''simple docstring'''


          self.config_tester.run_common_tests()






      def lowercase_							(					self				:    Optional[int] ):


          '''simple docstring'''


          UpperCAmelCase__			:		Any													=				self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_deberta_model(*_A )






      def lowercase_							(					self				:    List[Any] ):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[Any]													=				self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_deberta_for_sequence_classification(*_A )






      def lowercase_							(					self				:    List[str] ):


          '''simple docstring'''


          UpperCAmelCase__			:		int													=				self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_deberta_for_masked_lm(*_A )






      def lowercase_							(					self				:    List[str] ):


          '''simple docstring'''


          UpperCAmelCase__			:		Optional[int]													=				self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_deberta_for_question_answering(*_A )






      def lowercase_							(					self				:    Any ):


          '''simple docstring'''


          UpperCAmelCase__			:		int													=				self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_deberta_for_token_classification(*_A )






      def lowercase_							(					self				:    Tuple ):


          '''simple docstring'''


          UpperCAmelCase__			:		Union[str, Any]													=				self.model_tester.prepare_config_and_inputs()
          self.model_tester.create_and_check_deberta_for_multiple_choice(*_A )






      @slow
      def lowercase_							(					self				:    List[Any] ):


          '''simple docstring'''


          for model_name in DEBERTA_V2_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
              UpperCAmelCase__			:		List[str]													=				DebertaVaModel.from_pretrained(_A )
              self.assertIsNotNone(_A )




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






      @unittest.skip(reason='''Model not available yet''' )
      def lowercase_							(					self				:    Optional[Any] ):


          '''simple docstring'''


          pass






      @slow
      def lowercase_							(					self				:    List[Any] ):


          '''simple docstring'''


          UpperCAmelCase__			:		Tuple													=				DebertaVaModel.from_pretrained('''microsoft/deberta-v2-xlarge''' )

          UpperCAmelCase__			:		List[Any]													=				torch.tensor([[0, 31_414, 232, 328, 740, 1_140, 12_695, 69, 46_078, 1_588, 2]] )
          UpperCAmelCase__			:		List[str]													=				torch.tensor([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] )
          with torch.no_grad():
              UpperCAmelCase__			:		List[str]													=				model(_A						,						attention_mask=_A )[0]
          # compare the actual values for a slice.
          UpperCAmelCase__			:		str													=				torch.tensor(
              [[[0.2_3_5_6, 0.1_9_4_8, 0.0_3_6_9], [-0.1_0_6_3, 0.3_5_8_6, -0.5_1_5_2], [-0.6_3_9_9, -0.0_2_5_9, -0.2_5_2_5]]] )
          self.assertTrue(torch.allclose(output[:, 1:4, 1:4]						,						_A						,						atol=1e-4 )						,						f"""{output[:, 1:4, 1:4]}""" )
