

import tempfile

import torch

from diffusers import (
    DEISMultistepScheduler,
    DPMSolverMultistepScheduler,
    DPMSolverSinglestepScheduler,
    UniPCMultistepScheduler,
)

from .test_schedulers import SchedulerCommonTest







class     a__    (				UpperCAmelCase    ):







  """simple docstring"""




  UpperCAmelCase__ :	List[Any]         =(DPMSolverMultistepScheduler,)
  UpperCAmelCase__ :	Union[str, Any]         =(("""num_inference_steps""", 2_5),)


  def 	_lowercase (     self      :	Optional[int]			,			**UpperCAmelCase__      :	Any						)   ->Optional[Any]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Any					       =				{
            """num_train_timesteps""": 1_0_0_0,
            """beta_start""": 0.00_01,
            """beta_end""": 0.02,
            """beta_schedule""": """linear""",
            """solver_order""": 2,
            """prediction_type""": """epsilon""",
            """thresholding""": False,
            """sample_max_value""": 1.0,
            """algorithm_type""": """dpmsolver++""",
            """solver_type""": """midpoint""",
            """lower_order_final""": False,
            """lambda_min_clipped""": -float("""inf"""						),
            """variance_type""": None,
        }

        config.update(**UpperCAmelCase__						)
        return config


  def 	_lowercase (     self      :	Dict			,			UpperCAmelCase__      :	Optional[int]=0			,			**UpperCAmelCase__      :	List[Any]						)   ->Any:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: List[str]					       =				dict(self.forward_default_kwargs						)
        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				kwargs.pop("""num_inference_steps"""			,			UpperCAmelCase__						)
        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				self.dummy_sample
        SCREAMING_SNAKE_CASE	: int					       =				0.1 * sample
        SCREAMING_SNAKE_CASE	: int					       =				[residual + 0.2, residual + 0.15, residual + 0.10]

        for scheduler_class in self.scheduler_classes:
              SCREAMING_SNAKE_CASE	: str					       =				self.get_scheduler_config(**UpperCAmelCase__						)
              SCREAMING_SNAKE_CASE	: Optional[int]					       =				scheduler_class(**UpperCAmelCase__						)
              scheduler.set_timesteps(UpperCAmelCase__						)
              # copy over dummy past residuals
              SCREAMING_SNAKE_CASE	: List[str]					       =				dummy_past_residuals[: scheduler.config.solver_order]

              with tempfile.TemporaryDirectory() as tmpdirname:
                    scheduler.save_config(UpperCAmelCase__						)
                    SCREAMING_SNAKE_CASE	: str					       =				scheduler_class.from_pretrained(UpperCAmelCase__						)
                    new_scheduler.set_timesteps(UpperCAmelCase__						)
                    # copy over dummy past residuals
                    SCREAMING_SNAKE_CASE	: int					       =				dummy_past_residuals[: new_scheduler.config.solver_order]

              SCREAMING_SNAKE_CASE       ,		SCREAMING_SNAKE_CASE	: Tuple					       =				sample, sample
              for t in range(UpperCAmelCase__			,			time_step + scheduler.config.solver_order + 1						):
                    SCREAMING_SNAKE_CASE	: int					       =				scheduler.step(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__			,			**UpperCAmelCase__						).prev_sample
                    SCREAMING_SNAKE_CASE	: int					       =				new_scheduler.step(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__			,			**UpperCAmelCase__						).prev_sample

                    assert torch.sum(torch.abs(output - new_output						)						) < 1e-5, "Scheduler outputs are not identical"


  def 	_lowercase (     self      :	Tuple						)   ->Tuple:
        """simple docstring"""







        pass


  def 	_lowercase (     self      :	Any			,			UpperCAmelCase__      :	Any=0			,			**UpperCAmelCase__      :	Optional[int]						)   ->str:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Dict					       =				dict(self.forward_default_kwargs						)
        SCREAMING_SNAKE_CASE	: Tuple					       =				kwargs.pop("""num_inference_steps"""			,			UpperCAmelCase__						)
        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				self.dummy_sample
        SCREAMING_SNAKE_CASE	: List[Any]					       =				0.1 * sample
        SCREAMING_SNAKE_CASE	: Optional[int]					       =				[residual + 0.2, residual + 0.15, residual + 0.10]

        for scheduler_class in self.scheduler_classes:
              SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				self.get_scheduler_config()
              SCREAMING_SNAKE_CASE	: Dict					       =				scheduler_class(**UpperCAmelCase__						)
              scheduler.set_timesteps(UpperCAmelCase__						)

              # copy over dummy past residuals (must be after setting timesteps)
              SCREAMING_SNAKE_CASE	: Any					       =				dummy_past_residuals[: scheduler.config.solver_order]

              with tempfile.TemporaryDirectory() as tmpdirname:
                    scheduler.save_config(UpperCAmelCase__						)
                    SCREAMING_SNAKE_CASE	: int					       =				scheduler_class.from_pretrained(UpperCAmelCase__						)
                    # copy over dummy past residuals
                    new_scheduler.set_timesteps(UpperCAmelCase__						)

                    # copy over dummy past residual (must be after setting timesteps)
                    SCREAMING_SNAKE_CASE	: List[Any]					       =				dummy_past_residuals[: new_scheduler.config.solver_order]

              SCREAMING_SNAKE_CASE	: Any					       =				scheduler.step(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__			,			**UpperCAmelCase__						).prev_sample
              SCREAMING_SNAKE_CASE	: Optional[Any]					       =				new_scheduler.step(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__			,			**UpperCAmelCase__						).prev_sample

              assert torch.sum(torch.abs(output - new_output						)						) < 1e-5, "Scheduler outputs are not identical"


  def 	_lowercase (     self      :	str			,			UpperCAmelCase__      :	Optional[Any]=None			,			**UpperCAmelCase__      :	int						)   ->Optional[int]:
        """simple docstring"""







        if scheduler is None:
              SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				self.scheduler_classes[0]
              SCREAMING_SNAKE_CASE	: Optional[Any]					       =				self.get_scheduler_config(**UpperCAmelCase__						)
              SCREAMING_SNAKE_CASE	: Dict					       =				scheduler_class(**UpperCAmelCase__						)

        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				1_0
        SCREAMING_SNAKE_CASE	: Dict					       =				self.dummy_model()
        SCREAMING_SNAKE_CASE	: Optional[int]					       =				self.dummy_sample_deter
        scheduler.set_timesteps(UpperCAmelCase__						)

        for i, t in enumerate(scheduler.timesteps						):
              SCREAMING_SNAKE_CASE	: Tuple					       =				model(UpperCAmelCase__			,			UpperCAmelCase__						)
              SCREAMING_SNAKE_CASE	: List[Any]					       =				scheduler.step(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__						).prev_sample

        return sample


  def 	_lowercase (     self      :	Any						)   ->List[str]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				dict(self.forward_default_kwargs						)

        SCREAMING_SNAKE_CASE	: Dict					       =				kwargs.pop("""num_inference_steps"""			,			UpperCAmelCase__						)

        for scheduler_class in self.scheduler_classes:
              SCREAMING_SNAKE_CASE	: Dict					       =				self.get_scheduler_config()
              SCREAMING_SNAKE_CASE	: str					       =				scheduler_class(**UpperCAmelCase__						)

              SCREAMING_SNAKE_CASE	: List[str]					       =				self.dummy_sample
              SCREAMING_SNAKE_CASE	: Tuple					       =				0.1 * sample

              if num_inference_steps is not None and hasattr(UpperCAmelCase__			,			"""set_timesteps"""						):
                    scheduler.set_timesteps(UpperCAmelCase__						)
              elif num_inference_steps is not None and not hasattr(UpperCAmelCase__			,			"""set_timesteps"""						):
                    SCREAMING_SNAKE_CASE	: str					       =				num_inference_steps

              # copy over dummy past residuals (must be done after set_timesteps)
              SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				[residual + 0.2, residual + 0.15, residual + 0.10]
              SCREAMING_SNAKE_CASE	: Optional[Any]					       =				dummy_past_residuals[: scheduler.config.solver_order]

              SCREAMING_SNAKE_CASE	: Tuple					       =				scheduler.timesteps[5]
              SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				scheduler.timesteps[6]

              SCREAMING_SNAKE_CASE	: Dict					       =				scheduler.step(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__			,			**UpperCAmelCase__						).prev_sample
              SCREAMING_SNAKE_CASE	: Optional[int]					       =				scheduler.step(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__			,			**UpperCAmelCase__						).prev_sample

              self.assertEqual(output_a.shape			,			sample.shape						)
              self.assertEqual(output_a.shape			,			output_a.shape						)


  def 	_lowercase (     self      :	int						)   ->Union[str, Any]:
        """simple docstring"""







        for timesteps in [2_5, 5_0, 1_0_0, 9_9_9, 1_0_0_0]:
              self.check_over_configs(num_train_timesteps=UpperCAmelCase__						)


  def 	_lowercase (     self      :	Tuple						)   ->List[Any]:
        """simple docstring"""







        self.check_over_configs(thresholding=UpperCAmelCase__						)
        for order in [1, 2, 3]:
              for solver_type in ["midpoint", "heun"]:
                    for threshold in [0.5, 1.0, 2.0]:
                          for prediction_type in ["epsilon", "sample"]:
                                self.check_over_configs(
                                    thresholding=UpperCAmelCase__			,			prediction_type=UpperCAmelCase__			,			sample_max_value=UpperCAmelCase__			,			algorithm_type="""dpmsolver++"""			,			solver_order=UpperCAmelCase__			,			solver_type=UpperCAmelCase__			,			)


  def 	_lowercase (     self      :	Union[str, Any]						)   ->List[str]:
        """simple docstring"""







        for prediction_type in ["epsilon", "v_prediction"]:
              self.check_over_configs(prediction_type=UpperCAmelCase__						)


  def 	_lowercase (     self      :	str						)   ->int:
        """simple docstring"""







        for algorithm_type in ["dpmsolver", "dpmsolver++", "sde-dpmsolver", "sde-dpmsolver++"]:
              for solver_type in ["midpoint", "heun"]:
                    for order in [1, 2, 3]:
                          for prediction_type in ["epsilon", "sample"]:
                                if algorithm_type in ["sde-dpmsolver", "sde-dpmsolver++"]:
                                      if order == 3:
                                            continue
                                else:
                                      self.check_over_configs(
                                          solver_order=UpperCAmelCase__			,			solver_type=UpperCAmelCase__			,			prediction_type=UpperCAmelCase__			,			algorithm_type=UpperCAmelCase__			,			)
                                SCREAMING_SNAKE_CASE	: List[Any]					       =				self.full_loop(
                                    solver_order=UpperCAmelCase__			,			solver_type=UpperCAmelCase__			,			prediction_type=UpperCAmelCase__			,			algorithm_type=UpperCAmelCase__			,			)
                                assert not torch.isnan(UpperCAmelCase__						).any(), "Samples have nan numbers"


  def 	_lowercase (     self      :	Dict						)   ->List[Any]:
        """simple docstring"""







        self.check_over_configs(lower_order_final=UpperCAmelCase__						)
        self.check_over_configs(lower_order_final=UpperCAmelCase__						)


  def 	_lowercase (     self      :	Dict						)   ->List[Any]:
        """simple docstring"""







        self.check_over_configs(lambda_min_clipped=-float("""inf"""						)						)
        self.check_over_configs(lambda_min_clipped=-5.1						)


  def 	_lowercase (     self      :	List[str]						)   ->int:
        """simple docstring"""







        self.check_over_configs(variance_type=UpperCAmelCase__						)
        self.check_over_configs(variance_type="""learned_range"""						)


  def 	_lowercase (     self      :	List[Any]						)   ->int:
        """simple docstring"""







        for num_inference_steps in [1, 2, 3, 5, 1_0, 5_0, 1_0_0, 9_9_9, 1_0_0_0]:
              self.check_over_forward(num_inference_steps=UpperCAmelCase__			,			time_step=0						)


  def 	_lowercase (     self      :	Tuple						)   ->Optional[int]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Optional[Any]					       =				self.full_loop()
        SCREAMING_SNAKE_CASE	: Optional[int]					       =				torch.mean(torch.abs(UpperCAmelCase__						)						)

        assert abs(result_mean.item() - 0.33_01						) < 1e-3


  def 	_lowercase (     self      :	List[str]						)   ->Any:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: List[Any]					       =				self.full_loop(thresholding=UpperCAmelCase__			,			dynamic_thresholding_ratio=0.87			,			sample_max_value=0.5						)
        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				torch.mean(torch.abs(UpperCAmelCase__						)						)

        assert abs(result_mean.item() - 1.13_64						) < 1e-3


  def 	_lowercase (     self      :	Optional[int]						)   ->Dict:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: int					       =				self.full_loop(prediction_type="""v_prediction"""						)
        SCREAMING_SNAKE_CASE	: List[Any]					       =				torch.mean(torch.abs(UpperCAmelCase__						)						)

        assert abs(result_mean.item() - 0.22_51						) < 1e-3


  def 	_lowercase (     self      :	Any						)   ->Optional[int]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Optional[int]					       =				self.full_loop(prediction_type="""v_prediction"""			,			use_karras_sigmas=UpperCAmelCase__						)
        SCREAMING_SNAKE_CASE	: Any					       =				torch.mean(torch.abs(UpperCAmelCase__						)						)

        assert abs(result_mean.item() - 0.20_96						) < 1e-3


  def 	_lowercase (     self      :	Union[str, Any]						)   ->List[Any]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Dict					       =				DPMSolverMultistepScheduler(**self.get_scheduler_config()						)
        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				self.full_loop(scheduler=UpperCAmelCase__						)
        SCREAMING_SNAKE_CASE	: str					       =				torch.mean(torch.abs(UpperCAmelCase__						)						)

        assert abs(result_mean.item() - 0.33_01						) < 1e-3

        SCREAMING_SNAKE_CASE	: str					       =				DPMSolverSinglestepScheduler.from_config(scheduler.config						)
        SCREAMING_SNAKE_CASE	: Optional[Any]					       =				UniPCMultistepScheduler.from_config(scheduler.config						)
        SCREAMING_SNAKE_CASE	: List[Any]					       =				DEISMultistepScheduler.from_config(scheduler.config						)
        SCREAMING_SNAKE_CASE	: int					       =				DPMSolverMultistepScheduler.from_config(scheduler.config						)

        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				self.full_loop(scheduler=UpperCAmelCase__						)
        SCREAMING_SNAKE_CASE	: Any					       =				torch.mean(torch.abs(UpperCAmelCase__						)						)

        assert abs(result_mean.item() - 0.33_01						) < 1e-3


  def 	_lowercase (     self      :	Tuple						)   ->int:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Tuple					       =				self.scheduler_classes[0]
        SCREAMING_SNAKE_CASE	: Tuple					       =				self.get_scheduler_config(thresholding=UpperCAmelCase__			,			dynamic_thresholding_ratio=0						)
        SCREAMING_SNAKE_CASE	: Optional[Any]					       =				scheduler_class(**UpperCAmelCase__						)

        SCREAMING_SNAKE_CASE	: int					       =				1_0
        SCREAMING_SNAKE_CASE	: Dict					       =				self.dummy_model()
        SCREAMING_SNAKE_CASE	: Optional[Any]					       =				self.dummy_sample_deter.half()
        scheduler.set_timesteps(UpperCAmelCase__						)

        for i, t in enumerate(scheduler.timesteps						):
              SCREAMING_SNAKE_CASE	: Optional[Any]					       =				model(UpperCAmelCase__			,			UpperCAmelCase__						)
              SCREAMING_SNAKE_CASE	: str					       =				scheduler.step(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__						).prev_sample

        assert sample.dtype == torch.floataa




  def 	_lowercase (     self      :	Optional[int]			,			**UpperCAmelCase__      :	Optional[Any]						)   ->int:
        """simple docstring"""







        for scheduler_class in self.scheduler_classes:
              SCREAMING_SNAKE_CASE	: Any					       =				self.get_scheduler_config(**UpperCAmelCase__						)
              SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				scheduler_class(**UpperCAmelCase__						)

              scheduler.set_timesteps(scheduler.config.num_train_timesteps						)
              assert len(scheduler.timesteps.unique()						) == scheduler.num_inference_steps







