"""simple docstring"""


import argparse
import os

# New Code #
import evaluate
import torch
from datasets import load_dataset
from torch.optim import AdamW
from torch.utils.data import DataLoader
from transformers import AutoModelForSequenceClassification, AutoTokenizer, get_linear_schedule_with_warmup, set_seed

from accelerate import Accelerator, DistributedType
from accelerate.utils import find_executable_batch_size


########################################################################
# This is a fully working simple example to use Accelerate,
# specifically showcasing how to ensure out-of-memory errors never
# interrupt training, and builds off the `nlp_example.py` script.
#
# This example trains a Bert base model on GLUE MRPC
# in any of the following settings (with the same script):
#   - single CPU or single GPU
#   - multi GPUS (using PyTorch distributed mode)
#   - (multi) TPUs
#   - fp16 (mixed-precision) or fp32 (normal precision)
#
# New additions from the base script can be found quickly by
# looking for the # New Code # tags
#
# To run it in each of these various modes, follow the instructions
# in the readme for examples:
# https://github.com/huggingface/accelerate/tree/main/examples
#
########################################################################


UpperCAmelCase__     						=  1_6
UpperCAmelCase__     						=  3_2






def 			__UpperCAmelCase    (	lowercase      ,lowercase = 16						):







  """simple docstring"""
  _UpperCAmelCase         =					AutoTokenizer.from_pretrained("""bert-base-cased"""						)
  _UpperCAmelCase         =					load_dataset("""glue"""      ,"""mrpc"""						)

  def tokenize_function(lowercase						):
    # max_length=None => use the model max length (it's actually the default)
    _UpperCAmelCase         =					tokenizer(examples["""sentence1"""]      ,examples["""sentence2"""]      ,truncation=lowercase      ,max_length=lowercase						)
    return outputs

  # Apply the method we just defined to all the examples in all the splits of the dataset
  # starting with the main process first:
  with accelerator.main_process_first():
    _UpperCAmelCase         =					datasets.map(
        lowercase      ,batched=lowercase      ,remove_columns=["""idx""", """sentence1""", """sentence2"""]      ,)

  # We also rename the 'label' column to 'labels' which is the expected name for labels by the models of the
  # transformers library
  _UpperCAmelCase         =					tokenized_datasets.rename_column("""label"""      ,"""labels"""						)

  def collate_fn(lowercase						):
    # On TPU it's best to pad everything to the same length or training will be very slow.
    _UpperCAmelCase         =					1_28 if accelerator.distributed_type == DistributedType.TPU else None
    # When using mixed precision we want round multiples of 8/16
    if accelerator.mixed_precision == "fp8":
      _UpperCAmelCase         =					16
    elif accelerator.mixed_precision != "no":
      _UpperCAmelCase         =					8
    else:
      _UpperCAmelCase         =					None

    return tokenizer.pad(
        lowercase      ,padding="""longest"""      ,max_length=lowercase      ,pad_to_multiple_of=lowercase      ,return_tensors="""pt"""      ,)

  # Instantiate dataloaders.
  _UpperCAmelCase         =					DataLoader(
      tokenized_datasets["""train"""]      ,shuffle=lowercase      ,collate_fn=lowercase      ,batch_size=lowercase						)
  _UpperCAmelCase         =					DataLoader(
      tokenized_datasets["""validation"""]      ,shuffle=lowercase      ,collate_fn=lowercase      ,batch_size=lowercase						)

  return train_dataloader, eval_dataloader


# For testing only
if os.environ.get("""TESTING_MOCKED_DATALOADERS""", None) == "1":
    from accelerate.test_utils.training import mocked_dataloaders

    UpperCAmelCase__     						=  mocked_dataloaders  # noqa: F811






