"""simple docstring"""







from collections import Counter
import datasets
import transformers
from transformers.convert_slow_tokenizer import SLOW_TO_FAST_CONVERTERS

from transformers.utils import logging

logging.set_verbosity_info()

_SCREAMING_SNAKE_CASE	:		Tuple   =   {
    name: (getattr(transformers, name), getattr(transformers, name + '''Fast''')) for name in SLOW_TO_FAST_CONVERTERS
}

_SCREAMING_SNAKE_CASE	:		Any   =   datasets.load_dataset('''xnli''', split='''test+validation''')

_SCREAMING_SNAKE_CASE	:		Optional[Any]   =   0
_SCREAMING_SNAKE_CASE	:		int   =   0
_SCREAMING_SNAKE_CASE	:		List[Any]   =   0
_SCREAMING_SNAKE_CASE	:		Optional[Any]   =   0



def       A__    (	lowercase_     :	Optional[int]      , lowercase_     :	Optional[Any]      , lowercase_     :	List[Any]      , lowercase_     :	Dict						)  ->							List[Any]:
   if spm_diff == list(reversed(lowercase_						)						):
      # AAA -> AA+A vs A+AA case.
      return True
   elif len(lowercase_						) == len(lowercase_						) and fast.decode(lowercase_						) == fast.decode(lowercase_						):
      # Second order OK
      # Barrich -> Barr + ich vs Bar + rich
      return True
   __lowerCamelCase    		=					slow.encode(slow.decode(lowercase_						)						)
   __lowerCamelCase    		=					fast.encode(fast.decode(lowercase_						)						)
   if spm_reencoded != spm_diff and spm_reencoded == tok_reencoded:
      # Type 3 error.
      # Snehagatha ->
      #       Sne, h, aga, th, a
      #       Sne, ha, gat, ha
      # Encoding the wrong with sp does not even recover what spm gave us
      # It fits tokenizer however...
      return True
   return False



def       A__    (	lowercase_     :	Dict      , lowercase_     :	str      , lowercase_     :	Union[str, Any]						)  ->							Dict:
   __lowerCamelCase    		=					fast.encode_plus(lowercase_						)[0]
   __lowerCamelCase    		=					enc.offsets
   __lowerCamelCase		,__lowerCamelCase    		=					offsets[idx], offsets[idx - 1]
   if curr is not None and line[curr[0] : curr[1]] == "\u200f":
      return True
   if prev is not None and line[prev[0] : prev[1]] == "\u200f":
      return True



def       A__    (	lowercase_     :	Union[str, Any]      , lowercase_     :	Optional[Any]      , lowercase_     :	Union[str, Any]      , lowercase_     :	Union[str, Any]      , lowercase_     :	Any						)  ->							Any:
   # Encoding can be the same with same result AAA -> A + AA vs AA + A
   # We can check that we use at least exactly the same number of tokens.
   for i, (spm_id, tok_id) in enumerate(zip(lowercase_      , lowercase_						)						):
      if spm_id != tok_id:
         break
   __lowerCamelCase    		=					i
   for i, (spm_id, tok_id) in enumerate(zip(reversed(lowercase_						)      , reversed(lowercase_						)						)						):
      if spm_id != tok_id:
         break
   __lowerCamelCase    		=					len(lowercase_						) - i

   __lowerCamelCase    		=					spm_ids[first:last]
   __lowerCamelCase    		=					tok_ids[first:last]

   if check_diff(lowercase_      , lowercase_      , lowercase_      , lowercase_						):
      return True

   if check_LTR_mark(lowercase_      , lowercase_      , lowercase_						):
      return True

   if last - first > 5:
      # We might have twice a single problem, attempt to subdivide the disjointed tokens into smaller problems
      __lowerCamelCase    		=					Counter(spm_ids[first:last]						)
      __lowerCamelCase    		=					Counter(tok_ids[first:last]						)

      __lowerCamelCase    		=					{spm_ for (spm_, si) in spms.items() if toks.get(spm_      , 0						) == si}
      __lowerCamelCase    		=					3
      for i in range(last - first - min_width						):
         if all(spm_ids[first + i + j] in removable_tokens for j in range(lowercase_						)						):
            __lowerCamelCase    		=					[
                k
                for k in range(last - first - min_width						)
                if tok_ids[first + k : first + k + min_width] == spm_ids[first + i : first + i + min_width]
            ]
            for j in possible_matches:
               if check_diff(spm_ids[first : first + i]      , tok_ids[first : first + j]      , lowercase_      , lowercase_						) and check_details(
                   lowercase_      , spm_ids[first + i : last]      , tok_ids[first + j : last]      , lowercase_      , lowercase_      , ):
                  return True

   print(F'''Spm: {[fast.decode([spm_ids[i]]						) for i in range(lowercase_      , lowercase_						)]}'''						)
   try:
      print(F'''Tok: {[fast.decode([tok_ids[i]]						) for i in range(lowercase_      , lowercase_						)]}'''						)
   except Exception:
      pass

   __lowerCamelCase    		=					fast.decode(spm_ids[:first]						)
   __lowerCamelCase    		=					fast.decode(spm_ids[last:]						)
   __lowerCamelCase    		=					fast.decode(spm_ids[first:last]						)
   print()
   print(lowercase_						)
   return False



