"""simple docstring"""







import unittest

from transformers import SPIECE_UNDERLINE, XLNetTokenizer, XLNetTokenizerFast
from transformers.testing_utils import get_tests_dir, require_sentencepiece, require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin


__SCREAMING_SNAKE_CASE    	=get_tests_dir("fixtures/test_sentencepiece.model")







@require_sentencepiece
@require_tokenizers
class        UpperCamelCase		(			lowercase_						,      unittest.TestCase  ):
   lowercase							=  XLNetTokenizer
   lowercase							=  XLNetTokenizerFast
   lowercase							=  True
   lowercase							=  True
   def 			_UpperCAmelCase   (			self			)	->      Optional[Any]:


        '''simple docstring'''


        super().setUp()

        # We have a SentencePiece fixture for testing
        lowercase_	:				str													=	XLNetTokenizer(__UpperCamelCase     ,keep_accents=__UpperCamelCase			)
        tokenizer.sanitize_special_tokens()
        tokenizer.save_pretrained(self.tmpdirname			)
   def 			_UpperCAmelCase   (			self			)	->      List[Any]:


        '''simple docstring'''


        lowercase_	:				Tuple													=	'<s>'
        lowercase_	:				List[str]													=	1

        self.assertEqual(self.get_tokenizer()._convert_token_to_id(__UpperCamelCase			)     ,__UpperCamelCase			)
        self.assertEqual(self.get_tokenizer()._convert_id_to_token(__UpperCamelCase			)     ,__UpperCamelCase			)
   def 			_UpperCAmelCase   (			self			)	->      Any:


        '''simple docstring'''


        lowercase_	:				str													=	list(self.get_tokenizer().get_vocab().keys()			)

        self.assertEqual(vocab_keys[0]     ,'<unk>'			)
        self.assertEqual(vocab_keys[1]     ,'<s>'			)
        self.assertEqual(vocab_keys[-1]     ,'<eod>'			)
        self.assertEqual(len(__UpperCamelCase			)     ,1006			)
   def 			_UpperCAmelCase   (			self			)	->      Optional[int]:


        '''simple docstring'''


        self.assertEqual(self.get_tokenizer().vocab_size     ,1000			)
   def 			_UpperCAmelCase   (			self			)	->      Optional[int]:


        '''simple docstring'''


        lowercase_	:				List[Any]													=	XLNetTokenizer(__UpperCamelCase     ,keep_accents=__UpperCamelCase			)

        lowercase_	:				int													=	tokenizer.tokenize('This is a test'			)
        self.assertListEqual(__UpperCamelCase     ,['▁This', '▁is', '▁a', '▁t', 'est']			)

        self.assertListEqual(tokenizer.convert_tokens_to_ids(__UpperCamelCase			)     ,[285, 46, 10, 170, 382]			)

        lowercase_	:				Any													=	tokenizer.tokenize('I was born in 92000, and this is falsé.'			)
        self.assertListEqual(
            __UpperCamelCase     ,[
                SPIECE_UNDERLINE + 'I',
                SPIECE_UNDERLINE + 'was',
                SPIECE_UNDERLINE + 'b',
                'or',
                'n',
                SPIECE_UNDERLINE + 'in',
                SPIECE_UNDERLINE + '',
                '9',
                '2',
                '0',
                '0',
                '0',
                ',',
                SPIECE_UNDERLINE + 'and',
                SPIECE_UNDERLINE + 'this',
                SPIECE_UNDERLINE + 'is',
                SPIECE_UNDERLINE + 'f',
                'al',
                's',
                'é',
                '.',
            ]     ,)
        lowercase_	:				Dict													=	tokenizer.convert_tokens_to_ids(__UpperCamelCase			)
        self.assertListEqual(__UpperCamelCase     ,[8, 21, 84, 55, 24, 19, 7, 0, 602, 347, 347, 347, 3, 12, 66, 46, 72, 80, 6, 0, 4]			)

        lowercase_	:				Dict													=	tokenizer.convert_ids_to_tokens(__UpperCamelCase			)
        self.assertListEqual(
            __UpperCamelCase     ,[
                SPIECE_UNDERLINE + 'I',
                SPIECE_UNDERLINE + 'was',
                SPIECE_UNDERLINE + 'b',
                'or',
                'n',
                SPIECE_UNDERLINE + 'in',
                SPIECE_UNDERLINE + '',
                '<unk>',
                '2',
                '0',
                '0',
                '0',
                ',',
                SPIECE_UNDERLINE + 'and',
                SPIECE_UNDERLINE + 'this',
                SPIECE_UNDERLINE + 'is',
                SPIECE_UNDERLINE + 'f',
                'al',
                's',
                '<unk>',
                '.',
            ]     ,)
   def 			_UpperCAmelCase   (			self			)	->      Optional[Any]:


        '''simple docstring'''


        lowercase_	:				Optional[Any]													=	XLNetTokenizer(__UpperCamelCase     ,do_lower_case=__UpperCamelCase			)
        lowercase_	:				List[str]													=	tokenizer.tokenize('I was born in 92000, and this is falsé.'			)
        self.assertListEqual(
            __UpperCamelCase     ,[
                SPIECE_UNDERLINE + '',
                'i',
                SPIECE_UNDERLINE + 'was',
                SPIECE_UNDERLINE + 'b',
                'or',
                'n',
                SPIECE_UNDERLINE + 'in',
                SPIECE_UNDERLINE + '',
                '9',
                '2',
                '0',
                '0',
                '0',
                ',',
                SPIECE_UNDERLINE + 'and',
                SPIECE_UNDERLINE + 'this',
                SPIECE_UNDERLINE + 'is',
                SPIECE_UNDERLINE + 'f',
                'al',
                'se',
                '.',
            ]     ,)
        self.assertListEqual(tokenizer.tokenize('H\u00E9llo'			)     ,['▁he', 'll', 'o']			)
   def 			_UpperCAmelCase   (			self			)	->      List[Any]:


        '''simple docstring'''


        lowercase_	:				Dict													=	XLNetTokenizer(__UpperCamelCase     ,do_lower_case=__UpperCamelCase			)
        lowercase_	:				Tuple													=	tokenizer.tokenize('I was born in 92000, and this is falsé.'			)
        self.assertListEqual(
            __UpperCamelCase     ,[
                SPIECE_UNDERLINE + 'I',
                SPIECE_UNDERLINE + 'was',
                SPIECE_UNDERLINE + 'b',
                'or',
                'n',
                SPIECE_UNDERLINE + 'in',
                SPIECE_UNDERLINE + '',
                '9',
                '2',
                '0',
                '0',
                '0',
                ',',
                SPIECE_UNDERLINE + 'and',
                SPIECE_UNDERLINE + 'this',
                SPIECE_UNDERLINE + 'is',
                SPIECE_UNDERLINE + 'f',
                'al',
                'se',
                '.',
            ]     ,)
   @slow
   def 			_UpperCAmelCase   (			self			)	->      Dict:


        '''simple docstring'''


        lowercase_	:				Optional[Any]													=	XLNetTokenizer.from_pretrained('xlnet-base-cased'			)

        lowercase_	:				List[Any]													=	tokenizer.encode('sequence builders'     ,add_special_tokens=__UpperCamelCase			)
        lowercase_	:				List[Any]													=	tokenizer.encode('multi-sequence build'     ,add_special_tokens=__UpperCamelCase			)

        lowercase_	:				List[Any]													=	tokenizer.build_inputs_with_special_tokens(__UpperCamelCase			)
        lowercase_	:				int													=	tokenizer.build_inputs_with_special_tokens(__UpperCamelCase     ,__UpperCamelCase			)

        assert encoded_sentence == text + [4, 3]
        assert encoded_pair == text + [4] + text_a + [4, 3]







   @slow
   def 			_UpperCAmelCase   (			self			)	->      int:


        '''simple docstring'''


        lowercase_	:				str													=	{'input_ids': [[17, 2_1442, 270, 17, 10, 1_4645, 318, 34, 17, 4546, 3145, 787, 13, 7752, 2_2018, 23, 21, 17, 4546, 3145, 787, 13, 3352, 1_4431, 13, 5500, 11, 1176, 580, 13, 1_6819, 4797, 23, 17, 10, 1_7135, 658, 19, 457, 7932, 13, 184, 19, 3154, 1_7135, 6468, 19, 1404, 1_2269, 19, 4229, 5356, 1_6264, 46, 19, 17, 2_0545, 1_0395, 9, 9, 9, 11, 28, 6421, 9531, 2_0729, 17, 10, 353, 1_7022, 11, 21, 6421, 9531, 1_6949, 17, 10, 1_1509, 753, 11, 33, 95, 2421, 7385, 956, 1_4431, 2626, 25, 842, 7385, 4836, 21, 1429, 2272, 9855, 3120, 161, 2_4738, 19, 1_3203, 658, 218, 787, 21, 430, 1_8482, 847, 2637, 9, 4, 3], [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 322, 2_2178, 27, 1064, 22, 956, 13, 1_1101, 1429, 5854, 2_4313, 1_8953, 40, 422, 2_4366, 68, 1758, 37, 1_0483, 1_4257, 31, 207, 263, 21, 203, 3773, 25, 71, 9735, 9, 4, 3], [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 32, 2049, 3442, 17, 1_3894, 3380, 23, 95, 18, 1_7634, 2288, 9, 4, 3]], 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2]], 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]}  # noqa: E501
        # fmt: on

        self.tokenizer_integration_test_util(
            expected_encoding=__UpperCamelCase     ,model_name='xlnet-base-cased'     ,revision='c841166438c31ec7ca9a106dee7bb312b73ae511'     ,)


