





"""simple docstring"""





import inspect
import unittest

from transformers import MobileViTVaConfig
from transformers.testing_utils import require_torch, require_torch_multi_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 transformers import MobileViTVaForImageClassification, MobileViTVaForSemanticSegmentation, MobileViTVaModel
						from transformers.models.mobilevitva.modeling_mobilevitva import (
						    MOBILEVITV2_PRETRAINED_MODEL_ARCHIVE_LIST,
						    make_divisible,
						)


if is_vision_available():
						from PIL import Image

						from transformers import MobileViTImageProcessor





class        _lowerCamelCase      (       _lowercase ):


						def     snake_case_   (self		) ->   List[str]:
								UpperCamelCase   =	self.config_class(**self.inputs_dict		)
								self.parent.assertTrue(hasattr(__a   ,							"width_multiplier"		)		)





class        _lowerCamelCase      :


						def __init__(self   ,							__a   ,							__a=13   ,							__a=64   ,							__a=2   ,							__a=3   ,							__a="swish"   ,							__a=3   ,							__a=32   ,							__a=0.1   ,							__a=0.02   ,							__a=True   ,							__a=True   ,							__a=10   ,							__a=None   ,							__a=0.25   ,							__a=0.0   ,							__a=0.0   ,							) ->   Any:
								UpperCamelCase   =	parent
								UpperCamelCase   =	batch_size
								UpperCamelCase   =	image_size
								UpperCamelCase   =	patch_size
								UpperCamelCase   =	num_channels
								UpperCamelCase   =	make_divisible(5_12 * width_multiplier   ,							divisor=8		)
								UpperCamelCase   =	hidden_act
								UpperCamelCase   =	conv_kernel_size
								UpperCamelCase   =	output_stride
								UpperCamelCase   =	classifier_dropout_prob
								UpperCamelCase   =	use_labels
								UpperCamelCase   =	is_training
								UpperCamelCase   =	num_labels
								UpperCamelCase   =	initializer_range
								UpperCamelCase   =	scope
								UpperCamelCase   =	width_multiplier
								UpperCamelCase   =	ffn_dropout
								UpperCamelCase   =	attn_dropout


						def     snake_case_   (self		) ->   Dict:
								UpperCamelCase   =	floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]		)

								UpperCamelCase   =	None
								UpperCamelCase   =	None
								if self.use_labels:
										UpperCamelCase   =	ids_tensor([self.batch_size]   ,							self.num_labels		)
										UpperCamelCase   =	ids_tensor([self.batch_size, self.image_size, self.image_size]   ,							self.num_labels		)

								UpperCamelCase   =	self.get_config()

								return config, pixel_values, labels, pixel_labels


						def     snake_case_   (self		) ->   List[str]:
								return MobileViTVaConfig(
								    image_size=self.image_size   ,							patch_size=self.patch_size   ,							num_channels=self.num_channels   ,							hidden_act=self.hidden_act   ,							conv_kernel_size=self.conv_kernel_size   ,							output_stride=self.output_stride   ,							classifier_dropout_prob=self.classifier_dropout_prob   ,							initializer_range=self.initializer_range   ,							width_multiplier=self.width_multiplier   ,							ffn_dropout=self.ffn_dropout_prob   ,							attn_dropout=self.attn_dropout_prob   ,							)


						def     snake_case_   (self   ,							__a   ,							__a   ,							__a   ,							__a		) ->   Tuple:
								UpperCamelCase   =	MobileViTVaModel(config=__a		)
								model.to(__a		)
								model.eval()
								UpperCamelCase   =	model(__a		)
								self.parent.assertEqual(
								    result.last_hidden_state.shape   ,							(
								        self.batch_size,
								        self.last_hidden_size,
								        self.image_size // self.output_stride,
								        self.image_size // self.output_stride,
								    )   ,							)


						def     snake_case_   (self   ,							__a   ,							__a   ,							__a   ,							__a		) ->   Dict:
								UpperCamelCase   =	self.num_labels
								UpperCamelCase   =	MobileViTVaForImageClassification(__a		)
								model.to(__a		)
								model.eval()
								UpperCamelCase   =	model(__a   ,							labels=__a		)
								self.parent.assertEqual(result.logits.shape   ,							(self.batch_size, self.num_labels)		)


						def     snake_case_   (self   ,							__a   ,							__a   ,							__a   ,							__a		) ->   Union[str, Any]:
								UpperCamelCase   =	self.num_labels
								UpperCamelCase   =	MobileViTVaForSemanticSegmentation(__a		)
								model.to(__a		)
								model.eval()
								UpperCamelCase   =	model(__a		)
								self.parent.assertEqual(
								    result.logits.shape   ,							(
								        self.batch_size,
								        self.num_labels,
								        self.image_size // self.output_stride,
								        self.image_size // self.output_stride,
								    )   ,							)
								UpperCamelCase   =	model(__a   ,							labels=__a		)
								self.parent.assertEqual(
								    result.logits.shape   ,							(
								        self.batch_size,
								        self.num_labels,
								        self.image_size // self.output_stride,
								        self.image_size // self.output_stride,
								    )   ,							)




						def     snake_case_   (self		) ->   str:
								UpperCamelCase   =	self.prepare_config_and_inputs()
								UpperCamelCase   ,				UpperCamelCase   ,				UpperCamelCase   ,				UpperCamelCase   =	config_and_inputs
								UpperCamelCase   =	{"pixel_values": pixel_values}
								return config, inputs_dict





