
"""simple docstring"""






import os
import re
from shutil import copyfile
from typing import List, Optional, Tuple

from ...tokenization_utils import PreTrainedTokenizer
from ...utils import logging


_lowercase							=				logging.get_logger(__name__)

_lowercase							=				{
    '''vocab_file''': '''vocab.txt''',
    '''merges_file''': '''bpe.codes''',
}

_lowercase							=				{
    '''vocab_file''': {
        '''vinai/phobert-base''': '''https://huggingface.co/vinai/phobert-base/resolve/main/vocab.txt''',
        '''vinai/phobert-large''': '''https://huggingface.co/vinai/phobert-large/resolve/main/vocab.txt''',
    },
    '''merges_file''': {
        '''vinai/phobert-base''': '''https://huggingface.co/vinai/phobert-base/resolve/main/bpe.codes''',
        '''vinai/phobert-large''': '''https://huggingface.co/vinai/phobert-large/resolve/main/bpe.codes''',
    },
}

_lowercase							=				{
    '''vinai/phobert-base''': 256,
    '''vinai/phobert-large''': 256,
}



def      lowerCAmelCase__			(		__magic_name__      )						->Optional[int]:
			__lowercase       =       set()
			__lowercase       =       word[0]
			for char in word[1:]:
						pairs.add((prev_char, char)      )
						__lowercase       =       char

			__lowercase       =       set(__magic_name__      )
			return pairs