"""simple docstring"""







import inspect
import unittest

from transformers import ViTConfig
from transformers.testing_utils import (
    require_accelerate,
    require_torch,
    require_torch_gpu,
    require_vision,
    slow,
    torch_device,
)
from transformers.utils import cached_property, is_torch_available, is_vision_available

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


if is_torch_available():
       import torch
       from torch import nn

       from transformers import ViTForImageClassification, ViTForMaskedImageModeling, ViTModel
       from transformers.models.vit.modeling_vit import VIT_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
       from PIL import Image

       from transformers import ViTImageProcessor







class        UpperCamelCase		:
   def __init__(			self     ,__UpperCamelCase     ,__UpperCamelCase=13     ,__UpperCamelCase=30     ,__UpperCamelCase=2     ,__UpperCamelCase=3     ,__UpperCamelCase=True     ,__UpperCamelCase=True     ,__UpperCamelCase=32     ,__UpperCamelCase=5     ,__UpperCamelCase=4     ,__UpperCamelCase=37     ,__UpperCamelCase="gelu"     ,__UpperCamelCase=0.1     ,__UpperCamelCase=0.1     ,__UpperCamelCase=10     ,__UpperCamelCase=0.02     ,__UpperCamelCase=None     ,__UpperCamelCase=2     ,)	->      List[Any]:


        '''simple docstring'''


        lowercase_	:				Tuple													=	parent
        lowercase_	:				List[Any]													=	batch_size
        lowercase_	:				Optional[int]													=	image_size
        lowercase_	:				List[str]													=	patch_size
        lowercase_	:				int													=	num_channels
        lowercase_	:				List[str]													=	is_training
        lowercase_	:				Union[str, Any]													=	use_labels
        lowercase_	:				str													=	hidden_size
        lowercase_	:				List[str]													=	num_hidden_layers
        lowercase_	:				List[str]													=	num_attention_heads
        lowercase_	:				Dict													=	intermediate_size
        lowercase_	:				Optional[int]													=	hidden_act
        lowercase_	:				Any													=	hidden_dropout_prob
        lowercase_	:				Any													=	attention_probs_dropout_prob
        lowercase_	:				List[str]													=	type_sequence_label_size
        lowercase_	:				Union[str, Any]													=	initializer_range
        lowercase_	:				int													=	scope
        lowercase_	:				Dict													=	encoder_stride

        # in ViT, the seq length equals the number of patches + 1 (we add 1 for the [CLS] token)
        lowercase_	:				Any													=	(image_size // patch_size) ** 2
        lowercase_	:				Optional[int]													=	num_patches + 1
   def 			_UpperCAmelCase   (			self			)	->      List[Any]:


        '''simple docstring'''


        lowercase_	:				List[Any]													=	floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]			)

        lowercase_	:				Tuple													=	None
        if self.use_labels:
             lowercase_	:				Dict													=	ids_tensor([self.batch_size]     ,self.type_sequence_label_size			)

        lowercase_	:				Any													=	self.get_config()

        return config, pixel_values, labels
   def 			_UpperCAmelCase   (			self			)	->      Optional[Any]:


        '''simple docstring'''


        return ViTConfig(
            image_size=self.image_size     ,patch_size=self.patch_size     ,num_channels=self.num_channels     ,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     ,is_decoder=__UpperCamelCase     ,initializer_range=self.initializer_range     ,encoder_stride=self.encoder_stride     ,)
   def 			_UpperCAmelCase   (			self     ,__UpperCamelCase     ,__UpperCamelCase     ,__UpperCamelCase			)	->      Optional[int]:


        '''simple docstring'''


        lowercase_	:				List[Any]													=	ViTModel(config=__UpperCamelCase			)
        model.to(__UpperCamelCase			)
        model.eval()
        lowercase_	:				Optional[Any]													=	model(__UpperCamelCase			)
        self.parent.assertEqual(result.last_hidden_state.shape     ,(self.batch_size, self.seq_length, self.hidden_size)			)
   def 			_UpperCAmelCase   (			self     ,__UpperCamelCase     ,__UpperCamelCase     ,__UpperCamelCase			)	->      Any:


        '''simple docstring'''


        lowercase_	:				Optional[int]													=	ViTForMaskedImageModeling(config=__UpperCamelCase			)
        model.to(__UpperCamelCase			)
        model.eval()
        lowercase_	:				List[str]													=	model(__UpperCamelCase			)
        self.parent.assertEqual(
            result.reconstruction.shape     ,(self.batch_size, self.num_channels, self.image_size, self.image_size)			)

        # test greyscale images
        lowercase_	:				Any													=	1
        lowercase_	:				List[Any]													=	ViTForMaskedImageModeling(__UpperCamelCase			)
        model.to(__UpperCamelCase			)
        model.eval()

        lowercase_	:				Dict													=	floats_tensor([self.batch_size, 1, self.image_size, self.image_size]			)
        lowercase_	:				str													=	model(__UpperCamelCase			)
        self.parent.assertEqual(result.reconstruction.shape     ,(self.batch_size, 1, self.image_size, self.image_size)			)
   def 			_UpperCAmelCase   (			self     ,__UpperCamelCase     ,__UpperCamelCase     ,__UpperCamelCase			)	->      str:


        '''simple docstring'''


        lowercase_	:				Dict													=	self.type_sequence_label_size
        lowercase_	:				Dict													=	ViTForImageClassification(__UpperCamelCase			)
        model.to(__UpperCamelCase			)
        model.eval()
        lowercase_	:				int													=	model(__UpperCamelCase     ,labels=__UpperCamelCase			)
        self.parent.assertEqual(result.logits.shape     ,(self.batch_size, self.type_sequence_label_size)			)

        # test greyscale images
        lowercase_	:				Dict													=	1
        lowercase_	:				Any													=	ViTForImageClassification(__UpperCamelCase			)
        model.to(__UpperCamelCase			)
        model.eval()

        lowercase_	:				Dict													=	floats_tensor([self.batch_size, 1, self.image_size, self.image_size]			)
        lowercase_	:				Dict													=	model(__UpperCamelCase			)
        self.parent.assertEqual(result.logits.shape     ,(self.batch_size, self.type_sequence_label_size)			)







   def 			_UpperCAmelCase   (			self			)	->      List[str]:


        '''simple docstring'''


        lowercase_	:				List[Any]													=	self.prepare_config_and_inputs()
        (
            (
            lowercase_
        )							,  (
            lowercase_
        )							,  (
            lowercase_
        )							,  
        )	:				Optional[Any]													=	config_and_inputs
        lowercase_	:				str													=	{'pixel_values': pixel_values}
        return config, inputs_dict