def 			__UpperCAmelCase    (	lowercase      ,lowercase						):







  """simple docstring"""
  # For testing only
  if os.environ.get("""TESTING_MOCKED_DATALOADERS"""      ,lowercase						) == "1":
    _UpperCAmelCase         =					2
  # Initialize accelerator
  _UpperCAmelCase         =					Accelerator(cpu=args.cpu      ,mixed_precision=args.mixed_precision						)
  # Sample hyper-parameters for learning rate, batch size, seed and a few other HPs
  _UpperCAmelCase         =					config["""lr"""]
  _UpperCAmelCase         =					int(config["""num_epochs"""]						)
  _UpperCAmelCase         =					int(config["""seed"""]						)
  _UpperCAmelCase         =					int(config["""batch_size"""]						)

  _UpperCAmelCase         =					evaluate.load("""glue"""      ,"""mrpc"""						)

  # New Code #
  # We now can define an inner training loop function. It should take a batch size as the only parameter,
  # and build the dataloaders in there.
  # It also gets our decorator
  @find_executable_batch_size(starting_batch_size=lowercase						)
  def inner_training_loop(lowercase						):
    # And now just move everything below under this function
    # We need to bring in the Accelerator object from earlier
    nonlocal accelerator
    # And reset all of its attributes that could hold onto any memory:
    accelerator.free_memory()

    # Then we can declare the model, optimizer, and everything else:
    set_seed(lowercase						)

    # Instantiate the model (we build the model here so that the seed also control new weights initialization)
    _UpperCAmelCase         =					AutoModelForSequenceClassification.from_pretrained("""bert-base-cased"""      ,return_dict=lowercase						)

    # We could avoid this line since the accelerator is set with `device_placement=True` (default value).
    # Note that if you are placing tensors on devices manually, this line absolutely needs to be before the optimizer
    # creation otherwise training will not work on TPU (`accelerate` will kindly throw an error to make us aware of that).
    _UpperCAmelCase         =					model.to(accelerator.device						)

    # Instantiate optimizer
    _UpperCAmelCase         =					AdamW(params=model.parameters()      ,lr=lowercase						)
    _UpperCAmelCase       , _UpperCAmelCase         =					get_dataloaders(lowercase      ,lowercase						)

    # Instantiate scheduler
    _UpperCAmelCase         =					get_linear_schedule_with_warmup(
        optimizer=lowercase      ,num_warmup_steps=1_00      ,num_training_steps=(len(lowercase						) * num_epochs)      ,)

    # Prepare everything
    # There is no specific order to remember, we just need to unpack the objects in the same order we gave them to the
    # prepare method.
    _UpperCAmelCase       , _UpperCAmelCase       , _UpperCAmelCase       , _UpperCAmelCase       , _UpperCAmelCase         =					accelerator.prepare(
        lowercase      ,lowercase      ,lowercase      ,lowercase      ,lowercase						)

    # Now we train the model
    for epoch in range(lowercase						):
      model.train()
      for step, batch in enumerate(lowercase						):
        # We could avoid this line since we set the accelerator with `device_placement=True`.
        batch.to(accelerator.device						)
        _UpperCAmelCase         =					model(**lowercase						)
        _UpperCAmelCase         =					outputs.loss
        accelerator.backward(lowercase						)
        optimizer.step()
        lr_scheduler.step()
        optimizer.zero_grad()

      model.eval()
      for step, batch in enumerate(lowercase						):
        # We could avoid this line since we set the accelerator with `device_placement=True`.
        batch.to(accelerator.device						)
        with torch.no_grad():
          _UpperCAmelCase         =					model(**lowercase						)
        _UpperCAmelCase         =					outputs.logits.argmax(dim=-1						)
        _UpperCAmelCase       , _UpperCAmelCase         =					accelerator.gather_for_metrics((predictions, batch["""labels"""])						)
        metric.add_batch(
            predictions=lowercase      ,references=lowercase      ,)

      _UpperCAmelCase         =					metric.compute()
      # Use accelerator.print to print only on the main process.
      accelerator.print(f'''epoch {epoch}:'''      ,lowercase						)

    # New Code #
    # And call it at the end with no arguments
    # Note: You could also refactor this outside of your training loop function
  inner_training_loop()