import inspect
import unittest

from transformers import EfficientNetConfig
from transformers.testing_utils import is_pipeline_test, 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 EfficientNetForImageClassification, EfficientNetModel
  from transformers.models.efficientnet.modeling_efficientnet import EFFICIENTNET_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
  from PIL import Image

  from transformers import AutoImageProcessor







class     a__    :







  """simple docstring"""




  def __init__(     self      :	Any			,			UpperCAmelCase__      :	Union[str, Any]			,			UpperCAmelCase__      :	List[str]=1_3			,			UpperCAmelCase__      :	Any=3_2			,			UpperCAmelCase__      :	Union[str, Any]=3			,			UpperCAmelCase__      :	List[str]=[3, 3, 5]			,			UpperCAmelCase__      :	int=[3_2, 1_6, 2_4]			,			UpperCAmelCase__      :	Dict=[1_6, 2_4, 4_0]			,			UpperCAmelCase__      :	Optional[Any]=[1, 1, 2]			,			UpperCAmelCase__      :	List[Any]=[1, 1, 2]			,			UpperCAmelCase__      :	str=[1, 6, 6]			,			UpperCAmelCase__      :	List[Any]=True			,			UpperCAmelCase__      :	int=True			,			UpperCAmelCase__      :	Any=3_7			,			UpperCAmelCase__      :	Any="gelu"			,			UpperCAmelCase__      :	List[Any]=1_0			,			)   ->Dict:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Optional[int]					       =				parent
        SCREAMING_SNAKE_CASE	: Any					       =				batch_size
        SCREAMING_SNAKE_CASE	: List[Any]					       =				image_size
        SCREAMING_SNAKE_CASE	: str					       =				num_channels
        SCREAMING_SNAKE_CASE	: int					       =				kernel_sizes
        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				in_channels
        SCREAMING_SNAKE_CASE	: List[str]					       =				out_channels
        SCREAMING_SNAKE_CASE	: int					       =				strides
        SCREAMING_SNAKE_CASE	: List[str]					       =				num_block_repeats
        SCREAMING_SNAKE_CASE	: Tuple					       =				expand_ratios
        SCREAMING_SNAKE_CASE	: Dict					       =				is_training
        SCREAMING_SNAKE_CASE	: Optional[int]					       =				hidden_act
        SCREAMING_SNAKE_CASE	: int					       =				num_labels
        SCREAMING_SNAKE_CASE	: Dict					       =				use_labels


  def 	_lowercase (     self      :	Any						)   ->Any:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]						)

        SCREAMING_SNAKE_CASE	: Dict					       =				None
        if self.use_labels:
              SCREAMING_SNAKE_CASE	: Optional[Any]					       =				ids_tensor([self.batch_size]			,			self.num_labels						)

        SCREAMING_SNAKE_CASE	: Dict					       =				self.get_config()
        return config, pixel_values, labels


  def 	_lowercase (     self      :	Tuple						)   ->Optional[int]:
        """simple docstring"""







        return EfficientNetConfig(
            num_channels=self.num_channels			,			kernel_sizes=self.kernel_sizes			,			in_channels=self.in_channels			,			out_channels=self.out_channels			,			strides=self.strides			,			num_block_repeats=self.num_block_repeats			,			expand_ratios=self.expand_ratios			,			hidden_act=self.hidden_act			,			num_labels=self.num_labels			,			)


  def 	_lowercase (     self      :	List[Any]			,			UpperCAmelCase__      :	str			,			UpperCAmelCase__      :	int			,			UpperCAmelCase__      :	Optional[Any]						)   ->Union[str, Any]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: List[Any]					       =				EfficientNetModel(config=UpperCAmelCase__						)
        model.to(UpperCAmelCase__						)
        model.eval()
        SCREAMING_SNAKE_CASE	: str					       =				model(UpperCAmelCase__						)
        # expected last hidden states: B, C, H // 4, W // 4
        self.parent.assertEqual(
            result.last_hidden_state.shape			,			(self.batch_size, config.hidden_dim, self.image_size // 4, self.image_size // 4)			,			)


  def 	_lowercase (     self      :	Optional[int]			,			UpperCAmelCase__      :	List[Any]			,			UpperCAmelCase__      :	Optional[int]			,			UpperCAmelCase__      :	Union[str, Any]						)   ->int:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				EfficientNetForImageClassification(UpperCAmelCase__						)
        model.to(UpperCAmelCase__						)
        model.eval()
        SCREAMING_SNAKE_CASE	: Any					       =				model(UpperCAmelCase__			,			labels=UpperCAmelCase__						)
        self.parent.assertEqual(result.logits.shape			,			(self.batch_size, self.num_labels)						)




  def 	_lowercase (     self      :	Dict						)   ->str:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: List[str]					       =				self.prepare_config_and_inputs()
        SCREAMING_SNAKE_CASE       ,		SCREAMING_SNAKE_CASE       ,		SCREAMING_SNAKE_CASE	: Any					       =				config_and_inputs
        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				{"""pixel_values""": pixel_values}
        return config, inputs_dict







@require_torch
class     a__    (				UpperCAmelCase		,     UpperCAmelCase		,     unittest.TestCase    ):







  """simple docstring"""




  UpperCAmelCase__ :	Tuple         =(EfficientNetModel, EfficientNetForImageClassification) if is_torch_available() else ()
  UpperCAmelCase__ :	Optional[int]         =(
      {"""feature-extraction""": EfficientNetModel, """image-classification""": EfficientNetForImageClassification}
      if is_torch_available()
      else {}
  )

  UpperCAmelCase__ :	List[str]         =False
  UpperCAmelCase__ :	Any         =False
  UpperCAmelCase__ :	Union[str, Any]         =False
  UpperCAmelCase__ :	Dict         =False
  UpperCAmelCase__ :	List[str]         =False


  def 	_lowercase (     self      :	Optional[Any]						)   ->Tuple:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Optional[Any]					       =				EfficientNetModelTester(self						)
        SCREAMING_SNAKE_CASE	: Any					       =				ConfigTester(
            self			,			config_class=UpperCAmelCase__			,			has_text_modality=UpperCAmelCase__			,			hidden_size=3_7						)


  def 	_lowercase (     self      :	Optional[int]						)   ->List[Any]:
        """simple docstring"""







        self.create_and_test_config_common_properties()
        self.config_tester.create_and_test_config_to_json_string()
        self.config_tester.create_and_test_config_to_json_file()
        self.config_tester.create_and_test_config_from_and_save_pretrained()
        self.config_tester.create_and_test_config_with_num_labels()
        self.config_tester.check_config_can_be_init_without_params()
        self.config_tester.check_config_arguments_init()


  def 	_lowercase (     self      :	List[Any]						)   ->Optional[int]:
        """simple docstring"""







        return


  @unittest.skip(reason="""EfficientNet does not use inputs_embeds"""						)
  def 	_lowercase (     self      :	Dict						)   ->Tuple:
        """simple docstring"""







        pass


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







        pass


  @unittest.skip(reason="""EfficientNet does not use feedforward chunking"""						)
  def 	_lowercase (     self      :	Optional[Any]						)   ->Any:
        """simple docstring"""







        pass


  def 	_lowercase (     self      :	str						)   ->Optional[int]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE       ,		SCREAMING_SNAKE_CASE	: Optional[Any]					       =				self.model_tester.prepare_config_and_inputs_for_common()

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

              SCREAMING_SNAKE_CASE	: Dict					       =				["""pixel_values"""]
              self.assertListEqual(arg_names[:1]			,			UpperCAmelCase__						)


  def 	_lowercase (     self      :	Optional[int]						)   ->Optional[Any]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Optional[int]					       =				self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_model(*UpperCAmelCase__						)


  def 	_lowercase (     self      :	List[Any]						)   ->int:
        """simple docstring"""







        def check_hidden_states_output(UpperCAmelCase__      :	Optional[Any]			,			UpperCAmelCase__      :	Any			,			UpperCAmelCase__      :	Dict						):
              SCREAMING_SNAKE_CASE	: Optional[Any]					       =				model_class(UpperCAmelCase__						)
              model.to(UpperCAmelCase__						)
              model.eval()

              with torch.no_grad():
                    SCREAMING_SNAKE_CASE	: Any					       =				model(**self._prepare_for_class(UpperCAmelCase__			,			UpperCAmelCase__						)						)

              SCREAMING_SNAKE_CASE	: Optional[int]					       =				outputs.encoder_hidden_states if config.is_encoder_decoder else outputs.hidden_states
              SCREAMING_SNAKE_CASE	: Any					       =				sum(config.num_block_repeats						) * 4
              self.assertEqual(len(UpperCAmelCase__						)			,			UpperCAmelCase__						)

              # EfficientNet's feature maps are of shape (batch_size, num_channels, height, width)
              self.assertListEqual(
                  list(hidden_states[0].shape[-2:]						)			,			[self.model_tester.image_size // 2, self.model_tester.image_size // 2]			,			)

        SCREAMING_SNAKE_CASE       ,		SCREAMING_SNAKE_CASE	: Tuple					       =				self.model_tester.prepare_config_and_inputs_for_common()

        for model_class in self.all_model_classes:
              SCREAMING_SNAKE_CASE	: Optional[Any]					       =				True
              check_hidden_states_output(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__						)

              # check that output_hidden_states also work using config
              del inputs_dict["output_hidden_states"]
              SCREAMING_SNAKE_CASE	: Dict					       =				True

              check_hidden_states_output(UpperCAmelCase__			,			UpperCAmelCase__			,			UpperCAmelCase__						)


  def 	_lowercase (     self      :	Union[str, Any]						)   ->Optional[int]:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Tuple					       =				self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_image_classification(*UpperCAmelCase__						)


  @unittest.skip("""Will be fixed soon by reducing the size of the model used for common tests."""						)
  def 	_lowercase (     self      :	List[str]						)   ->Optional[Any]:
        """simple docstring"""







        pass


  @slow
  def 	_lowercase (     self      :	Dict						)   ->List[Any]:
        """simple docstring"""







        for model_name in EFFICIENTNET_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
              SCREAMING_SNAKE_CASE	: str					       =				EfficientNetModel.from_pretrained(UpperCAmelCase__						)
              self.assertIsNotNone(UpperCAmelCase__						)




  @is_pipeline_test
  @require_vision
  @slow
  def 	_lowercase (     self      :	Any						)   ->Any:
        """simple docstring"""







        super().test_pipeline_image_classification()






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







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







  """simple docstring"""




  @cached_property
  def 	_lowercase (     self      :	List[str]						)   ->Tuple:
        """simple docstring"""







        return AutoImageProcessor.from_pretrained("""google/efficientnet-b7"""						) if is_vision_available() else None




  @slow
  def 	_lowercase (     self      :	List[Any]						)   ->Any:
        """simple docstring"""







        SCREAMING_SNAKE_CASE	: Tuple					       =				EfficientNetForImageClassification.from_pretrained("""google/efficientnet-b7"""						).to(UpperCAmelCase__						)

        SCREAMING_SNAKE_CASE	: int					       =				self.default_image_processor
        SCREAMING_SNAKE_CASE	: List[Any]					       =				prepare_img()
        SCREAMING_SNAKE_CASE	: Optional[Any]					       =				image_processor(images=UpperCAmelCase__			,			return_tensors="""pt"""						).to(UpperCAmelCase__						)

        # forward pass
        with torch.no_grad():
              SCREAMING_SNAKE_CASE	: Optional[Any]					       =				model(**UpperCAmelCase__						)

        # verify the logits
        SCREAMING_SNAKE_CASE	: Union[str, Any]					       =				torch.Size((1, 1_0_0_0)						)
        self.assertEqual(outputs.logits.shape			,			UpperCAmelCase__						)

        SCREAMING_SNAKE_CASE	: Any					       =				torch.tensor([0.00_01, 0.00_02, 0.00_02]						).to(UpperCAmelCase__						)
        self.assertTrue(torch.allclose(outputs.logits[0, :3]			,			UpperCAmelCase__			,			atol=1e-4						)						)




