



import gc
import random
import unittest

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

from diffusers import AutoencoderKL, DDIMScheduler, DDPMScheduler, StableDiffusionUpscalePipeline, UNetaDConditionModel
from diffusers.utils import floats_tensor, load_image, load_numpy, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu


enable_full_determinism()






class SCREAMING_SNAKE_CASE__     (		unittest.TestCase    ):




    '''simple docstring'''






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






    @property
    def 			_lowerCAmelCase					(       self		):
        A :       Optional[int]          =   1
        A :       Tuple          =   3
        A :       Any          =   (32, 32)

        A :       Optional[Any]          =   floats_tensor((batch_size, num_channels) + sizes,		rng=random.Random(0		)		).to(lowerCamelCase__		)
        return image






    @property
    def 			_lowerCAmelCase					(       self		):
        torch.manual_seed(0		)
        A :       Tuple          =   UNetaDConditionModel(
            block_out_channels=(32, 32, 64),		layers_per_block=2,		sample_size=32,		in_channels=7,		out_channels=4,		down_block_types=("""DownBlock2D""", """CrossAttnDownBlock2D""", """CrossAttnDownBlock2D"""),		up_block_types=("""CrossAttnUpBlock2D""", """CrossAttnUpBlock2D""", """UpBlock2D"""),		cross_attention_dim=32,		attention_head_dim=8,		use_linear_projection=lowerCamelCase__,		only_cross_attention=(True, True, False),		num_class_embeds=100,		)
        return model






    @property
    def 			_lowerCAmelCase					(       self		):
        torch.manual_seed(0		)
        A :       int          =   AutoencoderKL(
            block_out_channels=[32, 32, 64],		in_channels=3,		out_channels=3,		down_block_types=["""DownEncoderBlock2D""", """DownEncoderBlock2D""", """DownEncoderBlock2D"""],		up_block_types=["""UpDecoderBlock2D""", """UpDecoderBlock2D""", """UpDecoderBlock2D"""],		latent_channels=4,		)
        return model






    @property
    def 			_lowerCAmelCase					(       self		):
        torch.manual_seed(0		)
        A :       Union[str, Any]          =   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=1000,		hidden_act="""gelu""",		projection_dim=512,		)
        return CLIPTextModel(lowerCamelCase__		)






    def 			_lowerCAmelCase					(       self		):
        A :       str          =   """cpu"""  # ensure determinism for the device-dependent torch.Generator
        A :       str          =   self.dummy_cond_unet_upscale
        A :       Tuple          =   DDPMScheduler()
        A :       List[str]          =   DDIMScheduler(prediction_type="""v_prediction"""		)
        A :       Any          =   self.dummy_vae
        A :       str          =   self.dummy_text_encoder
        A :       List[str]          =   CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""		)

        A :       Optional[int]          =   self.dummy_image.cpu().permute(0,		2,		3,		1		)[0]
        A :       Dict          =   Image.fromarray(np.uinta(lowerCamelCase__		)		).convert("""RGB"""		).resize((64, 64)		)

        # make sure here that pndm scheduler skips prk
        A :       Dict          =   StableDiffusionUpscalePipeline(
            unet=lowerCamelCase__,		low_res_scheduler=lowerCamelCase__,		scheduler=lowerCamelCase__,		vae=lowerCamelCase__,		text_encoder=lowerCamelCase__,		tokenizer=lowerCamelCase__,		max_noise_level=350,		)
        A :       Dict          =   sd_pipe.to(lowerCamelCase__		)
        sd_pipe.set_progress_bar_config(disable=lowerCamelCase__		)

        A :       List[Any]          =   """A painting of a squirrel eating a burger"""
        A :       Optional[int]          =   torch.Generator(device=lowerCamelCase__		).manual_seed(0		)
        A :       Any          =   sd_pipe(
            [prompt],		image=lowerCamelCase__,		generator=lowerCamelCase__,		guidance_scale=6.0,		noise_level=20,		num_inference_steps=2,		output_type="""np""",		)

        A :       str          =   output.images

        A :       Optional[Any]          =   torch.Generator(device=lowerCamelCase__		).manual_seed(0		)
        A :       Dict          =   sd_pipe(
            [prompt],		image=lowerCamelCase__,		generator=lowerCamelCase__,		guidance_scale=6.0,		noise_level=20,		num_inference_steps=2,		output_type="""np""",		return_dict=lowerCamelCase__,		)[0]

        A :       Union[str, Any]          =   image[0, -3:, -3:, -1]
        A :       Dict          =   image_from_tuple[0, -3:, -3:, -1]

        A :       Optional[int]          =   low_res_image.size[0] * 4
        assert image.shape == (1, expected_height_width, expected_height_width, 3)
        A :       Union[str, Any]          =   np.array([0.3113, 0.3910, 0.4272, 0.4859, 0.5061, 0.4652, 0.5362, 0.5715, 0.5661]		)

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






    def 			_lowerCAmelCase					(       self		):
        A :       List[str]          =   """cpu"""  # ensure determinism for the device-dependent torch.Generator
        A :       Optional[Any]          =   self.dummy_cond_unet_upscale
        A :       List[Any]          =   DDPMScheduler()
        A :       int          =   DDIMScheduler(prediction_type="""v_prediction"""		)
        A :       Tuple          =   self.dummy_vae
        A :       Union[str, Any]          =   self.dummy_text_encoder
        A :       Union[str, Any]          =   CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""		)

        A :       List[Any]          =   self.dummy_image.cpu().permute(0,		2,		3,		1		)[0]
        A :       List[str]          =   Image.fromarray(np.uinta(lowerCamelCase__		)		).convert("""RGB"""		).resize((64, 64)		)

        # make sure here that pndm scheduler skips prk
        A :       int          =   StableDiffusionUpscalePipeline(
            unet=lowerCamelCase__,		low_res_scheduler=lowerCamelCase__,		scheduler=lowerCamelCase__,		vae=lowerCamelCase__,		text_encoder=lowerCamelCase__,		tokenizer=lowerCamelCase__,		max_noise_level=350,		)
        A :       str          =   sd_pipe.to(lowerCamelCase__		)
        sd_pipe.set_progress_bar_config(disable=lowerCamelCase__		)

        A :       Dict          =   """A painting of a squirrel eating a burger"""
        A :       Optional[int]          =   sd_pipe(
            2 * [prompt],		image=2 * [low_res_image],		guidance_scale=6.0,		noise_level=20,		num_inference_steps=2,		output_type="""np""",		)
        A :       Dict          =   output.images
        assert image.shape[0] == 2

        A :       List[str]          =   torch.Generator(device=lowerCamelCase__		).manual_seed(0		)
        A :       Optional[Any]          =   sd_pipe(
            [prompt],		image=lowerCamelCase__,		generator=lowerCamelCase__,		num_images_per_prompt=2,		guidance_scale=6.0,		noise_level=20,		num_inference_steps=2,		output_type="""np""",		)
        A :       List[str]          =   output.images
        assert image.shape[0] == 2






    @unittest.skipIf(torch_device != """cuda""",		"""This test requires a GPU"""		)
    def 			_lowerCAmelCase					(       self		):
        A :       List[str]          =   self.dummy_cond_unet_upscale
        A :       Any          =   DDPMScheduler()
        A :       Optional[Any]          =   DDIMScheduler(prediction_type="""v_prediction"""		)
        A :       List[str]          =   self.dummy_vae
        A :       List[Any]          =   self.dummy_text_encoder
        A :       List[str]          =   CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""		)

        A :       str          =   self.dummy_image.cpu().permute(0,		2,		3,		1		)[0]
        A :       Optional[Any]          =   Image.fromarray(np.uinta(lowerCamelCase__		)		).convert("""RGB"""		).resize((64, 64)		)

        # put models in fp16, except vae as it overflows in fp16
        A :       int          =   unet.half()
        A :       List[Any]          =   text_encoder.half()

        # make sure here that pndm scheduler skips prk
        A :       Optional[Any]          =   StableDiffusionUpscalePipeline(
            unet=lowerCamelCase__,		low_res_scheduler=lowerCamelCase__,		scheduler=lowerCamelCase__,		vae=lowerCamelCase__,		text_encoder=lowerCamelCase__,		tokenizer=lowerCamelCase__,		max_noise_level=350,		)
        A :       Any          =   sd_pipe.to(lowerCamelCase__		)
        sd_pipe.set_progress_bar_config(disable=lowerCamelCase__		)

        A :       str          =   """A painting of a squirrel eating a burger"""
        A :       List[str]          =   torch.manual_seed(0		)
        A :       Optional[int]          =   sd_pipe(
            [prompt],		image=lowerCamelCase__,		generator=lowerCamelCase__,		num_inference_steps=2,		output_type="""np""",		).images

        A :       List[Any]          =   low_res_image.size[0] * 4
        assert image.shape == (1, expected_height_width, expected_height_width, 3)






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




    '''simple docstring'''






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






    def 			_lowerCAmelCase					(       self		):
        A :       Tuple          =   load_image(
            """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"""
            """/sd2-upscale/low_res_cat.png"""		)
        A :       Dict          =   load_numpy(
            """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale"""
            """/upsampled_cat.npy"""		)

        A :       Optional[int]          =   """stabilityai/stable-diffusion-x4-upscaler"""
        A :       List[str]          =   StableDiffusionUpscalePipeline.from_pretrained(lowerCamelCase__		)
        pipe.to(lowerCamelCase__		)
        pipe.set_progress_bar_config(disable=lowerCamelCase__		)
        pipe.enable_attention_slicing()

        A :       Union[str, Any]          =   """a cat sitting on a park bench"""

        A :       Union[str, Any]          =   torch.manual_seed(0		)
        A :       Optional[Any]          =   pipe(
            prompt=lowerCamelCase__,		image=lowerCamelCase__,		generator=lowerCamelCase__,		output_type="""np""",		)
        A :       str          =   output.images[0]

        assert image.shape == (512, 512, 3)
        assert np.abs(expected_image - image		).max() < 1e-3






    def 			_lowerCAmelCase					(       self		):
        A :       Optional[int]          =   load_image(
            """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"""
            """/sd2-upscale/low_res_cat.png"""		)
        A :       str          =   load_numpy(
            """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale"""
            """/upsampled_cat_fp16.npy"""		)

        A :       str          =   """stabilityai/stable-diffusion-x4-upscaler"""
        A :       Tuple          =   StableDiffusionUpscalePipeline.from_pretrained(
            lowerCamelCase__,		torch_dtype=torch.floataa,		)
        pipe.to(lowerCamelCase__		)
        pipe.set_progress_bar_config(disable=lowerCamelCase__		)
        pipe.enable_attention_slicing()

        A :       Tuple          =   """a cat sitting on a park bench"""

        A :       List[str]          =   torch.manual_seed(0		)
        A :       List[str]          =   pipe(
            prompt=lowerCamelCase__,		image=lowerCamelCase__,		generator=lowerCamelCase__,		output_type="""np""",		)
        A :       Union[str, Any]          =   output.images[0]

        assert image.shape == (512, 512, 3)
        assert np.abs(expected_image - image		).max() < 5e-1






    def 			_lowerCAmelCase					(       self		):
        torch.cuda.empty_cache()
        torch.cuda.reset_max_memory_allocated()
        torch.cuda.reset_peak_memory_stats()

        A :       List[str]          =   load_image(
            """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"""
            """/sd2-upscale/low_res_cat.png"""		)

        A :       List[Any]          =   """stabilityai/stable-diffusion-x4-upscaler"""
        A :       Union[str, Any]          =   StableDiffusionUpscalePipeline.from_pretrained(
            lowerCamelCase__,		torch_dtype=torch.floataa,		)
        pipe.to(lowerCamelCase__		)
        pipe.set_progress_bar_config(disable=lowerCamelCase__		)
        pipe.enable_attention_slicing(1		)
        pipe.enable_sequential_cpu_offload()

        A :       Any          =   """a cat sitting on a park bench"""

        A :       Optional[Any]          =   torch.manual_seed(0		)
        A :       Tuple          =   pipe(
            prompt=lowerCamelCase__,		image=lowerCamelCase__,		generator=lowerCamelCase__,		num_inference_steps=5,		output_type="""np""",		)

        A :       str          =   torch.cuda.max_memory_allocated()
        # make sure that less than 2.9 GB is allocated
        assert mem_bytes < 2.9 * 10**9







