






'''simple docstring'''







from typing import Callable, List, Optional, Union

import PIL
import torch
from transformers import (
    CLIPImageProcessor,
    CLIPSegForImageSegmentation,
    CLIPSegProcessor,
    CLIPTextModel,
    CLIPTokenizer,
)

from diffusers import DiffusionPipeline
from diffusers.configuration_utils import FrozenDict
from diffusers.models import AutoencoderKL, UNetaDConditionModel
from diffusers.pipelines.stable_diffusion import StableDiffusionInpaintPipeline
from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker
from diffusers.schedulers import DDIMScheduler, LMSDiscreteScheduler, PNDMScheduler
from diffusers.utils import deprecate, is_accelerate_available, logging


_A			:    Any					  =logging.get_logger(__name__)  # pylint: disable=invalid-name

class _lowercase			(       _lowercase	):




							def __init__(							self:       Any    ,							UpperCamelCase__:       CLIPSegForImageSegmentation    ,							UpperCamelCase__:       CLIPSegProcessor    ,							UpperCamelCase__:       AutoencoderKL    ,							UpperCamelCase__:       CLIPTextModel    ,							UpperCamelCase__:       CLIPTokenizer    ,							UpperCamelCase__:       UNetaDConditionModel    ,							UpperCamelCase__:       Union[DDIMScheduler, PNDMScheduler, LMSDiscreteScheduler]    ,							UpperCamelCase__:       StableDiffusionSafetyChecker    ,							UpperCamelCase__:       CLIPImageProcessor    ,							):
														super().__init__()

														if hasattr(scheduler.config    ,							"""steps_offset"""  ) and scheduler.config.steps_offset != 1:
																					lowerCamelCase__      :			Dict 						= (
																					    F'''The configuration file of this scheduler: {scheduler} is outdated. `steps_offset`'''
																					    F''' should be set to 1 instead of {scheduler.config.steps_offset}. Please make sure '''
																					    """to update the config accordingly as leaving `steps_offset` might led to incorrect results"""
																					    """ in future versions. If you have downloaded this checkpoint from the Hugging Face Hub,"""
																					    """ it would be very nice if you could open a Pull request for the `scheduler/scheduler_config.json`"""
																					    """ file"""
																					)
																					deprecate("""steps_offset!=1"""    ,							"""1.0.0"""    ,							__UpperCamelCase    ,							standard_warn=__UpperCamelCase  )
																					lowerCamelCase__      :			Optional[Any] 						= dict(scheduler.config  )
																					lowerCamelCase__      :			List[str] 						= 1
																					lowerCamelCase__      :			Union[str, Any] 						= FrozenDict(__UpperCamelCase  )

														if hasattr(scheduler.config    ,							"""skip_prk_steps"""  ) and scheduler.config.skip_prk_steps is False:
																					lowerCamelCase__      :			Any 						= (
																					    F'''The configuration file of this scheduler: {scheduler} has not set the configuration'''
																					    """ `skip_prk_steps`. `skip_prk_steps` should be set to True in the configuration file. Please make"""
																					    """ sure to update the config accordingly as not setting `skip_prk_steps` in the config might lead to"""
																					    """ incorrect results in future versions. If you have downloaded this checkpoint from the Hugging Face"""
																					    """ Hub, it would be very nice if you could open a Pull request for the"""
																					    """ `scheduler/scheduler_config.json` file"""
																					)
																					deprecate("""skip_prk_steps not set"""    ,							"""1.0.0"""    ,							__UpperCamelCase    ,							standard_warn=__UpperCamelCase  )
																					lowerCamelCase__      :			int 						= dict(scheduler.config  )
																					lowerCamelCase__      :			Optional[Any] 						= True
																					lowerCamelCase__      :			Dict 						= FrozenDict(__UpperCamelCase  )

														if safety_checker is None:
																					logger.warning(
																					    F'''You have disabled the safety checker for {self.__class__} by passing `safety_checker=None`. Ensure'''
																					    """ that you abide to the conditions of the Stable Diffusion license and do not expose unfiltered"""
																					    """ results in services or applications open to the public. Both the diffusers team and Hugging Face"""
																					    """ strongly recommend to keep the safety filter enabled in all public facing circumstances, disabling"""
																					    """ it only for use-cases that involve analyzing network behavior or auditing its results. For more"""
																					    """ information, please have a look at https://github.com/huggingface/diffusers/pull/254 ."""  )

														self.register_modules(
														    segmentation_model=__UpperCamelCase    ,							segmentation_processor=__UpperCamelCase    ,							vae=__UpperCamelCase    ,							text_encoder=__UpperCamelCase    ,							tokenizer=__UpperCamelCase    ,							unet=__UpperCamelCase    ,							scheduler=__UpperCamelCase    ,							safety_checker=__UpperCamelCase    ,							feature_extractor=__UpperCamelCase    ,							)




							def 	lowerCamelCase_       (							self:       str    ,							UpperCamelCase__:       Optional[Union[str, int]] = "auto"  ):
														if slice_size == "auto":
																					# half the attention head size is usually a good trade-off between
																					# speed and memory
																					lowerCamelCase__      :			List[Any] 						= self.unet.config.attention_head_dim // 2
														self.unet.set_attention_slice(__UpperCamelCase  )




							def 	lowerCamelCase_       (							self:       str  ):
														self.enable_attention_slicing(__UpperCamelCase  )




							def 	lowerCamelCase_       (							self:       Optional[int]  ):
														if is_accelerate_available():
																					from accelerate import cpu_offload
														else:
																					raise ImportError("""Please install accelerate via `pip install accelerate`"""  )

														lowerCamelCase__      :			int 						= torch.device("""cuda"""  )

														for cpu_offloaded_model in [self.unet, self.text_encoder, self.vae, self.safety_checker]:
																					if cpu_offloaded_model is not None:
																												cpu_offload(__UpperCamelCase    ,							__UpperCamelCase  )




							@property
							# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline._execution_device
							def 	lowerCamelCase_       (							self:       int  ):
														if self.device != torch.device("""meta"""  ) or not hasattr(self.unet    ,							"""_hf_hook"""  ):
																					return self.device
														for module in self.unet.modules():
																					if (
																					    hasattr(__UpperCamelCase    ,							"""_hf_hook"""  )
																					    and hasattr(module._hf_hook    ,							"""execution_device"""  )
																					    and module._hf_hook.execution_device is not None
																					):
																												return torch.device(module._hf_hook.execution_device  )
														return self.device




							@torch.no_grad()
							def __call__(							self:       Dict    ,							UpperCamelCase__:       Union[str, List[str]]    ,							UpperCamelCase__:       Union[torch.FloatTensor, PIL.Image.Image]    ,							UpperCamelCase__:       str    ,							UpperCamelCase__:       int = 512    ,							UpperCamelCase__:       int = 512    ,							UpperCamelCase__:       int = 50    ,							UpperCamelCase__:       float = 7.5    ,							UpperCamelCase__:       Optional[Union[str, List[str]]] = None    ,							UpperCamelCase__:       Optional[int] = 1    ,							UpperCamelCase__:       float = 0.0    ,							UpperCamelCase__:       Optional[torch.Generator] = None    ,							UpperCamelCase__:       Optional[torch.FloatTensor] = None    ,							UpperCamelCase__:       Optional[str] = "pil"    ,							UpperCamelCase__:       bool = True    ,							UpperCamelCase__:       Optional[Callable[[int, int, torch.FloatTensor], None]] = None    ,							UpperCamelCase__:       int = 1    ,							**UpperCamelCase__:       List[Any]    ,							):
														lowerCamelCase__      :			str 						= self.segmentation_processor(
														    text=[text]    ,							images=[image]    ,							padding="""max_length"""    ,							return_tensors="""pt"""  ).to(self.device  )
														lowerCamelCase__      :			Dict 						= self.segmentation_model(**__UpperCamelCase  )
														lowerCamelCase__      :			Dict 						= torch.sigmoid(outputs.logits  ).cpu().detach().unsqueeze(-1  ).numpy()
														lowerCamelCase__      :			Any 						= self.numpy_to_pil(__UpperCamelCase  )[0].resize(image.size  )

														# Run inpainting pipeline with the generated mask
														lowerCamelCase__      :			Any 						= StableDiffusionInpaintPipeline(
														    vae=self.vae    ,							text_encoder=self.text_encoder    ,							tokenizer=self.tokenizer    ,							unet=self.unet    ,							scheduler=self.scheduler    ,							safety_checker=self.safety_checker    ,							feature_extractor=self.feature_extractor    ,							)
														return inpainting_pipeline(
														    prompt=__UpperCamelCase    ,							image=__UpperCamelCase    ,							mask_image=__UpperCamelCase    ,							height=__UpperCamelCase    ,							width=__UpperCamelCase    ,							num_inference_steps=__UpperCamelCase    ,							guidance_scale=__UpperCamelCase    ,							negative_prompt=__UpperCamelCase    ,							num_images_per_prompt=__UpperCamelCase    ,							eta=__UpperCamelCase    ,							generator=__UpperCamelCase    ,							latents=__UpperCamelCase    ,							output_type=__UpperCamelCase    ,							return_dict=__UpperCamelCase    ,							callback=__UpperCamelCase    ,							callback_steps=__UpperCamelCase    ,							)