def       A__    (	lowercase_     :	str      , lowercase_     :	Dict      , lowercase_     :	Union[str, Any]						)  ->							Any:
   global perfect
   global imperfect
   global wrong
   global total

   __lowerCamelCase    		=					slow.encode(lowercase_						)
   __lowerCamelCase    		=					fast.encode(lowercase_						)

   __lowerCamelCase    		=					False
   total += 1

   if slow_ids != fast_ids:
      if check_details(lowercase_      , lowercase_      , lowercase_      , lowercase_      , lowercase_						):
         __lowerCamelCase    		=					True
         imperfect += 1
      else:
         wrong += 1
   else:
      perfect += 1

   if total % 10000 == 0:
      print(F'''({perfect} / {imperfect} / {wrong} ----- {perfect + imperfect + wrong})'''						)

   if skip_assert:
      return

   assert (
       slow_ids == fast_ids
   ), F'''line {text} : \n\n{slow_ids}\n{fast_ids}\n\n{slow.tokenize(lowercase_						)}\n{fast.tokenize(lowercase_						)}'''



def       A__    (	lowercase_     :	Union[str, Any]      , lowercase_     :	Tuple						)  ->							Tuple:
   global batch_total
   for i in range(len(lowercase_						)						):
      # premise, all languages
      for text in dataset[i]["premise"].values():
         test_string(lowercase_      , lowercase_      , lowercase_						)

      # hypothesis, all languages
      for text in dataset[i]["hypothesis"]["translation"]:
         test_string(lowercase_      , lowercase_      , lowercase_						)


if __name__ == "__main__":
     for name, (slow_class, fast_class) in TOKENIZER_CLASSES.items():
          _SCREAMING_SNAKE_CASE	:		List[str]   =   list(slow_class.max_model_input_sizes.keys())
          for checkpoint in checkpoint_names:
               _SCREAMING_SNAKE_CASE	:		Optional[Any]   =   0
               _SCREAMING_SNAKE_CASE	:		Union[str, Any]   =   0
               _SCREAMING_SNAKE_CASE	:		Optional[int]   =   0
               _SCREAMING_SNAKE_CASE	:		List[str]   =   0

               print(F"========================== Checking {name}: {checkpoint} ==========================")
               _SCREAMING_SNAKE_CASE	:		Union[str, Any]   =   slow_class.from_pretrained(checkpoint, force_download=True)
               _SCREAMING_SNAKE_CASE	:		Dict   =   fast_class.from_pretrained(checkpoint, force_download=True)
               test_tokenizer(slow, fast)
               print(F"Accuracy {perfect * 1_0_0 / total:.2f}")














"""simple docstring"""



import unittest

from transformers import ElectraConfig, is_torch_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_torch, slow, torch_device

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


if is_torch_available():
    import torch

    from transformers import (
        MODEL_FOR_PRETRAINING_MAPPING,
        ElectraForCausalLM,
        ElectraForMaskedLM,
        ElectraForMultipleChoice,
        ElectraForPreTraining,
        ElectraForQuestionAnswering,
        ElectraForSequenceClassification,
        ElectraForTokenClassification,
        ElectraModel,
    )
    from transformers.models.electra.modeling_electra import ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST

