
import os
import warnings
from pathlib import Path
from typing import Optional, Union

from .dynamic_module_utils import custom_object_save
from .tokenization_utils_base import PreTrainedTokenizerBase
from .utils import PushToHubMixin, copy_func, direct_transformers_import, logging


lowercase__				:				Dict						=      logging.get_logger(__name__)

# Dynamically import the Transformers module to grab the attribute classes of the processor form their names.
lowercase__				:				Union[str, Any]						=      direct_transformers_import(Path(__file__).parent)


lowercase__				:				Optional[int]						=      {
    "AutoTokenizer": "PreTrainedTokenizerBase",
    "AutoFeatureExtractor": "FeatureExtractionMixin",
    "AutoImageProcessor": "ImageProcessingMixin",
}






class 							SCREAMING_SNAKE_CASE__     (				SCREAMING_SNAKE_CASE_     ):

							"""simple docstring"""






							_snake_case  		=	['feature_extractor', 'tokenizer']
							# Names need to be attr_class for attr in attributes
							_snake_case  		=	None
							_snake_case  		=	None
							_snake_case  		=	None



							def __init__(	self  ,						*SCREAMING_SNAKE_CASE_  ,						**SCREAMING_SNAKE_CASE_      )-> str:





													'''simple docstring'''






													for key in kwargs:
																			if key not in self.attributes:
																									raise TypeError(F"Unexpected keyword argument {key}."      )
													for arg, attribute_name in zip(SCREAMING_SNAKE_CASE_  ,						self.attributes      ):
																			if attribute_name in kwargs:
																									raise TypeError(F"Got multiple values for argument {attribute_name}."      )
																			else:
																									__UpperCamelCase  	=      arg

													if len(SCREAMING_SNAKE_CASE_      ) != len(self.attributes      ):
																			raise ValueError(
																			    F"This processor requires {len(self.attributes      )} arguments: {', '.join(self.attributes      )}. Got "
																			    F"{len(SCREAMING_SNAKE_CASE_      )} arguments instead."      )

													# Check each arg is of the proper class (this will also catch a user initializing in the wrong order)
													for attribute_name, arg in kwargs.items():
																			__UpperCamelCase  	=      getattr(self  ,						F"{attribute_name}_class"      )
																			# Nothing is ever going to be an instance of "AutoXxx", in that case we check the base class.
																			__UpperCamelCase  	=      AUTO_TO_BASE_CLASS_MAPPING.get(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )
																			if isinstance(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ):
																									__UpperCamelCase  	=      tuple(getattr(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ) for n in class_name if n is not None      )
																			else:
																									__UpperCamelCase  	=      getattr(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )

																			if not isinstance(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ):
																									raise ValueError(
																									    F"Received a {type(SCREAMING_SNAKE_CASE_      ).__name__} for argument {attribute_name}, but a {class_name} was expected."      )

																			setattr(self  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )



							def __repr__(	self      )-> Any:





													'''simple docstring'''






													__UpperCamelCase  	=      [F"- {name}: {repr(getattr(self  ,						SCREAMING_SNAKE_CASE_      )      )}" for name in self.attributes]
													__UpperCamelCase  	=      '''\n'''.join(SCREAMING_SNAKE_CASE_      )
													return F"{self.__class__.__name__}:\n{attributes_repr}"



							def      A__		(	self  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_ = False  ,						**SCREAMING_SNAKE_CASE_      )-> List[Any]:





													'''simple docstring'''






													os.makedirs(SCREAMING_SNAKE_CASE_  ,						exist_ok=SCREAMING_SNAKE_CASE_      )

													if push_to_hub:
																			__UpperCamelCase  	=      kwargs.pop('''commit_message'''  ,						SCREAMING_SNAKE_CASE_      )
																			__UpperCamelCase  	=      kwargs.pop('''repo_id'''  ,						save_directory.split(os.path.sep      )[-1]      )
																			__UpperCamelCase  	=      self._create_repo(SCREAMING_SNAKE_CASE_  ,						**SCREAMING_SNAKE_CASE_      )
																			__UpperCamelCase  	=      self._get_files_timestamps(SCREAMING_SNAKE_CASE_      )
													# If we have a custom config, we copy the file defining it in the folder and set the attributes so it can be
													# loaded from the Hub.
													if self._auto_class is not None:
																			__UpperCamelCase  	=      [getattr(self  ,						SCREAMING_SNAKE_CASE_      ) for attribute_name in self.attributes]
																			__UpperCamelCase  	=      [(a.init_kwargs if isinstance(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ) else a) for a in attrs]
																			custom_object_save(self  ,						SCREAMING_SNAKE_CASE_  ,						config=SCREAMING_SNAKE_CASE_      )

													for attribute_name in self.attributes:
																			__UpperCamelCase  	=      getattr(self  ,						SCREAMING_SNAKE_CASE_      )
																			# Include the processor class in the attribute config so this processor can then be reloaded with the
																			# `AutoProcessor` API.
																			if hasattr(SCREAMING_SNAKE_CASE_  ,						'''_set_processor_class'''      ):
																									attribute._set_processor_class(self.__class__.__name__      )
																			attribute.save_pretrained(SCREAMING_SNAKE_CASE_      )

													if self._auto_class is not None:
																			# We added an attribute to the init_kwargs of the tokenizers, which needs to be cleaned up.
																			for attribute_name in self.attributes:
																									__UpperCamelCase  	=      getattr(self  ,						SCREAMING_SNAKE_CASE_      )
																									if isinstance(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ):
																															del attribute.init_kwargs["auto_map"]

													if push_to_hub:
																			self._upload_modified_files(
																			    SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						commit_message=SCREAMING_SNAKE_CASE_  ,						token=kwargs.get('''use_auth_token'''      )  ,						)



							@classmethod
							def      A__		(	cls  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_ = None  ,						SCREAMING_SNAKE_CASE_ = False  ,						SCREAMING_SNAKE_CASE_ = False  ,						SCREAMING_SNAKE_CASE_ = None  ,						SCREAMING_SNAKE_CASE_ = "main"  ,						**SCREAMING_SNAKE_CASE_  ,						)-> Any:





													'''simple docstring'''






													__UpperCamelCase  	=      cache_dir
													__UpperCamelCase  	=      force_download
													__UpperCamelCase  	=      local_files_only
													__UpperCamelCase  	=      revision

													__UpperCamelCase  	=      kwargs.pop('''use_auth_token'''  ,						SCREAMING_SNAKE_CASE_      )
													if use_auth_token is not None:
																			warnings.warn(
																			    '''The `use_auth_token` argument is deprecated and will be removed in v5 of Transformers.'''  ,						SCREAMING_SNAKE_CASE_      )
																			if token is not None:
																									raise ValueError(
																									    '''`token` and `use_auth_token` are both specified. Please set only the argument `token`.'''      )
																			__UpperCamelCase  	=      use_auth_token

													if token is not None:
																			# change to `token` in a follow-up PR
																			__UpperCamelCase  	=      token

													__UpperCamelCase  	=      cls._get_arguments_from_pretrained(SCREAMING_SNAKE_CASE_  ,						**SCREAMING_SNAKE_CASE_      )
													return cls(*SCREAMING_SNAKE_CASE_      )



							@classmethod
							def      A__		(	cls  ,						SCREAMING_SNAKE_CASE_="AutoProcessor"      )-> Optional[int]:





													'''simple docstring'''






													if not isinstance(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ):
																			__UpperCamelCase  	=      auto_class.__name__

													import transformers.models.auto as auto_module

													if not hasattr(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ):
																			raise ValueError(F"{auto_class} is not a valid auto class."      )

													__UpperCamelCase  	=      auto_class



							@classmethod
							def      A__		(	cls  ,						SCREAMING_SNAKE_CASE_  ,						**SCREAMING_SNAKE_CASE_      )-> Optional[int]:





													'''simple docstring'''






													__UpperCamelCase  	=      []
													for attribute_name in cls.attributes:
																			__UpperCamelCase  	=      getattr(cls  ,						F"{attribute_name}_class"      )
																			if isinstance(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ):
																									__UpperCamelCase  	=      tuple(getattr(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ) if n is not None else None for n in class_name      )
																									__UpperCamelCase  	=      kwargs.get('''use_fast'''  ,						SCREAMING_SNAKE_CASE_      )
																									if use_fast and classes[1] is not None:
																															__UpperCamelCase  	=      classes[1]
																									else:
																															__UpperCamelCase  	=      classes[0]
																			else:
																									__UpperCamelCase  	=      getattr(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )

																			args.append(attribute_class.from_pretrained(SCREAMING_SNAKE_CASE_  ,						**SCREAMING_SNAKE_CASE_      )      )
													return args



							@property
							def      A__		(	self      )-> Any:





													'''simple docstring'''






													__UpperCamelCase  	=      getattr(self  ,						self.attributes[0]      )
													return getattr(SCREAMING_SNAKE_CASE_  ,						'''model_input_names'''  ,						SCREAMING_SNAKE_CASE_      )