@require_torch
class        _lowerCamelCase      (       _lowercase  ,			_lowercase  ,			unittest.TestCase ):
						UpperCAmelCase_ =			(
						    (MobileViTVaModel, MobileViTVaForImageClassification, MobileViTVaForSemanticSegmentation)
						    if is_torch_available()
						    else ()
						)

						UpperCAmelCase_ =			(
						    {
						        "feature-extraction": MobileViTVaModel,
						        "image-classification": MobileViTVaForImageClassification,
						        "image-segmentation": MobileViTVaForSemanticSegmentation,
						    }
						    if is_torch_available()
						    else {}
						)

						UpperCAmelCase_ =			False
						UpperCAmelCase_ =			False
						UpperCAmelCase_ =			False
						UpperCAmelCase_ =			False


						def     snake_case_   (self		) ->   Dict:
								UpperCamelCase   =	MobileViTVaModelTester(self		)
								UpperCamelCase   =	MobileViTVaConfigTester(self   ,							config_class=__a   ,							has_text_modality=__a		)


						def     snake_case_   (self		) ->   Dict:
								self.config_tester.run_common_tests()


						@unittest.skip(reason="MobileViTV2 does not use inputs_embeds"		)
						def     snake_case_   (self		) ->   Any:
								pass


						@unittest.skip(reason="MobileViTV2 does not support input and output embeddings"		)
						def     snake_case_   (self		) ->   Tuple:
								pass


						@unittest.skip(reason="MobileViTV2 does not output attentions"		)
						def     snake_case_   (self		) ->   Tuple:
								pass


						@require_torch_multi_gpu
						@unittest.skip(reason="Got `CUDA error: misaligned address` for tests after this one being run."		)
						def     snake_case_   (self		) ->   int:
								pass


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


						def     snake_case_   (self		) ->   Union[str, Any]:
								UpperCamelCase   ,				UpperCamelCase   =	self.model_tester.prepare_config_and_inputs_for_common()

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

										UpperCamelCase   =	["pixel_values"]
										self.assertListEqual(arg_names[:1]   ,							__a		)


						def     snake_case_   (self		) ->   Optional[Any]:
								UpperCamelCase   =	self.model_tester.prepare_config_and_inputs()
								self.model_tester.create_and_check_model(*__a		)


						def     snake_case_   (self		) ->   Any:
								def check_hidden_states_output(__a   ,							__a   ,							__a		):
										UpperCamelCase   =	model_class(__a		)
										model.to(__a		)
										model.eval()

										with torch.no_grad():
												UpperCamelCase   =	model(**self._prepare_for_class(__a   ,							__a		)		)

										UpperCamelCase   =	outputs.hidden_states

										UpperCamelCase   =	5
										self.assertEqual(len(__a		)   ,							__a		)

										# MobileViTV2's feature maps are of shape (batch_size, num_channels, height, width)
										# with the width and height being successively divided by 2.
										UpperCamelCase   =	2
										for i in range(len(__a		)		):
												self.assertListEqual(
												    list(hidden_states[i].shape[-2:]		)   ,							[self.model_tester.image_size // divisor, self.model_tester.image_size // divisor]   ,							)
												divisor *= 2

										self.assertEqual(self.model_tester.output_stride   ,							divisor // 2		)

								UpperCamelCase   ,				UpperCamelCase   =	self.model_tester.prepare_config_and_inputs_for_common()

								for model_class in self.all_model_classes:
										UpperCamelCase   =	True
										check_hidden_states_output(__a   ,							__a   ,							__a		)

										# check that output_hidden_states also work using config
										del inputs_dict["output_hidden_states"]
										UpperCamelCase   =	True

										check_hidden_states_output(__a   ,							__a   ,							__a		)


						def     snake_case_   (self		) ->   List[str]:
								UpperCamelCase   =	self.model_tester.prepare_config_and_inputs()
								self.model_tester.create_and_check_for_image_classification(*__a		)


						def     snake_case_   (self		) ->   Tuple:
								UpperCamelCase   =	self.model_tester.prepare_config_and_inputs()
								self.model_tester.create_and_check_for_semantic_segmentation(*__a		)




						@slow
						def     snake_case_   (self		) ->   List[Any]:
								for model_name in MOBILEVITV2_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
										UpperCamelCase   =	MobileViTVaModel.from_pretrained(__a		)
										self.assertIsNotNone(__a		)



def       a__					(					):




		"""simple docstring"""


		UpperCamelCase   =	Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"    )
		return image






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


						@cached_property
						def     snake_case_   (self		) ->   Dict:
								return (
								    MobileViTImageProcessor.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256"		)
								    if is_vision_available()
								    else None
								)


						@slow
						def     snake_case_   (self		) ->   str:
								UpperCamelCase   =	MobileViTVaForImageClassification.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256"		).to(
								    __a		)

								UpperCamelCase   =	self.default_image_processor
								UpperCamelCase   =	prepare_img()
								UpperCamelCase   =	image_processor(images=__a   ,							return_tensors="pt"		).to(__a		)

								# forward pass
								with torch.no_grad():
										UpperCamelCase   =	model(**__a		)

								# verify the logits
								UpperCamelCase   =	torch.Size((1, 10_00)		)
								self.assertEqual(outputs.logits.shape   ,							__a		)

								UpperCamelCase   =	torch.tensor([-1.6_3_3_6e0_0, -7.3_2_0_4e-0_2, -5.1_8_8_3e-0_1]		).to(__a		)

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


						@slow
						def     snake_case_   (self		) ->   List[str]:
								UpperCamelCase   =	MobileViTVaForSemanticSegmentation.from_pretrained("shehan97/mobilevitv2-1.0-voc-deeplabv3"		)
								UpperCamelCase   =	model.to(__a		)

								UpperCamelCase   =	MobileViTImageProcessor.from_pretrained("shehan97/mobilevitv2-1.0-voc-deeplabv3"		)

								UpperCamelCase   =	prepare_img()
								UpperCamelCase   =	image_processor(images=__a   ,							return_tensors="pt"		).to(__a		)

								# forward pass
								with torch.no_grad():
										UpperCamelCase   =	model(**__a		)
								UpperCamelCase   =	outputs.logits

								# verify the logits
								UpperCamelCase   =	torch.Size((1, 21, 32, 32)		)
								self.assertEqual(logits.shape   ,							__a		)

								UpperCamelCase   =	torch.tensor(
								    [
								        [[7.0863, 7.1525, 6.8201], [6.6931, 6.8770, 6.8933], [6.2978, 7.0366, 6.9636]],
								        [[-3.7134, -3.6712, -3.6675], [-3.5825, -3.3549, -3.4777], [-3.3435, -3.3979, -3.2857]],
								        [[-2.9329, -2.8003, -2.7369], [-3.0564, -2.4780, -2.0207], [-2.6889, -1.9298, -1.7640]],
								    ]   ,							device=__a   ,							)

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




						@slow
						def     snake_case_   (self		) ->   Union[str, Any]:
								UpperCamelCase   =	MobileViTVaForSemanticSegmentation.from_pretrained("shehan97/mobilevitv2-1.0-voc-deeplabv3"		)
								UpperCamelCase   =	model.to(__a		)

								UpperCamelCase   =	MobileViTImageProcessor.from_pretrained("shehan97/mobilevitv2-1.0-voc-deeplabv3"		)

								UpperCamelCase   =	prepare_img()
								UpperCamelCase   =	image_processor(images=__a   ,							return_tensors="pt"		).to(__a		)

								# forward pass
								with torch.no_grad():
										UpperCamelCase   =	model(**__a		)

								UpperCamelCase   =	outputs.logits.detach().cpu()

								UpperCamelCase   =	image_processor.post_process_semantic_segmentation(outputs=__a   ,							target_sizes=[(50, 60)]		)
								UpperCamelCase   =	torch.Size((50, 60)		)
								self.assertEqual(segmentation[0].shape   ,							__a		)

								UpperCamelCase   =	image_processor.post_process_semantic_segmentation(outputs=__a		)
								UpperCamelCase   =	torch.Size((32, 32)		)
								self.assertEqual(segmentation[0].shape   ,							__a		)













"""simple docstring"""





from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


lowerCAmelCase__     			=			{
    '''configuration_blenderbot''': [
        '''BLENDERBOT_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''BlenderbotConfig''',
        '''BlenderbotOnnxConfig''',
    ],
    '''tokenization_blenderbot''': ['''BlenderbotTokenizer'''],
}

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

try:
						if not is_torch_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCAmelCase__     			=			[
						    '''BLENDERBOT_PRETRAINED_MODEL_ARCHIVE_LIST''',
						    '''BlenderbotForCausalLM''',
						    '''BlenderbotForConditionalGeneration''',
						    '''BlenderbotModel''',
						    '''BlenderbotPreTrainedModel''',
						]


try:
						if not is_tf_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCAmelCase__     			=			[
						    '''TFBlenderbotForConditionalGeneration''',
						    '''TFBlenderbotModel''',
						    '''TFBlenderbotPreTrainedModel''',
						]


try:
						if not is_flax_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCAmelCase__     			=			[
						    '''FlaxBlenderbotForConditionalGeneration''',
						    '''FlaxBlenderbotModel''',
						    '''FlaxBlenderbotPreTrainedModel''',
						]


if TYPE_CHECKING:
						from .configuration_blenderbot import (
						    BLENDERBOT_PRETRAINED_CONFIG_ARCHIVE_MAP,
						    BlenderbotConfig,
						    BlenderbotOnnxConfig,
						)
						from .tokenization_blenderbot import BlenderbotTokenizer

						try:
												if not is_tokenizers_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .tokenization_blenderbot_fast import BlenderbotTokenizerFast

						try:
												if not is_torch_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_blenderbot import (
												    BLENDERBOT_PRETRAINED_MODEL_ARCHIVE_LIST,
												    BlenderbotForCausalLM,
												    BlenderbotForConditionalGeneration,
												    BlenderbotModel,
												    BlenderbotPreTrainedModel,
												)

						try:
												if not is_tf_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_tf_blenderbot import (
												    TFBlenderbotForConditionalGeneration,
												    TFBlenderbotModel,
												    TFBlenderbotPreTrainedModel,
												)

						try:
												if not is_flax_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_flax_blenderbot import (
												    FlaxBlenderbotForConditionalGeneration,
												    FlaxBlenderbotModel,
												    FlaxBlenderbotPreTrainedModel,
												)

else:
						import sys

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






