


"""simple docstring"""







import unittest

from transformers import EsmConfig, is_torch_available
from transformers.testing_utils import TestCasePlus, 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 EsmForMaskedLM, EsmForSequenceClassification, EsmForTokenClassification, EsmModel
     from transformers.models.esm.modeling_esm import (
         ESM_PRETRAINED_MODEL_ARCHIVE_LIST,
         EsmEmbeddings,
         create_position_ids_from_input_ids,
     )


class       SCREAMING_SNAKE_CASE__				:
       """simple docstring"""


       def __init__(						self		,     snake_case__		,     snake_case__=13		,     snake_case__=7		,     snake_case__=False		,     snake_case__=True		,     snake_case__=False		,     snake_case__=True		,     snake_case__=33		,     snake_case__=32		,     snake_case__=5		,     snake_case__=4		,     snake_case__=37		,     snake_case__="gelu"		,     snake_case__=0.1		,     snake_case__=0.1		,     snake_case__=512		,     snake_case__=16		,     snake_case__=2		,     snake_case__=0.02		,     snake_case__=3		,     snake_case__=4		,     snake_case__=None		,     ):






         """simple docstring"""





         lowerCAmelCase     :     Tuple								=							parent
         lowerCAmelCase     :     Any								=							batch_size
         lowerCAmelCase     :     int								=							seq_length
         lowerCAmelCase     :     List[Any]								=							is_training
         lowerCAmelCase     :     List[Any]								=							use_input_mask
         lowerCAmelCase     :     int								=							use_token_type_ids
         lowerCAmelCase     :     List[Any]								=							use_labels
         lowerCAmelCase     :     List[str]								=							vocab_size
         lowerCAmelCase     :     Optional[Any]								=							hidden_size
         lowerCAmelCase     :     Union[str, Any]								=							num_hidden_layers
         lowerCAmelCase     :     int								=							num_attention_heads
         lowerCAmelCase     :     str								=							intermediate_size
         lowerCAmelCase     :     Optional[int]								=							hidden_act
         lowerCAmelCase     :     int								=							hidden_dropout_prob
         lowerCAmelCase     :     List[str]								=							attention_probs_dropout_prob
         lowerCAmelCase     :     Any								=							max_position_embeddings
         lowerCAmelCase     :     List[str]								=							type_vocab_size
         lowerCAmelCase     :     Optional[int]								=							type_sequence_label_size
         lowerCAmelCase     :     Any								=							initializer_range
         lowerCAmelCase     :     Dict								=							num_labels
         lowerCAmelCase     :     Union[str, Any]								=							num_choices
         lowerCAmelCase     :     str								=							scope

       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Tuple								=							ids_tensor([self.batch_size, self.seq_length]		,     self.vocab_size						)

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

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

         lowerCAmelCase     :     List[Any]								=							self.get_config()

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

       def        lowercase__							(						self						):






         """simple docstring"""





         return EsmConfig(
             vocab_size=self.vocab_size		,     hidden_size=self.hidden_size		,     pad_token_id=1		,     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		,     )

       def        lowercase__							(						self		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__						):






         """simple docstring"""





         lowerCAmelCase     :     Tuple								=							EsmModel(config=snake_case__						)
         model.to(snake_case__						)
         model.eval()
         lowerCAmelCase     :     List[Any]								=							model(snake_case__		,     attention_mask=snake_case__						)
         lowerCAmelCase     :     Optional[int]								=							model(snake_case__						)
         lowerCAmelCase     :     Tuple								=							model(snake_case__						)

         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        lowercase__							(						self		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__						):






         """simple docstring"""





         lowerCAmelCase     :     Dict								=							EsmForMaskedLM(config=snake_case__						)
         model.to(snake_case__						)
         model.eval()
         lowerCAmelCase     :     int								=							model(snake_case__		,     attention_mask=snake_case__		,     labels=snake_case__						)
         self.parent.assertEqual(result.logits.shape		,     (self.batch_size, self.seq_length, self.vocab_size)						)

       def        lowercase__							(						self		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__		,     snake_case__						):






         """simple docstring"""





         lowerCAmelCase     :     List[str]								=							self.num_labels
         lowerCAmelCase     :     Optional[Any]								=							EsmForTokenClassification(config=snake_case__						)
         model.to(snake_case__						)
         model.eval()
         lowerCAmelCase     :     Optional[Any]								=							model(snake_case__		,     attention_mask=snake_case__		,     labels=snake_case__						)
         self.parent.assertEqual(result.logits.shape		,     (self.batch_size, self.seq_length, self.num_labels)						)







       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     int								=							self.prepare_config_and_inputs()
         (
             (
             lowerCAmelCase
         )						,  (
             lowerCAmelCase
         )						,  (
             lowerCAmelCase
         )						,  (
             lowerCAmelCase
         )						,  (
             lowerCAmelCase
         )						,  (
             lowerCAmelCase
         )						,  
         )     :     Union[str, Any]								=							config_and_inputs
         lowerCAmelCase     :     str								=							{"input_ids": input_ids, "attention_mask": input_mask}
         return config, inputs_dict