lowercase__				:				Any						=      copy_func(ProcessorMixin.push_to_hub)
if ProcessorMixin.push_to_hub.__doc__ is not None:
				lowercase__				:				str						=      ProcessorMixin.push_to_hub.__doc__.format(
				    object="processor", object_class="AutoProcessor", object_files="processor files"
				)






import inspect
import unittest
import warnings
from typing import List

from transformers import EfficientFormerConfig
from transformers.models.auto import get_values
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 (
				    MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING,
				    MODEL_MAPPING,
				    EfficientFormerForImageClassification,
				    EfficientFormerForImageClassificationWithTeacher,
				    EfficientFormerModel,
				)
				from transformers.models.efficientformer.modeling_efficientformer import (
				    EFFICIENTFORMER_PRETRAINED_MODEL_ARCHIVE_LIST,
				)


if is_vision_available():
				from PIL import Image

				from transformers import EfficientFormerImageProcessor






class 							SCREAMING_SNAKE_CASE__     :

							"""simple docstring"""






							def __init__(	self  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_ = 13  ,						SCREAMING_SNAKE_CASE_ = 64  ,						SCREAMING_SNAKE_CASE_ = 2  ,						SCREAMING_SNAKE_CASE_ = 3  ,						SCREAMING_SNAKE_CASE_ = 3  ,						SCREAMING_SNAKE_CASE_ = True  ,						SCREAMING_SNAKE_CASE_ = True  ,						SCREAMING_SNAKE_CASE_ = 128  ,						SCREAMING_SNAKE_CASE_=[16, 32, 64, 128]  ,						SCREAMING_SNAKE_CASE_ = 7  ,						SCREAMING_SNAKE_CASE_ = 4  ,						SCREAMING_SNAKE_CASE_ = 37  ,						SCREAMING_SNAKE_CASE_ = "gelu"  ,						SCREAMING_SNAKE_CASE_ = 0.1  ,						SCREAMING_SNAKE_CASE_ = 0.1  ,						SCREAMING_SNAKE_CASE_ = 10  ,						SCREAMING_SNAKE_CASE_ = 0.0_2  ,						SCREAMING_SNAKE_CASE_ = 2  ,						SCREAMING_SNAKE_CASE_ = 1  ,						SCREAMING_SNAKE_CASE_ = 128  ,						SCREAMING_SNAKE_CASE_ = [2, 2, 2, 2]  ,						SCREAMING_SNAKE_CASE_ = 2  ,						SCREAMING_SNAKE_CASE_ = 2  ,						)-> Any:





													'''simple docstring'''






													__UpperCamelCase  	=      parent
													__UpperCamelCase  	=      batch_size
													__UpperCamelCase  	=      image_size
													__UpperCamelCase  	=      patch_size
													__UpperCamelCase  	=      num_channels
													__UpperCamelCase  	=      is_training
													__UpperCamelCase  	=      use_labels
													__UpperCamelCase  	=      hidden_size
													__UpperCamelCase  	=      num_hidden_layers
													__UpperCamelCase  	=      num_attention_heads
													__UpperCamelCase  	=      intermediate_size
													__UpperCamelCase  	=      hidden_act
													__UpperCamelCase  	=      hidden_dropout_prob
													__UpperCamelCase  	=      attention_probs_dropout_prob
													__UpperCamelCase  	=      type_sequence_label_size
													__UpperCamelCase  	=      initializer_range
													__UpperCamelCase  	=      encoder_stride
													__UpperCamelCase  	=      num_attention_outputs
													__UpperCamelCase  	=      embed_dim
													__UpperCamelCase  	=      embed_dim + 1
													__UpperCamelCase  	=      resolution
													__UpperCamelCase  	=      depths
													__UpperCamelCase  	=      hidden_sizes
													__UpperCamelCase  	=      dim
													__UpperCamelCase  	=      mlp_expansion_ratio



							def      A__		(	self      )-> str:





													'''simple docstring'''






													__UpperCamelCase  	=      floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]      )

													__UpperCamelCase  	=      None
													if self.use_labels:
																			__UpperCamelCase  	=      ids_tensor([self.batch_size]  ,						self.type_sequence_label_size      )

													__UpperCamelCase  	=      self.get_config()
													return config, pixel_values, labels



							def      A__		(	self      )-> Dict:





													'''simple docstring'''






													return EfficientFormerConfig(
													    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=SCREAMING_SNAKE_CASE_  ,						initializer_range=self.initializer_range  ,						encoder_stride=self.encoder_stride  ,						resolution=self.resolution  ,						depths=self.depths  ,						hidden_sizes=self.hidden_sizes  ,						dim=self.dim  ,						mlp_expansion_ratio=self.mlp_expansion_ratio  ,						)



							def      A__		(	self  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )-> Union[str, Any]:





													'''simple docstring'''






													__UpperCamelCase  	=      EfficientFormerModel(config=SCREAMING_SNAKE_CASE_      )
													model.to(SCREAMING_SNAKE_CASE_      )
													model.eval()
													__UpperCamelCase  	=      model(SCREAMING_SNAKE_CASE_      )
													self.parent.assertEqual(result.last_hidden_state.shape  ,						(self.batch_size, self.seq_length, self.hidden_size)      )



							def      A__		(	self  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )-> List[Any]:





													'''simple docstring'''






													__UpperCamelCase  	=      self.type_sequence_label_size
													__UpperCamelCase  	=      EfficientFormerForImageClassification(SCREAMING_SNAKE_CASE_      )
													model.to(SCREAMING_SNAKE_CASE_      )
													model.eval()
													__UpperCamelCase  	=      model(SCREAMING_SNAKE_CASE_  ,						labels=SCREAMING_SNAKE_CASE_      )
													self.parent.assertEqual(result.logits.shape  ,						(self.batch_size, self.type_sequence_label_size)      )

													# test greyscale images
													__UpperCamelCase  	=      1
													__UpperCamelCase  	=      EfficientFormerForImageClassification(SCREAMING_SNAKE_CASE_      )
													model.to(SCREAMING_SNAKE_CASE_      )
													model.eval()

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



							def      A__		(	self      )-> Tuple:





													'''simple docstring'''






													__UpperCamelCase  	=      self.prepare_config_and_inputs()
													(
													    (
													    __UpperCamelCase
													)	,				(
													    __UpperCamelCase
													)	,				(
													    __UpperCamelCase
													)	,				
													)  	=      config_and_inputs
													__UpperCamelCase  	=      {'''pixel_values''': pixel_values}
													return config, inputs_dict






