"""simple docstring"""


# Lint as: python3
import sys
from collections.abc import Mapping
from typing import TYPE_CHECKING, Dict, Optional

import numpy as np
import pyarrow as pa

from .. import config
from ..utils.logging import get_logger
from ..utils.py_utils import map_nested
from .formatting import TensorFormatter


if TYPE_CHECKING:
    import jax
    import jaxlib

UpperCAmelCase__     						=  get_logger()

UpperCAmelCase__     						=  None


class 				a (						TensorFormatter[Mapping, 'jax.Array', Mapping]      ):


    def __init__(    self		:     Any      , __lowerCAmelCase		:     Union[str, Any]=None      , __lowerCAmelCase		:     Union[str, Any]=None      , **__lowerCAmelCase		:     Optional[int]    ):
      super().__init__(features=__lowerCAmelCase    )
      import jax
      from jaxlib.xla_client import Device

      if isinstance(__lowerCAmelCase      , __lowerCAmelCase    ):
        raise ValueError(
            f'''Expected {device} to be a `str` not {type(__lowerCAmelCase    )}, as `jaxlib.xla_extension.Device` '''
            """is not serializable neither with `pickle` nor with `dill`. Instead you can surround """
            """the device with `str()` to get its string identifier that will be internally mapped """
            """to the actual `jaxlib.xla_extension.Device`."""    )
      _UpperCAmelCase         =					device if isinstance(__lowerCAmelCase      , __lowerCAmelCase    ) else str(jax.devices()[0]    )
      # using global variable since `jaxlib.xla_extension.Device` is not serializable neither
      # with `pickle` nor with `dill`, so we need to use a global variable instead
      global DEVICE_MAPPING
      if DEVICE_MAPPING is None:
        _UpperCAmelCase         =					self._map_devices_to_str()
      if self.device not in list(DEVICE_MAPPING.keys()    ):
        logger.warning(
            f'''Device with string identifier {self.device} not listed among the available '''
            f'''devices: {list(DEVICE_MAPPING.keys()    )}, so falling back to the default '''
            f'''device: {str(jax.devices()[0]    )}.'''    )
        _UpperCAmelCase         =					str(jax.devices()[0]    )
      _UpperCAmelCase         =					jnp_array_kwargs


    @staticmethod
    def    lowerCAmelCase_     (    ):
      import jax

      return {str(__lowerCAmelCase    ): device for device in jax.devices()}


    def    lowerCAmelCase_     (    self		:     Union[str, Any]      , __lowerCAmelCase		:     Any    ):
      import jax
      import jax.numpy as jnp

      if isinstance(__lowerCAmelCase      , __lowerCAmelCase    ) and column:
        if all(
            isinstance(__lowerCAmelCase      , jax.Array    ) and x.shape == column[0].shape and x.dtype == column[0].dtype for x in column    ):
          return jnp.stack(__lowerCAmelCase      , axis=0    )
      return column


    def    lowerCAmelCase_     (    self		:     str      , __lowerCAmelCase		:     Tuple    ):
      import jax
      import jax.numpy as jnp

      if isinstance(__lowerCAmelCase      , (str, bytes, type(__lowerCAmelCase    ))    ):
        return value
      elif isinstance(__lowerCAmelCase      , (np.character, np.ndarray)    ) and np.issubdtype(value.dtype      , np.character    ):
        return value.tolist()

      _UpperCAmelCase         =					{}

      if isinstance(__lowerCAmelCase      , (np.number, np.ndarray)    ) and np.issubdtype(value.dtype      , np.integer    ):
        # the default int precision depends on the jax config
        # see https://jax.readthedocs.io/en/latest/notebooks/Common_Gotchas_in_JAX.html#double-64bit-precision
        if jax.config.jax_enable_xaa:
          _UpperCAmelCase         =					{"""dtype""": jnp.intaa}
        else:
          _UpperCAmelCase         =					{"""dtype""": jnp.intaa}
      elif isinstance(__lowerCAmelCase      , (np.number, np.ndarray)    ) and np.issubdtype(value.dtype      , np.floating    ):
        _UpperCAmelCase         =					{"""dtype""": jnp.floataa}
      elif config.PIL_AVAILABLE and "PIL" in sys.modules:
        import PIL.Image

        if isinstance(__lowerCAmelCase      , PIL.Image.Image    ):
          _UpperCAmelCase         =					np.asarray(__lowerCAmelCase    )

        # using global variable since `jaxlib.xla_extension.Device` is not serializable neither
        # with `pickle` nor with `dill`, so we need to use a global variable instead
      global DEVICE_MAPPING
      if DEVICE_MAPPING is None:
        _UpperCAmelCase         =					self._map_devices_to_str()

      with jax.default_device(DEVICE_MAPPING[self.device]    ):
        # calling jnp.array on a np.ndarray does copy the data
        # see https://github.com/google/jax/issues/4486
        return jnp.array(__lowerCAmelCase      , **{**default_dtype, **self.jnp_array_kwargs}    )


    def    lowerCAmelCase_     (    self		:     Union[str, Any]      , __lowerCAmelCase		:     str    ):
      import jax

      # support for torch, tf, jax etc.
      if config.TORCH_AVAILABLE and "torch" in sys.modules:
        import torch

        if isinstance(__lowerCAmelCase      , torch.Tensor    ):
          return self._tensorize(data_struct.detach().cpu().numpy()[()]    )
      if hasattr(__lowerCAmelCase      , """__array__"""    ) and not isinstance(__lowerCAmelCase      , jax.Array    ):
        _UpperCAmelCase         =					data_struct.__array__()
      # support for nested types like struct of list of struct
      if isinstance(__lowerCAmelCase      , np.ndarray    ):
        if data_struct.dtype == object:  # jax arrays cannot be instantied from an array of objects
          return self._consolidate([self.recursive_tensorize(__lowerCAmelCase    ) for substruct in data_struct]    )
      elif isinstance(__lowerCAmelCase      , (list, tuple)    ):
        return self._consolidate([self.recursive_tensorize(__lowerCAmelCase    ) for substruct in data_struct]    )
      return self._tensorize(__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     Optional[Any]      , __lowerCAmelCase		:     dict    ):
      return map_nested(self._recursive_tensorize      , __lowerCAmelCase      , map_list=__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     int      , __lowerCAmelCase		:     pa.Table    ):
      _UpperCAmelCase         =					self.numpy_arrow_extractor().extract_row(__lowerCAmelCase    )
      _UpperCAmelCase         =					self.python_features_decoder.decode_row(__lowerCAmelCase    )
      return self.recursive_tensorize(__lowerCAmelCase    )


    def    lowerCAmelCase_     (    self		:     Union[str, Any]      , __lowerCAmelCase		:     pa.Table    ):
      _UpperCAmelCase         =					self.numpy_arrow_extractor().extract_column(__lowerCAmelCase    )
      _UpperCAmelCase         =					self.python_features_decoder.decode_column(__lowerCAmelCase      , pa_table.column_names[0]    )
      _UpperCAmelCase         =					self.recursive_tensorize(__lowerCAmelCase    )
      _UpperCAmelCase         =					self._consolidate(__lowerCAmelCase    )
      return column


    def    lowerCAmelCase_     (    self		:     Union[str, Any]      , __lowerCAmelCase		:     pa.Table    ):
      _UpperCAmelCase         =					self.numpy_arrow_extractor().extract_batch(__lowerCAmelCase    )
      _UpperCAmelCase         =					self.python_features_decoder.decode_batch(__lowerCAmelCase    )
      _UpperCAmelCase         =					self.recursive_tensorize(__lowerCAmelCase    )
      for column_name in batch:
        _UpperCAmelCase         =					self._consolidate(batch[column_name]    )
      return batch

"""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    )    )
