





'''simple docstring'''







from collections import OrderedDict
from typing import Mapping

from packaging import version

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging
from ...utils.backbone_utils import BackboneConfigMixin, get_aligned_output_features_output_indices


lowerCAmelCase_					:    Optional[Any]      	=			logging.get_logger(__name__)

lowerCAmelCase_					:    Optional[Any]      	=			{
    'microsoft/swin-tiny-patch4-window7-224': (
        'https://huggingface.co/microsoft/swin-tiny-patch4-window7-224/resolve/main/config.json'
    ),
    # See all Swin models at https://huggingface.co/models?filter=swin
}
class 				__SCREAMING_SNAKE_CASE  (lowerCamelCase_       ,							lowerCamelCase_      ):






				"""simple docstring"""







				__a            ='swin'

				__a            ={
				    'num_attention_heads': 'num_heads',
				    'num_hidden_layers': 'num_layers',
				}




				def __init__(  self     :					Any					,				__a     :					Optional[Any]=2_24					,				__a     :					List[str]=4					,				__a     :					List[Any]=3					,				__a     :					Optional[Any]=96					,				__a     :					str=[2, 2, 6, 2]					,				__a     :					Tuple=[3, 6, 12, 24]					,				__a     :					List[str]=7					,				__a     :					Tuple=4.0					,				__a     :					Optional[Any]=True					,				__a     :					Optional[Any]=0.0					,				__a     :					Any=0.0					,				__a     :					Tuple=0.1					,				__a     :					Tuple="gelu"					,				__a     :					Union[str, Any]=False					,				__a     :					Optional[int]=0.02					,				__a     :					Tuple=1e-5					,				__a     :					List[str]=32					,				__a     :					int=None					,				__a     :					Dict=None					,				**__a     :					Any					,				):
								super().__init__(**__a					)

								_a								= image_size
								_a								= patch_size
								_a								= num_channels
								_a								= embed_dim
								_a								= depths
								_a								= len(__a					)
								_a								= num_heads
								_a								= window_size
								_a								= mlp_ratio
								_a								= qkv_bias
								_a								= hidden_dropout_prob
								_a								= attention_probs_dropout_prob
								_a								= drop_path_rate
								_a								= hidden_act
								_a								= use_absolute_embeddings
								_a								= layer_norm_eps
								_a								= initializer_range
								_a								= encoder_stride
								# we set the hidden_size attribute in order to make Swin work with VisionEncoderDecoderModel
								# this indicates the channel dimension after the last stage of the model
								_a								= int(embed_dim * 2 ** (len(__a					) - 1)					)
								_a								= ["stem"] + [f'stage{idx}' for idx in range(1					,				len(__a					) + 1					)]
								_a	,					_a								= get_aligned_output_features_output_indices(
								    out_features=__a					,				out_indices=__a					,				stage_names=self.stage_names					)


class 				__SCREAMING_SNAKE_CASE  (lowerCamelCase_      ):






				"""simple docstring"""







				__a            =version.parse('1.11'      )




				@property
				def   UpperCamelCase__   (  self     :					List[str]					):
								return OrderedDict(
								    [
								        ("pixel_values", {0: "batch", 1: "num_channels", 2: "height", 3: "width"}),
								    ]					)




				@property
				def   UpperCamelCase__   (  self     :					str					):
								return 1e-4




'''simple docstring'''

import gc
import unittest

import torch
from transformers import CLIPTextConfig, CLIPTextModel, CLIPTextModelWithProjection, CLIPTokenizer

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    DDPMScheduler,
    PriorTransformer,
    StableUnCLIPPipeline,
    UNetaDConditionModel,
)
from diffusers.pipelines.stable_diffusion.stable_unclip_image_normalizer import StableUnCLIPImageNormalizer
from diffusers.utils.testing_utils import enable_full_determinism, load_numpy, require_torch_gpu, slow, torch_device

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_IMAGE_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import (
    PipelineKarrasSchedulerTesterMixin,
    PipelineLatentTesterMixin,
    PipelineTesterMixin,
    assert_mean_pixel_difference,
)