@require_torch
class 							SCREAMING_SNAKE_CASE__     (				SCREAMING_SNAKE_CASE_ ,		SCREAMING_SNAKE_CASE_ ,		unittest.TestCase     ):

							"""simple docstring"""






							_snake_case  		=	(
							    (
							        EfficientFormerModel,
							        EfficientFormerForImageClassificationWithTeacher,
							        EfficientFormerForImageClassification,
							    )
							    if is_torch_available()
							    else ()
							)
							_snake_case  		=	(
							    {
							        'feature-extraction': EfficientFormerModel,
							        'image-classification': (
							            EfficientFormerForImageClassification,
							            EfficientFormerForImageClassificationWithTeacher,
							        ),
							    }
							    if is_torch_available()
							    else {}
							)
							_snake_case  		=	False

							_snake_case  		=	False
							_snake_case  		=	False
							_snake_case  		=	False



							def      A__		(	self      )-> Tuple:





													'''simple docstring'''






													__UpperCamelCase  	=      EfficientFormerModelTester(self      )
													__UpperCamelCase  	=      ConfigTester(
													    self  ,						config_class=SCREAMING_SNAKE_CASE_  ,						has_text_modality=SCREAMING_SNAKE_CASE_  ,						hidden_size=37      )



							def      A__		(	self      )-> Dict:





													'''simple docstring'''






													self.config_tester.run_common_tests()



							@unittest.skip(reason='''EfficientFormer does not use inputs_embeds'''      )
							def      A__		(	self      )-> List[Any]:





													'''simple docstring'''






													pass



							@unittest.skip(reason='''EfficientFormer does not support input and output embeddings'''      )
							def      A__		(	self      )-> int:





													'''simple docstring'''






													pass



							def      A__		(	self      )-> int:





													'''simple docstring'''






													__UpperCamelCase	,				__UpperCamelCase  	=      self.model_tester.prepare_config_and_inputs_for_common()

													for model_class in self.all_model_classes:
																			__UpperCamelCase  	=      model_class(SCREAMING_SNAKE_CASE_      )
																			__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]  ,						SCREAMING_SNAKE_CASE_      )



							def      A__		(	self      )-> Optional[Any]:





													'''simple docstring'''






													def check_hidden_states_output(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      ):
																			__UpperCamelCase  	=      model_class(SCREAMING_SNAKE_CASE_      )
																			model.to(SCREAMING_SNAKE_CASE_      )
																			model.eval()

																			with torch.no_grad():
																									__UpperCamelCase  	=      model(**self._prepare_for_class(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )      )

																			__UpperCamelCase  	=      outputs.encoder_hidden_states if config.is_encoder_decoder else outputs.hidden_states

																			__UpperCamelCase  	=      getattr(
																			    self.model_tester  ,						'''expected_num_hidden_layers'''  ,						self.model_tester.num_hidden_layers + 1      )
																			self.assertEqual(len(SCREAMING_SNAKE_CASE_      )  ,						SCREAMING_SNAKE_CASE_      )

																			if hasattr(self.model_tester  ,						'''encoder_seq_length'''      ):
																									__UpperCamelCase  	=      self.model_tester.encoder_seq_length
																									if hasattr(self.model_tester  ,						'''chunk_length'''      ) and self.model_tester.chunk_length > 1:
																															__UpperCamelCase  	=      seq_length * self.model_tester.chunk_length
																			else:
																									__UpperCamelCase  	=      self.model_tester.seq_length

																			self.assertListEqual(
																			    list(hidden_states[-1].shape[-2:]      )  ,						[seq_length, self.model_tester.hidden_size]  ,						)

																			if config.is_encoder_decoder:
																									__UpperCamelCase  	=      outputs.decoder_hidden_states

																									self.assertIsInstance(SCREAMING_SNAKE_CASE_  ,						(list, tuple)      )
																									self.assertEqual(len(SCREAMING_SNAKE_CASE_      )  ,						SCREAMING_SNAKE_CASE_      )
																									__UpperCamelCase  	=      getattr(self.model_tester  ,						'''seq_length'''  ,						SCREAMING_SNAKE_CASE_      )
																									__UpperCamelCase  	=      getattr(self.model_tester  ,						'''decoder_seq_length'''  ,						SCREAMING_SNAKE_CASE_      )

																									self.assertListEqual(
																									    list(hidden_states[-1].shape[-2:]      )  ,						[decoder_seq_length, self.model_tester.hidden_size]  ,						)

													__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(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )

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

																			check_hidden_states_output(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )



							def      A__		(	self  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_=False      )-> str:





													'''simple docstring'''






													__UpperCamelCase  	=      super()._prepare_for_class(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						return_labels=SCREAMING_SNAKE_CASE_      )

													if return_labels:
																			if model_class.__name__ == "EfficientFormerForImageClassificationWithTeacher":
																									del inputs_dict["labels"]

													return inputs_dict



							def      A__		(	self      )-> Optional[Any]:





													'''simple docstring'''






													__UpperCamelCase  	=      self.model_tester.prepare_config_and_inputs()
													self.model_tester.create_and_check_model(*SCREAMING_SNAKE_CASE_      )



							@unittest.skip(reason='''EfficientFormer does not implement masked image modeling yet'''      )
							def      A__		(	self      )-> Dict:





													'''simple docstring'''






													__UpperCamelCase  	=      self.model_tester.prepare_config_and_inputs()
													self.model_tester.create_and_check_for_masked_image_modeling(*SCREAMING_SNAKE_CASE_      )



							def      A__		(	self      )-> Optional[int]:





													'''simple docstring'''






													__UpperCamelCase  	=      self.model_tester.prepare_config_and_inputs()
													self.model_tester.create_and_check_for_image_classification(*SCREAMING_SNAKE_CASE_      )



							def      A__		(	self      )-> int:





													'''simple docstring'''






													if not self.model_tester.is_training:
																			return

													__UpperCamelCase	,				__UpperCamelCase  	=      self.model_tester.prepare_config_and_inputs_for_common()
													__UpperCamelCase  	=      True

													for model_class in self.all_model_classes:
																			# EfficientFormerForImageClassificationWithTeacher supports inference-only
																			if (
																			    model_class in get_values(SCREAMING_SNAKE_CASE_      )
																			    or model_class.__name__ == "EfficientFormerForImageClassificationWithTeacher"
																			):
																									continue
																			__UpperCamelCase  	=      model_class(SCREAMING_SNAKE_CASE_      )
																			model.to(SCREAMING_SNAKE_CASE_      )
																			model.train()
																			__UpperCamelCase  	=      self._prepare_for_class(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						return_labels=SCREAMING_SNAKE_CASE_      )
																			__UpperCamelCase  	=      model(**SCREAMING_SNAKE_CASE_      ).loss
																			loss.backward()



							def      A__		(	self      )-> str:





													'''simple docstring'''






													__UpperCamelCase	,				__UpperCamelCase  	=      self.model_tester.prepare_config_and_inputs_for_common()

													__UpperCamelCase  	=      [
													    {'''title''': '''multi_label_classification''', '''num_labels''': 2, '''dtype''': torch.float},
													    {'''title''': '''single_label_classification''', '''num_labels''': 1, '''dtype''': torch.long},
													    {'''title''': '''regression''', '''num_labels''': 1, '''dtype''': torch.float},
													]

													for model_class in self.all_model_classes:
																			if (
																			    model_class
																			    not in [
																			        *get_values(SCREAMING_SNAKE_CASE_      ),
																			    ]
																			    or model_class.__name__ == "EfficientFormerForImageClassificationWithTeacher"
																			):
																									continue

																			for problem_type in problem_types:
																									with self.subTest(msg=F"Testing {model_class} with {problem_type['title']}"      ):
																															__UpperCamelCase  	=      problem_type['''title''']
																															__UpperCamelCase  	=      problem_type['''num_labels''']

																															__UpperCamelCase  	=      model_class(SCREAMING_SNAKE_CASE_      )
																															model.to(SCREAMING_SNAKE_CASE_      )
																															model.train()

																															__UpperCamelCase  	=      self._prepare_for_class(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_  ,						return_labels=SCREAMING_SNAKE_CASE_      )

																															if problem_type["num_labels"] > 1:
																																					__UpperCamelCase  	=      inputs['''labels'''].unsqueeze(1      ).repeat(1  ,						problem_type['''num_labels''']      )

																															__UpperCamelCase  	=      inputs['''labels'''].to(problem_type['''dtype''']      )

																															# This tests that we do not trigger the warning form PyTorch "Using a target size that is different
																															# to the input size. This will likely lead to incorrect results due to broadcasting. Please ensure
																															# they have the same size." which is a symptom something in wrong for the regression problem.
																															# See https://github.com/huggingface/transformers/issues/11780
																															with warnings.catch_warnings(record=SCREAMING_SNAKE_CASE_      ) as warning_list:
																																					__UpperCamelCase  	=      model(**SCREAMING_SNAKE_CASE_      ).loss
																															for w in warning_list:
																																					if "Using a target size that is different to the input size" in str(w.message      ):
																																											raise ValueError(
																																											    F"Something is going wrong in the regression problem: intercepted {w.message}"      )

																															loss.backward()



							@slow
							def      A__		(	self      )-> Any:





													'''simple docstring'''






													for model_name in EFFICIENTFORMER_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
																			__UpperCamelCase  	=      EfficientFormerModel.from_pretrained(SCREAMING_SNAKE_CASE_      )
																			self.assertIsNotNone(SCREAMING_SNAKE_CASE_      )



							def      A__		(	self      )-> Union[str, Any]:





													'''simple docstring'''






													__UpperCamelCase	,				__UpperCamelCase  	=      self.model_tester.prepare_config_and_inputs_for_common()
													__UpperCamelCase  	=      True

													__UpperCamelCase  	=      getattr(self.model_tester  ,						'''seq_length'''  ,						SCREAMING_SNAKE_CASE_      )
													__UpperCamelCase  	=      getattr(self.model_tester  ,						'''encoder_seq_length'''  ,						SCREAMING_SNAKE_CASE_      )
													__UpperCamelCase  	=      getattr(self.model_tester  ,						'''key_length'''  ,						SCREAMING_SNAKE_CASE_      )
													__UpperCamelCase  	=      getattr(self.model_tester  ,						'''chunk_length'''  ,						SCREAMING_SNAKE_CASE_      )

													if chunk_length is not None and hasattr(self.model_tester  ,						'''num_hashes'''      ):
																			__UpperCamelCase  	=      encoder_seq_length * self.model_tester.num_hashes

													for model_class in self.all_model_classes:
																			__UpperCamelCase  	=      True
																			__UpperCamelCase  	=      False
																			__UpperCamelCase  	=      True
																			__UpperCamelCase  	=      model_class(SCREAMING_SNAKE_CASE_      )
																			model.to(SCREAMING_SNAKE_CASE_      )
																			model.eval()
																			with torch.no_grad():
																									__UpperCamelCase  	=      model(**self._prepare_for_class(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )      )
																			__UpperCamelCase  	=      outputs.encoder_attentions if config.is_encoder_decoder else outputs.attentions
																			self.assertEqual(len(SCREAMING_SNAKE_CASE_      )  ,						self.model_tester.num_attention_outputs      )

																			# check that output_attentions also work using config
																			del inputs_dict["output_attentions"]
																			__UpperCamelCase  	=      True
																			__UpperCamelCase  	=      model_class(SCREAMING_SNAKE_CASE_      )
																			model.to(SCREAMING_SNAKE_CASE_      )
																			model.eval()
																			with torch.no_grad():
																									__UpperCamelCase  	=      model(**self._prepare_for_class(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )      )
																			__UpperCamelCase  	=      outputs.encoder_attentions if config.is_encoder_decoder else outputs.attentions
																			self.assertEqual(len(SCREAMING_SNAKE_CASE_      )  ,						self.model_tester.num_attention_outputs      )

																			if chunk_length is not None:
																									self.assertListEqual(
																									    list(attentions[0].shape[-4:]      )  ,						[self.model_tester.num_attention_heads, encoder_seq_length, chunk_length, encoder_key_length]  ,						)
																			else:
																									self.assertListEqual(
																									    list(attentions[0].shape[-3:]      )  ,						[self.model_tester.num_attention_heads, encoder_seq_length, encoder_key_length]  ,						)





