






import unittest

from transformers import AlbertConfig, 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, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
   import torch

   from transformers import (
       MODEL_FOR_PRETRAINING_MAPPING,
       AlbertForMaskedLM,
       AlbertForMultipleChoice,
       AlbertForPreTraining,
       AlbertForQuestionAnswering,
       AlbertForSequenceClassification,
       AlbertForTokenClassification,
       AlbertModel,
   )
   from transformers.models.albert.modeling_albert import ALBERT_PRETRAINED_MODEL_ARCHIVE_LIST




class     _lowerCAmelCase:





       """simple docstring"""







       def __init__( self  ,      _lowerCamelCase  ,      _lowerCamelCase=1_3  ,      _lowerCamelCase=7  ,      _lowerCamelCase=True  ,      _lowerCamelCase=True  ,      _lowerCamelCase=True  ,      _lowerCamelCase=True  ,      _lowerCamelCase=9_9  ,      _lowerCamelCase=1_6  ,      _lowerCamelCase=3_6  ,      _lowerCamelCase=6  ,      _lowerCamelCase=6  ,      _lowerCamelCase=6  ,      _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  ,      ):
         UpperCamelCase_: Any   				=    parent
         UpperCamelCase_: List[str]   				=    batch_size
         UpperCamelCase_: Optional[Any]   				=    seq_length
         UpperCamelCase_: Any   				=    is_training
         UpperCamelCase_: Union[str, Any]   				=    use_input_mask
         UpperCamelCase_: List[Any]   				=    use_token_type_ids
         UpperCamelCase_: Union[str, Any]   				=    use_labels
         UpperCamelCase_: int   				=    vocab_size
         UpperCamelCase_: Optional[int]   				=    embedding_size
         UpperCamelCase_: Tuple   				=    hidden_size
         UpperCamelCase_: Optional[Any]   				=    num_hidden_layers
         UpperCamelCase_: int   				=    num_hidden_groups
         UpperCamelCase_: Tuple   				=    num_attention_heads
         UpperCamelCase_: Optional[int]   				=    intermediate_size
         UpperCamelCase_: Tuple   				=    hidden_act
         UpperCamelCase_: Tuple   				=    hidden_dropout_prob
         UpperCamelCase_: int   				=    attention_probs_dropout_prob
         UpperCamelCase_: Optional[Any]   				=    max_position_embeddings
         UpperCamelCase_: Any   				=    type_vocab_size
         UpperCamelCase_: int   				=    type_sequence_label_size
         UpperCamelCase_: Tuple   				=    initializer_range
         UpperCamelCase_: List[str]   				=    num_labels
         UpperCamelCase_: List[Any]   				=    num_choices
         UpperCamelCase_: List[str]   				=    scope





       def       _a   ( self							):
         UpperCamelCase_: List[Any]   				=    ids_tensor([self.batch_size, self.seq_length]  ,      self.vocab_size							)

         UpperCamelCase_: Dict   				=    None
         if self.use_input_mask:
           UpperCamelCase_: Optional[int]   				=    random_attention_mask([self.batch_size, self.seq_length]							)

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

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

         UpperCamelCase_: Dict   				=    self.get_config()

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





       def       _a   ( self							):
         return AlbertConfig(
             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  ,      num_hidden_groups=self.num_hidden_groups  ,      )





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: List[str]   				=    AlbertModel(config=_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: Optional[Any]   				=    model(_lowerCamelCase  ,      attention_mask=_lowerCamelCase  ,      token_type_ids=_lowerCamelCase							)
         UpperCamelCase_: str   				=    model(_lowerCamelCase  ,      token_type_ids=_lowerCamelCase							)
         UpperCamelCase_: str   				=    model(_lowerCamelCase							)
         self.parent.assertEqual(result.last_hidden_state.shape  ,      (self.batch_size, self.seq_length, self.hidden_size)							)
         self.parent.assertEqual(result.pooler_output.shape  ,      (self.batch_size, self.hidden_size)							)





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: List[str]   				=    AlbertForPreTraining(config=_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: Tuple   				=    model(
             _lowerCamelCase  ,      attention_mask=_lowerCamelCase  ,      token_type_ids=_lowerCamelCase  ,      labels=_lowerCamelCase  ,      sentence_order_label=_lowerCamelCase  ,      )
         self.parent.assertEqual(result.prediction_logits.shape  ,      (self.batch_size, self.seq_length, self.vocab_size)							)
         self.parent.assertEqual(result.sop_logits.shape  ,      (self.batch_size, config.num_labels)							)





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: List[str]   				=    AlbertForMaskedLM(config=_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: Optional[int]   				=    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       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: Optional[Any]   				=    AlbertForQuestionAnswering(config=_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: Union[str, Any]   				=    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       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: Tuple   				=    self.num_labels
         UpperCamelCase_: Dict   				=    AlbertForSequenceClassification(_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: Tuple   				=    model(_lowerCamelCase  ,      attention_mask=_lowerCamelCase  ,      token_type_ids=_lowerCamelCase  ,      labels=_lowerCamelCase							)
         self.parent.assertEqual(result.logits.shape  ,      (self.batch_size, self.num_labels)							)





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: int   				=    self.num_labels
         UpperCamelCase_: Optional[Any]   				=    AlbertForTokenClassification(config=_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: Union[str, Any]   				=    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       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase							):
         UpperCamelCase_: Optional[Any]   				=    self.num_choices
         UpperCamelCase_: int   				=    AlbertForMultipleChoice(config=_lowerCamelCase							)
         model.to(_lowerCamelCase							)
         model.eval()
         UpperCamelCase_: int   				=    input_ids.unsqueeze(1							).expand(-1  ,      self.num_choices  ,      -1							).contiguous()
         UpperCamelCase_: Tuple   				=    token_type_ids.unsqueeze(1							).expand(-1  ,      self.num_choices  ,      -1							).contiguous()
         UpperCamelCase_: List[Any]   				=    input_mask.unsqueeze(1							).expand(-1  ,      self.num_choices  ,      -1							).contiguous()
         UpperCamelCase_: Dict   				=    model(
             _lowerCamelCase  ,      attention_mask=_lowerCamelCase  ,      token_type_ids=_lowerCamelCase  ,      labels=_lowerCamelCase  ,      )
         self.parent.assertEqual(result.logits.shape  ,      (self.batch_size, self.num_choices)							)





       def       _a   ( self							):
         UpperCamelCase_: List[str]   				=    self.prepare_config_and_inputs()
         (
             (
             UpperCamelCase_
         )				,(
             UpperCamelCase_
         )				,(
             UpperCamelCase_
         )				,(
             UpperCamelCase_
         )				,(
             UpperCamelCase_
         )				,(
             UpperCamelCase_
         )				,(
             UpperCamelCase_
         )				,
         ): List[str]   				=    config_and_inputs
         UpperCamelCase_: Any   				=    {'input_ids': input_ids, 'token_type_ids': token_type_ids, 'attention_mask': input_mask}
         return config, inputs_dict







@require_torch
class     _lowerCAmelCase(	UpperCAmelCase_							,     UpperCAmelCase_							,     unittest.TestCase ):





       """simple docstring"""







       a    :		Optional[Any]									=(
           (
               AlbertModel,
               AlbertForPreTraining,
               AlbertForMaskedLM,
               AlbertForMultipleChoice,
               AlbertForSequenceClassification,
               AlbertForTokenClassification,
               AlbertForQuestionAnswering,
           )
           if is_torch_available()
           else ()
       )
       a    :		int									=(
           {
               '''feature-extraction''': AlbertModel,
               '''fill-mask''': AlbertForMaskedLM,
               '''question-answering''': AlbertForQuestionAnswering,
               '''text-classification''': AlbertForSequenceClassification,
               '''token-classification''': AlbertForTokenClassification,
               '''zero-shot''': AlbertForSequenceClassification,
           }
           if is_torch_available()
           else {}
       )
       a    :		Any									=True





       def       _a   ( self  ,      _lowerCamelCase  ,      _lowerCamelCase  ,      _lowerCamelCase=False							):
         UpperCamelCase_: List[str]   				=    super()._prepare_for_class(_lowerCamelCase  ,      _lowerCamelCase  ,      return_labels=_lowerCamelCase							)

         if return_labels:
           if model_class in get_values(_lowerCamelCase							):
             UpperCamelCase_: Optional[int]   				=    torch.zeros(
                 (self.model_tester.batch_size, self.model_tester.seq_length)  ,      dtype=torch.long  ,      device=_lowerCamelCase							)
             UpperCamelCase_: List[str]   				=    torch.zeros(
                 self.model_tester.batch_size  ,      dtype=torch.long  ,      device=_lowerCamelCase							)
         return inputs_dict





       def       _a   ( self							):
         UpperCamelCase_: Tuple   				=    AlbertModelTester(self							)
         UpperCamelCase_: int   				=    ConfigTester(self  ,      config_class=_lowerCamelCase  ,      hidden_size=3_7							)





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





       def       _a   ( self							):
         UpperCamelCase_: Union[str, Any]   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_model(*_lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_: Optional[Any]   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_pretraining(*_lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_: Optional[int]   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_masked_lm(*_lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_: str   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_multiple_choice(*_lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_: Dict   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_question_answering(*_lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_: List[str]   				=    self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_sequence_classification(*_lowerCamelCase							)





       def       _a   ( self							):
         UpperCamelCase_: Optional[int]   				=    self.model_tester.prepare_config_and_inputs()
         for type in ["absolute", "relative_key", "relative_key_query"]:
           UpperCamelCase_: List[Any]   				=    type
           self.model_tester.create_and_check_model(*_lowerCamelCase							)





       @slow
       def       _a   ( self							):
         for model_name in ALBERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
           UpperCamelCase_: Union[str, Any]   				=    AlbertModel.from_pretrained(_lowerCamelCase							)
           self.assertIsNotNone(_lowerCamelCase							)







@require_torch
class     _lowerCAmelCase(	unittest.TestCase ):





       """simple docstring"""







       @slow
       def       _a   ( self							):
         UpperCamelCase_: int   				=    AlbertModel.from_pretrained('albert-base-v2'							)
         UpperCamelCase_: Optional[Any]   				=    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]]							)
         UpperCamelCase_: List[str]   				=    torch.tensor([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]							)
         with torch.no_grad():
           UpperCamelCase_: Tuple   				=    model(_lowerCamelCase  ,      attention_mask=_lowerCamelCase							)[0]
         UpperCamelCase_: Tuple   				=    torch.Size((1, 1_1, 7_6_8)							)
         self.assertEqual(output.shape  ,      _lowerCamelCase							)
         UpperCamelCase_: Union[str, Any]   				=    torch.tensor(
             [[[-0.6_5_1_3, 1.5_0_3_5, -0.2_7_6_6], [-0.6_5_1_5, 1.5_0_4_6, -0.2_7_8_0], [-0.6_5_1_2, 1.5_0_4_9, -0.2_7_8_4]]]							)

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







import os


# All paths are set with the intent you should run this script from the root of the repo with the command
# python utils/check_doctest_list.py
A_		:		List[str]		     =			'.'


if __name__ == "__main__":
   A_		:		Dict		     =			os.path.join(REPO_PATH, 'utils/documentation_tests.txt')
   A_		:		Dict		     =			[]
   A_		:		Optional[Any]		     =			[]
   with open(doctest_file_path) as fp:
      for line in fp:
         A_		:		Tuple		     =			line.strip()
         A_		:		Any		     =			os.path.join(REPO_PATH, line)
         if not (os.path.isfile(path) or os.path.isdir(path)):
            non_existent_paths.append(line)
         all_paths.append(path)
   if len(non_existent_paths) > 0:
      A_		:		str		     =			'\n'.join(non_existent_paths)
      raise ValueError(F'''`utils/documentation_tests.txt` contains non-existent paths:\n{non_existent_paths}''')
   if all_paths != sorted(all_paths):
      raise ValueError('Files in `utils/documentation_tests.txt` are not in alphabetical order.')