@require_torch
class       SCREAMING_SNAKE_CASE__				(		lowercase   ,    lowercase   ,    unittest.TestCase				):
       """simple docstring"""


       a  :				Dict   =False

       a  :				Union[str, Any]   =(
           (
               EsmForMaskedLM,
               EsmModel,
               EsmForSequenceClassification,
               EsmForTokenClassification,
           )
           if is_torch_available()
           else ()
       )
       a  :				Tuple   =()
       a  :				Dict   =(
           {
               "feature-extraction": EsmModel,
               "fill-mask": EsmForMaskedLM,
               "text-classification": EsmForSequenceClassification,
               "token-classification": EsmForTokenClassification,
               "zero-shot": EsmForSequenceClassification,
           }
           if is_torch_available()
           else {}
       )
       a  :				Tuple   =True

       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Optional[int]								=							EsmModelTester(self						)
         lowerCAmelCase     :     int								=							ConfigTester(self		,     config_class=snake_case__		,     hidden_size=37						)

       def        lowercase__							(						self						):






         """simple docstring"""





         self.config_tester.run_common_tests()

       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Dict								=							self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_model(*snake_case__						)

       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Optional[int]								=							self.model_tester.prepare_config_and_inputs()
         for type in ["absolute", "relative_key", "relative_key_query"]:
           lowerCAmelCase     :     Optional[Any]								=							type
           self.model_tester.create_and_check_model(*snake_case__						)

       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Dict								=							self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_masked_lm(*snake_case__						)

       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Optional[Any]								=							self.model_tester.prepare_config_and_inputs()
         self.model_tester.create_and_check_for_token_classification(*snake_case__						)

       @slow
       def        lowercase__							(						self						):






         """simple docstring"""





         for model_name in ESM_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
           lowerCAmelCase     :     int								=							EsmModel.from_pretrained(snake_case__						)
           self.assertIsNotNone(snake_case__						)

       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     Optional[Any]								=							self.model_tester.prepare_config_and_inputs()[0]
         lowerCAmelCase     :     int								=							EsmEmbeddings(config=snake_case__						)

         lowerCAmelCase     :     Union[str, Any]								=							torch.as_tensor([[12, 31, 13, model.padding_idx]]						)
         lowerCAmelCase     :     List[str]								=							torch.as_tensor(
             [
                 [
                     0 + model.padding_idx + 1,
                     1 + model.padding_idx + 1,
                     2 + model.padding_idx + 1,
                     model.padding_idx,
                 ]
             ]						)
         lowerCAmelCase     :     Optional[Any]								=							create_position_ids_from_input_ids(snake_case__		,     model.padding_idx						)
         self.assertEqual(position_ids.shape		,     expected_positions.shape						)
         self.assertTrue(torch.all(torch.eq(snake_case__		,     snake_case__						)						)						)

       def        lowercase__							(						self						):






         """simple docstring"""





         lowerCAmelCase     :     str								=							self.model_tester.prepare_config_and_inputs()[0]
         lowerCAmelCase     :     List[str]								=							EsmEmbeddings(config=snake_case__						)

         lowerCAmelCase     :     int								=							torch.empty(2		,     4		,     30						)
         lowerCAmelCase     :     List[Any]								=							[
             0 + embeddings.padding_idx + 1,
             1 + embeddings.padding_idx + 1,
             2 + embeddings.padding_idx + 1,
             3 + embeddings.padding_idx + 1,
         ]
         lowerCAmelCase     :     Any								=							torch.as_tensor([expected_single_positions, expected_single_positions]						)
         lowerCAmelCase     :     Optional[int]								=							embeddings.create_position_ids_from_inputs_embeds(snake_case__						)
         self.assertEqual(position_ids.shape		,     expected_positions.shape						)
         self.assertTrue(torch.all(torch.eq(snake_case__		,     snake_case__						)						)						)

       @unittest.skip("Esm does not support embedding resizing"						)
       def        lowercase__							(						self						):






         """simple docstring"""





         pass

       @unittest.skip("Esm does not support embedding resizing"						)
       def        lowercase__							(						self						):






         """simple docstring"""





         pass







       @unittest.skip("Will be fixed soon by reducing the size of the model used for common tests."						)
       def        lowercase__							(						self						):






         """simple docstring"""





         pass


