





from typing import Any, Callable, Dict, List, Optional, Union

import torch
from transformers import CLIPImageProcessor, CLIPTextModel, CLIPTokenizer

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    DiffusionPipeline,
    LMSDiscreteScheduler,
    PNDMScheduler,
    StableDiffusionPipeline,
    UNetaDConditionModel,
)
from diffusers.pipelines.stable_diffusion import StableDiffusionPipelineOutput
from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker


_a						=   "CompVis/stable-diffusion-v1-1"
_a						=   "CompVis/stable-diffusion-v1-2"
_a						=   "CompVis/stable-diffusion-v1-3"
_a						=   "CompVis/stable-diffusion-v1-4"






class       __A					(					lowerCAmelCase				):

			'''simple docstring'''







			def __init__(					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase = True ,						):



				'''simple docstring'''







				super()._init_()

				lowerCamelCase__              =	StableDiffusionPipeline.from_pretrained(__lowerCAmelCase							)
				lowerCamelCase__              =	StableDiffusionPipeline.from_pretrained(__lowerCAmelCase							)
				lowerCamelCase__              =	StableDiffusionPipeline.from_pretrained(__lowerCAmelCase							)
				lowerCamelCase__              =	StableDiffusionPipeline(
				    vae=__lowerCAmelCase ,						text_encoder=__lowerCAmelCase ,						tokenizer=__lowerCAmelCase ,						unet=__lowerCAmelCase ,						scheduler=__lowerCAmelCase ,						safety_checker=__lowerCAmelCase ,						feature_extractor=__lowerCAmelCase ,						requires_safety_checker=__lowerCAmelCase ,						)

				self.register_modules(pipelinea=self.pipea ,						pipelinea=self.pipea ,						pipelinea=self.pipea ,						pipelinea=self.pipea							)





			@property
			def 	__lowerCamelCase       (					self							):



				'''simple docstring'''







				return {k: getattr(self ,						__lowerCAmelCase							) for k in self.config.keys() if not k.startswith('''_'''							)}





			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase = "auto"							):



				'''simple docstring'''







				if slice_size == "auto":
					# half the attention head size is usually a good trade-off between
					# speed and memory
					lowerCamelCase__              =	self.unet.config.attention_head_dim // 2
				self.unet.set_attention_slice(__lowerCAmelCase							)





			def 	__lowerCamelCase       (					self							):



				'''simple docstring'''







				self.enable_attention_slicing(__lowerCAmelCase							)





			@torch.no_grad()
			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_0 ,						__lowerCAmelCase = 7.5 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						__lowerCAmelCase = 0.0 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = None ,						__lowerCAmelCase = "pil" ,						__lowerCAmelCase = True ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						**__lowerCAmelCase ,						):



				'''simple docstring'''







				return self.pipea(
				    prompt=__lowerCAmelCase ,						height=__lowerCAmelCase ,						width=__lowerCAmelCase ,						num_inference_steps=__lowerCAmelCase ,						guidance_scale=__lowerCAmelCase ,						negative_prompt=__lowerCAmelCase ,						num_images_per_prompt=__lowerCAmelCase ,						eta=__lowerCAmelCase ,						generator=__lowerCAmelCase ,						latents=__lowerCAmelCase ,						output_type=__lowerCAmelCase ,						return_dict=__lowerCAmelCase ,						callback=__lowerCAmelCase ,						callback_steps=__lowerCAmelCase ,						**__lowerCAmelCase ,						)





			@torch.no_grad()
			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_0 ,						__lowerCAmelCase = 7.5 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						__lowerCAmelCase = 0.0 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = None ,						__lowerCAmelCase = "pil" ,						__lowerCAmelCase = True ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						**__lowerCAmelCase ,						):



				'''simple docstring'''







				return self.pipea(
				    prompt=__lowerCAmelCase ,						height=__lowerCAmelCase ,						width=__lowerCAmelCase ,						num_inference_steps=__lowerCAmelCase ,						guidance_scale=__lowerCAmelCase ,						negative_prompt=__lowerCAmelCase ,						num_images_per_prompt=__lowerCAmelCase ,						eta=__lowerCAmelCase ,						generator=__lowerCAmelCase ,						latents=__lowerCAmelCase ,						output_type=__lowerCAmelCase ,						return_dict=__lowerCAmelCase ,						callback=__lowerCAmelCase ,						callback_steps=__lowerCAmelCase ,						**__lowerCAmelCase ,						)





			@torch.no_grad()
			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_0 ,						__lowerCAmelCase = 7.5 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						__lowerCAmelCase = 0.0 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = None ,						__lowerCAmelCase = "pil" ,						__lowerCAmelCase = True ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						**__lowerCAmelCase ,						):



				'''simple docstring'''







				return self.pipea(
				    prompt=__lowerCAmelCase ,						height=__lowerCAmelCase ,						width=__lowerCAmelCase ,						num_inference_steps=__lowerCAmelCase ,						guidance_scale=__lowerCAmelCase ,						negative_prompt=__lowerCAmelCase ,						num_images_per_prompt=__lowerCAmelCase ,						eta=__lowerCAmelCase ,						generator=__lowerCAmelCase ,						latents=__lowerCAmelCase ,						output_type=__lowerCAmelCase ,						return_dict=__lowerCAmelCase ,						callback=__lowerCAmelCase ,						callback_steps=__lowerCAmelCase ,						**__lowerCAmelCase ,						)





			@torch.no_grad()
			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_0 ,						__lowerCAmelCase = 7.5 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						__lowerCAmelCase = 0.0 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = None ,						__lowerCAmelCase = "pil" ,						__lowerCAmelCase = True ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						**__lowerCAmelCase ,						):



				'''simple docstring'''







				return self.pipea(
				    prompt=__lowerCAmelCase ,						height=__lowerCAmelCase ,						width=__lowerCAmelCase ,						num_inference_steps=__lowerCAmelCase ,						guidance_scale=__lowerCAmelCase ,						negative_prompt=__lowerCAmelCase ,						num_images_per_prompt=__lowerCAmelCase ,						eta=__lowerCAmelCase ,						generator=__lowerCAmelCase ,						latents=__lowerCAmelCase ,						output_type=__lowerCAmelCase ,						return_dict=__lowerCAmelCase ,						callback=__lowerCAmelCase ,						callback_steps=__lowerCAmelCase ,						**__lowerCAmelCase ,						)





			@torch.no_grad()
			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_1_2 ,						__lowerCAmelCase = 5_0 ,						__lowerCAmelCase = 7.5 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						__lowerCAmelCase = 0.0 ,						__lowerCAmelCase = None ,						__lowerCAmelCase = None ,						__lowerCAmelCase = "pil" ,						__lowerCAmelCase = True ,						__lowerCAmelCase = None ,						__lowerCAmelCase = 1 ,						**__lowerCAmelCase ,						):



				'''simple docstring'''







				lowerCamelCase__              =	'''cuda''' if torch.cuda.is_available() else '''cpu'''
				self.to(__lowerCAmelCase							)

				# Checks if the height and width are divisible by 8 or not
				if height % 8 != 0 or width % 8 != 0:
					raise ValueError(F'`height` and `width` must be divisible by 8 but are {height} and {width}.'							)

				# Get first result from Stable Diffusion Checkpoint v1.1
				lowerCamelCase__              =	self.textaimg_sda_a(
				    prompt=__lowerCAmelCase ,						height=__lowerCAmelCase ,						width=__lowerCAmelCase ,						num_inference_steps=__lowerCAmelCase ,						guidance_scale=__lowerCAmelCase ,						negative_prompt=__lowerCAmelCase ,						num_images_per_prompt=__lowerCAmelCase ,						eta=__lowerCAmelCase ,						generator=__lowerCAmelCase ,						latents=__lowerCAmelCase ,						output_type=__lowerCAmelCase ,						return_dict=__lowerCAmelCase ,						callback=__lowerCAmelCase ,						callback_steps=__lowerCAmelCase ,						**__lowerCAmelCase ,						)

				# Get first result from Stable Diffusion Checkpoint v1.2
				lowerCamelCase__              =	self.textaimg_sda_a(
				    prompt=__lowerCAmelCase ,						height=__lowerCAmelCase ,						width=__lowerCAmelCase ,						num_inference_steps=__lowerCAmelCase ,						guidance_scale=__lowerCAmelCase ,						negative_prompt=__lowerCAmelCase ,						num_images_per_prompt=__lowerCAmelCase ,						eta=__lowerCAmelCase ,						generator=__lowerCAmelCase ,						latents=__lowerCAmelCase ,						output_type=__lowerCAmelCase ,						return_dict=__lowerCAmelCase ,						callback=__lowerCAmelCase ,						callback_steps=__lowerCAmelCase ,						**__lowerCAmelCase ,						)

				# Get first result from Stable Diffusion Checkpoint v1.3
				lowerCamelCase__              =	self.textaimg_sda_a(
				    prompt=__lowerCAmelCase ,						height=__lowerCAmelCase ,						width=__lowerCAmelCase ,						num_inference_steps=__lowerCAmelCase ,						guidance_scale=__lowerCAmelCase ,						negative_prompt=__lowerCAmelCase ,						num_images_per_prompt=__lowerCAmelCase ,						eta=__lowerCAmelCase ,						generator=__lowerCAmelCase ,						latents=__lowerCAmelCase ,						output_type=__lowerCAmelCase ,						return_dict=__lowerCAmelCase ,						callback=__lowerCAmelCase ,						callback_steps=__lowerCAmelCase ,						**__lowerCAmelCase ,						)

				# Get first result from Stable Diffusion Checkpoint v1.4
				lowerCamelCase__              =	self.textaimg_sda_a(
				    prompt=__lowerCAmelCase ,						height=__lowerCAmelCase ,						width=__lowerCAmelCase ,						num_inference_steps=__lowerCAmelCase ,						guidance_scale=__lowerCAmelCase ,						negative_prompt=__lowerCAmelCase ,						num_images_per_prompt=__lowerCAmelCase ,						eta=__lowerCAmelCase ,						generator=__lowerCAmelCase ,						latents=__lowerCAmelCase ,						output_type=__lowerCAmelCase ,						return_dict=__lowerCAmelCase ,						callback=__lowerCAmelCase ,						callback_steps=__lowerCAmelCase ,						**__lowerCAmelCase ,						)

				# Get all result images into a single list and pass it via StableDiffusionPipelineOutput for final result
				return StableDiffusionPipelineOutput([resa[0], resa[0], resa[0], resa[0]]							)










# This is the module that test_patching.py uses to test patch_submodule()

import os  # noqa: this is just for tests
import os as renamed_os  # noqa: this is just for tests
from os import path  # noqa: this is just for tests
from os import path as renamed_path  # noqa: this is just for tests
from os.path import join  # noqa: this is just for tests
from os.path import join as renamed_join  # noqa: this is just for tests


_a						=   open  # noqa: we just need to have a builtin inside this module to test it properly



