





'''simple docstring'''

import gc
import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    StableDiffusionAttendAndExcitePipeline,
    UNetaDConditionModel,
)
from diffusers.utils import load_numpy, skip_mps, slow
from diffusers.utils.testing_utils import require_torch_gpu

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_IMAGE_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineKarrasSchedulerTesterMixin, PipelineLatentTesterMixin, PipelineTesterMixin


UpperCAmelCase					:		List[str]		=							False





@skip_mps
class lowerCamelCase						(a__						,      a__						,      a__						,      unittest.TestCase					):
  _lowercase  :	Any       					=				StableDiffusionAttendAndExcitePipeline
  _lowercase  :	List[str]       					=				False
  _lowercase  :	Union[str, Any]       					=				TEXT_TO_IMAGE_PARAMS
  _lowercase  :	List[str]       					=				TEXT_TO_IMAGE_BATCH_PARAMS.union({"""token_indices"""}					)
  _lowercase  :	List[Any]       					=				TEXT_TO_IMAGE_IMAGE_PARAMS
  _lowercase  :	str       					=				TEXT_TO_IMAGE_IMAGE_PARAMS







  @classmethod
  def 				UpperCAmelCase_				(		cls		)		->						Dict:






        """simple docstring"""





        super().setUpClass()
        torch.use_deterministic_algorithms(lowercase__		)







  @classmethod
  def 				UpperCAmelCase_				(		cls		)		->						Optional[int]:






        """simple docstring"""





        super().tearDownClass()
        torch.use_deterministic_algorithms(lowercase__		)







  def 				UpperCAmelCase_				(		self		)		->						Dict:






        """simple docstring"""





        torch.manual_seed(0		)
        _snake_case		:	Optional[int]					     =     UNetaDConditionModel(
            block_out_channels=(32, 64)     ,     layers_per_block=1     ,     sample_size=32     ,     in_channels=4     ,     out_channels=4     ,     down_block_types=('''DownBlock2D''', '''CrossAttnDownBlock2D''')     ,     up_block_types=('''CrossAttnUpBlock2D''', '''UpBlock2D''')     ,     cross_attention_dim=32     ,     attention_head_dim=(2, 4)     ,     use_linear_projection=lowercase__     ,     )
        _snake_case		:	List[Any]					     =     DDIMScheduler(
            beta_start=0.00_085     ,     beta_end=0.012     ,     beta_schedule='''scaled_linear'''     ,     clip_sample=lowercase__     ,     set_alpha_to_one=lowercase__     ,     )
        torch.manual_seed(0		)
        _snake_case		:	Tuple					     =     AutoencoderKL(
            block_out_channels=[32, 64]     ,     in_channels=3     ,     out_channels=3     ,     down_block_types=['''DownEncoderBlock2D''', '''DownEncoderBlock2D''']     ,     up_block_types=['''UpDecoderBlock2D''', '''UpDecoderBlock2D''']     ,     latent_channels=4     ,     sample_size=128     ,     )
        torch.manual_seed(0		)
        _snake_case		:	List[str]					     =     CLIPTextConfig(
            bos_token_id=0     ,     eos_token_id=2     ,     hidden_size=32     ,     intermediate_size=37     ,     layer_norm_eps=1E-0_5     ,     num_attention_heads=4     ,     num_hidden_layers=5     ,     pad_token_id=1     ,     vocab_size=1_000     ,     hidden_act='''gelu'''     ,     projection_dim=512     ,     )
        _snake_case		:	Optional[int]					     =     CLIPTextModel(lowercase__		)
        _snake_case		:	Union[str, Any]					     =     CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip'''		)

        _snake_case		:	Optional[int]					     =     {
            '''unet''': unet,
            '''scheduler''': scheduler,
            '''vae''': vae,
            '''text_encoder''': text_encoder,
            '''tokenizer''': tokenizer,
            '''safety_checker''': None,
            '''feature_extractor''': None,
        }

        return components







  def 				UpperCAmelCase_				(		self     ,     lowercase__     ,     lowercase__=0		)		->						Any:






        """simple docstring"""





        if str(lowercase__		).startswith('''mps'''		):
              _snake_case		:	int					     =     torch.manual_seed(lowercase__		)
        else:
              _snake_case		:	List[str]					     =     torch.Generator(device=lowercase__		).manual_seed(lowercase__		)
        _snake_case		:	Union[str, Any]					     =     {
            '''prompt''': '''a cat and a frog''',
            '''token_indices''': [2, 5],
            '''generator''': generator,
            '''num_inference_steps''': 1,
            '''guidance_scale''': 6.0,
            '''output_type''': '''numpy''',
            '''max_iter_to_alter''': 2,
            '''thresholds''': {0: 0.7},
        }
        return inputs







  def 				UpperCAmelCase_				(		self		)		->						Tuple:






        """simple docstring"""





        _snake_case		:	str					     =     '''cpu'''

        _snake_case		:	Dict					     =     self.get_dummy_components()
        _snake_case		:	Any					     =     self.pipeline_class(**lowercase__		)
        pipe.to(lowercase__		)
        pipe.set_progress_bar_config(disable=lowercase__		)

        _snake_case		:	Dict					     =     self.get_dummy_inputs(lowercase__		)
        _snake_case		:	List[str]					     =     pipe(**lowercase__		).images
        _snake_case		:	Optional[int]					     =     image[0, -3:, -3:, -1]

        self.assertEqual(image.shape     ,     (1, 64, 64, 3)		)
        _snake_case		:	Dict					     =     np.array(
            [0.63_905_364, 0.62_897_307, 0.48_599_017, 0.5_133_624, 0.5_550_048, 0.45_769_516, 0.50_326_973, 0.5_023_139, 0.45_384_496]		)
        _snake_case		:	Any					     =     np.abs(image_slice.flatten() - expected_slice		).max()
        self.assertLessEqual(lowercase__     ,     1E-3		)







  def 				UpperCAmelCase_				(		self		)		->						Any:






        """simple docstring"""





        super().test_cpu_offload_forward_pass(expected_max_diff=5E-4		)







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






        """simple docstring"""





        self._test_inference_batch_consistent(batch_sizes=[1, 2]		)







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






        """simple docstring"""





        self._test_inference_batch_single_identical(batch_size=2     ,     expected_max_diff=7E-4		)







  def 				UpperCAmelCase_				(		self		)		->						str:






        """simple docstring"""





        super().test_dict_tuple_outputs_equivalent(expected_max_difference=3E-3		)







  def 				UpperCAmelCase_				(		self		)		->						Dict:






        """simple docstring"""





        super().test_pt_np_pil_outputs_equivalent(expected_max_diff=5E-4		)







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






        """simple docstring"""





        super().test_save_load_local(expected_max_difference=5E-4		)







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






        """simple docstring"""





        super().test_save_load_optional_components(expected_max_difference=4E-4		)





@require_torch_gpu
@slow
class lowerCamelCase						(unittest.TestCase					):







  @classmethod
  def 				UpperCAmelCase_				(		cls		)		->						Tuple:






        """simple docstring"""





        super().setUpClass()
        torch.use_deterministic_algorithms(lowercase__		)







  @classmethod
  def 				UpperCAmelCase_				(		cls		)		->						int:






        """simple docstring"""





        super().tearDownClass()
        torch.use_deterministic_algorithms(lowercase__		)







  def 				UpperCAmelCase_				(		self		)		->						Dict:






        """simple docstring"""





        super().tearDown()
        gc.collect()
        torch.cuda.empty_cache()







  def 				UpperCAmelCase_				(		self		)		->						Tuple:






        """simple docstring"""





        _snake_case		:	str					     =     torch.manual_seed(51		)

        _snake_case		:	str					     =     StableDiffusionAttendAndExcitePipeline.from_pretrained(
            '''CompVis/stable-diffusion-v1-4'''     ,     safety_checker=lowercase__     ,     torch_dtype=torch.floataa		)
        pipe.to('''cuda'''		)

        _snake_case		:	List[Any]					     =     '''a painting of an elephant with glasses'''
        _snake_case		:	Any					     =     [5, 7]

        _snake_case		:	Tuple					     =     pipe(
            prompt=lowercase__     ,     token_indices=lowercase__     ,     guidance_scale=7.5     ,     generator=lowercase__     ,     num_inference_steps=5     ,     max_iter_to_alter=5     ,     output_type='''numpy'''     ,     ).images[0]

        _snake_case		:	Union[str, Any]					     =     load_numpy(
            '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/attend-and-excite/elephant_glasses.npy'''		)
        assert np.abs((expected_image - image).max()		) < 5E-1









'''simple docstring'''

# Copyright 2023 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


UpperCAmelCase					:		Dict		=							{'configuration_timm_backbone': ['TimmBackboneConfig']}


try:
   if not is_torch_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   UpperCAmelCase					:		Union[str, Any]		=							['TimmBackbone']


if TYPE_CHECKING:
   from .configuration_timm_backbone import TimmBackboneConfig

   try:
      if not is_torch_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_timm_backbone import TimmBackbone

else:
   import sys

   UpperCAmelCase					:		Dict		=							_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)