class 					__a     ( __a       ):



							'''simple docstring'''







							_lowerCamelCase					:			int          =   VOCAB_FILES_NAMES
							_lowerCamelCase					:			List[str]          =   PRETRAINED_VOCAB_FILES_MAP
							_lowerCamelCase					:			Optional[Any]          =   PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
							def __init__(     self  ,    _lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase="<s>"  ,    _lowerCamelCase="</s>"  ,    _lowerCamelCase="</s>"  ,    _lowerCamelCase="<s>"  ,    _lowerCamelCase="<unk>"  ,    _lowerCamelCase="<pad>"  ,    _lowerCamelCase="<mask>"  ,    **_lowerCamelCase  ,    )			->							Tuple:




										'''simple docstring'''
										super().__init__(
										    bos_token=_lowerCamelCase  ,    eos_token=_lowerCamelCase  ,    unk_token=_lowerCamelCase  ,    sep_token=_lowerCamelCase  ,    cls_token=_lowerCamelCase  ,    pad_token=_lowerCamelCase  ,    mask_token=_lowerCamelCase  ,    **_lowerCamelCase  ,    )

										__lowercase       =       vocab_file
										__lowercase       =       merges_file

										__lowercase       =       {}
										__lowercase       =       0
										__lowercase       =       1
										__lowercase       =       2
										__lowercase       =       3

										self.add_from_file(_lowerCamelCase       )

										__lowercase       =       {v: k for k, v in self.encoder.items()}

										with open(_lowerCamelCase  ,    encoding="utf-8"       ) as merges_handle:
													__lowercase       =       merges_handle.read().split("\n"       )[:-1]
										__lowercase       =       [tuple(merge.split()[:-1]       ) for merge in merges]
										__lowercase       =       dict(zip(_lowerCamelCase  ,    range(len(_lowerCamelCase       )       )       )       )
										__lowercase       =       {}
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase  ,    _lowerCamelCase = None       )			->							List[int]:




										'''simple docstring'''

										if token_ids_a is None:
													return [self.cls_token_id] + token_ids_a + [self.sep_token_id]
										__lowercase       =       [self.cls_token_id]
										__lowercase       =       [self.sep_token_id]
										return cls + token_ids_a + sep + sep + token_ids_a + sep
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase  ,    _lowerCamelCase = None  ,    _lowerCamelCase = False       )			->							List[int]:




										'''simple docstring'''

										if already_has_special_tokens:
													return super().get_special_tokens_mask(
													    token_ids_a=_lowerCamelCase  ,    token_ids_a=_lowerCamelCase  ,    already_has_special_tokens=_lowerCamelCase       )

										if token_ids_a is None:
													return [1] + ([0] * len(_lowerCamelCase       )) + [1]
										return [1] + ([0] * len(_lowerCamelCase       )) + [1, 1] + ([0] * len(_lowerCamelCase       )) + [1]
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase  ,    _lowerCamelCase = None       )			->							List[int]:




										'''simple docstring'''
										__lowercase       =       [self.sep_token_id]
										__lowercase       =       [self.cls_token_id]

										if token_ids_a is None:
													return len(cls + token_ids_a + sep       ) * [0]
										return len(cls + token_ids_a + sep + sep + token_ids_a + sep       ) * [0]
							@property
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Optional[Any]:




										'''simple docstring'''
										return len(self.encoder       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							str:




										'''simple docstring'''
										return dict(self.encoder  ,    **self.added_tokens_encoder       )
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase       )			->							List[Any]:




										'''simple docstring'''
										if token in self.cache:
													return self.cache[token]
										__lowercase       =       tuple(_lowerCamelCase       )
										__lowercase       =       tuple(list(word[:-1]       ) + [word[-1] + "</w>"]       )
										__lowercase       =       get_pairs(_lowerCamelCase       )

										if not pairs:
													return token

										while True:
													__lowercase       =       min(_lowerCamelCase  ,    key=lambda _lowerCamelCase       : self.bpe_ranks.get(_lowerCamelCase  ,    float("inf"       )       )       )
													if bigram not in self.bpe_ranks:
																break
													__lowercase   ,					__lowercase       =       bigram
													__lowercase       =       []
													__lowercase       =       0
													while i < len(_lowerCamelCase       ):
																try:
																			__lowercase       =       word.index(_lowerCamelCase  ,    _lowerCamelCase       )
																except ValueError:
																			new_word.extend(word[i:]       )
																			break
																else:
																			new_word.extend(word[i:j]       )
																			__lowercase       =       j

																if word[i] == first and i < len(_lowerCamelCase       ) - 1 and word[i + 1] == second:
																			new_word.append(first + second       )
																			i += 2
																else:
																			new_word.append(word[i]       )
																			i += 1
													__lowercase       =       tuple(_lowerCamelCase       )
													__lowercase       =       new_word
													if len(_lowerCamelCase       ) == 1:
																break
													else:
																__lowercase       =       get_pairs(_lowerCamelCase       )
										__lowercase       =       "@@ ".join(_lowerCamelCase       )
										__lowercase       =       word[:-4]
										__lowercase       =       word
										return word
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase       )			->							str:




										'''simple docstring'''
										__lowercase       =       []

										__lowercase       =       re.findall(R"\S+\n?"  ,    _lowerCamelCase       )

										for token in words:
													split_tokens.extend(list(self.bpe(_lowerCamelCase       ).split(" "       )       )       )
										return split_tokens
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase       )			->							Optional[Any]:




										'''simple docstring'''
										return self.encoder.get(_lowerCamelCase  ,    self.encoder.get(self.unk_token       )       )
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase       )			->							Optional[int]:




										'''simple docstring'''
										return self.decoder.get(_lowerCamelCase  ,    self.unk_token       )
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase       )			->							Tuple:




										'''simple docstring'''
										__lowercase       =       " ".join(_lowerCamelCase       ).replace("@@ "  ,    ""       ).strip()
										return out_string
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase  ,    _lowerCamelCase = None       )			->							Tuple[str]:




										'''simple docstring'''
										if not os.path.isdir(_lowerCamelCase       ):
													logger.error(f'''Vocabulary path ({save_directory}) should be a directory'''       )
													return
										__lowercase       =       os.path.join(
										    _lowerCamelCase  ,    (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]       )
										__lowercase       =       os.path.join(
										    _lowerCamelCase  ,    (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["merges_file"]       )

										if os.path.abspath(self.vocab_file       ) != os.path.abspath(_lowerCamelCase       ):
													copyfile(self.vocab_file  ,    _lowerCamelCase       )

										if os.path.abspath(self.merges_file       ) != os.path.abspath(_lowerCamelCase       ):
													copyfile(self.merges_file  ,    _lowerCamelCase       )

										return out_vocab_file, out_merge_file





							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase       )			->							Dict:




										'''simple docstring'''
										if isinstance(_lowerCamelCase  ,    _lowerCamelCase       ):
													try:
																with open(_lowerCamelCase  ,    "r"  ,    encoding="utf-8"       ) as fd:
																			self.add_from_file(_lowerCamelCase       )
													except FileNotFoundError as fnfe:
																raise fnfe
													except UnicodeError:
																raise Exception(f'''Incorrect encoding detected in {f}, please rebuild the dataset'''       )
													return

										__lowercase       =       f.readlines()
										for lineTmp in lines:
													__lowercase       =       lineTmp.strip()
													__lowercase       =       line.rfind(" "       )
													if idx == -1:
																raise ValueError("Incorrect dictionary format, expected '<token> <cnt>'"       )
													__lowercase       =       line[:idx]
													__lowercase       =       len(self.encoder       )







