




'''simple docstring'''





import json
import os
from functools import lru_cache
from typing import List, Optional, Tuple

import regex as re

from ...tokenization_utils import AddedToken, PreTrainedTokenizer
from ...utils import logging


a		:	str       =      logging.get_logger(__name__)


a		:	List[Any]       =      {'''vocab_file''': '''vocab.json''', '''merges_file''': '''merges.txt'''}

# See all MVP models at https://huggingface.co/models?filter=mvp
a		:	List[Any]       =      {
    '''vocab_file''': {
        '''RUCAIBox/mvp''': '''https://huggingface.co/RUCAIBox/mvp/resolve/main/vocab.json''',
    },
    '''added_tokens.json''': {
        '''RUCAIBox/mvp''': '''https://huggingface.co/RUCAIBox/mvp/resolve/main/added_tokens.json''',
    },
    '''merges_file''': {
        '''RUCAIBox/mvp''': '''https://huggingface.co/RUCAIBox/mvp/resolve/main/merges.txt''',
    },
}

a		:	Dict       =      {
    '''RUCAIBox/mvp''': 1_0_2_4,
}





@lru_cache()
def UpperCAmelCase    (       ):
    _a				:							str							       =      (
        list(range(ord("""!"""						)   ,	ord("""~"""						) + 1						)						) + list(range(ord("""¡"""						)   ,	ord("""¬"""						) + 1						)						) + list(range(ord("""®"""						)   ,	ord("""ÿ"""						) + 1						)						)
    )
    _a				:							str							       =      bs[:]
    _a				:							Dict							       =      0
    for b in range(2**8						):
        if b not in bs:
            bs.append(UpperCAmelCase_						)
            cs.append(2**8 + n						)
            n += 1
    _a				:							Tuple							       =      [chr(UpperCAmelCase_						) for n in cs]
    return dict(zip(UpperCAmelCase_   ,	UpperCAmelCase_						)						)





def UpperCAmelCase    (       UpperCAmelCase_						):
    _a				:							str							       =      set()
    _a				:							Any							       =      word[0]
    for char in word[1:]:
        pairs.add((prev_char, char)						)
        _a				:							List[str]							       =      char
    return pairs