def 			__UpperCAmelCase    (	):







  """simple docstring"""
  _UpperCAmelCase         =					argparse.ArgumentParser(description="""Simple example of training script."""						)
  parser.add_argument(
      """--mixed_precision"""      ,type=lowercase      ,default=lowercase      ,choices=["""no""", """fp16""", """bf16""", """fp8"""]      ,help="""Whether to use mixed precision. Choose"""
      """between fp16 and bf16 (bfloat16). Bf16 requires PyTorch >= 1.10."""
      """and an Nvidia Ampere GPU."""      ,)
  parser.add_argument("""--cpu"""      ,action="""store_true"""      ,help="""If passed, will train on the CPU."""						)
  _UpperCAmelCase         =					parser.parse_args()
  _UpperCAmelCase         =					{"""lr""": 2E-5, """num_epochs""": 3, """seed""": 42, """batch_size""": 16}
  training_function(lowercase      ,lowercase						)


if __name__ == "__main__":
    main()

"""simple docstring"""


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 				a :


    def __init__(    self		:     Optional[int]      , __lowerCAmelCase		:     int      , __lowerCAmelCase		:     Union[str, Any]=13      , __lowerCAmelCase		:     str=7      , __lowerCAmelCase		:     Optional[int]=True      , __lowerCAmelCase		:     int=True      , __lowerCAmelCase		:     List[Any]=True      , __lowerCAmelCase		:     int=True      , __lowerCAmelCase		:     List[Any]=99      , __lowerCAmelCase		:     Optional[int]=16      , __lowerCAmelCase		:     Dict=36      , __lowerCAmelCase		:     Optional[Any]=6      , __lowerCAmelCase		:     List[str]=6      , __lowerCAmelCase		:     Union[str, Any]=6      , __lowerCAmelCase		:     str=37      , __lowerCAmelCase		:     Optional[int]="gelu"      , __lowerCAmelCase		:     Union[str, Any]=0.1      , __lowerCAmelCase		:     Dict=0.1      , __lowerCAmelCase		:     List[str]=512      , __lowerCAmelCase		:     Optional[Any]=16      , __lowerCAmelCase		:     int=2      , __lowerCAmelCase		:     List[str]=0.02      , __lowerCAmelCase		:     Optional[int]=3      , __lowerCAmelCase		:     List[str]=4      , __lowerCAmelCase		:     Any=None      , ):
      _UpperCAmelCase         =					parent
      _UpperCAmelCase         =					batch_size
      _UpperCAmelCase         =					seq_length
      _UpperCAmelCase         =					is_training
      _UpperCAmelCase         =					use_input_mask
      _UpperCAmelCase         =					use_token_type_ids
      _UpperCAmelCase         =					use_labels
      _UpperCAmelCase         =					vocab_size
      _UpperCAmelCase         =					embedding_size
      _UpperCAmelCase         =					hidden_size
      _UpperCAmelCase         =					num_hidden_layers
      _UpperCAmelCase         =					num_hidden_groups
      _UpperCAmelCase         =					num_attention_heads
      _UpperCAmelCase         =					intermediate_size
      _UpperCAmelCase         =					hidden_act
      _UpperCAmelCase         =					hidden_dropout_prob
      _UpperCAmelCase         =					attention_probs_dropout_prob
      _UpperCAmelCase         =					max_position_embeddings
      _UpperCAmelCase         =					type_vocab_size
      _UpperCAmelCase         =					type_sequence_label_size
      _UpperCAmelCase         =					initializer_range
      _UpperCAmelCase         =					num_labels
      _UpperCAmelCase         =					num_choices
      _UpperCAmelCase         =					scope


    def    lowerCAmelCase_     (    self		:     Union[str, Any]    ):
      _UpperCAmelCase         =					ids_tensor([self.batch_size, self.seq_length]      , self.vocab_size    )

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

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

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

      _UpperCAmelCase         =					self.get_config()

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


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


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


    def    lowerCAmelCase_     (    self		:     List[str]    ):
      _UpperCAmelCase         =					self.prepare_config_and_inputs()
      (
          (
          _UpperCAmelCase
      )       , (
          _UpperCAmelCase
      )       , (
          _UpperCAmelCase
      )       , (
          _UpperCAmelCase
      )       , (
          _UpperCAmelCase
      )       , (
          _UpperCAmelCase
      )       , (
          _UpperCAmelCase
      )       , 
      )         =					config_and_inputs
      _UpperCAmelCase         =					{"""input_ids""": input_ids, """token_type_ids""": token_type_ids, """attention_mask""": input_mask}
      return config, inputs_dict