enable_full_determinism()





class      snake_case    (    lowercase			,						lowercase			,						lowercase			,						unittest.TestCase			):





  """simple docstring"""




  _lowerCamelCase		    =  StableUnCLIPPipeline
  _lowerCamelCase		    =  TEXT_TO_IMAGE_PARAMS
  _lowerCamelCase		    =  TEXT_TO_IMAGE_BATCH_PARAMS
  _lowerCamelCase		    =  TEXT_TO_IMAGE_IMAGE_PARAMS
  _lowerCamelCase		    =  TEXT_TO_IMAGE_IMAGE_PARAMS

  # TODO(will) Expected attn_bias.stride(1) == 0 to be true, but got false
  _lowerCamelCase		    =  False






  def   snake_case		(    self     ):







   """simple docstring"""
   lowerCamelCase_      =  32
   lowerCamelCase_      =  embedder_hidden_size

   # prior components

   torch.manual_seed(0     )
   lowerCamelCase_      =  CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"     )

   torch.manual_seed(0     )
   lowerCamelCase_      =  CLIPTextModelWithProjection(
       CLIPTextConfig(
           bos_token_id=0			,  eos_token_id=2			,  hidden_size=UpperCamelCase			,  projection_dim=UpperCamelCase			,  intermediate_size=37			,  layer_norm_eps=1e-05			,  num_attention_heads=4			,  num_hidden_layers=5			,  pad_token_id=1			,  vocab_size=1000			,  )     )

   torch.manual_seed(0     )
   lowerCamelCase_      =  PriorTransformer(
       num_attention_heads=2			,  attention_head_dim=12			,  embedding_dim=UpperCamelCase			,  num_layers=1			,  )

   torch.manual_seed(0     )
   lowerCamelCase_      =  DDPMScheduler(
       variance_type="fixed_small_log"			,  prediction_type="sample"			,  num_train_timesteps=1000			,  clip_sample=UpperCamelCase			,  clip_sample_range=5.0			,  beta_schedule="squaredcos_cap_v2"			,  )

   # regular denoising components

   torch.manual_seed(0     )
   lowerCamelCase_      =  StableUnCLIPImageNormalizer(embedding_dim=UpperCamelCase     )
   lowerCamelCase_      =  DDPMScheduler(beta_schedule="squaredcos_cap_v2"     )

   torch.manual_seed(0     )
   lowerCamelCase_      =  CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"     )

   torch.manual_seed(0     )
   lowerCamelCase_      =  CLIPTextModel(
       CLIPTextConfig(
           bos_token_id=0			,  eos_token_id=2			,  hidden_size=UpperCamelCase			,  projection_dim=32			,  intermediate_size=37			,  layer_norm_eps=1e-05			,  num_attention_heads=4			,  num_hidden_layers=5			,  pad_token_id=1			,  vocab_size=1000			,  )     )

   torch.manual_seed(0     )
   lowerCamelCase_      =  UNetaDConditionModel(
       sample_size=32			,  in_channels=4			,  out_channels=4			,  down_block_types=("CrossAttnDownBlock2D", "DownBlock2D")			,  up_block_types=("UpBlock2D", "CrossAttnUpBlock2D")			,  block_out_channels=(32, 64)			,  attention_head_dim=(2, 4)			,  class_embed_type="projection"			,  projection_class_embeddings_input_dim=embedder_projection_dim * 2			,  cross_attention_dim=UpperCamelCase			,  layers_per_block=1			,  upcast_attention=UpperCamelCase			,  use_linear_projection=UpperCamelCase			,  )

   torch.manual_seed(0     )
   lowerCamelCase_      =  DDIMScheduler(
       beta_schedule="scaled_linear"			,  beta_start=0.00_085			,  beta_end=0.012			,  prediction_type="v_prediction"			,  set_alpha_to_one=UpperCamelCase			,  steps_offset=1			,  )

   torch.manual_seed(0     )
   lowerCamelCase_      =  AutoencoderKL()

   lowerCamelCase_      =  {
       # prior components
       "prior_tokenizer": prior_tokenizer,
       "prior_text_encoder": prior_text_encoder,
       "prior": prior,
       "prior_scheduler": prior_scheduler,
       # image noising components
       "image_normalizer": image_normalizer,
       "image_noising_scheduler": image_noising_scheduler,
       # regular denoising components
       "tokenizer": tokenizer,
       "text_encoder": text_encoder,
       "unet": unet,
       "scheduler": scheduler,
       "vae": vae,
   }

   return components






  def   snake_case		(    self			,  UpperCamelCase			,  UpperCamelCase=0     ):







   """simple docstring"""
   if str(UpperCamelCase     ).startswith("mps"     ):
    lowerCamelCase_      =  torch.manual_seed(UpperCamelCase     )
   else:
    lowerCamelCase_      =  torch.Generator(device=UpperCamelCase     ).manual_seed(UpperCamelCase     )
   lowerCamelCase_      =  {
       "prompt": "A painting of a squirrel eating a burger",
       "generator": generator,
       "num_inference_steps": 2,
       "prior_num_inference_steps": 2,
       "output_type": "numpy",
   }
   return inputs






  def   snake_case		(    self     ):







   """simple docstring"""
   lowerCamelCase_      =  torch_device == "cpu"

   self._test_attention_slicing_forward_pass(test_max_difference=UpperCamelCase     )







  def   snake_case		(    self     ):







   """simple docstring"""
   lowerCamelCase_      =  torch_device in ["cpu", "mps"]

   self._test_inference_batch_single_identical(test_max_difference=UpperCamelCase     )





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





  """simple docstring"""




  def   snake_case		(    self     ):







   """simple docstring"""
   # clean up the VRAM after each test
   super().tearDown()
   gc.collect()
   torch.cuda.empty_cache()






  def   snake_case		(    self     ):







   """simple docstring"""
   lowerCamelCase_      =  load_numpy(
       "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/stable_unclip_2_1_l_anime_turtle_fp16.npy"     )

   lowerCamelCase_      =  StableUnCLIPPipeline.from_pretrained("fusing/stable-unclip-2-1-l"			,  torch_dtype=torch.floataa     )
   pipe.to(UpperCamelCase     )
   pipe.set_progress_bar_config(disable=UpperCamelCase     )
   # stable unclip will oom when integration tests are run on a V100,
   # so turn on memory savings
   pipe.enable_attention_slicing()
   pipe.enable_sequential_cpu_offload()

   lowerCamelCase_      =  torch.Generator(device="cpu"     ).manual_seed(0     )
   lowerCamelCase_      =  pipe("anime turle"			,  generator=UpperCamelCase			,  output_type="np"     )

   lowerCamelCase_      =  output.images[0]

   assert image.shape == (768, 768, 3)

   assert_mean_pixel_difference(UpperCamelCase			,  UpperCamelCase     )







  def   snake_case		(    self     ):







   """simple docstring"""
   torch.cuda.empty_cache()
   torch.cuda.reset_max_memory_allocated()
   torch.cuda.reset_peak_memory_stats()

   lowerCamelCase_      =  StableUnCLIPPipeline.from_pretrained("fusing/stable-unclip-2-1-l"			,  torch_dtype=torch.floataa     )
   lowerCamelCase_      =  pipe.to(UpperCamelCase     )
   pipe.set_progress_bar_config(disable=UpperCamelCase     )
   pipe.enable_attention_slicing()
   pipe.enable_sequential_cpu_offload()

   lowerCamelCase_      =  pipe(
       "anime turtle"			,  prior_num_inference_steps=2			,  num_inference_steps=2			,  output_type="np"			,  )

   lowerCamelCase_      =  torch.cuda.max_memory_allocated()
   # make sure that less than 7 GB is allocated
   assert mem_bytes < 7 * 10**9