class      UpperCamelCase       (	snake_case__       ):
  a     :Union[str, Any]          =					VOCAB_FILES_NAMES
  a     :Union[str, Any]          =					PRETRAINED_VOCAB_FILES_MAP
  a     :Union[str, Any]          =					PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
  a     :Optional[Any]          =					['input_ids', 'attention_mask']



  def __init__(			self		,     __lowerCAmelCase		,     __lowerCAmelCase		,     __lowerCAmelCase="replace"		,     __lowerCAmelCase="<s>"		,     __lowerCAmelCase="</s>"		,     __lowerCAmelCase="</s>"		,     __lowerCAmelCase="<s>"		,     __lowerCAmelCase="<unk>"		,     __lowerCAmelCase="<pad>"		,     __lowerCAmelCase="<mask>"		,     __lowerCAmelCase=False		,     **__lowerCAmelCase		,     ):







      '''simple docstring'''


      _a				:							int							       =      AddedToken(__lowerCAmelCase		,     lstrip=__lowerCAmelCase		,     rstrip=__lowerCAmelCase ) if isinstance(__lowerCAmelCase		,     __lowerCAmelCase ) else bos_token
      _a				:							Tuple							       =      AddedToken(__lowerCAmelCase		,     lstrip=__lowerCAmelCase		,     rstrip=__lowerCAmelCase ) if isinstance(__lowerCAmelCase		,     __lowerCAmelCase ) else eos_token
      _a				:							Tuple							       =      AddedToken(__lowerCAmelCase		,     lstrip=__lowerCAmelCase		,     rstrip=__lowerCAmelCase ) if isinstance(__lowerCAmelCase		,     __lowerCAmelCase ) else sep_token
      _a				:							Tuple							       =      AddedToken(__lowerCAmelCase		,     lstrip=__lowerCAmelCase		,     rstrip=__lowerCAmelCase ) if isinstance(__lowerCAmelCase		,     __lowerCAmelCase ) else cls_token
      _a				:							int							       =      AddedToken(__lowerCAmelCase		,     lstrip=__lowerCAmelCase		,     rstrip=__lowerCAmelCase ) if isinstance(__lowerCAmelCase		,     __lowerCAmelCase ) else unk_token
      _a				:							List[Any]							       =      AddedToken(__lowerCAmelCase		,     lstrip=__lowerCAmelCase		,     rstrip=__lowerCAmelCase ) if isinstance(__lowerCAmelCase		,     __lowerCAmelCase ) else pad_token

      # Mask token behave like a normal word, i.e. include the space before it
      _a				:							Dict							       =      AddedToken(__lowerCAmelCase		,     lstrip=__lowerCAmelCase		,     rstrip=__lowerCAmelCase ) if isinstance(__lowerCAmelCase		,     __lowerCAmelCase ) else mask_token

      super().__init__(
          errors=__lowerCAmelCase		,     bos_token=__lowerCAmelCase		,     eos_token=__lowerCAmelCase		,     unk_token=__lowerCAmelCase		,     sep_token=__lowerCAmelCase		,     cls_token=__lowerCAmelCase		,     pad_token=__lowerCAmelCase		,     mask_token=__lowerCAmelCase		,     add_prefix_space=__lowerCAmelCase		,     **__lowerCAmelCase		,     )
      with open(__lowerCAmelCase		,     encoding="""utf-8""" ) as vocab_handle:
          _a				:							Optional[Any]							       =      json.load(__lowerCAmelCase )
      _a				:							int							       =      {v: k for k, v in self.encoder.items()}
      _a				:							Union[str, Any]							       =      errors  # how to handle errors in decoding
      _a				:							List[str]							       =      bytes_to_unicode()
      _a				:							Optional[Any]							       =      {v: k for k, v in self.byte_encoder.items()}
      with open(__lowerCAmelCase		,     encoding="""utf-8""" ) as merges_handle:
          _a				:							List[Any]							       =      merges_handle.read().split("""\n""" )[1:-1]
      _a				:							Tuple							       =      [tuple(merge.split() ) for merge in bpe_merges]
      _a				:							Tuple							       =      dict(zip(__lowerCAmelCase		,     range(len(__lowerCAmelCase ) ) ) )
      _a				:							Optional[Any]							       =      {}
      _a				:							Tuple							       =      add_prefix_space

      # Should have added re.IGNORECASE so BPE merges can happen for capitalized versions of contractions
      _a				:							List[str]							       =      re.compile(R"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+""" )



  @property
  def     a_							(			self ):







      '''simple docstring'''


      return len(self.encoder )



  def     a_							(			self ):







      '''simple docstring'''


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



  def     a_							(			self		,     __lowerCAmelCase ):







      '''simple docstring'''


      if token in self.cache:
          return self.cache[token]
      _a				:							List[Any]							       =      tuple(__lowerCAmelCase )
      _a				:							Any							       =      get_pairs(__lowerCAmelCase )

      if not pairs:
          return token

      while True:
          _a				:							List[str]							       =      min(__lowerCAmelCase		,     key=lambda __lowerCAmelCase : self.bpe_ranks.get(__lowerCAmelCase		,     float("""inf""" ) ) )
          if bigram not in self.bpe_ranks:
              break
          _a       , _a				:							Optional[int]							       =      bigram
          _a				:							int							       =      []
          _a				:							List[Any]							       =      0
          while i < len(__lowerCAmelCase ):
              try:
                  _a				:							Optional[int]							       =      word.index(__lowerCAmelCase		,     __lowerCAmelCase )
              except ValueError:
                  new_word.extend(word[i:] )
                  break
              else:
                  new_word.extend(word[i:j] )
                  _a				:							Any							       =      j

              if word[i] == first and i < len(__lowerCAmelCase ) - 1 and word[i + 1] == second:
                  new_word.append(first + second )
                  i += 2
              else:
                  new_word.append(word[i] )
                  i += 1
          _a				:							List[str]							       =      tuple(__lowerCAmelCase )
          _a				:							List[str]							       =      new_word
          if len(__lowerCAmelCase ) == 1:
              break
          else:
              _a				:							Union[str, Any]							       =      get_pairs(__lowerCAmelCase )
      _a				:							Dict							       =      """ """.join(__lowerCAmelCase )
      _a				:							int							       =      word
      return word



  def     a_							(			self		,     __lowerCAmelCase ):







      '''simple docstring'''


      _a				:							Optional[Any]							       =      []
      for token in re.findall(self.pat		,     __lowerCAmelCase ):
          _a				:							Any							       =      """""".join(
              self.byte_encoder[b] for b in token.encode("""utf-8""" ) )  # Maps all our bytes to unicode strings, avoiding control tokens of the BPE (spaces in our case)
          bpe_tokens.extend(bpe_token for bpe_token in self.bpe(__lowerCAmelCase ).split(""" """ ) )
      return bpe_tokens



  def     a_							(			self		,     __lowerCAmelCase ):







      '''simple docstring'''


      return self.encoder.get(__lowerCAmelCase		,     self.encoder.get(self.unk_token ) )



  def     a_							(			self		,     __lowerCAmelCase ):







      '''simple docstring'''


      return self.decoder.get(__lowerCAmelCase )



  def     a_							(			self		,     __lowerCAmelCase ):







      '''simple docstring'''


      _a				:							str							       =      """""".join(__lowerCAmelCase )
      _a				:							List[Any]							       =      bytearray([self.byte_decoder[c] for c in text] ).decode("""utf-8"""		,     errors=self.errors )
      return text



  def     a_							(			self		,     __lowerCAmelCase		,     __lowerCAmelCase = None ):







      '''simple docstring'''


      if not os.path.isdir(__lowerCAmelCase ):
          logger.error(f'''Vocabulary path ({save_directory}) should be a directory''' )
          return
      _a				:							Optional[int]							       =      os.path.join(
          __lowerCAmelCase		,     (filename_prefix + """-""" if filename_prefix else """""") + VOCAB_FILES_NAMES["""vocab_file"""] )
      _a				:							Optional[int]							       =      os.path.join(
          __lowerCAmelCase		,     (filename_prefix + """-""" if filename_prefix else """""") + VOCAB_FILES_NAMES["""merges_file"""] )

      with open(__lowerCAmelCase		,     """w"""		,     encoding="""utf-8""" ) as f:
          f.write(json.dumps(self.encoder		,     indent=2		,     sort_keys=__lowerCAmelCase		,     ensure_ascii=__lowerCAmelCase ) + """\n""" )

      _a				:							List[Any]							       =      0
      with open(__lowerCAmelCase		,     """w"""		,     encoding="""utf-8""" ) as writer:
          writer.write("""#version: 0.2\n""" )
          for bpe_tokens, token_index in sorted(self.bpe_ranks.items()		,     key=lambda __lowerCAmelCase : kv[1] ):
              if index != token_index:
                  logger.warning(
                      f'''Saving vocabulary to {merge_file}: BPE merge indices are not consecutive.'''
                      """ Please check that the tokenizer is not corrupted!""" )
                  _a				:							List[Any]							       =      token_index
              writer.write(""" """.join(__lowerCAmelCase ) + """\n""" )
              index += 1

      return vocab_file, merge_file



  def     a_							(			self		,     __lowerCAmelCase		,     __lowerCAmelCase = None ):







      '''simple docstring'''


      if token_ids_a is None:
          return [self.cls_token_id] + token_ids_a + [self.sep_token_id]
      _a				:							int							       =      [self.cls_token_id]
      _a				:							str							       =      [self.sep_token_id]
      return cls + token_ids_a + sep + sep + token_ids_a + sep



  def     a_							(			self		,     __lowerCAmelCase		,     __lowerCAmelCase = None		,     __lowerCAmelCase = False ):







      '''simple docstring'''


      if already_has_special_tokens:
          return super().get_special_tokens_mask(
              token_ids_a=__lowerCAmelCase		,     token_ids_a=__lowerCAmelCase		,     already_has_special_tokens=__lowerCAmelCase )

      if token_ids_a is None:
          return [1] + ([0] * len(__lowerCAmelCase )) + [1]
      return [1] + ([0] * len(__lowerCAmelCase )) + [1, 1] + ([0] * len(__lowerCAmelCase )) + [1]



  def     a_							(			self		,     __lowerCAmelCase		,     __lowerCAmelCase = None ):







      '''simple docstring'''


      _a				:							str							       =      [self.sep_token_id]
      _a				:							int							       =      [self.cls_token_id]

      if token_ids_a is None:
          return len(cls + token_ids_a + sep ) * [0]
      return len(cls + token_ids_a + sep + sep + token_ids_a + sep ) * [0]



  def     a_							(			self		,     __lowerCAmelCase		,     __lowerCAmelCase=False		,     **__lowerCAmelCase ):







      '''simple docstring'''


      _a				:							Any							       =      kwargs.pop("""add_prefix_space"""		,     self.add_prefix_space )
      if (is_split_into_words or add_prefix_space) and (len(__lowerCAmelCase ) > 0 and not text[0].isspace()):
          _a				:							List[str]							       =      """ """ + text
      return (text, kwargs)




