




import unittest

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

from diffusers import DDIMScheduler, LDMPipeline, UNetaDModel, VQModel
from diffusers.utils.testing_utils import enable_full_determinism, require_torch, slow, torch_device


enable_full_determinism()




class     snake_case__							(unittest.TestCase   ):
				"""simple docstring"""



				@property
				def 							__UpperCAmelCase							(      self				:     int							)					->     List[Any]:
							torch.manual_seed(0							)
							a    =			UNetaDModel(
							    block_out_channels=(32, 64)					,      layers_per_block=2					,      sample_size=32					,      in_channels=3					,      out_channels=3					,      down_block_types=("DownBlock2D", "AttnDownBlock2D")					,      up_block_types=("AttnUpBlock2D", "UpBlock2D")					,      )
							return model





				@property
				def 							__UpperCAmelCase							(      self				:     Tuple							)					->     List[Any]:
							torch.manual_seed(0							)
							a    =			VQModel(
							    block_out_channels=[32, 64]					,      in_channels=3					,      out_channels=3					,      down_block_types=["DownEncoderBlock2D", "DownEncoderBlock2D"]					,      up_block_types=["UpDecoderBlock2D", "UpDecoderBlock2D"]					,      latent_channels=3					,      )
							return model





				@property
				def 							__UpperCAmelCase							(      self				:     Optional[int]							)					->     Tuple:
							torch.manual_seed(0							)
							a    =			CLIPTextConfig(
							    bos_token_id=0					,      eos_token_id=2					,      hidden_size=32					,      intermediate_size=37					,      layer_norm_eps=1e-05					,      num_attention_heads=4					,      num_hidden_layers=5					,      pad_token_id=1					,      vocab_size=10_00					,      )
							return CLIPTextModel(__lowerCamelCase							)





				def 							__UpperCAmelCase							(      self				:     List[Any]							)					->     Optional[int]:
							a    =			self.dummy_uncond_unet
							a    =			DDIMScheduler()
							a    =			self.dummy_vq_model

							a    =			LDMPipeline(unet=__lowerCamelCase					,      vqvae=__lowerCamelCase					,      scheduler=__lowerCamelCase							)
							ldm.to(__lowerCamelCase							)
							ldm.set_progress_bar_config(disable=__lowerCamelCase							)

							a    =			torch.manual_seed(0							)
							a    =			ldm(generator=__lowerCamelCase					,      num_inference_steps=2					,      output_type="numpy"							).images

							a    =			torch.manual_seed(0							)
							a    =			ldm(generator=__lowerCamelCase					,      num_inference_steps=2					,      output_type="numpy"					,      return_dict=__lowerCamelCase							)[0]

							a    =			image[0, -3:, -3:, -1]
							a    =			image_from_tuple[0, -3:, -3:, -1]

							assert image.shape == (1, 64, 64, 3)
							a    =			np.array([0.8_512, 0.818, 0.6_411, 0.6_808, 0.4_465, 0.5_618, 0.46, 0.6_231, 0.5_172]							)
							a    =			1e-2 if torch_device != "mps" else 3e-2

							assert np.abs(image_slice.flatten() - expected_slice							).max() < tolerance
							assert np.abs(image_from_tuple_slice.flatten() - expected_slice							).max() < tolerance




@slow
@require_torch
class     snake_case__							(unittest.TestCase   ):
				"""simple docstring"""



				def 							__UpperCAmelCase							(      self				:     Any							)					->     List[str]:
							a    =			LDMPipeline.from_pretrained("CompVis/ldm-celebahq-256"							)
							ldm.to(__lowerCamelCase							)
							ldm.set_progress_bar_config(disable=__lowerCamelCase							)

							a    =			torch.manual_seed(0							)
							a    =			ldm(generator=__lowerCamelCase					,      num_inference_steps=5					,      output_type="numpy"							).images

							a    =			image[0, -3:, -3:, -1]

							assert image.shape == (1, 2_56, 2_56, 3)
							a    =			np.array([0.4_399, 0.44_975, 0.46_825, 0.474, 0.4_359, 0.4_581, 0.45_095, 0.4_341, 0.4_447]							)
							a    =			1e-2 if torch_device != "mps" else 3e-2

							assert np.abs(image_slice.flatten() - expected_slice							).max() < tolerance












import warnings

from diffusers import StableDiffusionImgaImgPipeline  # noqa F401


warnings.warn(
    'The `image_to_image.py` script is outdated. Please use directly `from diffusers import'
    ' StableDiffusionImg2ImgPipeline` instead.'
)






