

'''simple docstring'''
import collections
import json
import os
import re
from typing import TYPE_CHECKING, List, Optional, Tuple

import numpy as np

from ...tokenization_utils_fast import PreTrainedTokenizer
from ...utils import logging


if TYPE_CHECKING:
    from transformers.pipelines.conversational import Conversation


_snake_case         =  logging.get_logger(__name__)

_snake_case         =  {'vocab_file': 'vocab.txt', 'emoji_file': 'emoji.json'}

_snake_case         =  {
    'vocab_file': {
        'abeja/gpt-neox-japanese-2.7b': 'https://huggingface.co/abeja/gpt-neox-japanese-2.7b/resolve/main/vocab.txt',
    },
    'emoji_file': {
        'abeja/gpt-neox-japanese-2.7b': 'https://huggingface.co/abeja/gpt-neox-japanese-2.7b/resolve/main/emoji.json',
    },
}

_snake_case         =  {
    'abeja/gpt-neox-japanese-2.7b': 2_048,
}







def  _A		(     snake_case		,							snake_case					)      ->     List[str]:
   with open(snake_case		,							"r"		,							encoding="utf-8"					) as f:
      _lowercase      :				Optional[int]      					=       json.loads(f.read()					)

   _lowercase      :				Union[str, Any]      					=       collections.OrderedDict()
   _lowercase      :				Optional[Any]      					=       collections.OrderedDict()
   _lowercase      :				List[str]      					=       collections.OrderedDict()
   with open(snake_case		,							"r"		,							encoding="utf-8"					) as f:
      _lowercase      :				Union[str, Any]      					=       f.readlines()
   _lowercase      :				Tuple      					=       [[t.rstrip("\n"					)] if (t == "," or "," not in t) else t.rstrip("\n"					).split(","					) for t in token]
   for idx, b in enumerate(snake_case					):
      _lowercase      :				Dict      					=       b
      _lowercase      :				Dict      					=       idx
      for wd in b:
         _lowercase      :				str      					=       idx

   return vocab, raw_vocab, ids_to_tokens, emoji