"""simple docstring"""






import inspect
import unittest

from transformers import MobileViTConfig
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 transformers import MobileViTForImageClassification, MobileViTForSemanticSegmentation, MobileViTModel
					from transformers.models.mobilevit.modeling_mobilevit import MOBILEVIT_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
					from PIL import Image

					from transformers import MobileViTImageProcessor

class 					__a     ( __a       ):



							'''simple docstring'''







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




										'''simple docstring'''
										__lowercase       =       self.config_class(**self.inputs_dict       )
										self.parent.assertTrue(hasattr(_lowerCamelCase  ,    "hidden_sizes"       )       )
										self.parent.assertTrue(hasattr(_lowerCamelCase  ,    "neck_hidden_sizes"       )       )
										self.parent.assertTrue(hasattr(_lowerCamelCase  ,    "num_attention_heads"       )       )





class 					__a     :



							'''simple docstring'''







							def __init__(     self  ,    _lowerCamelCase  ,    _lowerCamelCase=13  ,    _lowerCamelCase=32  ,    _lowerCamelCase=2  ,    _lowerCamelCase=3  ,    _lowerCamelCase=640  ,    _lowerCamelCase=4  ,    _lowerCamelCase="silu"  ,    _lowerCamelCase=3  ,    _lowerCamelCase=32  ,    _lowerCamelCase=0.1  ,    _lowerCamelCase=0.1  ,    _lowerCamelCase=0.1  ,    _lowerCamelCase=0.02  ,    _lowerCamelCase=True  ,    _lowerCamelCase=True  ,    _lowerCamelCase=10  ,    _lowerCamelCase=None  ,    )			->							Tuple:




										'''simple docstring'''
										__lowercase       =       parent
										__lowercase       =       batch_size
										__lowercase       =       image_size
										__lowercase       =       patch_size
										__lowercase       =       num_channels
										__lowercase       =       last_hidden_size
										__lowercase       =       num_attention_heads
										__lowercase       =       hidden_act
										__lowercase       =       conv_kernel_size
										__lowercase       =       output_stride
										__lowercase       =       hidden_dropout_prob
										__lowercase       =       attention_probs_dropout_prob
										__lowercase       =       classifier_dropout_prob
										__lowercase       =       use_labels
										__lowercase       =       is_training
										__lowercase       =       num_labels
										__lowercase       =       initializer_range
										__lowercase       =       scope
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Tuple:




										'''simple docstring'''
										__lowercase       =       floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]       )

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

										__lowercase       =       self.get_config()

										return config, pixel_values, labels, pixel_labels
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Tuple:




										'''simple docstring'''
										return MobileViTConfig(
										    image_size=self.image_size  ,    patch_size=self.patch_size  ,    num_channels=self.num_channels  ,    num_attention_heads=self.num_attention_heads  ,    hidden_act=self.hidden_act  ,    conv_kernel_size=self.conv_kernel_size  ,    output_stride=self.output_stride  ,    hidden_dropout_prob=self.hidden_dropout_prob  ,    attention_probs_dropout_prob=self.attention_probs_dropout_prob  ,    classifier_dropout_prob=self.classifier_dropout_prob  ,    initializer_range=self.initializer_range  ,    )
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase       )			->							str:




										'''simple docstring'''
										__lowercase       =       MobileViTModel(config=_lowerCamelCase       )
										model.to(_lowerCamelCase       )
										model.eval()
										__lowercase       =       model(_lowerCamelCase       )
										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   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase       )			->							int:




										'''simple docstring'''
										__lowercase       =       self.num_labels
										__lowercase       =       MobileViTForImageClassification(_lowerCamelCase       )
										model.to(_lowerCamelCase       )
										model.eval()
										__lowercase       =       model(_lowerCamelCase  ,    labels=_lowerCamelCase       )
										self.parent.assertEqual(result.logits.shape  ,    (self.batch_size, self.num_labels)       )
							def   SCREAMING_SNAKE_CASE						(     self  ,    _lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase       )			->							Optional[int]:




										'''simple docstring'''
										__lowercase       =       self.num_labels
										__lowercase       =       MobileViTForSemanticSegmentation(_lowerCamelCase       )
										model.to(_lowerCamelCase       )
										model.eval()
										__lowercase       =       model(_lowerCamelCase       )
										self.parent.assertEqual(
										    result.logits.shape  ,    (
										        self.batch_size,
										        self.num_labels,
										        self.image_size // self.output_stride,
										        self.image_size // self.output_stride,
										    )  ,    )
										__lowercase       =       model(_lowerCamelCase  ,    labels=_lowerCamelCase       )
										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   SCREAMING_SNAKE_CASE						(     self       )			->							List[str]:




										'''simple docstring'''
										__lowercase       =       self.prepare_config_and_inputs()
										__lowercase   ,					__lowercase   ,					__lowercase   ,					__lowercase       =       config_and_inputs
										__lowercase       =       {"pixel_values": pixel_values}
										return config, inputs_dict





