

"""simple docstring"""




import gc
import unittest

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

from diffusers import (
    AutoencoderKL,
    DDIMParallelScheduler,
    DDPMParallelScheduler,
    StableDiffusionParadigmsPipeline,
    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 				lowerCamelCase  (A__     ,A__     ,unittest.TestCase     ):
			lowerCamelCase__				:						Optional[Any]   						=							StableDiffusionParadigmsPipeline
			lowerCamelCase__				:						Union[str, Any]   						=							TEXT_TO_IMAGE_PARAMS
			lowerCamelCase__				:						str   						=							TEXT_TO_IMAGE_BATCH_PARAMS
			lowerCamelCase__				:						Optional[int]   						=							TEXT_TO_IMAGE_IMAGE_PARAMS
			lowerCamelCase__				:						Any   						=							TEXT_TO_IMAGE_IMAGE_PARAMS

			def    SCREAMING_SNAKE_CASE			(   self			:  List[str]    )				->      int:
						torch.manual_seed(0    )
						SCREAMING_SNAKE_CASE__									= 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      ,			attention_head_dim=(2, 4)      ,			use_linear_projection=__UpperCAmelCase      ,			)
						SCREAMING_SNAKE_CASE__									= DDIMParallelScheduler(
						    beta_start=0.00_085      ,			beta_end=0.012      ,			beta_schedule="""scaled_linear"""      ,			clip_sample=__UpperCAmelCase      ,			set_alpha_to_one=__UpperCAmelCase      ,			)
						torch.manual_seed(0    )
						SCREAMING_SNAKE_CASE__									= 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      ,			sample_size=1_2_8      ,			)
						torch.manual_seed(0    )
						SCREAMING_SNAKE_CASE__									= 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      ,			hidden_act="""gelu"""      ,			projection_dim=5_1_2      ,			)
						SCREAMING_SNAKE_CASE__									= CLIPTextModel(__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""    )

						SCREAMING_SNAKE_CASE__									= {
						    """unet""": unet,
						    """scheduler""": scheduler,
						    """vae""": vae,
						    """text_encoder""": text_encoder,
						    """tokenizer""": tokenizer,
						    """safety_checker""": None,
						    """feature_extractor""": None,
						}
						return components

			def    SCREAMING_SNAKE_CASE			(   self			:  Optional[Any]      ,			__UpperCAmelCase			:  Dict      ,			__UpperCAmelCase			:  int=0    )				->      Tuple:
						if str(__UpperCAmelCase    ).startswith("""mps"""    ):
									SCREAMING_SNAKE_CASE__									= torch.manual_seed(__UpperCAmelCase    )
						else:
									SCREAMING_SNAKE_CASE__									= torch.Generator(device=__UpperCAmelCase    ).manual_seed(__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= {
						    """prompt""": """a photograph of an astronaut riding a horse""",
						    """generator""": generator,
						    """num_inference_steps""": 1_0,
						    """guidance_scale""": 6.0,
						    """output_type""": """numpy""",
						    """parallel""": 3,
						    """debug""": True,
						}
						return inputs

			def    SCREAMING_SNAKE_CASE			(   self			:  Any    )				->      Dict:
						SCREAMING_SNAKE_CASE__									= """cpu"""  # ensure determinism for the device-dependent torch.Generator
						SCREAMING_SNAKE_CASE__									= self.get_dummy_components()
						SCREAMING_SNAKE_CASE__									= StableDiffusionParadigmsPipeline(**__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= sd_pipe.to(__UpperCAmelCase    )
						sd_pipe.set_progress_bar_config(disable=__UpperCAmelCase    )

						SCREAMING_SNAKE_CASE__									= self.get_dummy_inputs(__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= sd_pipe(**__UpperCAmelCase    ).images
						SCREAMING_SNAKE_CASE__									= image[0, -3:, -3:, -1]
						assert image.shape == (1, 6_4, 6_4, 3)

						SCREAMING_SNAKE_CASE__									= np.array([0.4_773, 0.5_417, 0.4_723, 0.4_925, 0.5_631, 0.4_752, 0.5_240, 0.4_935, 0.5_023]    )

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

			def    SCREAMING_SNAKE_CASE			(   self			:  Tuple    )				->      Optional[Any]:
						SCREAMING_SNAKE_CASE__									= """cpu"""  # ensure determinism for the device-dependent torch.Generator
						SCREAMING_SNAKE_CASE__									= self.get_dummy_components()
						torch.manual_seed(0    )
						SCREAMING_SNAKE_CASE__									= DDPMParallelScheduler()
						torch.manual_seed(0    )
						SCREAMING_SNAKE_CASE__									= StableDiffusionParadigmsPipeline(**__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= sd_pipe.to(__UpperCAmelCase    )
						sd_pipe.set_progress_bar_config(disable=__UpperCAmelCase    )

						SCREAMING_SNAKE_CASE__									= self.get_dummy_inputs(__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= sd_pipe(**__UpperCAmelCase    ).images
						SCREAMING_SNAKE_CASE__									= image[0, -3:, -3:, -1]
						assert image.shape == (1, 6_4, 6_4, 3)

						SCREAMING_SNAKE_CASE__									= np.array([0.3_573, 0.4_420, 0.4_960, 0.4_799, 0.3_796, 0.3_879, 0.4_819, 0.4_365, 0.4_468]    )

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

			def    SCREAMING_SNAKE_CASE			(   self			:  Tuple    )				->      Optional[int]:
						super().test_inference_batch_consistent(batch_sizes=[1, 2]    )

			def    SCREAMING_SNAKE_CASE			(   self			:  int    )				->      Optional[int]:
						super().test_inference_batch_single_identical(batch_size=2      ,			expected_max_diff=3e-3    )





			def    SCREAMING_SNAKE_CASE			(   self			:  Dict    )				->      int:
						SCREAMING_SNAKE_CASE__									= """cpu"""  # ensure determinism for the device-dependent torch.Generator
						SCREAMING_SNAKE_CASE__									= self.get_dummy_components()
						SCREAMING_SNAKE_CASE__									= StableDiffusionParadigmsPipeline(**__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= sd_pipe.to(__UpperCAmelCase    )
						sd_pipe.set_progress_bar_config(disable=__UpperCAmelCase    )

						SCREAMING_SNAKE_CASE__									= self.get_dummy_inputs(__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= """french fries"""
						SCREAMING_SNAKE_CASE__									= sd_pipe(**__UpperCAmelCase      ,			negative_prompt=__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= output.images
						SCREAMING_SNAKE_CASE__									= image[0, -3:, -3:, -1]

						assert image.shape == (1, 6_4, 6_4, 3)

						SCREAMING_SNAKE_CASE__									= np.array([0.4_771, 0.5_420, 0.4_683, 0.4_918, 0.5_636, 0.4_725, 0.5_230, 0.4_923, 0.5_015]    )

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





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

			def    SCREAMING_SNAKE_CASE			(   self			:  List[Any]    )				->      Dict:
						super().tearDown()
						gc.collect()
						torch.cuda.empty_cache()

			def    SCREAMING_SNAKE_CASE			(   self			:  Dict      ,			__UpperCAmelCase			:  Dict=0    )				->      Tuple:
						SCREAMING_SNAKE_CASE__									= torch.Generator(device=__UpperCAmelCase    ).manual_seed(__UpperCAmelCase    )
						SCREAMING_SNAKE_CASE__									= {
						    """prompt""": """a photograph of an astronaut riding a horse""",
						    """generator""": generator,
						    """num_inference_steps""": 1_0,
						    """guidance_scale""": 7.5,
						    """output_type""": """numpy""",
						    """parallel""": 3,
						    """debug""": True,
						}
						return inputs





			def    SCREAMING_SNAKE_CASE			(   self			:  Optional[Any]    )				->      Any:
						SCREAMING_SNAKE_CASE__									= """stabilityai/stable-diffusion-2-base"""
						SCREAMING_SNAKE_CASE__									= DDIMParallelScheduler.from_pretrained(__UpperCAmelCase      ,			subfolder="""scheduler"""    )
						SCREAMING_SNAKE_CASE__									= StableDiffusionParadigmsPipeline.from_pretrained(__UpperCAmelCase      ,			scheduler=__UpperCAmelCase      ,			safety_checker=__UpperCAmelCase    )
						pipe.to(__UpperCAmelCase    )
						pipe.set_progress_bar_config(disable=__UpperCAmelCase    )
						pipe.enable_attention_slicing()

						SCREAMING_SNAKE_CASE__									= self.get_inputs()
						SCREAMING_SNAKE_CASE__									= pipe(**__UpperCAmelCase    ).images
						SCREAMING_SNAKE_CASE__									= image[0, -3:, -3:, -1].flatten()

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

						SCREAMING_SNAKE_CASE__									= np.array([0.9_622, 0.9_602, 0.9_748, 0.9_591, 0.9_630, 0.9_691, 0.9_661, 0.9_631, 0.9_741]    )

						assert np.abs(expected_slice - image_slice    ).max() < 1e-2





"""simple docstring"""




class 				lowerCamelCase  :

			def __init__(   self			:  Dict    )				->      None:
						SCREAMING_SNAKE_CASE__									= [0, 1]





			def    SCREAMING_SNAKE_CASE			(   self			:  Optional[int]      ,			__UpperCAmelCase			:  int    )				->      list:
						if (difference := index - (len(self.sequence    ) - 2)) >= 1:
									for _ in range(__UpperCAmelCase    ):
												self.sequence.append(self.sequence[-1] + self.sequence[-2]    )
						return self.sequence[:index]

def 		A    (       ):




			'''simple docstring'''


			print(
			    """Fibonacci Series Using Dynamic Programming\n"""						,			"""Enter the index of the Fibonacci number you want to calculate """						,			"""in the prompt below. (To exit enter exit or Ctrl-C)\n"""						,			sep=""""""						,			)
			SCREAMING_SNAKE_CASE__									= Fibonacci()

			while True:
						SCREAMING_SNAKE_CASE__									= input(""">> """      )
						if prompt in {"exit", "quit"}:
									break

						try:
									SCREAMING_SNAKE_CASE__									= int(snake_case__      )
						except ValueError:
									print("""Enter a number or 'exit'"""      )
									continue

						print(fibonacci.get(snake_case__      )      )


if __name__ == "__main__":
						main()