@require_torch
class        UpperCamelCase		(			lowercase_						,      lowercase_						,      unittest.TestCase  ):
   lowercase							=  (
       (
           ViTModel,
           ViTForImageClassification,
           ViTForMaskedImageModeling,
       )
       if is_torch_available()
       else ()
   )
   lowercase							=  (
       {'feature-extraction': ViTModel, 'image-classification': ViTForImageClassification}
       if is_torch_available()
       else {}
   )
   lowercase							=  True

   lowercase							=  False
   lowercase							=  False
   lowercase							=  False
   def 			_UpperCAmelCase   (			self			)	->      List[str]:


        '''simple docstring'''


        lowercase_	:				Optional[int]													=	ViTModelTester(self			)
        lowercase_	:				Dict													=	ConfigTester(self     ,config_class=__UpperCamelCase     ,has_text_modality=__UpperCamelCase     ,hidden_size=37			)
   def 			_UpperCAmelCase   (			self			)	->      Optional[Any]:


        '''simple docstring'''


        self.config_tester.run_common_tests()
   @unittest.skip(reason='ViT does not use inputs_embeds'			)
   def 			_UpperCAmelCase   (			self			)	->      Any:


        '''simple docstring'''


        pass
   def 			_UpperCAmelCase   (			self			)	->      Dict:


        '''simple docstring'''


        lowercase_							,  lowercase_	:				Any													=	self.model_tester.prepare_config_and_inputs_for_common()

        for model_class in self.all_model_classes:
             lowercase_	:				str													=	model_class(__UpperCamelCase			)
             self.assertIsInstance(model.get_input_embeddings()     ,(nn.Module)			)
             lowercase_	:				List[Any]													=	model.get_output_embeddings()
             self.assertTrue(x is None or isinstance(__UpperCamelCase     ,nn.Linear			)			)
   def 			_UpperCAmelCase   (			self			)	->      Union[str, Any]:


        '''simple docstring'''


        lowercase_							,  lowercase_	:				Union[str, Any]													=	self.model_tester.prepare_config_and_inputs_for_common()

        for model_class in self.all_model_classes:
             lowercase_	:				str													=	model_class(__UpperCamelCase			)
             lowercase_	:				List[Any]													=	inspect.signature(model.forward			)
             # signature.parameters is an OrderedDict => so arg_names order is deterministic
             lowercase_	:				Tuple													=	[*signature.parameters.keys()]

             lowercase_	:				Tuple													=	['pixel_values']
             self.assertListEqual(arg_names[:1]     ,__UpperCamelCase			)
   def 			_UpperCAmelCase   (			self			)	->      Any:


        '''simple docstring'''


        lowercase_	:				List[Any]													=	self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_model(*__UpperCamelCase			)
   def 			_UpperCAmelCase   (			self			)	->      str:


        '''simple docstring'''


        lowercase_	:				str													=	self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_masked_image_modeling(*__UpperCamelCase			)
   def 			_UpperCAmelCase   (			self			)	->      str:


        '''simple docstring'''


        lowercase_	:				str													=	self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_image_classification(*__UpperCamelCase			)







   @slow
   def 			_UpperCAmelCase   (			self			)	->      Tuple:


        '''simple docstring'''


        for model_name in VIT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
             lowercase_	:				List[Any]													=	ViTModel.from_pretrained(__UpperCamelCase			)
             self.assertIsNotNone(__UpperCamelCase			)






