




from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCAmelCase_		:					Union[str, Any]          =  logging.get_logger(__name__)

UpperCAmelCase_		:					List[str]          =  {
    "tanreinama/GPTSAN-2.8B-spout_is_uniform": (
        "https://huggingface.co/tanreinama/GPTSAN-2.8B-spout_is_uniform/resolve/main/config.json"
    ),
}




class 		__A   (      UpperCamelCase__      ):
						UpperCamelCase      =       """gptsan-japanese"""
						UpperCamelCase      =       [
						    """past_key_values""",
						]
						UpperCamelCase      =       {
						    """hidden_size""": """d_model""",
						    """num_attention_heads""": """num_heads""",
						    """num_hidden_layers""": """num_layers""",
						}

						def __init__(		self :str     ,			__snake_case :str=3_60_00     ,			__snake_case :List[Any]=12_80     ,			__snake_case :Tuple=10_24     ,			__snake_case :Union[str, Any]=81_92     ,			__snake_case :Dict=40_96     ,			__snake_case :Tuple=1_28     ,			__snake_case :Union[str, Any]=10     ,			__snake_case :List[Any]=0     ,			__snake_case :int=16     ,			__snake_case :Tuple=16     ,			__snake_case :int=1_28     ,			__snake_case :Optional[Any]=0.0     ,			__snake_case :Any=1E-5     ,			__snake_case :str=False     ,			__snake_case :Dict=0.0     ,			__snake_case :str="float32"     ,			__snake_case :int=False     ,			__snake_case :int=False     ,			__snake_case :Optional[int]=False     ,			__snake_case :Tuple=0.002     ,			__snake_case :Any=False     ,			__snake_case :Optional[Any]=True     ,			__snake_case :Optional[int]=3_59_98     ,			__snake_case :Dict=3_59_95     ,			__snake_case :Optional[int]=3_59_99     ,			**__snake_case :Union[str, Any]     ,			):
										'''simple docstring'''

										__magic_name__						:						List[str]										=vocab_size
										__magic_name__						:						Any										=max_position_embeddings
										__magic_name__						:						int										=d_model
										__magic_name__						:						Any										=d_ff
										__magic_name__						:						Dict										=d_ext
										__magic_name__						:						Union[str, Any]										=d_spout
										__magic_name__						:						List[Any]										=num_switch_layers
										__magic_name__						:						int										=num_ext_layers
										__magic_name__						:						Optional[int]										=num_switch_layers + num_ext_layers
										__magic_name__						:						Union[str, Any]										=num_heads
										__magic_name__						:						Any										=num_experts
										__magic_name__						:						Optional[int]										=expert_capacity
										__magic_name__						:						Union[str, Any]										=dropout_rate
										__magic_name__						:						Any										=layer_norm_epsilon
										__magic_name__						:						Union[str, Any]										=router_bias
										__magic_name__						:						int										=router_jitter_noise
										__magic_name__						:						str										=router_dtype
										__magic_name__						:						Optional[int]										=router_ignore_padding_tokens
										__magic_name__						:						str										=output_hidden_states
										__magic_name__						:						Dict										=output_attentions
										__magic_name__						:						Dict										=initializer_factor
										__magic_name__						:						List[str]										=output_router_logits
										__magic_name__						:						int										=use_cache

										super().__init__(
										    separator_token_id=__snake_case     ,			pad_token_id=__snake_case     ,			eos_token_id=__snake_case     ,			**__snake_case     ,			)





"""simple docstring"""




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


__lowerCAmelCase     :				Dict    				=    "CompVis/stable-diffusion-v1-1"
__lowerCAmelCase     :				int    				=    "CompVis/stable-diffusion-v1-2"
__lowerCAmelCase     :				int    				=    "CompVis/stable-diffusion-v1-3"
__lowerCAmelCase     :				Union[str, Any]    				=    "CompVis/stable-diffusion-v1-4"