from typing import Any, Dict, Optional

import torch
import torch.nn.functional as F
from torch import nn

from ..utils import maybe_allow_in_graph
from .activations import get_activation
from .attention_processor import Attention
from .embeddings import CombinedTimestepLabelEmbeddings






@maybe_allow_in_graph
class SCREAMING_SNAKE_CASE__     (		nn.Module    ):




    '''simple docstring'''






    def __init__(       self,		lowerCamelCase__,		lowerCamelCase__,		lowerCamelCase__,		lowerCamelCase__=0.0,		lowerCamelCase__ = None,		lowerCamelCase__ = "geglu",		lowerCamelCase__ = None,		lowerCamelCase__ = False,		lowerCamelCase__ = False,		lowerCamelCase__ = False,		lowerCamelCase__ = False,		lowerCamelCase__ = True,		lowerCamelCase__ = "layer_norm",		lowerCamelCase__ = False,		):
        super().__init__()
        A :       Dict          =   only_cross_attention

        A :       Tuple          =   (num_embeds_ada_norm is not None) and norm_type == """ada_norm_zero"""
        A :       Union[str, Any]          =   (num_embeds_ada_norm is not None) and norm_type == """ada_norm"""

        if norm_type in ("ada_norm", "ada_norm_zero") and num_embeds_ada_norm is None:
            raise ValueError(
                f'''`norm_type` is set to {norm_type}, but `num_embeds_ada_norm` is not defined. Please make sure to'''
                f''' define `num_embeds_ada_norm` if setting `norm_type` to {norm_type}.'''		)

        # Define 3 blocks. Each block has its own normalization layer.
        # 1. Self-Attn
        if self.use_ada_layer_norm:
            A :       Dict          =   AdaLayerNorm(lowerCamelCase__,		lowerCamelCase__		)
        elif self.use_ada_layer_norm_zero:
            A :       List[str]          =   AdaLayerNormZero(lowerCamelCase__,		lowerCamelCase__		)
        else:
            A :       Tuple          =   nn.LayerNorm(lowerCamelCase__,		elementwise_affine=lowerCamelCase__		)
        A :       Any          =   Attention(
            query_dim=lowerCamelCase__,		heads=lowerCamelCase__,		dim_head=lowerCamelCase__,		dropout=lowerCamelCase__,		bias=lowerCamelCase__,		cross_attention_dim=cross_attention_dim if only_cross_attention else None,		upcast_attention=lowerCamelCase__,		)

        # 2. Cross-Attn
        if cross_attention_dim is not None or double_self_attention:
            # We currently only use AdaLayerNormZero for self attention where there will only be one attention block.
            # I.e. the number of returned modulation chunks from AdaLayerZero would not make sense if returned during
            # the second cross attention block.
            A :       int          =   (
                AdaLayerNorm(lowerCamelCase__,		lowerCamelCase__		)
                if self.use_ada_layer_norm
                else nn.LayerNorm(lowerCamelCase__,		elementwise_affine=lowerCamelCase__		)
            )
            A :       Dict          =   Attention(
                query_dim=lowerCamelCase__,		cross_attention_dim=cross_attention_dim if not double_self_attention else None,		heads=lowerCamelCase__,		dim_head=lowerCamelCase__,		dropout=lowerCamelCase__,		bias=lowerCamelCase__,		upcast_attention=lowerCamelCase__,		)  # is self-attn if encoder_hidden_states is none
        else:
            A :       Dict          =   None
            A :       Dict          =   None

        # 3. Feed-forward
        A :       Optional[Any]          =   nn.LayerNorm(lowerCamelCase__,		elementwise_affine=lowerCamelCase__		)
        A :       int          =   FeedForward(lowerCamelCase__,		dropout=lowerCamelCase__,		activation_fn=lowerCamelCase__,		final_dropout=lowerCamelCase__		)

        # let chunk size default to None
        A :       Optional[Any]          =   None
        A :       int          =   0






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__,		lowerCamelCase__		):
        # Sets chunk feed-forward
        A :       List[str]          =   chunk_size
        A :       int          =   dim






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__,		lowerCamelCase__ = None,		lowerCamelCase__ = None,		lowerCamelCase__ = None,		lowerCamelCase__ = None,		lowerCamelCase__ = None,		lowerCamelCase__ = None,		):
        # Notice that normalization is always applied before the real computation in the following blocks.
        # 1. Self-Attention
        if self.use_ada_layer_norm:
            A :       Optional[int]          =   self.norma(lowerCamelCase__,		lowerCamelCase__		)
        elif self.use_ada_layer_norm_zero:
            A     ,							A     ,							A     ,							A     ,							A :       Tuple          =   self.norma(
                lowerCamelCase__,		lowerCamelCase__,		lowerCamelCase__,		hidden_dtype=hidden_states.dtype		)
        else:
            A :       Tuple          =   self.norma(lowerCamelCase__		)

        A :       Dict          =   cross_attention_kwargs if cross_attention_kwargs is not None else {}

        A :       str          =   self.attna(
            lowerCamelCase__,		encoder_hidden_states=encoder_hidden_states if self.only_cross_attention else None,		attention_mask=lowerCamelCase__,		**lowerCamelCase__,		)
        if self.use_ada_layer_norm_zero:
            A :       List[Any]          =   gate_msa.unsqueeze(1		) * attn_output
        A :       str          =   attn_output + hidden_states

        # 2. Cross-Attention
        if self.attna is not None:
            A :       Optional[int]          =   (
                self.norma(lowerCamelCase__,		lowerCamelCase__		) if self.use_ada_layer_norm else self.norma(lowerCamelCase__		)
            )

            A :       Optional[Any]          =   self.attna(
                lowerCamelCase__,		encoder_hidden_states=lowerCamelCase__,		attention_mask=lowerCamelCase__,		**lowerCamelCase__,		)
            A :       Dict          =   attn_output + hidden_states

        # 3. Feed-forward
        A :       str          =   self.norma(lowerCamelCase__		)

        if self.use_ada_layer_norm_zero:
            A :       Tuple          =   norm_hidden_states * (1 + scale_mlp[:, None]) + shift_mlp[:, None]

        if self._chunk_size is not None:
            # "feed_forward_chunk_size" can be used to save memory
            if norm_hidden_states.shape[self._chunk_dim] % self._chunk_size != 0:
                raise ValueError(
                    f'''`hidden_states` dimension to be chunked: {norm_hidden_states.shape[self._chunk_dim]} has to be divisible by chunk size: {self._chunk_size}. Make sure to set an appropriate `chunk_size` when calling `unet.enable_forward_chunking`.'''		)

            A :       Any          =   norm_hidden_states.shape[self._chunk_dim] // self._chunk_size
            A :       Optional[Any]          =   torch.cat(
                [self.ff(lowerCamelCase__		) for hid_slice in norm_hidden_states.chunk(lowerCamelCase__,		dim=self._chunk_dim		)],		dim=self._chunk_dim,		)
        else:
            A :       Dict          =   self.ff(lowerCamelCase__		)

        if self.use_ada_layer_norm_zero:
            A :       Optional[Any]          =   gate_mlp.unsqueeze(1		) * ff_output

        A :       Optional[int]          =   ff_output + hidden_states

        return hidden_states