@require_torch
class 				a (						lowerCAmelCase_		,							lowerCAmelCase_		,							unittest.TestCase      ):
    _snake_case   :     str   							=							(
        (
            AlbertModel,
            AlbertForPreTraining,
            AlbertForMaskedLM,
            AlbertForMultipleChoice,
            AlbertForSequenceClassification,
            AlbertForTokenClassification,
            AlbertForQuestionAnswering,
        )
        if is_torch_available()
        else ()
    )
    _snake_case   :     Tuple   							=							(
        {
            'feature-extraction': AlbertModel,
            'fill-mask': AlbertForMaskedLM,
            'question-answering': AlbertForQuestionAnswering,
            'text-classification': AlbertForSequenceClassification,
            'token-classification': AlbertForTokenClassification,
            'zero-shot': AlbertForSequenceClassification,
        }
        if is_torch_available()
        else {}
    )
    _snake_case   :     Dict   							=							True


    def    lowerCAmelCase_     (    self		:     str      , __lowerCAmelCase		:     int      , __lowerCAmelCase		:     List[Any]      , __lowerCAmelCase		:     List[Any]=False    ):
      _UpperCAmelCase         =					super()._prepare_for_class(__lowerCAmelCase      , __lowerCAmelCase      , return_labels=__lowerCAmelCase    )

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


    def    lowerCAmelCase_     (    self		:     Optional[Any]    ):
      _UpperCAmelCase         =					AlbertModelTester(self    )
      _UpperCAmelCase         =					ConfigTester(self      , config_class=__lowerCAmelCase      , hidden_size=37    )


    def    lowerCAmelCase_     (    self		:     Optional[int]    ):
      self.config_tester.run_common_tests()


    def    lowerCAmelCase_     (    self		:     int    ):
      _UpperCAmelCase         =					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_model(*__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     Union[str, Any]    ):
      _UpperCAmelCase         =					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_pretraining(*__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     Optional[Any]    ):
      _UpperCAmelCase         =					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_masked_lm(*__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     Dict    ):
      _UpperCAmelCase         =					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_multiple_choice(*__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     str    ):
      _UpperCAmelCase         =					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_question_answering(*__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     List[Any]    ):
      _UpperCAmelCase         =					self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_sequence_classification(*__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     Optional[int]    ):
      _UpperCAmelCase         =					self.model_tester.prepare_config_and_inputs()
      for type in ["absolute", "relative_key", "relative_key_query"]:
        _UpperCAmelCase         =					type
        self.model_tester.create_and_check_model(*__lowerCAmelCase    )


    @slow
    def    lowerCAmelCase_     (    self		:     Dict    ):
      for model_name in ALBERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
        _UpperCAmelCase         =					AlbertModel.from_pretrained(__lowerCAmelCase    )
        self.assertIsNotNone(__lowerCAmelCase    )



@require_torch
class 				a (						unittest.TestCase      ):


    @slow
    def    lowerCAmelCase_     (    self		:     Tuple    ):
      _UpperCAmelCase         =					AlbertModel.from_pretrained("""albert-base-v2"""    )
      _UpperCAmelCase         =					torch.tensor([[0, 345, 232, 328, 740, 140, 1695, 69, 6078, 1588, 2]]    )
      _UpperCAmelCase         =					torch.tensor([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]    )
      with torch.no_grad():
        _UpperCAmelCase         =					model(__lowerCAmelCase      , attention_mask=__lowerCAmelCase    )[0]
      _UpperCAmelCase         =					torch.Size((1, 11, 768)    )
      self.assertEqual(output.shape      , __lowerCAmelCase    )
      _UpperCAmelCase         =					torch.tensor(
          [[[-0.6_513, 1.5_035, -0.2_766], [-0.6_515, 1.5_046, -0.2_780], [-0.6_512, 1.5_049, -0.2_784]]]    )

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