






from __future__ import annotations

def      __lowercase					( snake_case ):







				"""simple docstring"""






				if not nums:
								raise ValueError('''List is empty''' )
				return sum(snake_case ) / len(snake_case )


if __name__ == "__main__":
					import doctest

					doctest.testmod()














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 						lowerCamelCase_				(      unittest.TestCase ):







				@property
				def 			A	(						self     ):
								"""simple docstring"""
								torch.manual_seed(0     )
								__magic_name__		:Dict        =      UNetaDModel(
								    block_out_channels=(3_2, 6_4)       ,					layers_per_block=2       ,					sample_size=3_2       ,					in_channels=3       ,					out_channels=3       ,					down_block_types=('''DownBlock2D''', '''AttnDownBlock2D''')       ,					up_block_types=('''AttnUpBlock2D''', '''UpBlock2D''')       ,					)
								return model







				@property
				def 			A	(						self     ):
								"""simple docstring"""
								torch.manual_seed(0     )
								__magic_name__		:List[str]        =      VQModel(
								    block_out_channels=[3_2, 6_4]       ,					in_channels=3       ,					out_channels=3       ,					down_block_types=['''DownEncoderBlock2D''', '''DownEncoderBlock2D''']       ,					up_block_types=['''UpDecoderBlock2D''', '''UpDecoderBlock2D''']       ,					latent_channels=3       ,					)
								return model







				@property
				def 			A	(						self     ):
								"""simple docstring"""
								torch.manual_seed(0     )
								__magic_name__		:int        =      CLIPTextConfig(
								    bos_token_id=0       ,					eos_token_id=2       ,					hidden_size=3_2       ,					intermediate_size=3_7       ,					layer_norm_eps=1E-05       ,					num_attention_heads=4       ,					num_hidden_layers=5       ,					pad_token_id=1       ,					vocab_size=1_0_0_0       ,					)
								return CLIPTextModel(__lowerCAmelCase     )







				def 			A	(						self     ):
								"""simple docstring"""
								__magic_name__		:Optional[Any]        =      self.dummy_uncond_unet
								__magic_name__		:Optional[int]        =      DDIMScheduler()
								__magic_name__		:List[str]        =      self.dummy_vq_model

								__magic_name__		:Tuple        =      LDMPipeline(unet=__lowerCAmelCase       ,					vqvae=__lowerCAmelCase       ,					scheduler=__lowerCAmelCase     )
								ldm.to(__lowerCAmelCase     )
								ldm.set_progress_bar_config(disable=__lowerCAmelCase     )

								__magic_name__		:List[Any]        =      torch.manual_seed(0     )
								__magic_name__		:List[str]        =      ldm(generator=__lowerCAmelCase       ,					num_inference_steps=2       ,					output_type='''numpy'''     ).images

								__magic_name__		:List[Any]        =      torch.manual_seed(0     )
								__magic_name__		:Any        =      ldm(generator=__lowerCAmelCase       ,					num_inference_steps=2       ,					output_type='''numpy'''       ,					return_dict=__lowerCAmelCase     )[0]

								__magic_name__		:Any        =      image[0, -3:, -3:, -1]
								__magic_name__		:Dict        =      image_from_tuple[0, -3:, -3:, -1]

								assert image.shape == (1, 6_4, 6_4, 3)
								__magic_name__		:Union[str, Any]        =      np.array([0.8512, 0.818, 0.6411, 0.6808, 0.4465, 0.5618, 0.46, 0.6231, 0.5172]     )
								__magic_name__		:Any        =      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 						lowerCamelCase_				(      unittest.TestCase ):







				def 			A	(						self     ):
								"""simple docstring"""
								__magic_name__		:Tuple        =      LDMPipeline.from_pretrained('''CompVis/ldm-celebahq-256'''     )
								ldm.to(__lowerCAmelCase     )
								ldm.set_progress_bar_config(disable=__lowerCAmelCase     )

								__magic_name__		:Optional[Any]        =      torch.manual_seed(0     )
								__magic_name__		:Optional[int]        =      ldm(generator=__lowerCAmelCase       ,					num_inference_steps=5       ,					output_type='''numpy'''     ).images

								__magic_name__		:Optional[Any]        =      image[0, -3:, -3:, -1]

								assert image.shape == (1, 2_5_6, 2_5_6, 3)
								__magic_name__		:List[str]        =      np.array([0.4399, 0.44975, 0.46825, 0.474, 0.4359, 0.4581, 0.45095, 0.4341, 0.4447]     )
								__magic_name__		:Tuple        =      1E-2 if torch_device != '''mps''' else 3E-2

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