class SCREAMING_SNAKE_CASE__     (		nn.Module    ):




    '''simple docstring'''






    def __init__(       self,		lowerCamelCase__,		lowerCamelCase__ = None,		lowerCamelCase__ = 4,		lowerCamelCase__ = 0.0,		lowerCamelCase__ = "geglu",		lowerCamelCase__ = False,		):
        super().__init__()
        A :       str          =   int(dim * mult		)
        A :       Optional[Any]          =   dim_out if dim_out is not None else dim

        if activation_fn == "gelu":
            A :       Dict          =   GELU(lowerCamelCase__,		lowerCamelCase__		)
        if activation_fn == "gelu-approximate":
            A :       Optional[int]          =   GELU(lowerCamelCase__,		lowerCamelCase__,		approximate="""tanh"""		)
        elif activation_fn == "geglu":
            A :       Any          =   GEGLU(lowerCamelCase__,		lowerCamelCase__		)
        elif activation_fn == "geglu-approximate":
            A :       Optional[Any]          =   ApproximateGELU(lowerCamelCase__,		lowerCamelCase__		)

        A :       Dict          =   nn.ModuleList([]		)
        # project in
        self.net.append(lowerCamelCase__		)
        # project dropout
        self.net.append(nn.Dropout(lowerCamelCase__		)		)
        # project out
        self.net.append(nn.Linear(lowerCamelCase__,		lowerCamelCase__		)		)
        # FF as used in Vision Transformer, MLP-Mixer, etc. have a final dropout
        if final_dropout:
            self.net.append(nn.Dropout(lowerCamelCase__		)		)






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__		):
        for module in self.net:
            A :       int          =   module(lowerCamelCase__		)
        return hidden_states






