

from __future__ import annotations

import unittest

from transformers import DebertaVaConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
						import tensorflow as tf

						from transformers import (
						    TFDebertaVaForMaskedLM,
						    TFDebertaVaForQuestionAnswering,
						    TFDebertaVaForSequenceClassification,
						    TFDebertaVaForTokenClassification,
						    TFDebertaVaModel,
						)



class   __lowercase    :




			"""simple docstring"""







			def __init__(			self  :					Optional[int]       ,						lowerCAmelCase__  :					List[str]       ,						lowerCAmelCase__  :					List[Any]=13       ,						lowerCAmelCase__  :					List[Any]=7       ,						lowerCAmelCase__  :					int=True       ,						lowerCAmelCase__  :					Tuple=True       ,						lowerCAmelCase__  :					Optional[int]=True       ,						lowerCAmelCase__  :					Optional[Any]=True       ,						lowerCAmelCase__  :					Any=99       ,						lowerCAmelCase__  :					Dict=32       ,						lowerCAmelCase__  :					Any=2       ,						lowerCAmelCase__  :					str=4       ,						lowerCAmelCase__  :					Optional[Any]=37       ,						lowerCAmelCase__  :					Any="gelu"       ,						lowerCAmelCase__  :					str=0.1       ,						lowerCAmelCase__  :					Any=0.1       ,						lowerCAmelCase__  :					Union[str, Any]=512       ,						lowerCAmelCase__  :					List[str]=16       ,						lowerCAmelCase__  :					Optional[Any]=2       ,						lowerCAmelCase__  :					Tuple=0.02       ,						lowerCAmelCase__  :					Tuple=False       ,						lowerCAmelCase__  :					Union[str, Any]=True       ,						lowerCAmelCase__  :					Optional[int]="None"       ,						lowerCAmelCase__  :					str=3       ,						lowerCAmelCase__  :					Optional[int]=4       ,						lowerCAmelCase__  :					Optional[int]=None       ,						):
									SCREAMING_SNAKE_CASE_:			Optional[int]   		=	parent
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	batch_size
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	seq_length
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	is_training
									SCREAMING_SNAKE_CASE_:			List[str]   		=	use_input_mask
									SCREAMING_SNAKE_CASE_:			int   		=	use_token_type_ids
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	use_labels
									SCREAMING_SNAKE_CASE_:			int   		=	vocab_size
									SCREAMING_SNAKE_CASE_:			Any   		=	hidden_size
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	num_hidden_layers
									SCREAMING_SNAKE_CASE_:			Dict   		=	num_attention_heads
									SCREAMING_SNAKE_CASE_:			Dict   		=	intermediate_size
									SCREAMING_SNAKE_CASE_:			str   		=	hidden_act
									SCREAMING_SNAKE_CASE_:			Union[str, Any]   		=	hidden_dropout_prob
									SCREAMING_SNAKE_CASE_:			Tuple   		=	attention_probs_dropout_prob
									SCREAMING_SNAKE_CASE_:			int   		=	max_position_embeddings
									SCREAMING_SNAKE_CASE_:			Tuple   		=	type_vocab_size
									SCREAMING_SNAKE_CASE_:			Tuple   		=	type_sequence_label_size
									SCREAMING_SNAKE_CASE_:			Dict   		=	initializer_range
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	num_labels
									SCREAMING_SNAKE_CASE_:			str   		=	num_choices
									SCREAMING_SNAKE_CASE_:			str   		=	relative_attention
									SCREAMING_SNAKE_CASE_:			int   		=	position_biased_input
									SCREAMING_SNAKE_CASE_:			Optional[int]   		=	pos_att_type
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	scope



			def 	_SCREAMING_SNAKE_CASE      (			self  :					str):
									SCREAMING_SNAKE_CASE_:			Tuple   		=	ids_tensor([self.batch_size, self.seq_length]       ,						self.vocab_size)

									SCREAMING_SNAKE_CASE_:			Any   		=	None
									if self.use_input_mask:
															SCREAMING_SNAKE_CASE_:			Union[str, Any]   		=	random_attention_mask([self.batch_size, self.seq_length])

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

									SCREAMING_SNAKE_CASE_:			Optional[Any]   		=	None
									SCREAMING_SNAKE_CASE_:			str   		=	None
									SCREAMING_SNAKE_CASE_:			Any   		=	None
									if self.use_labels:
															SCREAMING_SNAKE_CASE_:			Dict   		=	ids_tensor([self.batch_size]       ,						self.type_sequence_label_size)
															SCREAMING_SNAKE_CASE_:			Union[str, Any]   		=	ids_tensor([self.batch_size, self.seq_length]       ,						self.num_labels)

									SCREAMING_SNAKE_CASE_:			str   		=	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       ,						relative_attention=self.relative_attention       ,						position_biased_input=self.position_biased_input       ,						initializer_range=self.initializer_range       ,						return_dict=lowerCAmelCase__       ,						)

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



			def 	_SCREAMING_SNAKE_CASE      (			self  :					List[str]       ,						lowerCAmelCase__  :					Any       ,						lowerCAmelCase__  :					List[Any]       ,						lowerCAmelCase__  :					List[str]       ,						lowerCAmelCase__  :					Optional[Any]       ,						lowerCAmelCase__  :					Any       ,						lowerCAmelCase__  :					Any       ,						lowerCAmelCase__  :					List[Any]):
									SCREAMING_SNAKE_CASE_:			List[str]   		=	TFDebertaVaModel(config=lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_:			List[str]   		=	{"input_ids": input_ids, "attention_mask": input_mask, "token_type_ids": token_type_ids}

									SCREAMING_SNAKE_CASE_:			Union[str, Any]   		=	[input_ids, input_mask]
									SCREAMING_SNAKE_CASE_:			List[str]   		=	model(lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_:			Tuple   		=	model(lowerCAmelCase__)

									self.parent.assertEqual(result.last_hidden_state.shape       ,						(self.batch_size, self.seq_length, self.hidden_size))



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Union[str, Any]       ,						lowerCAmelCase__  :					Union[str, Any]       ,						lowerCAmelCase__  :					str       ,						lowerCAmelCase__  :					int       ,						lowerCAmelCase__  :					Union[str, Any]       ,						lowerCAmelCase__  :					Union[str, Any]       ,						lowerCAmelCase__  :					Any       ,						lowerCAmelCase__  :					List[Any]):
									SCREAMING_SNAKE_CASE_:			Optional[Any]   		=	TFDebertaVaForMaskedLM(config=lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_:			Tuple   		=	{
									    "input_ids": input_ids,
									    "attention_mask": input_mask,
									    "token_type_ids": token_type_ids,
									}
									SCREAMING_SNAKE_CASE_:			List[str]   		=	model(lowerCAmelCase__)
									self.parent.assertEqual(result.logits.shape       ,						(self.batch_size, self.seq_length, self.vocab_size))



			def 	_SCREAMING_SNAKE_CASE      (			self  :					List[Any]       ,						lowerCAmelCase__  :					Tuple       ,						lowerCAmelCase__  :					List[str]       ,						lowerCAmelCase__  :					List[str]       ,						lowerCAmelCase__  :					List[Any]       ,						lowerCAmelCase__  :					int       ,						lowerCAmelCase__  :					Dict       ,						lowerCAmelCase__  :					Optional[Any]):
									SCREAMING_SNAKE_CASE_:			Optional[int]   		=	self.num_labels
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	TFDebertaVaForSequenceClassification(config=lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_:			Dict   		=	{
									    "input_ids": input_ids,
									    "attention_mask": input_mask,
									    "token_type_ids": token_type_ids,
									}

									SCREAMING_SNAKE_CASE_:			Tuple   		=	model(lowerCAmelCase__)
									self.parent.assertEqual(result.logits.shape       ,						(self.batch_size, self.num_labels))



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Dict       ,						lowerCAmelCase__  :					Any       ,						lowerCAmelCase__  :					List[Any]       ,						lowerCAmelCase__  :					Dict       ,						lowerCAmelCase__  :					Tuple       ,						lowerCAmelCase__  :					Optional[Any]       ,						lowerCAmelCase__  :					Optional[int]       ,						lowerCAmelCase__  :					Tuple):
									SCREAMING_SNAKE_CASE_:			str   		=	self.num_labels
									SCREAMING_SNAKE_CASE_:			str   		=	TFDebertaVaForTokenClassification(config=lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_:			Any   		=	{
									    "input_ids": input_ids,
									    "attention_mask": input_mask,
									    "token_type_ids": token_type_ids,
									}
									SCREAMING_SNAKE_CASE_:			List[str]   		=	model(lowerCAmelCase__)
									self.parent.assertEqual(result.logits.shape       ,						(self.batch_size, self.seq_length, self.num_labels))



			def 	_SCREAMING_SNAKE_CASE      (			self  :					str       ,						lowerCAmelCase__  :					Any       ,						lowerCAmelCase__  :					int       ,						lowerCAmelCase__  :					Dict       ,						lowerCAmelCase__  :					Union[str, Any]       ,						lowerCAmelCase__  :					List[Any]       ,						lowerCAmelCase__  :					str       ,						lowerCAmelCase__  :					Optional[Any]):
									SCREAMING_SNAKE_CASE_:			List[str]   		=	TFDebertaVaForQuestionAnswering(config=lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_:			str   		=	{
									    "input_ids": input_ids,
									    "attention_mask": input_mask,
									    "token_type_ids": token_type_ids,
									}

									SCREAMING_SNAKE_CASE_:			str   		=	model(lowerCAmelCase__)
									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  :					List[str]):
									SCREAMING_SNAKE_CASE_:			Union[str, Any]   		=	self.prepare_config_and_inputs()
									(
									    SCREAMING_SNAKE_CASE_   
									):			List[Any]   		=	config_and_inputs
									SCREAMING_SNAKE_CASE_:			Union[str, Any]   		=	{"input_ids": input_ids, "token_type_ids": token_type_ids, "attention_mask": input_mask}
									return config, inputs_dict







@require_tf
class   __lowercase    (			UpperCAmelCase_		,	UpperCAmelCase_		,	unittest.TestCase     ):




			"""simple docstring"""







			_UpperCAmelCase       :							Optional[int]      							=					(
			    (
			        TFDebertaVaModel,
			        TFDebertaVaForMaskedLM,
			        TFDebertaVaForQuestionAnswering,
			        TFDebertaVaForSequenceClassification,
			        TFDebertaVaForTokenClassification,
			    )
			    if is_tf_available()
			    else ()
			)
			_UpperCAmelCase       :							Any      							=					(
			    {
			        '''feature-extraction''': TFDebertaVaModel,
			        '''fill-mask''': TFDebertaVaForMaskedLM,
			        '''question-answering''': TFDebertaVaForQuestionAnswering,
			        '''text-classification''': TFDebertaVaForSequenceClassification,
			        '''token-classification''': TFDebertaVaForTokenClassification,
			        '''zero-shot''': TFDebertaVaForSequenceClassification,
			    }
			    if is_tf_available()
			    else {}
			)

			_UpperCAmelCase       :							str      							=					False
			_UpperCAmelCase       :							List[Any]      							=					False



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Optional[int]):
									SCREAMING_SNAKE_CASE_:			Tuple   		=	TFDebertaVaModelTester(self)
									SCREAMING_SNAKE_CASE_:			Union[str, Any]   		=	ConfigTester(self       ,						config_class=lowerCAmelCase__       ,						hidden_size=37)



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Any):
									self.config_tester.run_common_tests()



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Dict):
									SCREAMING_SNAKE_CASE_:			Optional[Any]   		=	self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_model(*lowerCAmelCase__)



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Tuple):
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_masked_lm(*lowerCAmelCase__)



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Dict):
									SCREAMING_SNAKE_CASE_:			int   		=	self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_question_answering(*lowerCAmelCase__)



			def 	_SCREAMING_SNAKE_CASE      (			self  :					List[str]):
									SCREAMING_SNAKE_CASE_:			List[str]   		=	self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_sequence_classification(*lowerCAmelCase__)



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Tuple):
									SCREAMING_SNAKE_CASE_:			Optional[Any]   		=	self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_for_token_classification(*lowerCAmelCase__)




			@slow
			def 	_SCREAMING_SNAKE_CASE      (			self  :					Dict):
									SCREAMING_SNAKE_CASE_:			str   		=	TFDebertaVaModel.from_pretrained("kamalkraj/deberta-v2-xlarge")
									self.assertIsNotNone(lowerCAmelCase__)