class    a_   (  __UpperCamelCase      ):




					def __init__(						self    :  List[Any]	,    snake_case__    :  AutoencoderKL	,    snake_case__    :  CLIPTextModel	,    snake_case__    :  CLIPTokenizer	,    snake_case__    :  UNetaDConditionModel	,    snake_case__    :  Union[DDIMScheduler, PNDMScheduler, LMSDiscreteScheduler]	,    snake_case__    :  StableDiffusionSafetyChecker	,    snake_case__    :  CLIPImageProcessor	,    snake_case__    :  bool = True	,    ):
							super()._init_()

							lowerCAmelCase__   = StableDiffusionPipeline.from_pretrained(snake_case__  )
							lowerCAmelCase__   = StableDiffusionPipeline.from_pretrained(snake_case__  )
							lowerCAmelCase__   = StableDiffusionPipeline.from_pretrained(snake_case__  )
							lowerCAmelCase__   = StableDiffusionPipeline(
							    vae=snake_case__	,    text_encoder=snake_case__	,    tokenizer=snake_case__	,    unet=snake_case__	,    scheduler=snake_case__	,    safety_checker=snake_case__	,    feature_extractor=snake_case__	,    requires_safety_checker=snake_case__	,    )

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




					@property
					def     _SCREAMING_SNAKE_CASE    (						self    :  Tuple  ):
							return {k: getattr(self	,    snake_case__  ) for k in self.config.keys() if not k.startswith("""_"""  )}




					def     _SCREAMING_SNAKE_CASE    (						self    :  List[Any]	,    snake_case__    :  Optional[Union[str, int]] = "auto"  ):
							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(snake_case__  )




					def     _SCREAMING_SNAKE_CASE    (						self    :  int  ):
							self.enable_attention_slicing(snake_case__  )




					@torch.no_grad()
					def     _SCREAMING_SNAKE_CASE    (						self    :  int	,    snake_case__    :  Union[str, List[str]]	,    snake_case__    :  int = 512	,    snake_case__    :  int = 512	,    snake_case__    :  int = 50	,    snake_case__    :  float = 7.5	,    snake_case__    :  Optional[Union[str, List[str]]] = None	,    snake_case__    :  Optional[int] = 1	,    snake_case__    :  float = 0.0	,    snake_case__    :  Optional[torch.Generator] = None	,    snake_case__    :  Optional[torch.FloatTensor] = None	,    snake_case__    :  Optional[str] = "pil"	,    snake_case__    :  bool = True	,    snake_case__    :  Optional[Callable[[int, int, torch.FloatTensor], None]] = None	,    snake_case__    :  int = 1	,    **snake_case__    :  List[Any]	,    ):
							return self.pipea(
							    prompt=snake_case__	,    height=snake_case__	,    width=snake_case__	,    num_inference_steps=snake_case__	,    guidance_scale=snake_case__	,    negative_prompt=snake_case__	,    num_images_per_prompt=snake_case__	,    eta=snake_case__	,    generator=snake_case__	,    latents=snake_case__	,    output_type=snake_case__	,    return_dict=snake_case__	,    callback=snake_case__	,    callback_steps=snake_case__	,    **snake_case__	,    )




					@torch.no_grad()
					def     _SCREAMING_SNAKE_CASE    (						self    :  Tuple	,    snake_case__    :  Union[str, List[str]]	,    snake_case__    :  int = 512	,    snake_case__    :  int = 512	,    snake_case__    :  int = 50	,    snake_case__    :  float = 7.5	,    snake_case__    :  Optional[Union[str, List[str]]] = None	,    snake_case__    :  Optional[int] = 1	,    snake_case__    :  float = 0.0	,    snake_case__    :  Optional[torch.Generator] = None	,    snake_case__    :  Optional[torch.FloatTensor] = None	,    snake_case__    :  Optional[str] = "pil"	,    snake_case__    :  bool = True	,    snake_case__    :  Optional[Callable[[int, int, torch.FloatTensor], None]] = None	,    snake_case__    :  int = 1	,    **snake_case__    :  Tuple	,    ):
							return self.pipea(
							    prompt=snake_case__	,    height=snake_case__	,    width=snake_case__	,    num_inference_steps=snake_case__	,    guidance_scale=snake_case__	,    negative_prompt=snake_case__	,    num_images_per_prompt=snake_case__	,    eta=snake_case__	,    generator=snake_case__	,    latents=snake_case__	,    output_type=snake_case__	,    return_dict=snake_case__	,    callback=snake_case__	,    callback_steps=snake_case__	,    **snake_case__	,    )




					@torch.no_grad()
					def     _SCREAMING_SNAKE_CASE    (						self    :  Optional[int]	,    snake_case__    :  Union[str, List[str]]	,    snake_case__    :  int = 512	,    snake_case__    :  int = 512	,    snake_case__    :  int = 50	,    snake_case__    :  float = 7.5	,    snake_case__    :  Optional[Union[str, List[str]]] = None	,    snake_case__    :  Optional[int] = 1	,    snake_case__    :  float = 0.0	,    snake_case__    :  Optional[torch.Generator] = None	,    snake_case__    :  Optional[torch.FloatTensor] = None	,    snake_case__    :  Optional[str] = "pil"	,    snake_case__    :  bool = True	,    snake_case__    :  Optional[Callable[[int, int, torch.FloatTensor], None]] = None	,    snake_case__    :  int = 1	,    **snake_case__    :  Optional[Any]	,    ):
							return self.pipea(
							    prompt=snake_case__	,    height=snake_case__	,    width=snake_case__	,    num_inference_steps=snake_case__	,    guidance_scale=snake_case__	,    negative_prompt=snake_case__	,    num_images_per_prompt=snake_case__	,    eta=snake_case__	,    generator=snake_case__	,    latents=snake_case__	,    output_type=snake_case__	,    return_dict=snake_case__	,    callback=snake_case__	,    callback_steps=snake_case__	,    **snake_case__	,    )




					@torch.no_grad()
					def     _SCREAMING_SNAKE_CASE    (						self    :  List[str]	,    snake_case__    :  Union[str, List[str]]	,    snake_case__    :  int = 512	,    snake_case__    :  int = 512	,    snake_case__    :  int = 50	,    snake_case__    :  float = 7.5	,    snake_case__    :  Optional[Union[str, List[str]]] = None	,    snake_case__    :  Optional[int] = 1	,    snake_case__    :  float = 0.0	,    snake_case__    :  Optional[torch.Generator] = None	,    snake_case__    :  Optional[torch.FloatTensor] = None	,    snake_case__    :  Optional[str] = "pil"	,    snake_case__    :  bool = True	,    snake_case__    :  Optional[Callable[[int, int, torch.FloatTensor], None]] = None	,    snake_case__    :  int = 1	,    **snake_case__    :  str	,    ):
							return self.pipea(
							    prompt=snake_case__	,    height=snake_case__	,    width=snake_case__	,    num_inference_steps=snake_case__	,    guidance_scale=snake_case__	,    negative_prompt=snake_case__	,    num_images_per_prompt=snake_case__	,    eta=snake_case__	,    generator=snake_case__	,    latents=snake_case__	,    output_type=snake_case__	,    return_dict=snake_case__	,    callback=snake_case__	,    callback_steps=snake_case__	,    **snake_case__	,    )




					@torch.no_grad()
					def     _SCREAMING_SNAKE_CASE    (						self    :  Union[str, Any]	,    snake_case__    :  Union[str, List[str]]	,    snake_case__    :  int = 512	,    snake_case__    :  int = 512	,    snake_case__    :  int = 50	,    snake_case__    :  float = 7.5	,    snake_case__    :  Optional[Union[str, List[str]]] = None	,    snake_case__    :  Optional[int] = 1	,    snake_case__    :  float = 0.0	,    snake_case__    :  Optional[torch.Generator] = None	,    snake_case__    :  Optional[torch.FloatTensor] = None	,    snake_case__    :  Optional[str] = "pil"	,    snake_case__    :  bool = True	,    snake_case__    :  Optional[Callable[[int, int, torch.FloatTensor], None]] = None	,    snake_case__    :  int = 1	,    **snake_case__    :  Optional[Any]	,    ):
							lowerCAmelCase__   = """cuda""" if torch.cuda.is_available() else """cpu"""
							self.to(snake_case__  )

							# 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=snake_case__	,    height=snake_case__	,    width=snake_case__	,    num_inference_steps=snake_case__	,    guidance_scale=snake_case__	,    negative_prompt=snake_case__	,    num_images_per_prompt=snake_case__	,    eta=snake_case__	,    generator=snake_case__	,    latents=snake_case__	,    output_type=snake_case__	,    return_dict=snake_case__	,    callback=snake_case__	,    callback_steps=snake_case__	,    **snake_case__	,    )

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

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

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

							# 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]]  )