class SCREAMING_SNAKE_CASE__     (		nn.Module    ):




    '''simple docstring'''






    def __init__(       self,		lowerCamelCase__,		lowerCamelCase__,		lowerCamelCase__ = "none"		):
        super().__init__()
        A :       Optional[int]          =   nn.Linear(lowerCamelCase__,		lowerCamelCase__		)
        A :       int          =   approximate






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__		):
        if gate.device.type != "mps":
            return F.gelu(lowerCamelCase__,		approximate=self.approximate		)
        # mps: gelu is not implemented for float16
        return F.gelu(gate.to(dtype=torch.floataa		),		approximate=self.approximate		).to(dtype=gate.dtype		)






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__		):
        A :       List[Any]          =   self.proj(lowerCamelCase__		)
        A :       Union[str, Any]          =   self.gelu(lowerCamelCase__		)
        return hidden_states






class SCREAMING_SNAKE_CASE__     (		nn.Module    ):




    '''simple docstring'''






    def __init__(       self,		lowerCamelCase__,		lowerCamelCase__		):
        super().__init__()
        A :       Union[str, Any]          =   nn.Linear(lowerCamelCase__,		dim_out * 2		)






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__		):
        if gate.device.type != "mps":
            return F.gelu(lowerCamelCase__		)
        # mps: gelu is not implemented for float16
        return F.gelu(gate.to(dtype=torch.floataa		)		).to(dtype=gate.dtype		)






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__		):
        A     ,							A :       Any          =   self.proj(lowerCamelCase__		).chunk(2,		dim=-1		)
        return hidden_states * self.gelu(lowerCamelCase__		)