class        a__  (							lowerCamelCase_  ):
   _SCREAMING_SNAKE_CASE   :					str     	=							VOCAB_FILES_NAMES
   _SCREAMING_SNAKE_CASE   :					List[Any]     	=							PRETRAINED_VOCAB_FILES_MAP
   _SCREAMING_SNAKE_CASE   :					Optional[int]     	=							PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
   _SCREAMING_SNAKE_CASE   :					str     	=							['input_ids', 'attention_mask']


   def __init__(			self      ,    _UpperCamelCase      ,    _UpperCamelCase      ,    _UpperCamelCase="<|endoftext|>"      ,    _UpperCamelCase="<|endoftext|>"      ,    _UpperCamelCase="<|startoftext|>"      ,    _UpperCamelCase="<|endoftext|>"      ,    _UpperCamelCase=False      ,    **_UpperCamelCase      ,    ):





      """simple docstring"""





      super().__init__(
          unk_token=_UpperCamelCase      ,    pad_token=_UpperCamelCase      ,    bos_token=_UpperCamelCase      ,    eos_token=_UpperCamelCase      ,    do_clean_text=_UpperCamelCase      ,    **_UpperCamelCase      ,    )
      if not os.path.isfile(_UpperCamelCase  ):
         raise ValueError(
             f'''Can\'t find a vocabulary file at path \'{vocab_file}\'. To load the vocabulary from a Google pretrained'''
             " model use `tokenizer = GPTNeoXJapaneseokenizer.from_pretrained(PRETRAINED_MODEL_NAME)`"  )
      if not os.path.isfile(_UpperCamelCase  ):
         raise ValueError(
             f'''Can\'t find a emoji file at path \'{emoji_file}\'. To load the emoji information from a Google'''
             " pretrained model use `tokenizer = GPTNeoXJapaneseokenizer.from_pretrained(PRETRAINED_MODEL_NAME)`"  )
      _lowercase      :				Tuple      					=       do_clean_text
      _lowercase					,				_lowercase					,				_lowercase					,				_lowercase      :				List[Any]      					=       load_vocab_and_emoji(_UpperCamelCase      ,    _UpperCamelCase  )
      _lowercase      :				str      					=       SubWordJapaneseTokenizer(
          vocab=self.vocab      ,    ids_to_tokens=self.ids_to_tokens      ,    emoji=self.emoji  )


   @property
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return len(self.raw_vocab  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return dict(self.raw_vocab      ,    **self.added_tokens_encoder  )


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      return self.subword_tokenizer.tokenize(_UpperCamelCase      ,    clean=self.do_clean_text  )


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      return self.vocab.get(_UpperCamelCase      ,    self.vocab.get(self.unk_token  )  )


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      return self.subword_tokenizer.convert_id_to_token(_UpperCamelCase  )


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				int      					=       "".join(_UpperCamelCase  ).strip()
      return out_string


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				Any      					=       []
      for is_user, text in conversation.iter_texts():
         input_ids.extend(self.encode(_UpperCamelCase      ,    add_special_tokens=_UpperCamelCase  ) + [self.eos_token_id]  )

      if len(_UpperCamelCase  ) > self.model_max_length:
         _lowercase      :				str      					=       input_ids[-self.model_max_length :]
      return input_ids






   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase = None  ):





      """simple docstring"""





      _lowercase      :				Optional[int]      					=       0
      if os.path.isdir(_UpperCamelCase  ):
         _lowercase      :				Tuple      					=       os.path.join(
             _UpperCamelCase      ,    (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]  )
         _lowercase      :				List[str]      					=       os.path.join(
             _UpperCamelCase      ,    (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["emoji_file"]  )
      else:
         _lowercase      :				int      					=       (
             (filename_prefix + "-" if filename_prefix else "") + save_directory + VOCAB_FILES_NAMES["vocab_file"]
         )
         _lowercase      :				Tuple      					=       (
             (filename_prefix + "-" if filename_prefix else "") + save_directory + VOCAB_FILES_NAMES["emoji_file"]
         )
      with open(_UpperCamelCase      ,    "w"      ,    encoding="utf-8"  ) as writer:
         for token_index, token in self.ids_to_tokens.items():
            if index != token_index:
               logger.warning(
                   f'''Saving vocabulary to {vocab_file}: vocabulary indices are not consecutive.'''
                   " Please check that the vocabulary is not corrupted!"  )
               _lowercase      :				List[Any]      					=       token_index
            writer.write(",".join(_UpperCamelCase  ) + "\n"  )
            index += 1
      with open(_UpperCamelCase      ,    "w"      ,    encoding="utf-8"  ) as writer:
         json.dump(self.emoji      ,    _UpperCamelCase  )
      return vocab_file, emoji_file




class        a__  (							lowerCamelCase_  ):


   def __init__(			self      ,    _UpperCamelCase      ,    _UpperCamelCase      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				Tuple      					=       vocab  # same as swe
      _lowercase      :				int      					=       ids_to_tokens  # same as bpe
      _lowercase      :				Dict      					=       emoji
      _lowercase      :				List[str]      					=       np.max([len(_UpperCamelCase  ) for w in self.vocab.keys()]  )
      _lowercase      :				Dict      					=       re.compile(R"(https?|ftp)(:\/\/[-_\.!~*\'()a-zA-Z0-9;\/?:\@&=\+$,%#]+)"  )
      _lowercase      :				Optional[Any]      					=       re.compile(R"[A-Za-z0-9\._+]*@[\-_0-9A-Za-z]+(\.[A-Za-z]+)*"  )
      _lowercase      :				str      					=       re.compile(R"[\(]{0,1}[0-9]{2,4}[\)\-\(]{0,1}[0-9]{2,4}[\)\-]{0,1}[0-9]{3,4}"  )
      _lowercase      :				List[str]      					=       re.compile(
          R"([12]\d{3}[/\-年])*(0?[1-9]|1[0-2])[/\-月]((0?[1-9]|[12][0-9]|3[01])日?)*(\d{1,2}|:|\d{1,2}時|\d{1,2}分|\(日\)|\(月\)|\(火\)|\(水\)|\(木\)|\(金\)|\(土\)|㈰|㈪|㈫|㈬|㈭|㈮|㈯)*"  )
      _lowercase      :				Any      					=       re.compile(
          R"(明治|大正|昭和|平成|令和|㍾|㍽|㍼|㍻|\u32ff)\d{1,2}年(0?[1-9]|1[0-2])月(0?[1-9]|[12][0-9]|3[01])日(\d{1,2}|:|\d{1,2}時|\d{1,2}分|\(日\)|\(月\)|\(火\)|\(水\)|\(木\)|\(金\)|\(土\)|㈰|㈪|㈫|㈬|㈭|㈮|㈯)*"  )
      _lowercase      :				Dict      					=       re.compile(
          R"((0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)*億)*((0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)*万)*((0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)*千)*(0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)*(千円|万円|千万円|円|千ドル|万ドル|千万ドル|ドル|千ユーロ|万ユーロ|千万ユーロ|ユーロ)+(\(税込\)|\(税抜\)|\+tax)*"  )
      _lowercase      :				str      					=       "─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿"
      _lowercase      :				Optional[int]      					=       "▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟"
      _lowercase      :				List[str]      					=       str.maketrans({k: "<BLOCK>" for k in keisen + blocks}  )


   def __len__(			self  ):





      """simple docstring"""





      return len(self.ids_to_tokens  )


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				List[Any]      					=       self.content_repattera.sub("<URL>"      ,    _UpperCamelCase  )
      _lowercase      :				Dict      					=       self.content_repattera.sub("<EMAIL>"      ,    _UpperCamelCase  )
      _lowercase      :				Tuple      					=       self.content_repattera.sub("<TEL>"      ,    _UpperCamelCase  )
      _lowercase      :				List[Any]      					=       self.content_repattera.sub("<DATE>"      ,    _UpperCamelCase  )
      _lowercase      :				Tuple      					=       self.content_repattera.sub("<DATE>"      ,    _UpperCamelCase  )
      _lowercase      :				Optional[int]      					=       self.content_repattera.sub("<PRICE>"      ,    _UpperCamelCase  )
      _lowercase      :				List[str]      					=       content.translate(self.content_transa  )
      while "<BLOCK><BLOCK>" in content:
         _lowercase      :				str      					=       content.replace("<BLOCK><BLOCK>"      ,    "<BLOCK>"  )
      return content


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase=False  ):





      """simple docstring"""





      _lowercase      :				Union[str, Any]      					=       text.replace(" "      ,    "<SP>"  )
      _lowercase      :				int      					=       text.replace("　"      ,    "<SP>"  )
      _lowercase      :				int      					=       text.replace("\r\n"      ,    "<BR>"  )
      _lowercase      :				List[str]      					=       text.replace("\n"      ,    "<BR>"  )
      _lowercase      :				Optional[Any]      					=       text.replace("\r"      ,    "<BR>"  )
      _lowercase      :				Union[str, Any]      					=       text.replace("\t"      ,    "<TAB>"  )
      _lowercase      :				List[str]      					=       text.replace("—"      ,    "ー"  )
      _lowercase      :				int      					=       text.replace("−"      ,    "ー"  )
      for k, v in self.emoji["emoji"].items():
         if k in text:
            _lowercase      :				List[Any]      					=       text.replace(_UpperCamelCase      ,    _UpperCamelCase  )
      if clean:
         _lowercase      :				int      					=       self.clean_text(_UpperCamelCase  )

      def check_simbol(_UpperCamelCase  ):
         _lowercase      :				Optional[int]      					=       x.encode()
         if len(_UpperCamelCase  ) == 1 and len(_UpperCamelCase  ) == 2:
            _lowercase      :				List[Any]      					=       (int(e[0]  ) << 8) + int(e[1]  )
            if (
                (c >= 0XC2_A1 and c <= 0XC2_BF)
                or (c >= 0XC7_80 and c <= 0XC7_83)
                or (c >= 0XCA_B9 and c <= 0XCB_BF)
                or (c >= 0XCC_80 and c <= 0XCD_A2)
            ):
               return True
         return False

      def checkuae(_UpperCamelCase  ):
         _lowercase      :				Any      					=       x.encode()
         if len(_UpperCamelCase  ) == 1 and len(_UpperCamelCase  ) == 3:
            _lowercase      :				Dict      					=       (int(e[0]  ) << 16) + (int(e[1]  ) << 8) + int(e[2]  )
            if c >= 0XE2_80_80 and c <= 0XE2_B0_7F:
               return True
         return False

      _lowercase      :				Optional[int]      					=       0
      _lowercase      :				Optional[int]      					=       []
      while pos < len(_UpperCamelCase  ):
         _lowercase      :				Dict      					=       min(len(_UpperCamelCase  )      ,    pos + self.maxlen + 1  ) if text[pos] == "<" else pos + 3
         _lowercase      :				List[str]      					=       []  # (token_id, token, pos)
         for e in range(_UpperCamelCase      ,    _UpperCamelCase      ,    -1  ):
            _lowercase      :				Optional[int]      					=       text[pos:e]
            if wd in self.vocab:
               if wd[0] == "<" and len(_UpperCamelCase  ) > 2:
                  _lowercase      :				Optional[int]      					=       [(self.vocab[wd], wd, e)]
                  break
               else:
                  candidates.append((self.vocab[wd], wd, e)  )
         if len(_UpperCamelCase  ) > 0:
            # the smallest token_id is adopted
            _lowercase					,				_lowercase					,				_lowercase      :				Union[str, Any]      					=       sorted(_UpperCamelCase      ,    key=lambda _UpperCamelCase  : x[0]  )[0]
            result.append(_UpperCamelCase  )
            _lowercase      :				List[Any]      					=       e
         else:
            _lowercase      :				Optional[Any]      					=       pos + 1
            _lowercase      :				Any      					=       text[pos:end]
            if check_simbol(_UpperCamelCase  ):
               result.append("<KIGOU>"  )
            elif checkuae(_UpperCamelCase  ):
               result.append("<U2000U2BFF>"  )
            else:
               for i in wd.encode("utf-8"  ):
                  result.append("<|byte%d|>" % i  )
            _lowercase      :				int      					=       end
      return result






   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase="\n"  ):





      """simple docstring"""





      _lowercase      :				Dict      					=       []
      _lowercase      :				List[str]      					=       []
      _lowercase      :				int      					=       self.ids_to_tokens[index][0]
      if word[:6] == "<|byte" and word[-2:] == "|>":
         byte_tokens.append(int(word[6:-2]  )  )
      else:
         if len(_UpperCamelCase  ) > 0:
            words.append(bytearray(_UpperCamelCase  ).decode("utf-8"      ,    errors="replace"  )  )
            _lowercase      :				int      					=       []
         if word[:7] == "<|emoji" and word[-2:] == "|>":
            words.append(self.emoji["emoji_inv"][word]  )
         elif word == "<SP>":
            words.append(" "  )
         elif word == "<BR>":
            words.append(_UpperCamelCase  )
         elif word == "<TAB>":
            words.append("\t"  )
         elif word == "<BLOCK>":
            words.append("▀"  )
         elif word == "<KIGOU>":
            words.append("ǀ"  )
         elif word == "<U2000U2BFF>":
            words.append("‖"  )
         else:
            words.append(_UpperCamelCase  )
      if len(_UpperCamelCase  ) > 0:
         words.append(bytearray(_UpperCamelCase  ).decode("utf-8"      ,    errors="replace"  )  )
      _lowercase      :				Optional[Any]      					=       "".join(_UpperCamelCase  )
      return text