import gc
import unittest

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

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    EulerAncestralDiscreteScheduler,
    PNDMScheduler,
    StableDiffusionModelEditingPipeline,
    UNetaDConditionModel,
)
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu, skip_mps

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


enable_full_determinism()






@skip_mps
class     a_       (			a__				,    a__				,    a__				,    unittest.TestCase							):



       """simple docstring"""
       __SCREAMING_SNAKE_CASE       :					List[Any]						=  StableDiffusionModelEditingPipeline
       __SCREAMING_SNAKE_CASE       :					Optional[int]						=  TEXT_TO_IMAGE_PARAMS
       __SCREAMING_SNAKE_CASE       :					int						=  TEXT_TO_IMAGE_BATCH_PARAMS
       __SCREAMING_SNAKE_CASE       :					Any						=  TEXT_TO_IMAGE_IMAGE_PARAMS
       __SCREAMING_SNAKE_CASE       :					List[Any]						=  TEXT_TO_IMAGE_IMAGE_PARAMS






       def 	__lowerCAmelCase     (		self   )					->int:
           torch.manual_seed(0   )
           SCREAMING_SNAKE_CASE				:				Dict				      = UNetaDConditionModel(
               block_out_channels=(32, 64)				,       layers_per_block=2				,       sample_size=32				,       in_channels=4				,       out_channels=4				,       down_block_types=('''DownBlock2D''', '''CrossAttnDownBlock2D''')				,       up_block_types=('''CrossAttnUpBlock2D''', '''UpBlock2D''')				,       cross_attention_dim=32				,       )
           SCREAMING_SNAKE_CASE				:				Dict				      = DDIMScheduler()
           torch.manual_seed(0   )
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = AutoencoderKL(
               block_out_channels=[32, 64]				,       in_channels=3				,       out_channels=3				,       down_block_types=['''DownEncoderBlock2D''', '''DownEncoderBlock2D''']				,       up_block_types=['''UpDecoderBlock2D''', '''UpDecoderBlock2D''']				,       latent_channels=4				,       )
           torch.manual_seed(0   )
           SCREAMING_SNAKE_CASE				:				List[str]				      = 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				,       )
           SCREAMING_SNAKE_CASE				:				Dict				      = CLIPTextModel(_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Tuple				      = CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip'''   )

           SCREAMING_SNAKE_CASE				:				List[Any]				      = {
               '''unet''': unet,
               '''scheduler''': scheduler,
               '''vae''': vae,
               '''text_encoder''': text_encoder,
               '''tokenizer''': tokenizer,
               '''safety_checker''': None,
               '''feature_extractor''': None,
           }
           return components






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase				,       _lowerCamelCase=0   )					->Optional[int]:
           SCREAMING_SNAKE_CASE				:				Any				      = torch.manual_seed(_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = {
               '''prompt''': '''A field of roses''',
               '''generator''': generator,
               # Setting height and width to None to prevent OOMs on CPU.
               '''height''': None,
               '''width''': None,
               '''num_inference_steps''': 2,
               '''guidance_scale''': 6.0,
               '''output_type''': '''numpy''',
           }
           return inputs






       def 	__lowerCAmelCase     (		self   )					->Optional[int]:
           SCREAMING_SNAKE_CASE				:				Tuple				      = '''cpu'''  # ensure determinism for the device-dependent torch.Generator
           SCREAMING_SNAKE_CASE				:				Any				      = self.get_dummy_components()
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = StableDiffusionModelEditingPipeline(**_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				List[Any]				      = sd_pipe.to(_lowerCamelCase   )
           sd_pipe.set_progress_bar_config(disable=_lowerCamelCase   )

           SCREAMING_SNAKE_CASE				:				Tuple				      = self.get_dummy_inputs(_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Tuple				      = sd_pipe(**_lowerCamelCase   ).images
           SCREAMING_SNAKE_CASE				:				Any				      = image[0, -3:, -3:, -1]
           assert image.shape == (1, 64, 64, 3)

           SCREAMING_SNAKE_CASE				:				List[str]				      = np.array([0.4_7_5_5, 0.5_1_3_2, 0.4_9_7_6, 0.3_9_0_4, 0.3_5_5_4, 0.4_7_6_5, 0.5_1_3_9, 0.5_1_5_8, 0.4_8_8_9]   )

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






       def 	__lowerCAmelCase     (		self   )					->List[Any]:
           SCREAMING_SNAKE_CASE				:				Dict				      = '''cpu'''  # ensure determinism for the device-dependent torch.Generator
           SCREAMING_SNAKE_CASE				:				Tuple				      = self.get_dummy_components()
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = StableDiffusionModelEditingPipeline(**_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				str				      = sd_pipe.to(_lowerCamelCase   )
           sd_pipe.set_progress_bar_config(disable=_lowerCamelCase   )

           SCREAMING_SNAKE_CASE				:				Any				      = self.get_dummy_inputs(_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				List[str]				      = '''french fries'''
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = sd_pipe(**_lowerCamelCase				,       negative_prompt=_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Any				      = output.images
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = image[0, -3:, -3:, -1]

           assert image.shape == (1, 64, 64, 3)

           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = np.array([0.4_9_9_2, 0.5_1_0_1, 0.5_0_0_4, 0.3_9_4_9, 0.3_6_0_4, 0.4_7_3_5, 0.5_2_1_6, 0.5_2_0_4, 0.4_9_1_3]   )

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






       def 	__lowerCAmelCase     (		self   )					->Union[str, Any]:
           SCREAMING_SNAKE_CASE				:				List[str]				      = '''cpu'''  # ensure determinism for the device-dependent torch.Generator
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = self.get_dummy_components()
           SCREAMING_SNAKE_CASE				:				List[Any]				      = EulerAncestralDiscreteScheduler(
               beta_start=0.0_0_0_8_5				,       beta_end=0.0_1_2				,       beta_schedule='''scaled_linear'''   )
           SCREAMING_SNAKE_CASE				:				List[Any]				      = StableDiffusionModelEditingPipeline(**_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = sd_pipe.to(_lowerCamelCase   )
           sd_pipe.set_progress_bar_config(disable=_lowerCamelCase   )

           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = self.get_dummy_inputs(_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = sd_pipe(**_lowerCamelCase   ).images
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = image[0, -3:, -3:, -1]

           assert image.shape == (1, 64, 64, 3)

           SCREAMING_SNAKE_CASE				:				str				      = np.array([0.4_7_4_7, 0.5_3_7_2, 0.4_7_7_9, 0.4_9_8_2, 0.5_5_4_3, 0.4_8_1_6, 0.5_2_3_8, 0.4_9_0_4, 0.5_0_2_7]   )

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






       def 	__lowerCAmelCase     (		self   )					->Any:
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = '''cpu'''  # ensure determinism for the device-dependent torch.Generator
           SCREAMING_SNAKE_CASE				:				List[Any]				      = self.get_dummy_components()
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = PNDMScheduler()
           SCREAMING_SNAKE_CASE				:				Tuple				      = StableDiffusionModelEditingPipeline(**_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = sd_pipe.to(_lowerCamelCase   )
           sd_pipe.set_progress_bar_config(disable=_lowerCamelCase   )

           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = self.get_dummy_inputs(_lowerCamelCase   )
           # the pipeline does not expect pndm so test if it raises error.
           with self.assertRaises(_lowerCamelCase   ):
               SCREAMING_SNAKE_CASE				:				Dict				      = sd_pipe(**_lowerCamelCase   ).images






       def 	__lowerCAmelCase     (		self   )					->Dict:
           super().test_inference_batch_single_identical(expected_max_diff=5e-3   )






       def 	__lowerCAmelCase     (		self   )					->List[Any]:
           super().test_attention_slicing_forward_pass(expected_max_diff=5e-3   )






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



       """simple docstring"""






       def 	__lowerCAmelCase     (		self   )					->Dict:
           super().tearDown()
           gc.collect()
           torch.cuda.empty_cache()






       def 	__lowerCAmelCase     (		self				,       _lowerCamelCase=0   )					->Dict:
           SCREAMING_SNAKE_CASE				:				str				      = torch.manual_seed(_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				List[Any]				      = {
               '''prompt''': '''A field of roses''',
               '''generator''': generator,
               '''num_inference_steps''': 3,
               '''guidance_scale''': 7.5,
               '''output_type''': '''numpy''',
           }
           return inputs






       def 	__lowerCAmelCase     (		self   )					->List[str]:
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = '''CompVis/stable-diffusion-v1-4'''
           SCREAMING_SNAKE_CASE				:				List[str]				      = StableDiffusionModelEditingPipeline.from_pretrained(_lowerCamelCase				,       safety_checker=_lowerCamelCase   )
           pipe.to(_lowerCamelCase   )
           pipe.set_progress_bar_config(disable=_lowerCamelCase   )
           pipe.enable_attention_slicing()

           SCREAMING_SNAKE_CASE				:				Any				      = self.get_inputs()
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = pipe(**_lowerCamelCase   ).images
           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = image[0, -3:, -3:, -1].flatten()

           assert image.shape == (1, 512, 512, 3)

           SCREAMING_SNAKE_CASE				:				str				      = np.array(
               [0.6_7_4_9_4_9_6, 0.6_3_8_6_4_5_3, 0.5_1_4_4_3_2_6_7, 0.6_6_0_9_4_9_0_5, 0.6_1_9_2_1_2_1_5, 0.5_4_9_1_3_3_2, 0.5_7_4_4_4_1_7, 0.5_8_0_7_5_1_0_6, 0.5_1_7_4_6_5_8]   )

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

           # make sure image changes after editing
           pipe.edit_model('''A pack of roses'''				,       '''A pack of blue roses'''   )

           SCREAMING_SNAKE_CASE				:				Any				      = pipe(**_lowerCamelCase   ).images
           SCREAMING_SNAKE_CASE				:				List[str]				      = image[0, -3:, -3:, -1].flatten()

           assert image.shape == (1, 512, 512, 3)

           assert np.abs(expected_slice - image_slice   ).max() > 1e-1






       def 	__lowerCAmelCase     (		self   )					->str:
           torch.cuda.empty_cache()
           torch.cuda.reset_max_memory_allocated()
           torch.cuda.reset_peak_memory_stats()

           SCREAMING_SNAKE_CASE				:				Optional[int]				      = '''CompVis/stable-diffusion-v1-4'''
           SCREAMING_SNAKE_CASE				:				Any				      = DDIMScheduler.from_pretrained(_lowerCamelCase				,       subfolder='''scheduler'''   )
           SCREAMING_SNAKE_CASE				:				Optional[int]				      = StableDiffusionModelEditingPipeline.from_pretrained(
               _lowerCamelCase				,       scheduler=_lowerCamelCase				,       safety_checker=_lowerCamelCase   )
           SCREAMING_SNAKE_CASE				:				Dict				      = pipe.to(_lowerCamelCase   )
           pipe.set_progress_bar_config(disable=_lowerCamelCase   )
           pipe.enable_attention_slicing(1   )
           pipe.enable_sequential_cpu_offload()

           SCREAMING_SNAKE_CASE				:				List[Any]				      = self.get_inputs()
           SCREAMING_SNAKE_CASE				:				Union[str, Any]				      = pipe(**_lowerCamelCase   )

           SCREAMING_SNAKE_CASE				:				Optional[Any]				      = torch.cuda.max_memory_allocated()
           # make sure that less than 4.4 GB is allocated
           assert mem_bytes < 4.4 * 10**9