class SCREAMING_SNAKE_CASE__     (		nn.Module    ):




    '''simple docstring'''






    def __init__(       self,		lowerCamelCase__,		lowerCamelCase__		):
        super().__init__()
        A :       Union[str, Any]          =   nn.Linear(lowerCamelCase__,		lowerCamelCase__		)






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__		):
        A :       List[Any]          =   self.proj(lowerCamelCase__		)
        return x * torch.sigmoid(1.702 * x		)






class SCREAMING_SNAKE_CASE__     (		nn.Module    ):




    '''simple docstring'''






    def __init__(       self,		lowerCamelCase__,		lowerCamelCase__		):
        super().__init__()
        A :       Dict          =   nn.Embedding(lowerCamelCase__,		lowerCamelCase__		)
        A :       Tuple          =   nn.SiLU()
        A :       Tuple          =   nn.Linear(lowerCamelCase__,		embedding_dim * 2		)
        A :       List[str]          =   nn.LayerNorm(lowerCamelCase__,		elementwise_affine=lowerCamelCase__		)






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__,		lowerCamelCase__		):
        A :       int          =   self.linear(self.silu(self.emb(lowerCamelCase__		)		)		)
        A     ,							A :       Optional[int]          =   torch.chunk(lowerCamelCase__,		2		)
        A :       Tuple          =   self.norm(lowerCamelCase__		) * (1 + scale) + shift
        return x