@require_tf
class   __lowercase    (			unittest.TestCase     ):




			"""simple docstring"""







			@unittest.skip(reason="Model not available yet")
			def 	_SCREAMING_SNAKE_CASE      (			self  :					List[Any]):
									pass




			@slow
			def 	_SCREAMING_SNAKE_CASE      (			self  :					Union[str, Any]):
									SCREAMING_SNAKE_CASE_:			int   		=	TFDebertaVaModel.from_pretrained("kamalkraj/deberta-v2-xlarge")
									SCREAMING_SNAKE_CASE_:			Dict   		=	tf.constant([[0, 3_1414, 232, 328, 740, 1140, 1_2695, 69, 4_6078, 1588, 2]])
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	tf.constant([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
									SCREAMING_SNAKE_CASE_:			List[Any]   		=	model(lowerCAmelCase__       ,						attention_mask=lowerCAmelCase__)[0]

									SCREAMING_SNAKE_CASE_:			Optional[Any]   		=	tf.constant(
									    [[[0.2356, 0.1948, 0.0369], [-0.1063, 0.3586, -0.5152], [-0.6399, -0.0259, -0.2525]]])
									tf.debugging.assert_near(output[:, 1:4, 1:4]       ,						lowerCAmelCase__       ,						atol=1E-4)









import json
from typing import List, Optional, Tuple

from tokenizers import normalizers

from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import logging
from .tokenization_convbert import ConvBertTokenizer


lowerCAmelCase							:  Any            =						logging.get_logger(__name__)

lowerCAmelCase							:  Dict            =						{"""vocab_file""": """vocab.txt"""}

lowerCAmelCase							:  List[str]            =						{
    """vocab_file""": {
        """YituTech/conv-bert-base""": """https://huggingface.co/YituTech/conv-bert-base/resolve/main/vocab.txt""",
        """YituTech/conv-bert-medium-small""": (
            """https://huggingface.co/YituTech/conv-bert-medium-small/resolve/main/vocab.txt"""
        ),
        """YituTech/conv-bert-small""": """https://huggingface.co/YituTech/conv-bert-small/resolve/main/vocab.txt""",
    }
}

lowerCAmelCase							:  List[Any]            =						{
    """YituTech/conv-bert-base""": 512,
    """YituTech/conv-bert-medium-small""": 512,
    """YituTech/conv-bert-small""": 512,
}


lowerCAmelCase							:  Tuple            =						{
    """YituTech/conv-bert-base""": {"""do_lower_case""": True},
    """YituTech/conv-bert-medium-small""": {"""do_lower_case""": True},
    """YituTech/conv-bert-small""": {"""do_lower_case""": True},
}



class   __lowercase    (			UpperCAmelCase_     ):




			"""simple docstring"""







			_UpperCAmelCase       :							str      							=					VOCAB_FILES_NAMES
			_UpperCAmelCase       :							List[str]      							=					PRETRAINED_VOCAB_FILES_MAP
			_UpperCAmelCase       :							List[Any]      							=					PRETRAINED_INIT_CONFIGURATION
			_UpperCAmelCase       :							Optional[Any]      							=					PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
			_UpperCAmelCase       :							Dict      							=					ConvBertTokenizer



			def __init__(			self  :					Optional[Any]       ,						lowerCAmelCase__  :					Optional[int]=None       ,						lowerCAmelCase__  :					List[str]=None       ,						lowerCAmelCase__  :					str=True       ,						lowerCAmelCase__  :					Any="[UNK]"       ,						lowerCAmelCase__  :					Optional[Any]="[SEP]"       ,						lowerCAmelCase__  :					Any="[PAD]"       ,						lowerCAmelCase__  :					Dict="[CLS]"       ,						lowerCAmelCase__  :					Dict="[MASK]"       ,						lowerCAmelCase__  :					Tuple=True       ,						lowerCAmelCase__  :					str=None       ,						**lowerCAmelCase__  :					Dict       ,						):
									super().__init__(
									    lowerCAmelCase__       ,						tokenizer_file=lowerCAmelCase__       ,						do_lower_case=lowerCAmelCase__       ,						unk_token=lowerCAmelCase__       ,						sep_token=lowerCAmelCase__       ,						pad_token=lowerCAmelCase__       ,						cls_token=lowerCAmelCase__       ,						mask_token=lowerCAmelCase__       ,						tokenize_chinese_chars=lowerCAmelCase__       ,						strip_accents=lowerCAmelCase__       ,						**lowerCAmelCase__       ,						)

									SCREAMING_SNAKE_CASE_:			List[str]  		=	json.loads(self.backend_tokenizer.normalizer.__getstate__())
									if (
									    normalizer_state.get("lowercase"       ,						lowerCAmelCase__) != do_lower_case
									    or normalizer_state.get("strip_accents"       ,						lowerCAmelCase__) != strip_accents
									    or normalizer_state.get("handle_chinese_chars"       ,						lowerCAmelCase__) != tokenize_chinese_chars
									):
															SCREAMING_SNAKE_CASE_:			Optional[int]  		=	getattr(lowerCAmelCase__       ,						normalizer_state.pop("type"))
															SCREAMING_SNAKE_CASE_:			Optional[Any]  		=	do_lower_case
															SCREAMING_SNAKE_CASE_:			List[str]  		=	strip_accents
															SCREAMING_SNAKE_CASE_:			Optional[Any]  		=	tokenize_chinese_chars
															SCREAMING_SNAKE_CASE_:			Optional[int]  		=	normalizer_class(**lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_:			Optional[int]  		=	do_lower_case



			def 	_SCREAMING_SNAKE_CASE      (			self  :					str       ,						lowerCAmelCase__  :					Optional[int]       ,						lowerCAmelCase__  :					Union[str, Any]=None):
									SCREAMING_SNAKE_CASE_:			List[str]  		=	[self.cls_token_id] + token_ids_a + [self.sep_token_id]

									if token_ids_a:
															output += token_ids_a + [self.sep_token_id]

									return output



			def 	_SCREAMING_SNAKE_CASE      (			self  :					Optional[Any]       ,						lowerCAmelCase__  :					List[int]       ,						lowerCAmelCase__  :					Optional[List[int]] = None):
									SCREAMING_SNAKE_CASE_:			Optional[int]  		=	[self.sep_token_id]
									SCREAMING_SNAKE_CASE_:			int  		=	[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) * [0] + len(token_ids_a + sep) * [1]




			def 	_SCREAMING_SNAKE_CASE      (			self  :					List[Any]       ,						lowerCAmelCase__  :					str       ,						lowerCAmelCase__  :					Optional[str] = None):
									SCREAMING_SNAKE_CASE_:			Any  		=	self._tokenizer.model.save(lowerCAmelCase__       ,						name=lowerCAmelCase__)
									return tuple(lowerCAmelCase__)






