


import random
import timeit
from functools import wraps
from typing import Callable, Optional

from ..configuration_utils import PretrainedConfig
from ..models.auto.modeling_tf_auto import TF_MODEL_MAPPING, TF_MODEL_WITH_LM_HEAD_MAPPING
from ..utils import is_pyanvml_available, is_tf_available, logging
from .benchmark_utils import (
    Benchmark,
    Memory,
    MemorySummary,
    measure_peak_memory_cpu,
    start_memory_tracing,
    stop_memory_tracing,
)


if is_tf_available():
	import tensorflow as tf
	from tensorflow.python.framework.errors_impl import ResourceExhaustedError

	from .benchmark_args_tf import TensorFlowBenchmarkArguments

if is_pyanvml_available():
	import pyanvml.pyanvml as nvml

A							:					List[str]     						=     logging.get_logger(__name__)





def 	_lowerCAmelCase       (    _lowerCAmelCase      ,	_lowerCAmelCase )						->	Dict:


						'''simple docstring'''






						def run_func(_lowerCAmelCase ):
												@wraps(_lowerCAmelCase )
												def run_in_eager_mode(*_lowerCAmelCase      ,	**_lowerCAmelCase ):
																		return func(*_lowerCAmelCase      ,	**_lowerCAmelCase )

												@wraps(_lowerCAmelCase )
												@tf.function(experimental_compile=_lowerCAmelCase )
												def run_in_graph_mode(*_lowerCAmelCase      ,	**_lowerCAmelCase ):
																		return func(*_lowerCAmelCase      ,	**_lowerCAmelCase )

												if do_eager_mode is True:
																		if use_xla is not False:
																								raise ValueError(
																								    "Cannot run model in XLA, if `args.eager_mode` is set to `True`. Please set `args.eager_mode=False`." )
																		return run_in_eager_mode
												else:
																		return run_in_graph_mode

						return run_func





def 	_lowerCAmelCase       (    _lowerCAmelCase      ,	_lowerCAmelCase      ,	_lowerCAmelCase )						->	["tf.Tensor"]:


						'''simple docstring'''






						__snake_case				=		random.Random()
						__snake_case				=		[rng.randint(0      ,	vocab_size - 1 ) for i in range(batch_size * sequence_length )]
						return tf.constant(_lowerCAmelCase      ,	shape=(batch_size, sequence_length)      ,	dtype=tf.intaa )