class SCREAMING_SNAKE_CASE__     (		nn.Module    ):




    '''simple docstring'''






    def __init__(       self,		lowerCamelCase__,		lowerCamelCase__		):
        super().__init__()

        A :       Union[str, Any]          =   CombinedTimestepLabelEmbeddings(lowerCamelCase__,		lowerCamelCase__		)

        A :       List[Any]          =   nn.SiLU()
        A :       str          =   nn.Linear(lowerCamelCase__,		6 * embedding_dim,		bias=lowerCamelCase__		)
        A :       List[Any]          =   nn.LayerNorm(lowerCamelCase__,		elementwise_affine=lowerCamelCase__,		eps=1e-6		)






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__,		lowerCamelCase__,		lowerCamelCase__,		lowerCamelCase__=None		):
        A :       Tuple          =   self.linear(self.silu(self.emb(lowerCamelCase__,		lowerCamelCase__,		hidden_dtype=lowerCamelCase__		)		)		)
        A     ,							A     ,							A     ,							A     ,							A     ,							A :       Optional[Any]          =   emb.chunk(6,		dim=1		)
        A :       List[str]          =   self.norm(lowerCamelCase__		) * (1 + scale_msa[:, None]) + shift_msa[:, None]
        return x, gate_msa, shift_mlp, scale_mlp, gate_mlp






class SCREAMING_SNAKE_CASE__     (		nn.Module    ):




    '''simple docstring'''






    def __init__(       self,		lowerCamelCase__,		lowerCamelCase__,		lowerCamelCase__,		lowerCamelCase__ = None,		lowerCamelCase__ = 1e-5		):
        super().__init__()
        A :       int          =   num_groups
        A :       Dict          =   eps

        if act_fn is None:
            A :       Union[str, Any]          =   None
        else:
            A :       Optional[int]          =   get_activation(lowerCamelCase__		)

        A :       Dict          =   nn.Linear(lowerCamelCase__,		out_dim * 2		)






    def 			_lowerCAmelCase					(       self,		lowerCamelCase__,		lowerCamelCase__		):
        if self.act:
            A :       Dict          =   self.act(lowerCamelCase__		)
        A :       Optional[int]          =   self.linear(lowerCamelCase__		)
        A :       int          =   emb[:, :, None, None]
        A     ,							A :       Tuple          =   emb.chunk(2,		dim=1		)

        A :       Any          =   F.group_norm(lowerCamelCase__,		self.num_groups,		eps=self.eps		)
        A :       List[str]          =   x * (1 + scale) + shift
        return x


