






import gc
import unittest

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

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    StableDiffusionSAGPipeline,
    UNetaDConditionModel,
)
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, 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 PipelineLatentTesterMixin, PipelineTesterMixin


enable_full_determinism()
class       _UpperCAmelCase					(       A__		,A__		,unittest.TestCase	):

				"""simple docstring"""




				lowercase__											=       StableDiffusionSAGPipeline
				lowercase__											=       TEXT_TO_IMAGE_PARAMS
				lowercase__											=       TEXT_TO_IMAGE_BATCH_PARAMS
				lowercase__											=       TEXT_TO_IMAGE_IMAGE_PARAMS
				lowercase__											=       TEXT_TO_IMAGE_IMAGE_PARAMS
				lowercase__											=       False




				def 				lowercase__   (     self						:    Optional[int]  ):

								'''simple docstring'''
								torch.manual_seed(0  )
								lowercase__    =			UNetaDConditionModel(
								    block_out_channels=(32, 64),  layers_per_block=2,  sample_size=32,  in_channels=4,  out_channels=4,  down_block_types=('''DownBlock2D''', '''CrossAttnDownBlock2D'''),  up_block_types=('''CrossAttnUpBlock2D''', '''UpBlock2D'''),  cross_attention_dim=32,  )
								lowercase__    =			DDIMScheduler(
								    beta_start=0.00085,  beta_end=0.012,  beta_schedule='''scaled_linear''',  clip_sample=lowerCamelCase,  set_alpha_to_one=lowerCamelCase,  )
								torch.manual_seed(0  )
								lowercase__    =			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,  )
								torch.manual_seed(0  )
								lowercase__    =			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=1_000,  )
								lowercase__    =			CLIPTextModel(lowerCamelCase  )
								lowercase__    =			CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip'''  )

								lowercase__    =			{
								    '''unet''': unet,
								    '''scheduler''': scheduler,
								    '''vae''': vae,
								    '''text_encoder''': text_encoder,
								    '''tokenizer''': tokenizer,
								    '''safety_checker''': None,
								    '''feature_extractor''': None,
								}
								return components




				def 				lowercase__   (     self						:    Optional[int],  lowerCamelCase						:    Union[str, Any],  lowerCamelCase						:    List[str]=0  ):

								'''simple docstring'''
								if str(lowerCamelCase  ).startswith('''mps'''  ):
												lowercase__    =			torch.manual_seed(lowerCamelCase  )
								else:
												lowercase__    =			torch.Generator(device=lowerCamelCase  ).manual_seed(lowerCamelCase  )
								lowercase__    =			{
								    '''prompt''': '''.''',
								    '''generator''': generator,
								    '''num_inference_steps''': 2,
								    '''guidance_scale''': 1.0,
								    '''sag_scale''': 1.0,
								    '''output_type''': '''numpy''',
								}
								return inputs




				def 				lowercase__   (     self						:    Dict  ):

								'''simple docstring'''
								super().test_inference_batch_single_identical(expected_max_diff=3E-3  )



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

				"""simple docstring"""




				def 				lowercase__   (     self						:    List[str]  ):

								'''simple docstring'''
								# clean up the VRAM after each test
								super().tearDown()
								gc.collect()
								torch.cuda.empty_cache()




				def 				lowercase__   (     self						:    Dict  ):

								'''simple docstring'''
								lowercase__    =			StableDiffusionSAGPipeline.from_pretrained('''CompVis/stable-diffusion-v1-4'''  )
								lowercase__    =			sag_pipe.to(lowerCamelCase  )
								sag_pipe.set_progress_bar_config(disable=lowerCamelCase  )

								lowercase__    =			'''.'''
								lowercase__    =			torch.manual_seed(0  )
								lowercase__    =			sag_pipe(
								    [prompt],  generator=lowerCamelCase,  guidance_scale=7.5,  sag_scale=1.0,  num_inference_steps=20,  output_type='''np'''  )

								lowercase__    =			output.images

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

								assert image.shape == (1, 512, 512, 3)
								lowercase__    =			np.array([0.1568, 0.1738, 0.1695, 0.1693, 0.1507, 0.1705, 0.1547, 0.1751, 0.1949]  )

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




				def 				lowercase__   (     self						:    List[Any]  ):

								'''simple docstring'''
								lowercase__    =			StableDiffusionSAGPipeline.from_pretrained('''stabilityai/stable-diffusion-2-1-base'''  )
								lowercase__    =			sag_pipe.to(lowerCamelCase  )
								sag_pipe.set_progress_bar_config(disable=lowerCamelCase  )

								lowercase__    =			'''.'''
								lowercase__    =			torch.manual_seed(0  )
								lowercase__    =			sag_pipe(
								    [prompt],  generator=lowerCamelCase,  guidance_scale=7.5,  sag_scale=1.0,  num_inference_steps=20,  output_type='''np'''  )

								lowercase__    =			output.images

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

								assert image.shape == (1, 512, 512, 3)
								lowercase__    =			np.array([0.3459, 0.2876, 0.2537, 0.3002, 0.2671, 0.2160, 0.3026, 0.2262, 0.2371]  )

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




				def 				lowercase__   (     self						:    Union[str, Any]  ):

								'''simple docstring'''
								lowercase__    =			StableDiffusionSAGPipeline.from_pretrained('''stabilityai/stable-diffusion-2-1-base'''  )
								lowercase__    =			sag_pipe.to(lowerCamelCase  )
								sag_pipe.set_progress_bar_config(disable=lowerCamelCase  )

								lowercase__    =			'''.'''
								lowercase__    =			torch.manual_seed(0  )
								lowercase__    =			sag_pipe(
								    [prompt],  width=768,  height=512,  generator=lowerCamelCase,  guidance_scale=7.5,  sag_scale=1.0,  num_inference_steps=20,  output_type='''np''',  )

								lowercase__    =			output.images

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












def   a			(						lowerCamelCase_				):






				'''simple docstring'''
				lowercase__    =			[1]

				lowercase__ ,						lowercase__ ,						lowercase__    =			0, 0, 0
				lowercase__    =			ugly_nums[ia] * 2
				lowercase__    =			ugly_nums[ia] * 3
				lowercase__    =			ugly_nums[ia] * 5

				for _ in range(1		,   lowerCamelCase_				):
								lowercase__    =			min(lowerCamelCase_		,   lowerCamelCase_		,   lowerCamelCase_				)
								ugly_nums.append(lowerCamelCase_				)
								if next_num == next_a:
												ia += 1
												lowercase__    =			ugly_nums[ia] * 2
								if next_num == next_a:
												ia += 1
												lowercase__    =			ugly_nums[ia] * 3
								if next_num == next_a:
												ia += 1
												lowercase__    =			ugly_nums[ia] * 5
				return ugly_nums[-1]


if __name__ == "__main__":
							from doctest import testmod

							testmod(verbose=True)
							print(F"{ugly_numbers(2_00) = }")