def 			lowercase__(       ):
     lowercase_	:				Any													=	Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'      )
     return image







@require_torch
@require_vision
class        UpperCamelCase		(			unittest.TestCase  ):
   @cached_property
   def 			_UpperCAmelCase   (			self			)	->      Any:


        '''simple docstring'''


        return ViTImageProcessor.from_pretrained('google/vit-base-patch16-224'			) if is_vision_available() else None
   @slow
   def 			_UpperCAmelCase   (			self			)	->      int:


        '''simple docstring'''


        lowercase_	:				str													=	ViTForImageClassification.from_pretrained('google/vit-base-patch16-224'			).to(__UpperCamelCase			)

        lowercase_	:				Any													=	self.default_image_processor
        lowercase_	:				Dict													=	prepare_img()
        lowercase_	:				Tuple													=	image_processor(images=__UpperCamelCase     ,return_tensors='pt'			).to(__UpperCamelCase			)

        # forward pass
        with torch.no_grad():
             lowercase_	:				Any													=	model(**__UpperCamelCase			)

        # verify the logits
        lowercase_	:				Optional[Any]													=	torch.Size((1, 1000)			)
        self.assertEqual(outputs.logits.shape     ,__UpperCamelCase			)

        lowercase_	:				Optional[int]													=	torch.tensor([-0.2744, 0.8215, -0.0836]			).to(__UpperCamelCase			)

        self.assertTrue(torch.allclose(outputs.logits[0, :3]     ,__UpperCamelCase     ,atol=1e-4			)			)
   @slow
   def 			_UpperCAmelCase   (			self			)	->      Tuple:


        '''simple docstring'''


        lowercase_	:				str													=	ViTModel.from_pretrained('facebook/dino-vits8'			).to(__UpperCamelCase			)

        lowercase_	:				int													=	ViTImageProcessor.from_pretrained('facebook/dino-vits8'     ,size=480			)
        lowercase_	:				int													=	prepare_img()
        lowercase_	:				Dict													=	image_processor(images=__UpperCamelCase     ,return_tensors='pt'			)
        lowercase_	:				int													=	inputs.pixel_values.to(__UpperCamelCase			)

        # forward pass
        with torch.no_grad():
             lowercase_	:				int													=	model(__UpperCamelCase     ,interpolate_pos_encoding=__UpperCamelCase			)

        # verify the logits
        lowercase_	:				Any													=	torch.Size((1, 3601, 384)			)
        self.assertEqual(outputs.last_hidden_state.shape     ,__UpperCamelCase			)

        lowercase_	:				Any													=	torch.tensor(
            [[4.2340, 4.3906, -6.6692], [4.5463, 1.8928, -6.7257], [4.4429, 0.8496, -5.8585]]			).to(__UpperCamelCase			)

        self.assertTrue(torch.allclose(outputs.last_hidden_state[0, :3, :3]     ,__UpperCamelCase     ,atol=1e-4			)			)







   @slow
   @require_accelerate
   @require_torch_gpu
   def 			_UpperCAmelCase   (			self			)	->      int:


        '''simple docstring'''


        lowercase_	:				Optional[int]													=	ViTModel.from_pretrained('facebook/dino-vits8'     ,torch_dtype=torch.floataa     ,device_map='auto'			)
        lowercase_	:				int													=	self.default_image_processor

        lowercase_	:				Optional[int]													=	prepare_img()
        lowercase_	:				Tuple													=	image_processor(images=__UpperCamelCase     ,return_tensors='pt'			)
        lowercase_	:				Union[str, Any]													=	inputs.pixel_values.to(__UpperCamelCase			)

        # forward pass to make sure inference works in fp16
        with torch.no_grad():
             lowercase_	:				Dict													=	model(__UpperCamelCase			)