@require_torch
class 					__a     ( __a					,   __a					,   unittest.TestCase       ):



							'''simple docstring'''







							_lowerCamelCase					:			str          =   (
							    (MobileViTModel, MobileViTForImageClassification, MobileViTForSemanticSegmentation)
							    if is_torch_available()
							    else ()
							)
							_lowerCamelCase					:			Optional[int]          =   (
							    {
							        """feature-extraction""": MobileViTModel,
							        """image-classification""": MobileViTForImageClassification,
							        """image-segmentation""": MobileViTForSemanticSegmentation,
							    }
							    if is_torch_available()
							    else {}
							)

							_lowerCamelCase					:			Tuple          =   False
							_lowerCamelCase					:			Optional[Any]          =   False
							_lowerCamelCase					:			Any          =   False
							_lowerCamelCase					:			List[Any]          =   False
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Tuple:




										'''simple docstring'''
										__lowercase       =       MobileViTModelTester(self       )
										__lowercase       =       MobileViTConfigTester(self  ,    config_class=_lowerCamelCase  ,    has_text_modality=_lowerCamelCase       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Dict:




										'''simple docstring'''
										self.config_tester.run_common_tests()
							@unittest.skip(reason="MobileViT does not use inputs_embeds"       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							str:




										'''simple docstring'''
										pass
							@unittest.skip(reason="MobileViT does not support input and output embeddings"       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Dict:




										'''simple docstring'''
										pass
							@unittest.skip(reason="MobileViT does not output attentions"       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Dict:




										'''simple docstring'''
										pass
							def   SCREAMING_SNAKE_CASE						(     self       )			->							int:




										'''simple docstring'''
										__lowercase   ,					__lowercase       =       self.model_tester.prepare_config_and_inputs_for_common()

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

													__lowercase       =       ["pixel_values"]
													self.assertListEqual(arg_names[:1]  ,    _lowerCamelCase       )
							@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests."       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Dict:




										'''simple docstring'''
										pass
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Tuple:




										'''simple docstring'''
										__lowercase       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_model(*_lowerCamelCase       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							List[Any]:




										'''simple docstring'''
										def check_hidden_states_output(_lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase       ):
													__lowercase       =       model_class(_lowerCamelCase       )
													model.to(_lowerCamelCase       )
													model.eval()

													with torch.no_grad():
																__lowercase       =       model(**self._prepare_for_class(_lowerCamelCase  ,    _lowerCamelCase       )       )

													__lowercase       =       outputs.hidden_states

													__lowercase       =       5
													self.assertEqual(len(_lowerCamelCase       )  ,    _lowerCamelCase       )

													# MobileViT's feature maps are of shape (batch_size, num_channels, height, width)
													# with the width and height being successively divided by 2.
													__lowercase       =       2
													for i in range(len(_lowerCamelCase       )       ):
																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       )

										__lowercase   ,					__lowercase       =       self.model_tester.prepare_config_and_inputs_for_common()

										for model_class in self.all_model_classes:
													__lowercase       =       True
													check_hidden_states_output(_lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase       )

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

													check_hidden_states_output(_lowerCamelCase  ,    _lowerCamelCase  ,    _lowerCamelCase       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							List[str]:




										'''simple docstring'''
										__lowercase       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_for_image_classification(*_lowerCamelCase       )
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Optional[Any]:




										'''simple docstring'''
										__lowercase       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_for_semantic_segmentation(*_lowerCamelCase       )





							@slow
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Tuple:




										'''simple docstring'''
										for model_name in MOBILEVIT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
													__lowercase       =       MobileViTModel.from_pretrained(_lowerCamelCase       )
													self.assertIsNotNone(_lowerCamelCase       )





def      lowerCAmelCase__			(		)						->List[Any]:
			__lowercase       =       Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"      )
			return image







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



							'''simple docstring'''







							@cached_property
							def   SCREAMING_SNAKE_CASE						(     self       )			->							str:




										'''simple docstring'''
										return MobileViTImageProcessor.from_pretrained("apple/mobilevit-xx-small"       ) if is_vision_available() else None
							@slow
							def   SCREAMING_SNAKE_CASE						(     self       )			->							Optional[int]:




										'''simple docstring'''
										__lowercase       =       MobileViTForImageClassification.from_pretrained("apple/mobilevit-xx-small"       ).to(_lowerCamelCase       )

										__lowercase       =       self.default_image_processor
										__lowercase       =       prepare_img()
										__lowercase       =       image_processor(images=_lowerCamelCase  ,    return_tensors="pt"       ).to(_lowerCamelCase       )

										# forward pass
										with torch.no_grad():
													__lowercase       =       model(**_lowerCamelCase       )

										# verify the logits
										__lowercase       =       torch.Size((1, 1_000)       )
										self.assertEqual(outputs.logits.shape  ,    _lowerCamelCase       )

										__lowercase       =       torch.tensor([-1.9364, -1.2327, -0.4653]       ).to(_lowerCamelCase       )

										self.assertTrue(torch.allclose(outputs.logits[0, :3]  ,    _lowerCamelCase  ,    atol=1e-4       )       )
							@slow
							def   SCREAMING_SNAKE_CASE						(     self       )			->							List[str]:




										'''simple docstring'''
										__lowercase       =       MobileViTForSemanticSegmentation.from_pretrained("apple/deeplabv3-mobilevit-xx-small"       )
										__lowercase       =       model.to(_lowerCamelCase       )

										__lowercase       =       MobileViTImageProcessor.from_pretrained("apple/deeplabv3-mobilevit-xx-small"       )

										__lowercase       =       prepare_img()
										__lowercase       =       image_processor(images=_lowerCamelCase  ,    return_tensors="pt"       ).to(_lowerCamelCase       )

										# forward pass
										with torch.no_grad():
													__lowercase       =       model(**_lowerCamelCase       )
										__lowercase       =       outputs.logits

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

										__lowercase       =       torch.tensor(
										    [
										        [[6.9713, 6.9786, 7.2422], [7.2893, 7.2825, 7.4446], [7.6580, 7.8797, 7.9420]],
										        [[-10.6869, -10.3250, -10.3471], [-10.4228, -9.9868, -9.7132], [-11.0405, -11.0221, -10.7318]],
										        [[-3.3089, -2.8539, -2.6740], [-3.2706, -2.5621, -2.5108], [-3.2534, -2.6615, -2.6651]],
										    ]  ,    device=_lowerCamelCase  ,    )

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





							@slow
							def   SCREAMING_SNAKE_CASE						(     self       )			->							List[str]:




										'''simple docstring'''
										__lowercase       =       MobileViTForSemanticSegmentation.from_pretrained("apple/deeplabv3-mobilevit-xx-small"       )
										__lowercase       =       model.to(_lowerCamelCase       )

										__lowercase       =       MobileViTImageProcessor.from_pretrained("apple/deeplabv3-mobilevit-xx-small"       )

										__lowercase       =       prepare_img()
										__lowercase       =       image_processor(images=_lowerCamelCase  ,    return_tensors="pt"       ).to(_lowerCamelCase       )

										# forward pass
										with torch.no_grad():
													__lowercase       =       model(**_lowerCamelCase       )

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

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

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





