
'''simple docstring'''


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 	__lowercase				(  __lowerCamelCase      ,     __lowerCamelCase      ,     unittest.TestCase    ):
			lowerCamelCase			:		List[Any]	      =			StableDiffusionSAGPipeline
			lowerCamelCase			:		str	      =			TEXT_TO_IMAGE_PARAMS
			lowerCamelCase			:		List[str]	      =			TEXT_TO_IMAGE_BATCH_PARAMS
			lowerCamelCase			:		Optional[Any]	      =			TEXT_TO_IMAGE_IMAGE_PARAMS
			lowerCamelCase			:		Dict	      =			TEXT_TO_IMAGE_IMAGE_PARAMS
			lowerCamelCase			:		str	      =			False

			def        UpperCAmelCase__ (self      ):
								torch.manual_seed(0      )
								lowerCamelCase_					:      List[Any]     =		UNetaDConditionModel(
								    block_out_channels=(3_2, 6_4)			,   layers_per_block=2			,   sample_size=3_2			,   in_channels=4			,   out_channels=4			,   down_block_types=('''DownBlock2D''', '''CrossAttnDownBlock2D''')			,   up_block_types=('''CrossAttnUpBlock2D''', '''UpBlock2D''')			,   cross_attention_dim=3_2			,   )
								lowerCamelCase_					:      str     =		DDIMScheduler(
								    beta_start=0.0_00_85			,   beta_end=0.0_12			,   beta_schedule='''scaled_linear'''			,   clip_sample=SCREAMING_SNAKE_CASE_			,   set_alpha_to_one=SCREAMING_SNAKE_CASE_			,   )
								torch.manual_seed(0      )
								lowerCamelCase_					:      Tuple     =		AutoencoderKL(
								    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=4			,   )
								torch.manual_seed(0      )
								lowerCamelCase_					:      Union[str, Any]     =		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			,   )
								lowerCamelCase_					:      List[Any]     =		CLIPTextModel(SCREAMING_SNAKE_CASE_      )
								lowerCamelCase_					:      Any     =		CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip'''      )

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

			def        UpperCAmelCase__ (self			,   A			,   A=0      ):
								if str(SCREAMING_SNAKE_CASE_      ).startswith('''mps'''      ):
													lowerCamelCase_					:      List[Any]     =		torch.manual_seed(SCREAMING_SNAKE_CASE_      )
								else:
													lowerCamelCase_					:      Any     =		torch.Generator(device=SCREAMING_SNAKE_CASE_      ).manual_seed(SCREAMING_SNAKE_CASE_      )
								lowerCamelCase_					:      Optional[int]     =		{
								    '''prompt''': '''.''',
								    '''generator''': generator,
								    '''num_inference_steps''': 2,
								    '''guidance_scale''': 1.0,
								    '''sag_scale''': 1.0,
								    '''output_type''': '''numpy''',
								}
								return inputs






			def        UpperCAmelCase__ (self      ):
								super().test_inference_batch_single_identical(expected_max_diff=3E-3      )

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

			def        UpperCAmelCase__ (self      ):
								# clean up the VRAM after each test
								super().tearDown()
								gc.collect()
								torch.cuda.empty_cache()

			def        UpperCAmelCase__ (self      ):
								lowerCamelCase_					:      Tuple     =		StableDiffusionSAGPipeline.from_pretrained('''CompVis/stable-diffusion-v1-4'''      )
								lowerCamelCase_					:      str     =		sag_pipe.to(SCREAMING_SNAKE_CASE_      )
								sag_pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE_      )

								lowerCamelCase_					:      int     =		'''.'''
								lowerCamelCase_					:      Optional[Any]     =		torch.manual_seed(0      )
								lowerCamelCase_					:      Any     =		sag_pipe(
								    [prompt]			,   generator=SCREAMING_SNAKE_CASE_			,   guidance_scale=7.5			,   sag_scale=1.0			,   num_inference_steps=2_0			,   output_type='''np'''      )

								lowerCamelCase_					:      Optional[Any]     =		output.images

								lowerCamelCase_					:      Tuple     =		image[0, -3:, -3:, -1]

								assert image.shape == (1, 5_1_2, 5_1_2, 3)
								lowerCamelCase_					:      int     =		np.array([0.15_68, 0.17_38, 0.16_95, 0.16_93, 0.15_07, 0.17_05, 0.15_47, 0.17_51, 0.19_49]      )

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

			def        UpperCAmelCase__ (self      ):
								lowerCamelCase_					:      List[str]     =		StableDiffusionSAGPipeline.from_pretrained('''stabilityai/stable-diffusion-2-1-base'''      )
								lowerCamelCase_					:      Tuple     =		sag_pipe.to(SCREAMING_SNAKE_CASE_      )
								sag_pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE_      )

								lowerCamelCase_					:      Union[str, Any]     =		'''.'''
								lowerCamelCase_					:      List[Any]     =		torch.manual_seed(0      )
								lowerCamelCase_					:      Dict     =		sag_pipe(
								    [prompt]			,   generator=SCREAMING_SNAKE_CASE_			,   guidance_scale=7.5			,   sag_scale=1.0			,   num_inference_steps=2_0			,   output_type='''np'''      )

								lowerCamelCase_					:      Dict     =		output.images

								lowerCamelCase_					:      Any     =		image[0, -3:, -3:, -1]

								assert image.shape == (1, 5_1_2, 5_1_2, 3)
								lowerCamelCase_					:      Any     =		np.array([0.34_59, 0.28_76, 0.25_37, 0.30_02, 0.26_71, 0.21_60, 0.30_26, 0.22_62, 0.23_71]      )

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






			def        UpperCAmelCase__ (self      ):
								lowerCamelCase_					:      str     =		StableDiffusionSAGPipeline.from_pretrained('''stabilityai/stable-diffusion-2-1-base'''      )
								lowerCamelCase_					:      Dict     =		sag_pipe.to(SCREAMING_SNAKE_CASE_      )
								sag_pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE_      )

								lowerCamelCase_					:      Union[str, Any]     =		'''.'''
								lowerCamelCase_					:      List[Any]     =		torch.manual_seed(0      )
								lowerCamelCase_					:      Any     =		sag_pipe(
								    [prompt]			,   width=7_6_8			,   height=5_1_2			,   generator=SCREAMING_SNAKE_CASE_			,   guidance_scale=7.5			,   sag_scale=1.0			,   num_inference_steps=2_0			,   output_type='''np'''			,   )

								lowerCamelCase_					:      Optional[int]     =		output.images

								assert image.shape == (1, 5_1_2, 7_6_8, 3)




'''simple docstring'''


def lowercase_	(   _lowercase			,       _lowercase				)     ->							Dict:
					'''simple docstring'''

					lowerCamelCase_					:      List[Any]     =		0
					while b > 0:
										if b & 1:
															res += a

										a += a
										b >>= 1

					return res




def lowercase_	(   _lowercase			,       _lowercase			,       _lowercase				)     ->							Optional[Any]:
					'''simple docstring'''

					lowerCamelCase_					:      str     =		0
					while b > 0:
										if b & 1:
															lowerCamelCase_					:      Optional[int]     =		((res % c) + (a % c)) % c

										a += a
										b >>= 1

					return res


