
'''simple docstring'''
import gc
import random
import unittest

import numpy as np
import torch
from transformers import (
    CLIPImageProcessor,
    CLIPTextConfig,
    CLIPTextModelWithProjection,
    CLIPTokenizer,
    CLIPVisionConfig,
    CLIPVisionModelWithProjection,
)

from diffusers import (
    DiffusionPipeline,
    UnCLIPImageVariationPipeline,
    UnCLIPScheduler,
    UNetaDConditionModel,
    UNetaDModel,
)
from diffusers.pipelines.unclip.text_proj import UnCLIPTextProjModel
from diffusers.utils import floats_tensor, load_numpy, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, load_image, require_torch_gpu, skip_mps

from ..pipeline_params import IMAGE_VARIATION_BATCH_PARAMS, IMAGE_VARIATION_PARAMS
from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference


enable_full_determinism()


class        a__  (							lowerCamelCase_  ,				unittest.TestCase  ):
   _SCREAMING_SNAKE_CASE   :					int     	=							UnCLIPImageVariationPipeline
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							IMAGE_VARIATION_PARAMS - {'height', 'width', 'guidance_scale'}
   _SCREAMING_SNAKE_CASE   :					str     	=							IMAGE_VARIATION_BATCH_PARAMS

   _SCREAMING_SNAKE_CASE   :					int     	=							[
       'generator',
       'return_dict',
       'decoder_num_inference_steps',
       'super_res_num_inference_steps',
   ]
   _SCREAMING_SNAKE_CASE   :					Any     	=							False


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return 32


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return 32


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return self.time_input_dim


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return self.time_input_dim * 4


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return 100


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Union[str, Any]      					=       CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"  )
      return tokenizer


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      torch.manual_seed(0  )
      _lowercase      :				Optional[Any]      					=       CLIPTextConfig(
          bos_token_id=0      ,    eos_token_id=2      ,    hidden_size=self.text_embedder_hidden_size      ,    projection_dim=self.text_embedder_hidden_size      ,    intermediate_size=37      ,    layer_norm_eps=1E-0_5      ,    num_attention_heads=4      ,    num_hidden_layers=5      ,    pad_token_id=1      ,    vocab_size=1000      ,    )
      return CLIPTextModelWithProjection(_UpperCamelCase  )


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      torch.manual_seed(0  )
      _lowercase      :				Tuple      					=       CLIPVisionConfig(
          hidden_size=self.text_embedder_hidden_size      ,    projection_dim=self.text_embedder_hidden_size      ,    num_hidden_layers=5      ,    num_attention_heads=4      ,    image_size=32      ,    intermediate_size=37      ,    patch_size=1      ,    )
      return CLIPVisionModelWithProjection(_UpperCamelCase  )


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      torch.manual_seed(0  )

      _lowercase      :				str      					=       {
          "clip_embeddings_dim": self.text_embedder_hidden_size,
          "time_embed_dim": self.time_embed_dim,
          "cross_attention_dim": self.cross_attention_dim,
      }

      _lowercase      :				Optional[int]      					=       UnCLIPTextProjModel(**_UpperCamelCase  )
      return model


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      torch.manual_seed(0  )

      _lowercase      :				int      					=       {
          "sample_size": 32,
          # RGB in channels
          "in_channels": 3,
          # Out channels is double in channels because predicts mean and variance
          "out_channels": 6,
          "down_block_types": ("ResnetDownsampleBlock2D", "SimpleCrossAttnDownBlock2D"),
          "up_block_types": ("SimpleCrossAttnUpBlock2D", "ResnetUpsampleBlock2D"),
          "mid_block_type": "UNetMidBlock2DSimpleCrossAttn",
          "block_out_channels": (self.block_out_channels_a, self.block_out_channels_a * 2),
          "layers_per_block": 1,
          "cross_attention_dim": self.cross_attention_dim,
          "attention_head_dim": 4,
          "resnet_time_scale_shift": "scale_shift",
          "class_embed_type": "identity",
      }

      _lowercase      :				Tuple      					=       UNetaDConditionModel(**_UpperCamelCase  )
      return model


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return {
          "sample_size": 64,
          "layers_per_block": 1,
          "down_block_types": ("ResnetDownsampleBlock2D", "ResnetDownsampleBlock2D"),
          "up_block_types": ("ResnetUpsampleBlock2D", "ResnetUpsampleBlock2D"),
          "block_out_channels": (self.block_out_channels_a, self.block_out_channels_a * 2),
          "in_channels": 6,
          "out_channels": 3,
      }


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      torch.manual_seed(0  )

      _lowercase      :				Union[str, Any]      					=       UNetaDModel(**self.dummy_super_res_kwargs  )
      return model


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      torch.manual_seed(1  )

      _lowercase      :				Optional[Any]      					=       UNetaDModel(**self.dummy_super_res_kwargs  )
      return model


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Optional[Any]      					=       self.dummy_decoder
      _lowercase      :				Tuple      					=       self.dummy_text_proj
      _lowercase      :				Tuple      					=       self.dummy_text_encoder
      _lowercase      :				Any      					=       self.dummy_tokenizer
      _lowercase      :				Union[str, Any]      					=       self.dummy_super_res_first
      _lowercase      :				Union[str, Any]      					=       self.dummy_super_res_last

      _lowercase      :				int      					=       UnCLIPScheduler(
          variance_type="learned_range"      ,    prediction_type="epsilon"      ,    num_train_timesteps=1000      ,    )

      _lowercase      :				Any      					=       UnCLIPScheduler(
          variance_type="fixed_small_log"      ,    prediction_type="epsilon"      ,    num_train_timesteps=1000      ,    )

      _lowercase      :				Optional[int]      					=       CLIPImageProcessor(crop_size=32      ,    size=32  )

      _lowercase      :				List[str]      					=       self.dummy_image_encoder

      return {
          "decoder": decoder,
          "text_encoder": text_encoder,
          "tokenizer": tokenizer,
          "text_proj": text_proj,
          "feature_extractor": feature_extractor,
          "image_encoder": image_encoder,
          "super_res_first": super_res_first,
          "super_res_last": super_res_last,
          "decoder_scheduler": decoder_scheduler,
          "super_res_scheduler": super_res_scheduler,
      }


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase=0      ,    _UpperCamelCase=True  ):





      """simple docstring"""





      _lowercase      :				int      					=       floats_tensor((1, 3, 32, 32)      ,    rng=random.Random(_UpperCamelCase  )  ).to(_UpperCamelCase  )
      if str(_UpperCamelCase  ).startswith("mps"  ):
         _lowercase      :				Optional[Any]      					=       torch.manual_seed(_UpperCamelCase  )
      else:
         _lowercase      :				Optional[int]      					=       torch.Generator(device=_UpperCamelCase  ).manual_seed(_UpperCamelCase  )

      if pil_image:
         _lowercase      :				List[Any]      					=       input_image * 0.5 + 0.5
         _lowercase      :				Tuple      					=       input_image.clamp(0      ,    1  )
         _lowercase      :				str      					=       input_image.cpu().permute(0      ,    2      ,    3      ,    1  ).float().numpy()
         _lowercase      :				Optional[int]      					=       DiffusionPipeline.numpy_to_pil(_UpperCamelCase  )[0]

      return {
          "image": input_image,
          "generator": generator,
          "decoder_num_inference_steps": 2,
          "super_res_num_inference_steps": 2,
          "output_type": "np",
      }


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[Any]      					=       "cpu"

      _lowercase      :				Union[str, Any]      					=       self.get_dummy_components()

      _lowercase      :				Optional[Any]      					=       self.pipeline_class(**_UpperCamelCase  )
      _lowercase      :				Tuple      					=       pipe.to(_UpperCamelCase  )

      pipe.set_progress_bar_config(disable=_UpperCamelCase  )

      _lowercase      :				Optional[Any]      					=       self.get_dummy_inputs(_UpperCamelCase      ,    pil_image=_UpperCamelCase  )

      _lowercase      :				Optional[Any]      					=       pipe(**_UpperCamelCase  )
      _lowercase      :				Any      					=       output.images

      _lowercase      :				Tuple      					=       self.get_dummy_inputs(_UpperCamelCase      ,    pil_image=_UpperCamelCase  )

      _lowercase      :				Union[str, Any]      					=       pipe(
          **_UpperCamelCase      ,    return_dict=_UpperCamelCase      ,    )[0]

      _lowercase      :				Tuple      					=       image[0, -3:, -3:, -1]
      _lowercase      :				int      					=       image_from_tuple[0, -3:, -3:, -1]

      assert image.shape == (1, 64, 64, 3)

      _lowercase      :				int      					=       np.array(
          [
              0.9_9_9_7,
              0.0_0_0_2,
              0.9_9_9_7,
              0.9_9_9_7,
              0.9_9_6_9,
              0.0_0_2_3,
              0.9_9_9_7,
              0.9_9_6_9,
              0.9_9_7_0,
          ]  )

      assert np.abs(image_slice.flatten() - expected_slice  ).max() < 1E-2
      assert np.abs(image_from_tuple_slice.flatten() - expected_slice  ).max() < 1E-2


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Any      					=       "cpu"

      _lowercase      :				Union[str, Any]      					=       self.get_dummy_components()

      _lowercase      :				Optional[Any]      					=       self.pipeline_class(**_UpperCamelCase  )
      _lowercase      :				Optional[int]      					=       pipe.to(_UpperCamelCase  )

      pipe.set_progress_bar_config(disable=_UpperCamelCase  )

      _lowercase      :				Optional[int]      					=       self.get_dummy_inputs(_UpperCamelCase      ,    pil_image=_UpperCamelCase  )

      _lowercase      :				Optional[int]      					=       pipe(**_UpperCamelCase  )
      _lowercase      :				int      					=       output.images

      _lowercase      :				Any      					=       self.get_dummy_inputs(_UpperCamelCase      ,    pil_image=_UpperCamelCase  )

      _lowercase      :				Optional[Any]      					=       pipe(
          **_UpperCamelCase      ,    return_dict=_UpperCamelCase      ,    )[0]

      _lowercase      :				List[Any]      					=       image[0, -3:, -3:, -1]
      _lowercase      :				str      					=       image_from_tuple[0, -3:, -3:, -1]

      assert image.shape == (1, 64, 64, 3)

      _lowercase      :				Any      					=       np.array([0.9_9_9_7, 0.0_0_0_3, 0.9_9_9_7, 0.9_9_9_7, 0.9_9_7_0, 0.0_0_2_4, 0.9_9_9_7, 0.9_9_7_1, 0.9_9_7_1]  )

      assert np.abs(image_slice.flatten() - expected_slice  ).max() < 1E-2
      assert np.abs(image_from_tuple_slice.flatten() - expected_slice  ).max() < 1E-2


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Optional[Any]      					=       "cpu"

      _lowercase      :				List[str]      					=       self.get_dummy_components()

      _lowercase      :				List[Any]      					=       self.pipeline_class(**_UpperCamelCase  )
      _lowercase      :				Dict      					=       pipe.to(_UpperCamelCase  )

      pipe.set_progress_bar_config(disable=_UpperCamelCase  )

      _lowercase      :				Dict      					=       self.get_dummy_inputs(_UpperCamelCase      ,    pil_image=_UpperCamelCase  )
      _lowercase      :				Any      					=       [
          pipeline_inputs["image"],
          pipeline_inputs["image"],
      ]

      _lowercase      :				Any      					=       pipe(**_UpperCamelCase  )
      _lowercase      :				List[Any]      					=       output.images

      _lowercase      :				Optional[Any]      					=       self.get_dummy_inputs(_UpperCamelCase      ,    pil_image=_UpperCamelCase  )
      _lowercase      :				Optional[Any]      					=       [
          tuple_pipeline_inputs["image"],
          tuple_pipeline_inputs["image"],
      ]

      _lowercase      :				List[Any]      					=       pipe(
          **_UpperCamelCase      ,    return_dict=_UpperCamelCase      ,    )[0]

      _lowercase      :				Tuple      					=       image[0, -3:, -3:, -1]
      _lowercase      :				Dict      					=       image_from_tuple[0, -3:, -3:, -1]

      assert image.shape == (2, 64, 64, 3)

      _lowercase      :				Optional[Any]      					=       np.array(
          [
              0.9_9_9_7,
              0.9_9_8_9,
              0.0_0_0_8,
              0.0_0_2_1,
              0.9_9_6_0,
              0.0_0_1_8,
              0.0_0_1_4,
              0.0_0_0_2,
              0.9_9_3_3,
          ]  )

      assert np.abs(image_slice.flatten() - expected_slice  ).max() < 1E-2
      assert np.abs(image_from_tuple_slice.flatten() - expected_slice  ).max() < 1E-2


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[Any]      					=       torch.device("cpu"  )


      class        a__  :
         _SCREAMING_SNAKE_CASE   :					Tuple     	=							1




      _lowercase      :				Any      					=       self.get_dummy_components()

      _lowercase      :				List[Any]      					=       self.pipeline_class(**_UpperCamelCase  )
      _lowercase      :				int      					=       pipe.to(_UpperCamelCase  )

      pipe.set_progress_bar_config(disable=_UpperCamelCase  )

      _lowercase      :				List[str]      					=       torch.Generator(device=_UpperCamelCase  ).manual_seed(0  )
      _lowercase      :				int      					=       pipe.decoder.dtype
      _lowercase      :				List[Any]      					=       1

      _lowercase      :				List[str]      					=       (
          batch_size,
          pipe.decoder.config.in_channels,
          pipe.decoder.config.sample_size,
          pipe.decoder.config.sample_size,
      )
      _lowercase      :				Union[str, Any]      					=       pipe.prepare_latents(
          _UpperCamelCase      ,    dtype=_UpperCamelCase      ,    device=_UpperCamelCase      ,    generator=_UpperCamelCase      ,    latents=_UpperCamelCase      ,    scheduler=DummyScheduler()  )

      _lowercase      :				List[str]      					=       (
          batch_size,
          pipe.super_res_first.config.in_channels // 2,
          pipe.super_res_first.config.sample_size,
          pipe.super_res_first.config.sample_size,
      )
      _lowercase      :				List[Any]      					=       pipe.prepare_latents(
          _UpperCamelCase      ,    dtype=_UpperCamelCase      ,    device=_UpperCamelCase      ,    generator=_UpperCamelCase      ,    latents=_UpperCamelCase      ,    scheduler=DummyScheduler()  )

      _lowercase      :				List[Any]      					=       self.get_dummy_inputs(_UpperCamelCase      ,    pil_image=_UpperCamelCase  )

      _lowercase      :				str      					=       pipe(
          **_UpperCamelCase      ,    decoder_latents=_UpperCamelCase      ,    super_res_latents=_UpperCamelCase  ).images

      _lowercase      :				Any      					=       self.get_dummy_inputs(_UpperCamelCase      ,    pil_image=_UpperCamelCase  )
      # Don't pass image, instead pass embedding
      _lowercase      :				Any      					=       pipeline_inputs.pop("image"  )
      _lowercase      :				Union[str, Any]      					=       pipe.image_encoder(_UpperCamelCase  ).image_embeds

      _lowercase      :				int      					=       pipe(
          **_UpperCamelCase      ,    decoder_latents=_UpperCamelCase      ,    super_res_latents=_UpperCamelCase      ,    image_embeddings=_UpperCamelCase      ,    ).images

      # make sure passing text embeddings manually is identical
      assert np.abs(img_out_a - img_out_a  ).max() < 1E-4


   @skip_mps
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Optional[Any]      					=       torch_device == "cpu"

      # Check is relaxed because there is not a torch 2.0 sliced attention added kv processor
      _lowercase      :				Any      					=       1E-2

      self._test_attention_slicing_forward_pass(
          test_max_difference=_UpperCamelCase      ,    expected_max_diff=_UpperCamelCase  )


   @skip_mps
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[str]      					=       torch_device == "cpu"
      _lowercase      :				Optional[int]      					=       True
      _lowercase      :				List[Any]      					=       [
          "decoder_num_inference_steps",
          "super_res_num_inference_steps",
      ]

      self._test_inference_batch_single_identical(
          test_max_difference=_UpperCamelCase      ,    relax_max_difference=_UpperCamelCase      ,    additional_params_copy_to_batched_inputs=_UpperCamelCase      ,    )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Dict      					=       [
          "decoder_num_inference_steps",
          "super_res_num_inference_steps",
      ]

      if torch_device == "mps":
         # TODO: MPS errors with larger batch sizes
         _lowercase      :				List[Any]      					=       [2, 3]
         self._test_inference_batch_consistent(
             batch_sizes=_UpperCamelCase      ,    additional_params_copy_to_batched_inputs=_UpperCamelCase      ,    )
      else:
         self._test_inference_batch_consistent(
             additional_params_copy_to_batched_inputs=_UpperCamelCase  )


   @skip_mps
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return super().test_dict_tuple_outputs_equivalent()


   @skip_mps
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return super().test_save_load_local()






   @skip_mps
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return super().test_save_load_optional_components()




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


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





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






   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Optional[int]      					=       load_image(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/unclip/cat.png"  )
      _lowercase      :				Tuple      					=       load_numpy(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"
          "/unclip/karlo_v1_alpha_cat_variation_fp16.npy"  )

      _lowercase      :				Union[str, Any]      					=       UnCLIPImageVariationPipeline.from_pretrained(
          "kakaobrain/karlo-v1-alpha-image-variations"      ,    torch_dtype=torch.floataa  )
      _lowercase      :				List[Any]      					=       pipeline.to(_UpperCamelCase  )
      pipeline.set_progress_bar_config(disable=_UpperCamelCase  )

      _lowercase      :				Optional[int]      					=       torch.Generator(device="cpu"  ).manual_seed(0  )
      _lowercase      :				int      					=       pipeline(
          _UpperCamelCase      ,    generator=_UpperCamelCase      ,    output_type="np"      ,    )

      _lowercase      :				List[Any]      					=       output.images[0]

      assert image.shape == (256, 256, 3)

      assert_mean_pixel_difference(_UpperCamelCase      ,    _UpperCamelCase      ,    15  )









'''simple docstring'''
import gc
import random
import unittest

import numpy as np
import torch
from transformers import (
    CLIPImageProcessor,
    CLIPTextConfig,
    CLIPTextModel,
    CLIPTokenizer,
    CLIPVisionConfig,
    CLIPVisionModelWithProjection,
)

from diffusers import AutoencoderKL, DDIMScheduler, DDPMScheduler, StableUnCLIPImgaImgPipeline, UNetaDConditionModel
from diffusers.pipelines.pipeline_utils import DiffusionPipeline
from diffusers.pipelines.stable_diffusion.stable_unclip_image_normalizer import StableUnCLIPImageNormalizer
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import (
    enable_full_determinism,
    floats_tensor,
    load_image,
    load_numpy,
    require_torch_gpu,
    skip_mps,
    slow,
    torch_device,
)

from ..pipeline_params import TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS, TEXT_GUIDED_IMAGE_VARIATION_PARAMS
from ..test_pipelines_common import (
    PipelineKarrasSchedulerTesterMixin,
    PipelineLatentTesterMixin,
    PipelineTesterMixin,
    assert_mean_pixel_difference,
)


enable_full_determinism()


class        a__  (							lowerCamelCase_  ,				lowerCamelCase_  ,				lowerCamelCase_  ,				unittest.TestCase  ):
   _SCREAMING_SNAKE_CASE   :					Dict     	=							StableUnCLIPImgaImgPipeline
   _SCREAMING_SNAKE_CASE   :					int     	=							TEXT_GUIDED_IMAGE_VARIATION_PARAMS
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS
   _SCREAMING_SNAKE_CASE   :					Any     	=							frozenset(
       []  )  # TO-DO: update image_params once pipeline is refactored with VaeImageProcessor.preprocess
   _SCREAMING_SNAKE_CASE   :					List[Any]     	=							frozenset([]  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[Any]      					=       32
      _lowercase      :				Any      					=       embedder_hidden_size

      # image encoding components

      _lowercase      :				Optional[int]      					=       CLIPImageProcessor(crop_size=32      ,    size=32  )

      torch.manual_seed(0  )
      _lowercase      :				Dict      					=       CLIPVisionModelWithProjection(
          CLIPVisionConfig(
              hidden_size=_UpperCamelCase      ,    projection_dim=_UpperCamelCase      ,    num_hidden_layers=5      ,    num_attention_heads=4      ,    image_size=32      ,    intermediate_size=37      ,    patch_size=1      ,    )  )

      # regular denoising components

      torch.manual_seed(0  )
      _lowercase      :				str      					=       StableUnCLIPImageNormalizer(embedding_dim=_UpperCamelCase  )
      _lowercase      :				Dict      					=       DDPMScheduler(beta_schedule="squaredcos_cap_v2"  )

      torch.manual_seed(0  )
      _lowercase      :				str      					=       CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"  )

      torch.manual_seed(0  )
      _lowercase      :				Optional[Any]      					=       CLIPTextModel(
          CLIPTextConfig(
              bos_token_id=0      ,    eos_token_id=2      ,    hidden_size=_UpperCamelCase      ,    projection_dim=32      ,    intermediate_size=37      ,    layer_norm_eps=1E-0_5      ,    num_attention_heads=4      ,    num_hidden_layers=5      ,    pad_token_id=1      ,    vocab_size=1000      ,    )  )

      torch.manual_seed(0  )
      _lowercase      :				List[str]      					=       UNetaDConditionModel(
          sample_size=32      ,    in_channels=4      ,    out_channels=4      ,    down_block_types=("CrossAttnDownBlock2D", "DownBlock2D")      ,    up_block_types=("UpBlock2D", "CrossAttnUpBlock2D")      ,    block_out_channels=(32, 64)      ,    attention_head_dim=(2, 4)      ,    class_embed_type="projection"      ,    projection_class_embeddings_input_dim=embedder_projection_dim * 2      ,    cross_attention_dim=_UpperCamelCase      ,    layers_per_block=1      ,    upcast_attention=_UpperCamelCase      ,    use_linear_projection=_UpperCamelCase      ,    )

      torch.manual_seed(0  )
      _lowercase      :				int      					=       DDIMScheduler(
          beta_schedule="scaled_linear"      ,    beta_start=0.0_0_0_8_5      ,    beta_end=0.0_1_2      ,    prediction_type="v_prediction"      ,    set_alpha_to_one=_UpperCamelCase      ,    steps_offset=1      ,    )

      torch.manual_seed(0  )
      _lowercase      :				Dict      					=       AutoencoderKL()

      _lowercase      :				int      					=       {
          # image encoding components
          "feature_extractor": feature_extractor,
          "image_encoder": image_encoder.eval(),
          # image noising components
          "image_normalizer": image_normalizer.eval(),
          "image_noising_scheduler": image_noising_scheduler,
          # regular denoising components
          "tokenizer": tokenizer,
          "text_encoder": text_encoder.eval(),
          "unet": unet.eval(),
          "scheduler": scheduler,
          "vae": vae.eval(),
      }

      return components


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase=0      ,    _UpperCamelCase=True  ):





      """simple docstring"""





      if str(_UpperCamelCase  ).startswith("mps"  ):
         _lowercase      :				List[Any]      					=       torch.manual_seed(_UpperCamelCase  )
      else:
         _lowercase      :				List[str]      					=       torch.Generator(device=_UpperCamelCase  ).manual_seed(_UpperCamelCase  )

      _lowercase      :				List[str]      					=       floats_tensor((1, 3, 32, 32)      ,    rng=random.Random(_UpperCamelCase  )  ).to(_UpperCamelCase  )

      if pil_image:
         _lowercase      :				Optional[Any]      					=       input_image * 0.5 + 0.5
         _lowercase      :				Optional[int]      					=       input_image.clamp(0      ,    1  )
         _lowercase      :				str      					=       input_image.cpu().permute(0      ,    2      ,    3      ,    1  ).float().numpy()
         _lowercase      :				int      					=       DiffusionPipeline.numpy_to_pil(_UpperCamelCase  )[0]

      return {
          "prompt": "An anime racoon running a marathon",
          "image": input_image,
          "generator": generator,
          "num_inference_steps": 2,
          "output_type": "np",
      }


   @skip_mps
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Dict      					=       "cpu"  # ensure determinism for the device-dependent torch.Generator
      _lowercase      :				List[str]      					=       self.get_dummy_components()
      _lowercase      :				str      					=       StableUnCLIPImgaImgPipeline(**_UpperCamelCase  )
      _lowercase      :				int      					=       sd_pipe.to(_UpperCamelCase  )
      sd_pipe.set_progress_bar_config(disable=_UpperCamelCase  )

      _lowercase      :				str      					=       self.get_dummy_inputs(_UpperCamelCase  )
      inputs.update({"image_embeds": None}  )
      _lowercase      :				Tuple      					=       sd_pipe(**_UpperCamelCase  ).images
      _lowercase      :				str      					=       image[0, -3:, -3:, -1]

      assert image.shape == (1, 32, 32, 3)
      _lowercase      :				Tuple      					=       np.array([0.3_8_7_2, 0.7_2_2_4, 0.5_6_0_1, 0.4_7_4_1, 0.6_8_7_2, 0.5_8_1_4, 0.4_6_3_6, 0.3_8_6_7, 0.5_0_7_8]  )

      assert np.abs(image_slice.flatten() - expected_slice  ).max() < 1E-3


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[Any]      					=       torch_device in ["cpu", "mps"]

      self._test_attention_slicing_forward_pass(test_max_difference=_UpperCamelCase  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Dict      					=       torch_device in ["cpu", "mps"]

      self._test_inference_batch_single_identical(test_max_difference=_UpperCamelCase  )






   @unittest.skipIf(
       torch_device != "cuda" or not is_xformers_available()      ,    reason="XFormers attention is only available with CUDA and `xformers` installed"      ,    )
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      self._test_xformers_attention_forwardGenerator_pass(test_max_difference=_UpperCamelCase  )




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


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





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


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Any      					=       load_image(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png"  )

      _lowercase      :				Any      					=       load_numpy(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/stable_unclip_2_1_l_img2img_anime_turtle_fp16.npy"  )

      _lowercase      :				List[str]      					=       StableUnCLIPImgaImgPipeline.from_pretrained(
          "fusing/stable-unclip-2-1-l-img2img"      ,    torch_dtype=torch.floataa  )
      pipe.to(_UpperCamelCase  )
      pipe.set_progress_bar_config(disable=_UpperCamelCase  )
      # stable unclip will oom when integration tests are run on a V100,
      # so turn on memory savings
      pipe.enable_attention_slicing()
      pipe.enable_sequential_cpu_offload()

      _lowercase      :				int      					=       torch.Generator(device="cpu"  ).manual_seed(0  )
      _lowercase      :				List[Any]      					=       pipe(_UpperCamelCase      ,    "anime turle"      ,    generator=_UpperCamelCase      ,    output_type="np"  )

      _lowercase      :				str      					=       output.images[0]

      assert image.shape == (768, 768, 3)

      assert_mean_pixel_difference(_UpperCamelCase      ,    _UpperCamelCase  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Optional[int]      					=       load_image(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png"  )

      _lowercase      :				Any      					=       load_numpy(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/stable_unclip_2_1_h_img2img_anime_turtle_fp16.npy"  )

      _lowercase      :				Any      					=       StableUnCLIPImgaImgPipeline.from_pretrained(
          "fusing/stable-unclip-2-1-h-img2img"      ,    torch_dtype=torch.floataa  )
      pipe.to(_UpperCamelCase  )
      pipe.set_progress_bar_config(disable=_UpperCamelCase  )
      # stable unclip will oom when integration tests are run on a V100,
      # so turn on memory savings
      pipe.enable_attention_slicing()
      pipe.enable_sequential_cpu_offload()

      _lowercase      :				Optional[int]      					=       torch.Generator(device="cpu"  ).manual_seed(0  )
      _lowercase      :				Any      					=       pipe(_UpperCamelCase      ,    "anime turle"      ,    generator=_UpperCamelCase      ,    output_type="np"  )

      _lowercase      :				Tuple      					=       output.images[0]

      assert image.shape == (768, 768, 3)

      assert_mean_pixel_difference(_UpperCamelCase      ,    _UpperCamelCase  )






   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[str]      					=       load_image(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png"  )

      torch.cuda.empty_cache()
      torch.cuda.reset_max_memory_allocated()
      torch.cuda.reset_peak_memory_stats()

      _lowercase      :				Optional[Any]      					=       StableUnCLIPImgaImgPipeline.from_pretrained(
          "fusing/stable-unclip-2-1-h-img2img"      ,    torch_dtype=torch.floataa  )
      _lowercase      :				Tuple      					=       pipe.to(_UpperCamelCase  )
      pipe.set_progress_bar_config(disable=_UpperCamelCase  )
      pipe.enable_attention_slicing()
      pipe.enable_sequential_cpu_offload()

      _lowercase      :				Optional[int]      					=       pipe(
          _UpperCamelCase      ,    "anime turtle"      ,    num_inference_steps=2      ,    output_type="np"      ,    )

      _lowercase      :				str      					=       torch.cuda.max_memory_allocated()
      # make sure that less than 7 GB is allocated
      assert mem_bytes < 7 * 10**9