'''simple docstring'''
import gc
import random
import unittest

import numpy as np
import torch
from transformers import (
    CLIPImageProcessor,
    CLIPTextConfig,
    CLIPTextModel,
    CLIPTokenizer,
    CLIPVisionConfig,
    CLIPVisionModelWithProjection,
)

from diffusers import AutoencoderKL, DDIMScheduler, DDPMScheduler, StableUnCLIPImgaImgPipeline, UNetaDConditionModel
from diffusers.pipelines.pipeline_utils import DiffusionPipeline
from diffusers.pipelines.stable_diffusion.stable_unclip_image_normalizer import StableUnCLIPImageNormalizer
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import (
    enable_full_determinism,
    floats_tensor,
    load_image,
    load_numpy,
    require_torch_gpu,
    skip_mps,
    slow,
    torch_device,
)

from ..pipeline_params import TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS, TEXT_GUIDED_IMAGE_VARIATION_PARAMS
from ..test_pipelines_common import (
    PipelineKarrasSchedulerTesterMixin,
    PipelineLatentTesterMixin,
    PipelineTesterMixin,
    assert_mean_pixel_difference,
)


enable_full_determinism()


class        a__  (							lowerCamelCase_  ,				lowerCamelCase_  ,				lowerCamelCase_  ,				unittest.TestCase  ):
   _SCREAMING_SNAKE_CASE   :					Dict     	=							StableUnCLIPImgaImgPipeline
   _SCREAMING_SNAKE_CASE   :					int     	=							TEXT_GUIDED_IMAGE_VARIATION_PARAMS
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS
   _SCREAMING_SNAKE_CASE   :					Any     	=							frozenset(
       []  )  # TO-DO: update image_params once pipeline is refactored with VaeImageProcessor.preprocess
   _SCREAMING_SNAKE_CASE   :					List[Any]     	=							frozenset([]  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[Any]      					=       32
      _lowercase      :				Any      					=       embedder_hidden_size

      # image encoding components

      _lowercase      :				Optional[int]      					=       CLIPImageProcessor(crop_size=32      ,    size=32  )

      torch.manual_seed(0  )
      _lowercase      :				Dict      					=       CLIPVisionModelWithProjection(
          CLIPVisionConfig(
              hidden_size=_UpperCamelCase      ,    projection_dim=_UpperCamelCase      ,    num_hidden_layers=5      ,    num_attention_heads=4      ,    image_size=32      ,    intermediate_size=37      ,    patch_size=1      ,    )  )

      # regular denoising components

      torch.manual_seed(0  )
      _lowercase      :				str      					=       StableUnCLIPImageNormalizer(embedding_dim=_UpperCamelCase  )
      _lowercase      :				Dict      					=       DDPMScheduler(beta_schedule="squaredcos_cap_v2"  )

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

      torch.manual_seed(0  )
      _lowercase      :				Optional[Any]      					=       CLIPTextModel(
          CLIPTextConfig(
              bos_token_id=0      ,    eos_token_id=2      ,    hidden_size=_UpperCamelCase      ,    projection_dim=32      ,    intermediate_size=37      ,    layer_norm_eps=1E-0_5      ,    num_attention_heads=4      ,    num_hidden_layers=5      ,    pad_token_id=1      ,    vocab_size=1000      ,    )  )

      torch.manual_seed(0  )
      _lowercase      :				List[str]      					=       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  )
      _lowercase      :				int      					=       DDIMScheduler(
          beta_schedule="scaled_linear"      ,    beta_start=0.0_0_0_8_5      ,    beta_end=0.0_1_2      ,    prediction_type="v_prediction"      ,    set_alpha_to_one=_UpperCamelCase      ,    steps_offset=1      ,    )

      torch.manual_seed(0  )
      _lowercase      :				Dict      					=       AutoencoderKL()

      _lowercase      :				int      					=       {
          # image encoding components
          "feature_extractor": feature_extractor,
          "image_encoder": image_encoder.eval(),
          # image noising components
          "image_normalizer": image_normalizer.eval(),
          "image_noising_scheduler": image_noising_scheduler,
          # regular denoising components
          "tokenizer": tokenizer,
          "text_encoder": text_encoder.eval(),
          "unet": unet.eval(),
          "scheduler": scheduler,
          "vae": vae.eval(),
      }

      return components


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase=0      ,    _UpperCamelCase=True  ):





      """simple docstring"""





      if str(_UpperCamelCase  ).startswith("mps"  ):
         _lowercase      :				List[Any]      					=       torch.manual_seed(_UpperCamelCase  )
      else:
         _lowercase      :				List[str]      					=       torch.Generator(device=_UpperCamelCase  ).manual_seed(_UpperCamelCase  )

      _lowercase      :				List[str]      					=       floats_tensor((1, 3, 32, 32)      ,    rng=random.Random(_UpperCamelCase  )  ).to(_UpperCamelCase  )

      if pil_image:
         _lowercase      :				Optional[Any]      					=       input_image * 0.5 + 0.5
         _lowercase      :				Optional[int]      					=       input_image.clamp(0      ,    1  )
         _lowercase      :				str      					=       input_image.cpu().permute(0      ,    2      ,    3      ,    1  ).float().numpy()
         _lowercase      :				int      					=       DiffusionPipeline.numpy_to_pil(_UpperCamelCase  )[0]

      return {
          "prompt": "An anime racoon running a marathon",
          "image": input_image,
          "generator": generator,
          "num_inference_steps": 2,
          "output_type": "np",
      }


   @skip_mps
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Dict      					=       "cpu"  # ensure determinism for the device-dependent torch.Generator
      _lowercase      :				List[str]      					=       self.get_dummy_components()
      _lowercase      :				str      					=       StableUnCLIPImgaImgPipeline(**_UpperCamelCase  )
      _lowercase      :				int      					=       sd_pipe.to(_UpperCamelCase  )
      sd_pipe.set_progress_bar_config(disable=_UpperCamelCase  )

      _lowercase      :				str      					=       self.get_dummy_inputs(_UpperCamelCase  )
      inputs.update({"image_embeds": None}  )
      _lowercase      :				Tuple      					=       sd_pipe(**_UpperCamelCase  ).images
      _lowercase      :				str      					=       image[0, -3:, -3:, -1]

      assert image.shape == (1, 32, 32, 3)
      _lowercase      :				Tuple      					=       np.array([0.3_8_7_2, 0.7_2_2_4, 0.5_6_0_1, 0.4_7_4_1, 0.6_8_7_2, 0.5_8_1_4, 0.4_6_3_6, 0.3_8_6_7, 0.5_0_7_8]  )

      assert np.abs(image_slice.flatten() - expected_slice  ).max() < 1E-3


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[Any]      					=       torch_device in ["cpu", "mps"]

      self._test_attention_slicing_forward_pass(test_max_difference=_UpperCamelCase  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Dict      					=       torch_device in ["cpu", "mps"]

      self._test_inference_batch_single_identical(test_max_difference=_UpperCamelCase  )






   @unittest.skipIf(
       torch_device != "cuda" or not is_xformers_available()      ,    reason="XFormers attention is only available with CUDA and `xformers` installed"      ,    )
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      self._test_xformers_attention_forwardGenerator_pass(test_max_difference=_UpperCamelCase  )




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


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





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


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Any      					=       load_image(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png"  )

      _lowercase      :				Any      					=       load_numpy(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/stable_unclip_2_1_l_img2img_anime_turtle_fp16.npy"  )

      _lowercase      :				List[str]      					=       StableUnCLIPImgaImgPipeline.from_pretrained(
          "fusing/stable-unclip-2-1-l-img2img"      ,    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()

      _lowercase      :				int      					=       torch.Generator(device="cpu"  ).manual_seed(0  )
      _lowercase      :				List[Any]      					=       pipe(_UpperCamelCase      ,    "anime turle"      ,    generator=_UpperCamelCase      ,    output_type="np"  )

      _lowercase      :				str      					=       output.images[0]

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

      assert_mean_pixel_difference(_UpperCamelCase      ,    _UpperCamelCase  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Optional[int]      					=       load_image(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png"  )

      _lowercase      :				Any      					=       load_numpy(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/stable_unclip_2_1_h_img2img_anime_turtle_fp16.npy"  )

      _lowercase      :				Any      					=       StableUnCLIPImgaImgPipeline.from_pretrained(
          "fusing/stable-unclip-2-1-h-img2img"      ,    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()

      _lowercase      :				Optional[int]      					=       torch.Generator(device="cpu"  ).manual_seed(0  )
      _lowercase      :				Any      					=       pipe(_UpperCamelCase      ,    "anime turle"      ,    generator=_UpperCamelCase      ,    output_type="np"  )

      _lowercase      :				Tuple      					=       output.images[0]

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

      assert_mean_pixel_difference(_UpperCamelCase      ,    _UpperCamelCase  )






   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				List[str]      					=       load_image(
          "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/turtle.png"  )

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

      _lowercase      :				Optional[Any]      					=       StableUnCLIPImgaImgPipeline.from_pretrained(
          "fusing/stable-unclip-2-1-h-img2img"      ,    torch_dtype=torch.floataa  )
      _lowercase      :				Tuple      					=       pipe.to(_UpperCamelCase  )
      pipe.set_progress_bar_config(disable=_UpperCamelCase  )
      pipe.enable_attention_slicing()
      pipe.enable_sequential_cpu_offload()

      _lowercase      :				Optional[int]      					=       pipe(
          _UpperCamelCase      ,    "anime turtle"      ,    num_inference_steps=2      ,    output_type="np"      ,    )

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