class 			a	:







    def __init__(     self				,						_lowerCamelCase				,						_lowerCamelCase=1_3				,						_lowerCamelCase=7				,						_lowerCamelCase=True				,						_lowerCamelCase=True				,						_lowerCamelCase=True				,						_lowerCamelCase=True				,						_lowerCamelCase=9_9				,						_lowerCamelCase=3_2				,						_lowerCamelCase=5				,						_lowerCamelCase=4				,						_lowerCamelCase=3_7				,						_lowerCamelCase="gelu"				,						_lowerCamelCase=0.1				,						_lowerCamelCase=0.1				,						_lowerCamelCase=5_1_2				,						_lowerCamelCase=1_6				,						_lowerCamelCase=2				,						_lowerCamelCase=0.0_2				,						_lowerCamelCase=3				,						_lowerCamelCase=4				,						_lowerCamelCase=None				,						):
      lowercase				       =			parent
      lowercase				       =			batch_size
      lowercase				       =			seq_length
      lowercase				       =			is_training
      lowercase				       =			use_input_mask
      lowercase				       =			use_token_type_ids
      lowercase				       =			use_labels
      lowercase				       =			vocab_size
      lowercase				       =			hidden_size
      lowercase				       =			num_hidden_layers
      lowercase				       =			num_attention_heads
      lowercase				       =			intermediate_size
      lowercase				       =			hidden_act
      lowercase				       =			hidden_dropout_prob
      lowercase				       =			attention_probs_dropout_prob
      lowercase				       =			max_position_embeddings
      lowercase				       =			type_vocab_size
      lowercase				       =			type_sequence_label_size
      lowercase				       =			initializer_range
      lowercase				       =			num_labels
      lowercase				       =			num_choices
      lowercase				       =			scope







    def      UpperCamelCase_ (     self			):
      lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						self.vocab_size			)

      lowercase				       =			None
      if self.use_input_mask:
        lowercase				       =			random_attention_mask([self.batch_size, self.seq_length]			)

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

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

      lowercase				       =			self.get_config()

      return (
          config,
          input_ids,
          token_type_ids,
          input_mask,
          sequence_labels,
          token_labels,
          choice_labels,
          fake_token_labels,
      )







    def      UpperCamelCase_ (     self			):
      return ElectraConfig(
          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				,						is_decoder=_lowerCamelCase				,						initializer_range=self.initializer_range				,						)







    def      UpperCamelCase_ (     self			):
      (
          (
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	
      )				       =			self.prepare_config_and_inputs()

      lowercase				       =			True
      lowercase				       =			floats_tensor([self.batch_size, self.seq_length, self.hidden_size]			)
      lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						vocab_size=2			)

      return (
          config,
          input_ids,
          token_type_ids,
          input_mask,
          sequence_labels,
          token_labels,
          choice_labels,
          encoder_hidden_states,
          encoder_attention_mask,
      )







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			ElectraModel(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase			)
      lowercase				       =			model(_lowerCamelCase				,						token_type_ids=_lowerCamelCase			)
      lowercase				       =			model(_lowerCamelCase			)
      self.parent.assertEqual(result.last_hidden_state.shape				,						(self.batch_size, self.seq_length, self.hidden_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			True
      lowercase				       =			ElectraModel(_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(
          _lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						encoder_hidden_states=_lowerCamelCase				,						encoder_attention_mask=_lowerCamelCase				,						)
      lowercase				       =			model(
          _lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						encoder_hidden_states=_lowerCamelCase				,						)
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase			)
      self.parent.assertEqual(result.last_hidden_state.shape				,						(self.batch_size, self.seq_length, self.hidden_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			ElectraForMaskedLM(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length, self.vocab_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			ElectraForCausalLM(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length, self.vocab_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			self.num_labels
      lowercase				       =			ElectraForTokenClassification(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length, self.num_labels)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			self.num_labels
      lowercase				       =			ElectraForPreTraining(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			self.num_labels
      lowercase				       =			ElectraForSequenceClassification(_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.num_labels)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			ElectraForQuestionAnswering(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(
          _lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						start_positions=_lowerCamelCase				,						end_positions=_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      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			self.num_choices
      lowercase				       =			ElectraForMultipleChoice(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			input_ids.unsqueeze(1			).expand(-1				,						self.num_choices				,						-1			).contiguous()
      lowercase				       =			token_type_ids.unsqueeze(1			).expand(-1				,						self.num_choices				,						-1			).contiguous()
      lowercase				       =			input_mask.unsqueeze(1			).expand(-1				,						self.num_choices				,						-1			).contiguous()
      lowercase				       =			model(
          _lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase				,						)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.num_choices)			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.prepare_config_and_inputs()
      (
          (
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	
      )				       =			config_and_inputs
      lowercase				       =			{'input_ids': input_ids, 'token_type_ids': token_type_ids, 'attention_mask': input_mask}
      return config, inputs_dict


@require_torch
class 			a	(  a_,							a_,							unittest.TestCase      ):
    UpperCAmelCase_					:	List[str]      	=(
        (
            ElectraModel,
            ElectraForPreTraining,
            ElectraForMaskedLM,
            ElectraForCausalLM,
            ElectraForMultipleChoice,
            ElectraForTokenClassification,
            ElectraForSequenceClassification,
            ElectraForQuestionAnswering,
        )
        if is_torch_available()
        else ()
    )
    UpperCAmelCase_					:	Optional[Any]      	=(
        {
            "feature-extraction": ElectraModel,
            "fill-mask": ElectraForMaskedLM,
            "question-answering": ElectraForQuestionAnswering,
            "text-classification": ElectraForSequenceClassification,
            "text-generation": ElectraForCausalLM,
            "token-classification": ElectraForTokenClassification,
            "zero-shot": ElectraForSequenceClassification,
        }
        if is_torch_available()
        else {}
    )
    UpperCAmelCase_					:	Tuple      	=True







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase=False			):
      lowercase				       =			super()._prepare_for_class(_lowerCamelCase				,						_lowerCamelCase				,						return_labels=_lowerCamelCase			)

      if return_labels:
        if model_class in get_values(_lowerCamelCase			):
          lowercase				       =			torch.zeros(
              (self.model_tester.batch_size, self.model_tester.seq_length)				,						dtype=torch.long				,						device=_lowerCamelCase			)
      return inputs_dict







    def      UpperCamelCase_ (     self			):
      lowercase				       =			ElectraModelTester(self			)
      lowercase				       =			ConfigTester(self				,						config_class=_lowerCamelCase				,						hidden_size=3_7			)







    def      UpperCamelCase_ (     self			):
      self.config_tester.run_common_tests()







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_model(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs_for_decoder()
      self.model_tester.create_and_check_electra_model_as_decoder(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      for type in ["absolute", "relative_key", "relative_key_query"]:
        lowercase				       =			type
        self.model_tester.create_and_check_electra_model(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_masked_lm(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_token_classification(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_pretraining(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_sequence_classification(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_question_answering(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_multiple_choice(*_lowerCamelCase			)







    @slow
    def      UpperCamelCase_ (     self			):
      for model_name in ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
        lowercase				       =			ElectraModel.from_pretrained(_lowerCamelCase			)
        self.assertIsNotNone(_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs_for_decoder()
      self.model_tester.create_and_check_electra_for_causal_lm(*_lowerCamelCase			)


@require_torch
class 			a	(  unittest.TestCase      ):







    @slow
    def      UpperCamelCase_ (     self			):
      lowercase				       =			ElectraModel.from_pretrained('google/electra-small-discriminator'			)
      lowercase				       =			torch.tensor([[0, 3_4_5, 2_3_2, 3_2_8, 7_4_0, 1_4_0, 1_6_9_5, 6_9, 6_0_7_8, 1_5_8_8, 2]]			)
      lowercase				       =			torch.tensor([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]			)
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase			)[0]
      lowercase				       =			torch.Size((1, 1_1, 2_5_6)			)
      self.assertEqual(output.shape				,						_lowerCamelCase			)
      lowercase				       =			torch.tensor(
          [[[0.4_4_7_1, 0.6_8_2_1, -0.3_2_6_5], [0.4_6_2_7, 0.5_2_5_5, -0.3_6_6_8], [0.4_5_3_2, 0.3_3_1_3, -0.4_3_4_4]]]			)

      self.assertTrue(torch.allclose(output[:, 1:4, 1:4]				,						_lowerCamelCase				,						atol=1e-4			)			)