@require_torch
class       SCREAMING_SNAKE_CASE__				(		lowercase				):
       """simple docstring"""


       @slow
       def        lowercase__							(						self						):






         """simple docstring"""





         with torch.no_grad():
           lowerCAmelCase     :     int								=							EsmForMaskedLM.from_pretrained("facebook/esm2_t6_8M_UR50D"						)
           model.eval()
           lowerCAmelCase     :     str								=							torch.tensor([[0, 1, 2, 3, 4, 5]]						)
           lowerCAmelCase     :     Optional[int]								=							model(snake_case__						)[0]

           lowerCAmelCase     :     List[str]								=							33

           lowerCAmelCase     :     int								=							torch.Size((1, 6, vocab_size)						)
           self.assertEqual(output.shape		,     snake_case__						)

           lowerCAmelCase     :     str								=							torch.tensor(
               [[[8.9215, -10.5898, -6.4671], [-6.3967, -13.9114, -1.1212], [-7.7812, -13.9516, -3.7406]]]						)
           self.assertTrue(torch.allclose(output[:, :3, :3]		,     snake_case__		,     atol=1e-4						)						)







       @slow
       def        lowercase__							(						self						):






         """simple docstring"""





         with torch.no_grad():
           lowerCAmelCase     :     List[str]								=							EsmModel.from_pretrained("facebook/esm2_t6_8M_UR50D"						)
           model.eval()

           lowerCAmelCase     :     Optional[Any]								=							torch.tensor([[0, 6, 4, 13, 5, 4, 16, 12, 11, 7, 2]]						)
           lowerCAmelCase     :     Dict								=							model(snake_case__						)[0]
           # compare the actual values for a slice.
           lowerCAmelCase     :     Union[str, Any]								=							torch.tensor(
               [[[0.1444, 0.5413, 0.3248], [0.3034, 0.0053, 0.3108], [0.3228, -0.2499, 0.3415]]]						)
           self.assertTrue(torch.allclose(output[:, :3, :3]		,     snake_case__		,     atol=1e-4						)						)









"""simple docstring"""







from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


lowerCAmelCase__      				=   {
    '''configuration_pix2struct''': [
        '''PIX2STRUCT_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''Pix2StructConfig''',
        '''Pix2StructTextConfig''',
        '''Pix2StructVisionConfig''',
    ],
    '''processing_pix2struct''': ['''Pix2StructProcessor'''],
}

try:
     if not is_vision_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     lowerCAmelCase__      				=   ['''Pix2StructImageProcessor''']


try:
     if not is_torch_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     lowerCAmelCase__      				=   [
         '''PIX2STRUCT_PRETRAINED_MODEL_ARCHIVE_LIST''',
         '''Pix2StructPreTrainedModel''',
         '''Pix2StructForConditionalGeneration''',
         '''Pix2StructVisionModel''',
         '''Pix2StructTextModel''',
     ]

if TYPE_CHECKING:
     from .configuration_pixastruct import (
         PIX2STRUCT_PRETRAINED_CONFIG_ARCHIVE_MAP,
         PixaStructConfig,
         PixaStructTextConfig,
         PixaStructVisionConfig,
     )
     from .processing_pixastruct import PixaStructProcessor

     try:
          if not is_vision_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .image_processing_pixastruct import PixaStructImageProcessor

     try:
          if not is_torch_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .modeling_pixastruct import (
              PIX2STRUCT_PRETRAINED_MODEL_ARCHIVE_LIST,
              PixaStructForConditionalGeneration,
              PixaStructPreTrainedModel,
              PixaStructTextModel,
              PixaStructVisionModel,
          )

else:
     import sys

     lowerCAmelCase__      				=   _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)