class     UpperCamelCase       (  _a   ):
					snake_case_		:				TensorFlowBenchmarkArguments
					snake_case_		:				PretrainedConfig
					snake_case_		:				str										=	"TensorFlow"


					@property
					def 							SCREAMING_SNAKE_CASE_  (						self	:		int						)			->	Dict:




											'''simple docstring'''

											return tf.__version__


					def 							SCREAMING_SNAKE_CASE_  (						self	:		List[str]     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		int						)			->	float:




											'''simple docstring'''

											__snake_case				=		self.args.strategy
											if strategy is None:
																	raise ValueError("A device strategy has to be initialized before using TensorFlow."						)
											__snake_case				=		self._prepare_inference_func(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						)
											return self._measure_speed(_inference						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Any     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		int						)			->	float:




											'''simple docstring'''

											__snake_case				=		self.args.strategy
											if strategy is None:
																	raise ValueError("A device strategy has to be initialized before using TensorFlow."						)
											__snake_case				=		self._prepare_train_func(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						)
											return self._measure_speed(_train						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		List[Any]     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		int						)			->	[Memory, Optional[MemorySummary]]:




											'''simple docstring'''

											if self.args.is_gpu:
																	tf.config.experimental.set_memory_growth(self.args.gpu_list[self.args.device_idx]     ,    SCREAMING_SNAKE_CASE						)
											__snake_case				=		self.args.strategy
											if strategy is None:
																	raise ValueError("A device strategy has to be initialized before using TensorFlow."						)
											__snake_case				=		self._prepare_inference_func(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						)
											return self._measure_memory(_inference						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Tuple     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		int						)			->	[Memory, Optional[MemorySummary]]:




											'''simple docstring'''

											if self.args.is_gpu:
																	tf.config.experimental.set_memory_growth(self.args.gpu_list[self.args.device_idx]     ,    SCREAMING_SNAKE_CASE						)
											__snake_case				=		self.args.strategy
											if strategy is None:
																	raise ValueError("A device strategy has to be initialized before using TensorFlow."						)

											__snake_case				=		self._prepare_train_func(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						)
											return self._measure_memory(_train						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		int     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		int						)			->	Callable[[], None]:




											'''simple docstring'''

											__snake_case				=		self.config_dict[model_name]

											if self.args.fpaa:
																	raise NotImplementedError("Mixed precision is currently not supported."						)

											__snake_case				=		(
											    hasattr(SCREAMING_SNAKE_CASE     ,    "architectures"						)
											    and isinstance(config.architectures     ,    SCREAMING_SNAKE_CASE						)
											    and len(config.architectures						) > 0
											)
											if not self.args.only_pretrain_model and has_model_class_in_config:
																	try:
																							__snake_case				=		"TF" + config.architectures[0]  # prepend 'TF' for tensorflow model
																							__snake_case				=		__import__("transformers"     ,    fromlist=[model_class]						)
																							__snake_case				=		getattr(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						)
																							__snake_case				=		model_cls(SCREAMING_SNAKE_CASE						)
																	except ImportError:
																							raise ImportError(
																							    f'''{model_class} does not exist. If you just want to test the pretrained model, you might want to'''
																							    " set `--only_pretrain_model` or `args.only_pretrain_model=True`."						)
											else:
																	__snake_case				=		TF_MODEL_MAPPING[config.__class__](SCREAMING_SNAKE_CASE						)

											# encoder-decoder has vocab size saved differently
											__snake_case				=		config.vocab_size if hasattr(SCREAMING_SNAKE_CASE     ,    "vocab_size"						) else config.encoder.vocab_size
											__snake_case				=		random_input_ids(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						)

											@run_with_tf_optimizations(self.args.eager_mode     ,    self.args.use_xla						)
											def encoder_decoder_forward():
																	return model(SCREAMING_SNAKE_CASE     ,    decoder_input_ids=SCREAMING_SNAKE_CASE     ,    training=SCREAMING_SNAKE_CASE						)

											@run_with_tf_optimizations(self.args.eager_mode     ,    self.args.use_xla						)
											def encoder_forward():
																	return model(SCREAMING_SNAKE_CASE     ,    training=SCREAMING_SNAKE_CASE						)

											__snake_case				=		encoder_decoder_forward if config.is_encoder_decoder else encoder_forward

											return _inference


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Union[str, Any]     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		int						)			->	Callable[[], None]:




											'''simple docstring'''

											__snake_case				=		self.config_dict[model_name]

											if self.args.eager_mode is not False:
																	raise ValueError("Training cannot be done in eager mode. Please make sure that `args.eager_mode = False`."						)

											if self.args.fpaa:
																	raise NotImplementedError("Mixed precision is currently not supported."						)

											__snake_case				=		(
											    hasattr(SCREAMING_SNAKE_CASE     ,    "architectures"						)
											    and isinstance(config.architectures     ,    SCREAMING_SNAKE_CASE						)
											    and len(config.architectures						) > 0
											)
											if not self.args.only_pretrain_model and has_model_class_in_config:
																	try:
																							__snake_case				=		"TF" + config.architectures[0]  # prepend 'TF' for tensorflow model
																							__snake_case				=		__import__("transformers"     ,    fromlist=[model_class]						)
																							__snake_case				=		getattr(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						)
																							__snake_case				=		model_cls(SCREAMING_SNAKE_CASE						)
																	except ImportError:
																							raise ImportError(
																							    f'''{model_class} does not exist. If you just want to test the pretrained model, you might want to'''
																							    " set `--only_pretrain_model` or `args.only_pretrain_model=True`."						)
											else:
																	__snake_case				=		TF_MODEL_WITH_LM_HEAD_MAPPING[config.__class__](SCREAMING_SNAKE_CASE						)

											# encoder-decoder has vocab size saved differently
											__snake_case				=		config.vocab_size if hasattr(SCREAMING_SNAKE_CASE     ,    "vocab_size"						) else config.encoder.vocab_size
											__snake_case				=		random_input_ids(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						)

											@run_with_tf_optimizations(self.args.eager_mode     ,    self.args.use_xla						)
											def encoder_decoder_train():
																	__snake_case				=		model(SCREAMING_SNAKE_CASE     ,    decoder_input_ids=SCREAMING_SNAKE_CASE     ,    labels=SCREAMING_SNAKE_CASE     ,    training=SCREAMING_SNAKE_CASE						)[0]
																	__snake_case				=		tf.gradients(SCREAMING_SNAKE_CASE     ,    model.trainable_variables						)
																	return gradients

											@run_with_tf_optimizations(self.args.eager_mode     ,    self.args.use_xla						)
											def encoder_train():
																	__snake_case				=		model(SCREAMING_SNAKE_CASE     ,    labels=SCREAMING_SNAKE_CASE     ,    training=SCREAMING_SNAKE_CASE						)[0]
																	__snake_case				=		tf.gradients(SCREAMING_SNAKE_CASE     ,    model.trainable_variables						)
																	return gradients

											__snake_case				=		encoder_decoder_train if config.is_encoder_decoder else encoder_train

											return _train


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Dict						)			->	float:




											'''simple docstring'''

											with self.args.strategy.scope():
																	try:
																							if self.args.is_tpu or self.args.use_xla:
																													# run additional 10 times to stabilize compilation for tpu
																													logger.info("Do inference on TPU. Running model 5 times to stabilize compilation"						)
																													timeit.repeat(SCREAMING_SNAKE_CASE     ,    repeat=1     ,    number=5						)

																							# as written in https://docs.python.org/2/library/timeit.html#timeit.Timer.repeat, min should be taken rather than the average
																							__snake_case				=		timeit.repeat(
																							    SCREAMING_SNAKE_CASE     ,    repeat=self.args.repeat     ,    number=1_0     ,    )

																							return min(SCREAMING_SNAKE_CASE						) / 10.0
																	except ResourceExhaustedError as e:
																							self.print_fn(f'''Doesn\'t fit on GPU. {e}'''						)






					def 							SCREAMING_SNAKE_CASE_  (						self	:		Optional[Any]     ,    SCREAMING_SNAKE_CASE	:		Callable[[], None]						)			->	[Memory, MemorySummary]:




											'''simple docstring'''

											logger.info(
											    "Note that TensorFlow allocates more memory than "
											    "it might need to speed up computation. "
											    "The memory reported here corresponds to the memory "
											    "reported by `nvidia-smi`, which can vary depending "
											    "on total available memory on the GPU that is used."						)
											with self.args.strategy.scope():
																	try:
																							if self.args.trace_memory_line_by_line:
																													if not self.args.eager_mode:
																																			raise ValueError(
																																			    "`args.eager_mode` is set to `False`. Make sure to run model in eager mode to measure memory"
																																			    " consumption line by line."						)
																													__snake_case				=		start_memory_tracing("transformers"						)

																							if self.args.is_tpu:
																													# tpu
																													raise NotImplementedError(
																													    "Memory Benchmarking is currently not implemented for TPU. Please disable memory benchmarking"
																													    " with `args.memory=False`"						)
																							elif self.args.is_gpu:
																													# gpu
																													if not is_pyanvml_available():
																																			logger.warning(
																																			    "py3nvml not installed, we won't log GPU memory usage. "
																																			    "Install py3nvml (pip install py3nvml) to log information about GPU."						)
																																			__snake_case				=		"N/A"
																													else:
																																			logger.info(
																																			    "Measuring total GPU usage on GPU device. Make sure to not have additional processes"
																																			    " running on the same GPU."						)
																																			# init nvml
																																			nvml.nvmlInit()
																																			func()
																																			__snake_case				=		nvml.nvmlDeviceGetHandleByIndex(self.args.device_idx						)
																																			__snake_case				=		nvml.nvmlDeviceGetMemoryInfo(SCREAMING_SNAKE_CASE						)
																																			__snake_case				=		meminfo.used
																																			__snake_case				=		Memory(SCREAMING_SNAKE_CASE						)
																																			# shutdown nvml
																																			nvml.nvmlShutdown()
																							else:
																													# cpu
																													if self.args.trace_memory_line_by_line:
																																			logger.info(
																																			    "When enabling line by line tracing, the max peak memory for CPU is inaccurate in"
																																			    " TensorFlow."						)
																																			__snake_case				=		None
																													else:
																																			__snake_case				=		measure_peak_memory_cpu(SCREAMING_SNAKE_CASE						)
																																			__snake_case				=		Memory(SCREAMING_SNAKE_CASE						) if isinstance(SCREAMING_SNAKE_CASE     ,    SCREAMING_SNAKE_CASE						) else memory_bytes
																							if self.args.trace_memory_line_by_line:
																													__snake_case				=		stop_memory_tracing(SCREAMING_SNAKE_CASE						)
																													if memory is None:
																																			__snake_case				=		summary.total
																							else:
																													__snake_case				=		None

																							return memory, summary
																	except ResourceExhaustedError as e:
																							self.print_fn(f'''Doesn\'t fit on GPU. {e}'''						)
																							return "N/A", None









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     UpperCamelCase(  _a   ):


					def __init__(						self	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Dict=1_3     ,    SCREAMING_SNAKE_CASE	:		str=7     ,    SCREAMING_SNAKE_CASE	:		Optional[int]=True     ,    SCREAMING_SNAKE_CASE	:		str=True     ,    SCREAMING_SNAKE_CASE	:		Union[str, Any]=True     ,    SCREAMING_SNAKE_CASE	:		Dict=True     ,    SCREAMING_SNAKE_CASE	:		Dict=9_9     ,    SCREAMING_SNAKE_CASE	:		str=3_2     ,    SCREAMING_SNAKE_CASE	:		Optional[int]=5     ,    SCREAMING_SNAKE_CASE	:		Dict=4     ,    SCREAMING_SNAKE_CASE	:		Optional[Any]=3_7     ,    SCREAMING_SNAKE_CASE	:		Optional[Any]="gelu"     ,    SCREAMING_SNAKE_CASE	:		Optional[int]=0.1     ,    SCREAMING_SNAKE_CASE	:		int=0.1     ,    SCREAMING_SNAKE_CASE	:		int=5_1_2     ,    SCREAMING_SNAKE_CASE	:		Optional[Any]=1_6     ,    SCREAMING_SNAKE_CASE	:		Union[str, Any]=2     ,    SCREAMING_SNAKE_CASE	:		Optional[int]=0.02     ,    SCREAMING_SNAKE_CASE	:		str=False     ,    SCREAMING_SNAKE_CASE	:		Union[str, Any]=True     ,    SCREAMING_SNAKE_CASE	:		Tuple="None"     ,    SCREAMING_SNAKE_CASE	:		List[str]=3     ,    SCREAMING_SNAKE_CASE	:		str=4     ,    SCREAMING_SNAKE_CASE	:		List[str]=None     ,    )			->	Tuple:




											'''simple docstring'''

											__snake_case				=		parent
											__snake_case				=		batch_size
											__snake_case				=		seq_length
											__snake_case				=		is_training
											__snake_case				=		use_input_mask
											__snake_case				=		use_token_type_ids
											__snake_case				=		use_labels
											__snake_case				=		vocab_size
											__snake_case				=		hidden_size
											__snake_case				=		num_hidden_layers
											__snake_case				=		num_attention_heads
											__snake_case				=		intermediate_size
											__snake_case				=		hidden_act
											__snake_case				=		hidden_dropout_prob
											__snake_case				=		attention_probs_dropout_prob
											__snake_case				=		max_position_embeddings
											__snake_case				=		type_vocab_size
											__snake_case				=		type_sequence_label_size
											__snake_case				=		initializer_range
											__snake_case				=		num_labels
											__snake_case				=		num_choices
											__snake_case				=		relative_attention
											__snake_case				=		position_biased_input
											__snake_case				=		pos_att_type
											__snake_case				=		scope


					def 							SCREAMING_SNAKE_CASE_  (						self	:		List[Any]						)			->	Dict:




											'''simple docstring'''

											__snake_case				=		ids_tensor([self.batch_size, self.seq_length]     ,    self.vocab_size						)

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

											__snake_case				=		None
											if self.use_token_type_ids:
																	__snake_case				=		ids_tensor([self.batch_size, self.seq_length]     ,    self.type_vocab_size						)

											__snake_case				=		None
											__snake_case				=		None
											__snake_case				=		None
											if self.use_labels:
																	__snake_case				=		ids_tensor([self.batch_size]     ,    self.type_sequence_label_size						)
																	__snake_case				=		ids_tensor([self.batch_size, self.seq_length]     ,    self.num_labels						)
																	__snake_case				=		ids_tensor([self.batch_size]     ,    self.num_choices						)

											__snake_case				=		self.get_config()

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


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Any						)			->	int:




											'''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 							SCREAMING_SNAKE_CASE_  (						self	:		Optional[int]     ,    SCREAMING_SNAKE_CASE	:		str						)			->	Any:




											'''simple docstring'''

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


					def 							SCREAMING_SNAKE_CASE_  (						self	:		List[Any]     ,    SCREAMING_SNAKE_CASE	:		Optional[Any]     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Optional[int]     ,    SCREAMING_SNAKE_CASE	:		List[str]     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		str						)			->	List[str]:




											'''simple docstring'''

											__snake_case				=		DebertaVaModel(config=SCREAMING_SNAKE_CASE						)
											model.to(SCREAMING_SNAKE_CASE						)
											model.eval()
											__snake_case				=		model(SCREAMING_SNAKE_CASE     ,    attention_mask=SCREAMING_SNAKE_CASE     ,    token_type_ids=SCREAMING_SNAKE_CASE						)[0]
											__snake_case				=		model(SCREAMING_SNAKE_CASE     ,    token_type_ids=SCREAMING_SNAKE_CASE						)[0]
											__snake_case				=		model(SCREAMING_SNAKE_CASE						)[0]

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


					def 							SCREAMING_SNAKE_CASE_  (						self	:		List[Any]     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Optional[int]     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Union[str, Any]     ,    SCREAMING_SNAKE_CASE	:		Any     ,    SCREAMING_SNAKE_CASE	:		Optional[Any]						)			->	str:




											'''simple docstring'''

											__snake_case				=		DebertaVaForMaskedLM(config=SCREAMING_SNAKE_CASE						)
											model.to(SCREAMING_SNAKE_CASE						)
											model.eval()
											__snake_case				=		model(SCREAMING_SNAKE_CASE     ,    attention_mask=SCREAMING_SNAKE_CASE     ,    token_type_ids=SCREAMING_SNAKE_CASE     ,    labels=SCREAMING_SNAKE_CASE						)

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


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Union[str, Any]     ,    SCREAMING_SNAKE_CASE	:		Tuple     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		Union[str, Any]     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		Union[str, Any]     ,    SCREAMING_SNAKE_CASE	:		Any     ,    SCREAMING_SNAKE_CASE	:		Tuple						)			->	int:




											'''simple docstring'''

											__snake_case				=		self.num_labels
											__snake_case				=		DebertaVaForSequenceClassification(SCREAMING_SNAKE_CASE						)
											model.to(SCREAMING_SNAKE_CASE						)
											model.eval()
											__snake_case				=		model(SCREAMING_SNAKE_CASE     ,    attention_mask=SCREAMING_SNAKE_CASE     ,    token_type_ids=SCREAMING_SNAKE_CASE     ,    labels=SCREAMING_SNAKE_CASE						)
											self.parent.assertListEqual(list(result.logits.size()						)     ,    [self.batch_size, self.num_labels]						)
											self.check_loss_output(SCREAMING_SNAKE_CASE						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Any     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Union[str, Any]     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		Optional[Any]     ,    SCREAMING_SNAKE_CASE	:		List[Any]						)			->	Union[str, Any]:




											'''simple docstring'''

											__snake_case				=		self.num_labels
											__snake_case				=		DebertaVaForTokenClassification(config=SCREAMING_SNAKE_CASE						)
											model.to(SCREAMING_SNAKE_CASE						)
											model.eval()
											__snake_case				=		model(SCREAMING_SNAKE_CASE     ,    attention_mask=SCREAMING_SNAKE_CASE     ,    token_type_ids=SCREAMING_SNAKE_CASE     ,    labels=SCREAMING_SNAKE_CASE						)
											self.parent.assertEqual(result.logits.shape     ,    (self.batch_size, self.seq_length, self.num_labels)						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Dict     ,    SCREAMING_SNAKE_CASE	:		Optional[int]     ,    SCREAMING_SNAKE_CASE	:		Dict     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		int     ,    SCREAMING_SNAKE_CASE	:		Union[str, Any]						)			->	int:




											'''simple docstring'''

											__snake_case				=		DebertaVaForQuestionAnswering(config=SCREAMING_SNAKE_CASE						)
											model.to(SCREAMING_SNAKE_CASE						)
											model.eval()
											__snake_case				=		model(
											    SCREAMING_SNAKE_CASE     ,    attention_mask=SCREAMING_SNAKE_CASE     ,    token_type_ids=SCREAMING_SNAKE_CASE     ,    start_positions=SCREAMING_SNAKE_CASE     ,    end_positions=SCREAMING_SNAKE_CASE     ,    )
											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 							SCREAMING_SNAKE_CASE_  (						self	:		Tuple     ,    SCREAMING_SNAKE_CASE	:		List[Any]     ,    SCREAMING_SNAKE_CASE	:		str     ,    SCREAMING_SNAKE_CASE	:		List[str]     ,    SCREAMING_SNAKE_CASE	:		List[str]     ,    SCREAMING_SNAKE_CASE	:		Optional[Any]     ,    SCREAMING_SNAKE_CASE	:		Any     ,    SCREAMING_SNAKE_CASE	:		Optional[int]						)			->	Union[str, Any]:




											'''simple docstring'''

											__snake_case				=		DebertaVaForMultipleChoice(config=SCREAMING_SNAKE_CASE						)
											model.to(SCREAMING_SNAKE_CASE						)
											model.eval()
											__snake_case				=		input_ids.unsqueeze(1						).expand(-1     ,    self.num_choices     ,    -1						).contiguous()
											__snake_case				=		token_type_ids.unsqueeze(1						).expand(-1     ,    self.num_choices     ,    -1						).contiguous()
											__snake_case				=		input_mask.unsqueeze(1						).expand(-1     ,    self.num_choices     ,    -1						).contiguous()
											__snake_case				=		model(
											    SCREAMING_SNAKE_CASE     ,    attention_mask=SCREAMING_SNAKE_CASE     ,    token_type_ids=SCREAMING_SNAKE_CASE     ,    labels=SCREAMING_SNAKE_CASE     ,    )
											self.parent.assertEqual(result.logits.shape     ,    (self.batch_size, self.num_choices)						)






					def 							SCREAMING_SNAKE_CASE_  (						self	:		Union[str, Any]						)			->	List[Any]:




											'''simple docstring'''

											__snake_case				=		self.prepare_config_and_inputs()
											(
											    (
											    __snake_case
											)		,					(
											    __snake_case
											)		,					(
											    __snake_case
											)		,					(
											    __snake_case
											)		,					(
											    __snake_case
											)		,					(
											    __snake_case
											)		,					(
											    __snake_case
											)		,					
											)				=		config_and_inputs
											__snake_case				=		{"input_ids": input_ids, "token_type_ids": token_type_ids, "attention_mask": input_mask}
											return config, inputs_dict






@require_torch
class     UpperCamelCase(  _a     ,							_a     ,							unittest.TestCase   ):
					snake_case_		:				Union[str, Any]										=	(
					    (
					        DebertaVaModel,
					        DebertaVaForMaskedLM,
					        DebertaVaForSequenceClassification,
					        DebertaVaForTokenClassification,
					        DebertaVaForQuestionAnswering,
					        DebertaVaForMultipleChoice,
					    )
					    if is_torch_available()
					    else ()
					)
					snake_case_		:				Optional[Any]										=	(
					    {
					        """feature-extraction""": DebertaVaModel,
					        """fill-mask""": DebertaVaForMaskedLM,
					        """question-answering""": DebertaVaForQuestionAnswering,
					        """text-classification""": DebertaVaForSequenceClassification,
					        """token-classification""": DebertaVaForTokenClassification,
					        """zero-shot""": DebertaVaForSequenceClassification,
					    }
					    if is_torch_available()
					    else {}
					)

					snake_case_		:				Dict										=	True
					snake_case_		:				Union[str, Any]										=	False
					snake_case_		:				Tuple										=	False
					snake_case_		:				List[str]										=	False
					snake_case_		:				List[Any]										=	False


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Dict						)			->	Dict:




											'''simple docstring'''

											__snake_case				=		DebertaVaModelTester(self						)
											__snake_case				=		ConfigTester(self     ,    config_class=SCREAMING_SNAKE_CASE     ,    hidden_size=3_7						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Any						)			->	Dict:




											'''simple docstring'''

											self.config_tester.run_common_tests()


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Any						)			->	str:




											'''simple docstring'''

											__snake_case				=		self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_deberta_model(*SCREAMING_SNAKE_CASE						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Union[str, Any]						)			->	str:




											'''simple docstring'''

											__snake_case				=		self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_deberta_for_sequence_classification(*SCREAMING_SNAKE_CASE						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Any						)			->	Optional[Any]:




											'''simple docstring'''

											__snake_case				=		self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_deberta_for_masked_lm(*SCREAMING_SNAKE_CASE						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Tuple						)			->	List[str]:




											'''simple docstring'''

											__snake_case				=		self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_deberta_for_question_answering(*SCREAMING_SNAKE_CASE						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		Optional[Any]						)			->	str:




											'''simple docstring'''

											__snake_case				=		self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_deberta_for_token_classification(*SCREAMING_SNAKE_CASE						)


					def 							SCREAMING_SNAKE_CASE_  (						self	:		int						)			->	Dict:




											'''simple docstring'''

											__snake_case				=		self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_deberta_for_multiple_choice(*SCREAMING_SNAKE_CASE						)






					@slow
					def 							SCREAMING_SNAKE_CASE_  (						self	:		str						)			->	Union[str, Any]:




											'''simple docstring'''

											for model_name in DEBERTA_V2_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
																	__snake_case				=		DebertaVaModel.from_pretrained(SCREAMING_SNAKE_CASE						)
																	self.assertIsNotNone(SCREAMING_SNAKE_CASE						)






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


					@unittest.skip(reason="Model not available yet"						)
					def 							SCREAMING_SNAKE_CASE_  (						self	:		Optional[int]						)			->	str:




											'''simple docstring'''

											pass






					@slow
					def 							SCREAMING_SNAKE_CASE_  (						self	:		str						)			->	Tuple:




											'''simple docstring'''

											__snake_case				=		DebertaVaModel.from_pretrained("microsoft/deberta-v2-xlarge"						)

											__snake_case				=		torch.tensor([[0, 3_1_4_1_4, 2_3_2, 3_2_8, 7_4_0, 1_1_4_0, 1_2_6_9_5, 6_9, 4_6_0_7_8, 1_5_8_8, 2]]						)
											__snake_case				=		torch.tensor([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]						)
											with torch.no_grad():
																	__snake_case				=		model(SCREAMING_SNAKE_CASE     ,    attention_mask=SCREAMING_SNAKE_CASE						)[0]
											# compare the actual values for a slice.
											__snake_case				=		torch.tensor(
											    [[[0.2356, 0.1948, 0.0369], [-0.1063, 0.3586, -0.5152], [-0.6399, -0.0259, -0.2525]]]						)
											self.assertTrue(torch.allclose(output[:, 1:4, 1:4]     ,    SCREAMING_SNAKE_CASE     ,    atol=1e-4						)     ,    f'''{output[:, 1:4, 1:4]}'''						)