'''simple docstring'''







import inspect
import math
import tempfile
import unittest

import numpy as np

from transformers import ViTMAEConfig
from transformers.testing_utils import require_torch, 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 ViTMAEForPreTraining, ViTMAEModel
			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 _lowercase			:




							def __init__(							self:       List[str]    ,							UpperCamelCase__:       Union[str, Any]    ,							UpperCamelCase__:       List[str]=13    ,							UpperCamelCase__:       Optional[int]=30    ,							UpperCamelCase__:       Optional[int]=2    ,							UpperCamelCase__:       List[str]=3    ,							UpperCamelCase__:       List[str]=True    ,							UpperCamelCase__:       Any=True    ,							UpperCamelCase__:       List[Any]=32    ,							UpperCamelCase__:       Any=5    ,							UpperCamelCase__:       Optional[Any]=4    ,							UpperCamelCase__:       Dict=37    ,							UpperCamelCase__:       List[Any]="gelu"    ,							UpperCamelCase__:       Union[str, Any]=0.1    ,							UpperCamelCase__:       Union[str, Any]=0.1    ,							UpperCamelCase__:       List[Any]=10    ,							UpperCamelCase__:       Tuple=0.02    ,							UpperCamelCase__:       Optional[int]=3    ,							UpperCamelCase__:       Dict=0.6    ,							UpperCamelCase__:       int=None    ,							):
														lowerCamelCase__      :			Dict 						= parent
														lowerCamelCase__      :			Optional[Any] 						= batch_size
														lowerCamelCase__      :			Optional[int] 						= image_size
														lowerCamelCase__      :			Optional[Any] 						= patch_size
														lowerCamelCase__      :			Any 						= num_channels
														lowerCamelCase__      :			Any 						= is_training
														lowerCamelCase__      :			Union[str, Any] 						= use_labels
														lowerCamelCase__      :			List[str] 						= hidden_size
														lowerCamelCase__      :			List[str] 						= num_hidden_layers
														lowerCamelCase__      :			List[Any] 						= num_attention_heads
														lowerCamelCase__      :			str 						= intermediate_size
														lowerCamelCase__      :			str 						= hidden_act
														lowerCamelCase__      :			Any 						= hidden_dropout_prob
														lowerCamelCase__      :			Optional[int] 						= attention_probs_dropout_prob
														lowerCamelCase__      :			List[Any] 						= type_sequence_label_size
														lowerCamelCase__      :			int 						= initializer_range
														lowerCamelCase__      :			List[str] 						= mask_ratio
														lowerCamelCase__      :			List[Any] 						= scope

														# in ViTMAE, the expected sequence length = (num_patches + 1) * (1 - config.mask_ratio), rounded above
														# (we add 1 for the [CLS] token)
														lowerCamelCase__      :			str 						= (image_size // patch_size) ** 2
														lowerCamelCase__      :			Optional[int] 						= int(math.ceil((1 - mask_ratio) * (num_patches + 1)  )  )




							def 	lowerCamelCase_       (							self:       Optional[int]  ):
														lowerCamelCase__      :			Tuple 						= floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]  )

														lowerCamelCase__      :			Optional[int] 						= None
														if self.use_labels:
																					lowerCamelCase__      :			List[str] 						= ids_tensor([self.batch_size]    ,							self.type_sequence_label_size  )

														lowerCamelCase__      :			Any 						= self.get_config()

														return config, pixel_values, labels




							def 	lowerCamelCase_       (							self:       str  ):
														return ViTMAEConfig(
														    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    ,							mask_ratio=self.mask_ratio    ,							)




							def 	lowerCamelCase_       (							self:       List[Any]    ,							UpperCamelCase__:       Optional[int]    ,							UpperCamelCase__:       Optional[int]    ,							UpperCamelCase__:       int  ):
														lowerCamelCase__      :			Tuple 						= ViTMAEModel(config=UpperCamelCase__  )
														model.to(UpperCamelCase__  )
														model.eval()
														lowerCamelCase__      :			List[Any] 						= model(UpperCamelCase__  )
														self.parent.assertEqual(result.last_hidden_state.shape    ,							(self.batch_size, self.seq_length, self.hidden_size)  )




							def 	lowerCamelCase_       (							self:       str    ,							UpperCamelCase__:       Union[str, Any]    ,							UpperCamelCase__:       List[Any]    ,							UpperCamelCase__:       Dict  ):
														lowerCamelCase__      :			int 						= ViTMAEForPreTraining(UpperCamelCase__  )
														model.to(UpperCamelCase__  )
														model.eval()
														lowerCamelCase__      :			Optional[int] 						= model(UpperCamelCase__  )
														lowerCamelCase__      :			Any 						= (self.image_size // self.patch_size) ** 2
														lowerCamelCase__      :			str 						= self.patch_size**2 * self.num_channels
														self.parent.assertEqual(result.logits.shape    ,							(self.batch_size, num_patches, expected_num_channels)  )

														# test greyscale images
														lowerCamelCase__      :			Dict 						= 1
														lowerCamelCase__      :			Optional[int] 						= ViTMAEForPreTraining(UpperCamelCase__  )
														model.to(UpperCamelCase__  )
														model.eval()
														lowerCamelCase__      :			Dict 						= floats_tensor([self.batch_size, 1, self.image_size, self.image_size]  )
														lowerCamelCase__      :			Optional[Any] 						= model(UpperCamelCase__  )
														lowerCamelCase__      :			Tuple 						= self.patch_size**2
														self.parent.assertEqual(result.logits.shape    ,							(self.batch_size, num_patches, expected_num_channels)  )




							def 	lowerCamelCase_       (							self:       Any  ):
														lowerCamelCase__      :			Optional[int] 						= self.prepare_config_and_inputs()
														lowerCamelCase__						,	lowerCamelCase__						,	lowerCamelCase__      :			Any 						= config_and_inputs
														lowerCamelCase__      :			Optional[int] 						= {"""pixel_values""": pixel_values}
														return config, inputs_dict



@require_torch
class _lowercase			(       _lowercase       ,   _lowercase       ,   unittest.TestCase	):
							a          = (ViTMAEModel, ViTMAEForPreTraining) if is_torch_available() else ()
							a          = {"""feature-extraction""": ViTMAEModel} if is_torch_available() else {}

							a          = False
							a          = False
							a          = False
							a          = False




							def 	lowerCamelCase_       (							self:       Any  ):
														lowerCamelCase__      :			Tuple 						= ViTMAEModelTester(self  )
														lowerCamelCase__      :			Union[str, Any] 						= ConfigTester(self    ,							config_class=UpperCamelCase__    ,							has_text_modality=UpperCamelCase__    ,							hidden_size=37  )




							def 	lowerCamelCase_       (							self:       Union[str, Any]  ):
														self.config_tester.run_common_tests()




							@unittest.skip(reason="""ViTMAE does not use inputs_embeds"""  )
							def 	lowerCamelCase_       (							self:       Dict  ):
														pass




							def 	lowerCamelCase_       (							self:       List[str]  ):
														lowerCamelCase__						,	lowerCamelCase__      :			str 						= self.model_tester.prepare_config_and_inputs_for_common()

														for model_class in self.all_model_classes:
																					lowerCamelCase__      :			str 						= model_class(UpperCamelCase__  )
																					self.assertIsInstance(model.get_input_embeddings()    ,							(nn.Module)  )
																					lowerCamelCase__      :			Optional[Any] 						= model.get_output_embeddings()
																					self.assertTrue(x is None or isinstance(UpperCamelCase__    ,							nn.Linear  )  )




							def 	lowerCamelCase_       (							self:       List[Any]  ):
														lowerCamelCase__						,	lowerCamelCase__      :			Union[str, Any] 						= self.model_tester.prepare_config_and_inputs_for_common()

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

																					lowerCamelCase__      :			List[str] 						= ["""pixel_values"""]
																					self.assertListEqual(arg_names[:1]    ,							UpperCamelCase__  )




							def 	lowerCamelCase_       (							self:       Union[str, Any]  ):
														lowerCamelCase__      :			Union[str, Any] 						= self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_model(*UpperCamelCase__  )




							def 	lowerCamelCase_       (							self:       Any  ):
														lowerCamelCase__      :			int 						= self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_for_pretraining(*UpperCamelCase__  )




							def 	lowerCamelCase_       (							self:       Optional[int]    ,							UpperCamelCase__:       Union[str, Any]    ,							UpperCamelCase__:       Dict    ,							UpperCamelCase__:       Optional[int]  ):
														# make masks reproducible
														np.random.seed(2  )

														lowerCamelCase__      :			Tuple 						= int((pt_model.config.image_size // pt_model.config.patch_size) ** 2  )
														lowerCamelCase__      :			List[str] 						= np.random.uniform(size=(self.model_tester.batch_size, num_patches)  )
														lowerCamelCase__      :			Tuple 						= torch.from_numpy(UpperCamelCase__  )

														# Add `noise` argument.
														# PT inputs will be prepared in `super().check_pt_tf_models()` with this added `noise` argument
														lowerCamelCase__      :			Tuple 						= pt_noise

														super().check_pt_tf_models(UpperCamelCase__    ,							UpperCamelCase__    ,							UpperCamelCase__  )




							def 	lowerCamelCase_       (							self:       str  ):
														lowerCamelCase__						,	lowerCamelCase__      :			Optional[Any] 						= self.model_tester.prepare_config_and_inputs_for_common()

														for model_class in self.all_model_classes:
																					lowerCamelCase__      :			Union[str, Any] 						= model_class(UpperCamelCase__  )
																					model.to(UpperCamelCase__  )
																					model.eval()
																					# make random mask reproducible
																					torch.manual_seed(2  )
																					with torch.no_grad():
																												lowerCamelCase__      :			Optional[int] 						= model(**self._prepare_for_class(UpperCamelCase__    ,							UpperCamelCase__  )  )

																					lowerCamelCase__      :			Optional[int] 						= outputs[0].cpu().numpy()
																					lowerCamelCase__      :			List[str] 						= 0

																					with tempfile.TemporaryDirectory() as tmpdirname:
																												model.save_pretrained(UpperCamelCase__  )
																												lowerCamelCase__      :			List[str] 						= model_class.from_pretrained(UpperCamelCase__  )
																												model.to(UpperCamelCase__  )
																												# make random mask reproducible
																												torch.manual_seed(2  )
																												with torch.no_grad():
																																			lowerCamelCase__      :			Tuple 						= model(**self._prepare_for_class(UpperCamelCase__    ,							UpperCamelCase__  )  )

																												# Make sure we don't have nans
																												lowerCamelCase__      :			Dict 						= after_outputs[0].cpu().numpy()
																												lowerCamelCase__      :			Tuple 						= 0
																												lowerCamelCase__      :			Union[str, Any] 						= np.amax(np.abs(out_a - out_a  )  )
																												self.assertLessEqual(UpperCamelCase__    ,							1e-5  )




							@unittest.skip(
							    reason="""ViTMAE returns a random mask + ids_restore in each forward pass. See test_save_load
    to get deterministic results."""  )
							def 	lowerCamelCase_       (							self:       int  ):
														pass




							@unittest.skip(
							    reason="""ViTMAE returns a random mask + ids_restore in each forward pass. See test_save_load
    to get deterministic results."""  )
							def 	lowerCamelCase_       (							self:       Any  ):
														pass




							@unittest.skip(
							    reason="""ViTMAE returns a random mask + ids_restore in each forward pass. See test_save_load
    to get deterministic results."""  )
							def 	lowerCamelCase_       (							self:       List[str]  ):
														pass




							@unittest.skip(reason="""ViTMAE returns a random mask + ids_restore in each forward pass. See test_save_load"""  )
							def 	lowerCamelCase_       (							self:       Tuple  ):
														pass




							@unittest.skip("""Will be fixed soon by reducing the size of the model used for common tests."""  )
							def 	lowerCamelCase_       (							self:       Optional[int]  ):
														pass




							@slow
							def 	lowerCamelCase_       (							self:       List[str]  ):
														for model_name in VIT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
																					lowerCamelCase__      :			Tuple 						= ViTMAEModel.from_pretrained(UpperCamelCase__  )
																					self.assertIsNotNone(UpperCamelCase__  )





def 				SCREAMING_SNAKE_CASE_ ()   -> List[Any]:
							lowerCamelCase__      :			Union[str, Any] 						= Image.open("""./tests/fixtures/tests_samples/COCO/000000039769.png"""   )
							return image



@require_torch
@require_vision
class _lowercase			(       unittest.TestCase	):




							@cached_property
							def 	lowerCamelCase_       (							self:       List[str]  ):
														return ViTImageProcessor.from_pretrained("""facebook/vit-mae-base"""  ) if is_vision_available() else None




							@slow
							def 	lowerCamelCase_       (							self:       Tuple  ):
														# make random mask reproducible across the PT and TF model
														np.random.seed(2  )

														lowerCamelCase__      :			str 						= ViTMAEForPreTraining.from_pretrained("""facebook/vit-mae-base"""  ).to(UpperCamelCase__  )

														lowerCamelCase__      :			Tuple 						= self.default_image_processor
														lowerCamelCase__      :			List[str] 						= prepare_img()
														lowerCamelCase__      :			int 						= image_processor(images=UpperCamelCase__    ,							return_tensors="""pt"""  ).to(UpperCamelCase__  )

														# prepare a noise vector that will be also used for testing the TF model
														# (this way we can ensure that the PT and TF models operate on the same inputs)
														lowerCamelCase__      :			List[str] 						= ViTMAEConfig()
														lowerCamelCase__      :			int 						= int((vit_mae_config.image_size // vit_mae_config.patch_size) ** 2  )
														lowerCamelCase__      :			Any 						= np.random.uniform(size=(1, num_patches)  )

														# forward pass
														with torch.no_grad():
																					lowerCamelCase__      :			List[Any] 						= model(**UpperCamelCase__    ,							noise=torch.from_numpy(UpperCamelCase__  ).to(device=UpperCamelCase__  )  )

														# verify the logits
														lowerCamelCase__      :			List[str] 						= torch.Size((1, 196, 768)  )
														self.assertEqual(outputs.logits.shape    ,							UpperCamelCase__  )

														lowerCamelCase__      :			str 						= torch.tensor(
														    [[-0.0_548, -1.7_023, -0.9_325], [0.3_721, -0.5_670, -0.2_233], [0.8_235, -1.3_878, -0.3_524]]  )

														self.assertTrue(torch.allclose(outputs.logits[0, :3, :3]    ,							expected_slice.to(UpperCamelCase__  )    ,							atol=1e-4  )  )