def 						A_			(				)   ->     Any:



						'''simple docstring'''

						__UpperCamelCase  	=      Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''			)
						return image






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

							"""simple docstring"""






							@cached_property
							def      A__		(	self      )-> int:





													'''simple docstring'''






													return (
													    EfficientFormerImageProcessor.from_pretrained('''snap-research/efficientformer-l1-300'''      )
													    if is_vision_available()
													    else None
													)



							@slow
							def      A__		(	self      )-> str:





													'''simple docstring'''






													__UpperCamelCase  	=      EfficientFormerForImageClassification.from_pretrained('''snap-research/efficientformer-l1-300'''      ).to(
													    SCREAMING_SNAKE_CASE_      )

													__UpperCamelCase  	=      self.default_image_processor
													__UpperCamelCase  	=      prepare_img()
													__UpperCamelCase  	=      image_processor(images=SCREAMING_SNAKE_CASE_  ,						return_tensors='''pt'''      ).to(SCREAMING_SNAKE_CASE_      )

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

													# verify the logits
													__UpperCamelCase  	=      (1, 1000)
													self.assertEqual(outputs.logits.shape  ,						SCREAMING_SNAKE_CASE_      )

													__UpperCamelCase  	=      torch.tensor([-0.0_5_5_5, 0.4_8_2_5, -0.0_8_5_2]      ).to(SCREAMING_SNAKE_CASE_      )
													self.assertTrue(torch.allclose(outputs.logits[0][:3]  ,						SCREAMING_SNAKE_CASE_  ,						atol=1E-4      )      )



							@slow
							def      A__		(	self      )-> List[Any]:





													'''simple docstring'''






													__UpperCamelCase  	=      EfficientFormerForImageClassificationWithTeacher.from_pretrained(
													    '''snap-research/efficientformer-l1-300'''      ).to(SCREAMING_SNAKE_CASE_      )

													__UpperCamelCase  	=      self.default_image_processor
													__UpperCamelCase  	=      prepare_img()
													__UpperCamelCase  	=      image_processor(images=SCREAMING_SNAKE_CASE_  ,						return_tensors='''pt'''      ).to(SCREAMING_SNAKE_CASE_      )

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

													# verify the logits
													__UpperCamelCase  	=      (1, 1000)
													self.assertEqual(outputs.logits.shape  ,						SCREAMING_SNAKE_CASE_      )

													__UpperCamelCase  	=      torch.tensor([-0.1_3_1_2, 0.4_3_5_3, -1.0_4_9_9]      ).to(SCREAMING_SNAKE_CASE_      )
													self.assertTrue(torch.allclose(outputs.logits[0][:3]  ,						SCREAMING_SNAKE_CASE_  ,						atol=1E-4      )      )




