




'''simple docstring'''







def 						_A      ( UpperCAmelCase						):






   '''simple docstring'''







   A__       =     []
   for data in source_data:
      for i, el in enumerate(UpperCAmelCase						):
         if len(UpperCAmelCase						) < i + 1:
            data_lists.append([]						)
         data_lists[i].append(float(UpperCAmelCase						)						)
   return data_lists







def 						_A      ( UpperCAmelCase      ,UpperCAmelCase						):






   '''simple docstring'''







   A__       =     []
   for dlist, weight in zip(UpperCAmelCase      ,UpperCAmelCase						):
      A__       =     min(UpperCAmelCase						)
      A__       =     max(UpperCAmelCase						)

      A__       =     []
      # for weight 0 score is 1 - actual score
      if weight == 0:
         for item in dlist:
            try:
               score.append(1 - ((item - mind) / (maxd - mind))						)
            except ZeroDivisionError:
               score.append(1						)

      elif weight == 1:
         for item in dlist:
            try:
               score.append((item - mind) / (maxd - mind)						)
            except ZeroDivisionError:
               score.append(0						)

        # weight not 0 or 1
      else:
         A__       =     F"""Invalid weight of {weight:f} provided"""
         raise ValueError(UpperCAmelCase						)

      score_lists.append(UpperCAmelCase						)

   return score_lists







def 						_A      ( UpperCAmelCase						):






   '''simple docstring'''







   A__       =     [0 for i in range(len(score_lists[0]						)						)]

   for slist in score_lists:
      for j, ele in enumerate(UpperCAmelCase						):
         A__       =     final_scores[j] + ele

   return final_scores







def 						_A      ( UpperCAmelCase      ,UpperCAmelCase						):






   '''simple docstring'''







   A__       =     get_data(UpperCAmelCase						)
   A__       =     calculate_each_score(UpperCAmelCase      ,UpperCAmelCase						)
   A__       =     generate_final_scores(UpperCAmelCase						)

   # append scores to source data
   for i, ele in enumerate(UpperCAmelCase						):
      source_data[i].append(UpperCAmelCase						)

   return source_data








'''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(			UpperCAmelCase       , UpperCAmelCase       , UpperCAmelCase       , unittest.TestCase      ):
 __snake_case:							Union[str, Any]						=					StableUnCLIPPipeline
 __snake_case:							List[str]						=					TEXT_TO_IMAGE_PARAMS
 __snake_case:							str						=					TEXT_TO_IMAGE_BATCH_PARAMS
 __snake_case:							Dict						=					TEXT_TO_IMAGE_IMAGE_PARAMS
 __snake_case:							List[str]						=					TEXT_TO_IMAGE_IMAGE_PARAMS

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






 def 						_UpperCamelCase (self       :  Optional[int]    )       ->   int:






    """simple docstring"""


    A__       =     32
    A__       =     embedder_hidden_size

    # prior components

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

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

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

    torch.manual_seed(0    )
    A__       =     DDPMScheduler(
        variance_type='fixed_small_log'    ,		prediction_type='sample'    ,		num_train_timesteps=10_00    ,		clip_sample=a    ,		clip_sample_range=5.0    ,		beta_schedule='squaredcos_cap_v2'    ,		)

    # regular denoising components

    torch.manual_seed(0    )
    A__       =     StableUnCLIPImageNormalizer(embedding_dim=a    )
    A__       =     DDPMScheduler(beta_schedule='squaredcos_cap_v2'    )

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

    torch.manual_seed(0    )
    A__       =     CLIPTextModel(
        CLIPTextConfig(
            bos_token_id=0    ,		eos_token_id=2    ,		hidden_size=a    ,		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=10_00    ,		)    )

    torch.manual_seed(0    )
    A__       =     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=a    ,		layers_per_block=1    ,		upcast_attention=a    ,		use_linear_projection=a    ,		)

    torch.manual_seed(0    )
    A__       =     DDIMScheduler(
        beta_schedule='scaled_linear'    ,		beta_start=0.0_0085    ,		beta_end=0.012    ,		prediction_type='v_prediction'    ,		set_alpha_to_one=a    ,		steps_offset=1    ,		)

    torch.manual_seed(0    )
    A__       =     AutoencoderKL()

    A__       =     {
        # 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 						_UpperCamelCase (self       :  List[Any]    ,		a       :  Optional[Any]    ,		a       :  str=0    )       ->   Dict:






    """simple docstring"""


    if str(a    ).startswith('mps'    ):
       A__       =     torch.manual_seed(a    )
    else:
       A__       =     torch.Generator(device=a    ).manual_seed(a    )
    A__       =     {
        '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 						_UpperCamelCase (self       :  List[str]    )       ->   Optional[int]:






    """simple docstring"""


    A__       =     torch_device == 'cpu'

    self._test_attention_slicing_forward_pass(test_max_difference=a    )






 def 						_UpperCamelCase (self       :  Dict    )       ->   str:






    """simple docstring"""


    A__       =     torch_device in ['cpu', 'mps']

    self._test_inference_batch_single_identical(test_max_difference=a    )




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






 def 						_UpperCamelCase (self       :  Any    )       ->   Optional[Any]:






    """simple docstring"""


    super().tearDown()
    gc.collect()
    torch.cuda.empty_cache()






 def 						_UpperCamelCase (self       :  Dict    )       ->   Union[str, Any]:






    """simple docstring"""


    A__       =     load_numpy(
        'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/stable_unclip_2_1_l_anime_turtle_fp16.npy'    )

    A__       =     StableUnCLIPPipeline.from_pretrained('fusing/stable-unclip-2-1-l'    ,		torch_dtype=torch.floataa    )
    pipe.to(a    )
    pipe.set_progress_bar_config(disable=a    )
    # 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()

    A__       =     torch.Generator(device='cpu'    ).manual_seed(0    )
    A__       =     pipe('anime turle'    ,		generator=a    ,		output_type='np'    )

    A__       =     output.images[0]

    assert image.shape == (7_68, 7_68, 3)

    assert_mean_pixel_difference(a    ,		a    )






 def 						_UpperCamelCase (self       :  Optional[Any]    )       ->   str:






    """simple docstring"""


    torch.cuda.empty_cache()
    torch.cuda.reset_max_memory_allocated()
    torch.cuda.reset_peak_memory_stats()

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

    A__       =     pipe(
        'anime turtle'    ,		prior_num_inference_steps=2    ,		num_inference_steps=2    ,		output_type='np'    ,		)

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


