

import os
import unicodedata
from shutil import copyfile
from typing import Any, Dict, List, Optional, Tuple

import sentencepiece as spm

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


_SCREAMING_SNAKE_CASE  :						str         =    logging.get_logger(__name__)

_SCREAMING_SNAKE_CASE  :						List[Any]         =    {'''vocab_file''': '''spiece.model'''}

_SCREAMING_SNAKE_CASE  :						int         =    {
    '''vocab_file''': {
        '''TsinghuaAI/CPM-Generate''': '''https://huggingface.co/TsinghuaAI/CPM-Generate/resolve/main/spiece.model''',
    }
}






class  UpperCAmelCase__	( A__ ):






  """simple docstring"""


  def __init__(							self		:	Any			,     __lowerCamelCase		:	Any			,     __lowerCamelCase		:	Tuple=False			,     __lowerCamelCase		:	Any=True			,     __lowerCamelCase		:	List[Any]=False			,     __lowerCamelCase		:	str="<s>"			,     __lowerCamelCase		:	Optional[Any]="</s>"			,     __lowerCamelCase		:	Optional[int]="<unk>"			,     __lowerCamelCase		:	List[Any]="<sep>"			,     __lowerCamelCase		:	Tuple="<pad>"			,     __lowerCamelCase		:	List[Any]="<cls>"			,     __lowerCamelCase		:	List[Any]="<mask>"			,     __lowerCamelCase		:	List[Any]=["<eop>", "<eod>"]			,     __lowerCamelCase		:	Optional[Dict[str, Any]] = None			,     **__lowerCamelCase		:	int			,     )	->							None:
       SCREAMING_SNAKE_CASE__					=					AddedToken(__lowerCamelCase			,     lstrip=__lowerCamelCase			,     rstrip=__lowerCamelCase      ) if isinstance(__lowerCamelCase			,     __lowerCamelCase      ) else mask_token

       SCREAMING_SNAKE_CASE__					=					{} if sp_model_kwargs is None else sp_model_kwargs

       super().__init__(
           do_lower_case=__lowerCamelCase			,     remove_space=__lowerCamelCase			,     keep_accents=__lowerCamelCase			,     bos_token=__lowerCamelCase			,     eos_token=__lowerCamelCase			,     unk_token=__lowerCamelCase			,     sep_token=__lowerCamelCase			,     pad_token=__lowerCamelCase			,     cls_token=__lowerCamelCase			,     mask_token=__lowerCamelCase			,     additional_special_tokens=__lowerCamelCase			,     sp_model_kwargs=self.sp_model_kwargs			,     **__lowerCamelCase			,     )

       SCREAMING_SNAKE_CASE__					=					3

       SCREAMING_SNAKE_CASE__					=					do_lower_case
       SCREAMING_SNAKE_CASE__					=					remove_space
       SCREAMING_SNAKE_CASE__					=					keep_accents
       SCREAMING_SNAKE_CASE__					=					vocab_file

       SCREAMING_SNAKE_CASE__					=					spm.SentencePieceProcessor(**self.sp_model_kwargs      )
       self.sp_model.Load(__lowerCamelCase      )

       try:
            import jieba
       except ModuleNotFoundError as error:
            raise error.__class__(
                '''You need to install jieba to use CpmTokenizer or CpmTokenizerFast. '''
                '''See https://pypi.org/project/jieba/ for installation.'''      )
       SCREAMING_SNAKE_CASE__					=					jieba
       SCREAMING_SNAKE_CASE__					=					str.maketrans(''' \n'''			,     '''\u2582\u2583'''      )






  @property
  # Copied from transformers.models.xlnet.tokenization_xlnet.XLNetTokenizer.vocab_size
  def    lowercase_	(							self		:	List[Any]      )	->							Optional[Any]:
       return len(self.sp_model      )






  def    lowercase_	(							self		:	Union[str, Any]      )	->							int:
       SCREAMING_SNAKE_CASE__					=					{self.convert_ids_to_tokens(__lowerCamelCase      ): i for i in range(self.vocab_size      )}
       vocab.update(self.added_tokens_encoder      )
       return vocab






  def __getstate__(							self		:	Tuple      )	->							str:
       SCREAMING_SNAKE_CASE__					=					self.__dict__.copy()
       SCREAMING_SNAKE_CASE__					=					None
       return state






  def __setstate__(							self		:	Union[str, Any]			,     __lowerCamelCase		:	Any      )	->							Tuple:
       SCREAMING_SNAKE_CASE__					=					d

       # for backward compatibility
       if not hasattr(self			,     '''sp_model_kwargs'''      ):
            SCREAMING_SNAKE_CASE__					=					{}

       SCREAMING_SNAKE_CASE__					=					spm.SentencePieceProcessor(**self.sp_model_kwargs      )
       self.sp_model.Load(self.vocab_file      )






  def    lowercase_	(							self		:	Any			,     __lowerCamelCase		:	int      )	->							List[Any]:
       if self.remove_space:
            SCREAMING_SNAKE_CASE__					=					''' '''.join(inputs.strip().split()      )
       else:
            SCREAMING_SNAKE_CASE__					=					inputs
       SCREAMING_SNAKE_CASE__					=					outputs.replace('''``'''			,     '''"'''      ).replace('''\'\''''			,     '''"'''      )

       if not self.keep_accents:
            SCREAMING_SNAKE_CASE__					=					unicodedata.normalize('''NFKD'''			,     __lowerCamelCase      )
            SCREAMING_SNAKE_CASE__					=					''''''.join([c for c in outputs if not unicodedata.combining(__lowerCamelCase      )]      )
       if self.do_lower_case:
            SCREAMING_SNAKE_CASE__					=					outputs.lower()

       return outputs






  def    lowercase_	(							self		:	Dict			,     __lowerCamelCase		:	str      )	->							List[str]:
       SCREAMING_SNAKE_CASE__					=					self.preprocess_text(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					self.sp_model.encode(__lowerCamelCase			,     out_type=__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					[]
       for piece in pieces:
            if len(__lowerCamelCase      ) > 1 and piece[-1] == str(''','''      ) and piece[-2].isdigit():
                 SCREAMING_SNAKE_CASE__					=					self.sp_model.EncodeAsPieces(piece[:-1].replace(__lowerCamelCase			,     ''''''      )      )
                 if piece[0] != SPIECE_UNDERLINE and cur_pieces[0][0] == SPIECE_UNDERLINE:
                      if len(cur_pieces[0]      ) == 1:
                           SCREAMING_SNAKE_CASE__					=					cur_pieces[1:]
                      else:
                           SCREAMING_SNAKE_CASE__					=					cur_pieces[0][1:]
                 cur_pieces.append(piece[-1]      )
                 new_pieces.extend(__lowerCamelCase      )
            else:
                 new_pieces.append(__lowerCamelCase      )

       return new_pieces






  def    lowercase_	(							self		:	int			,     __lowerCamelCase		:	Optional[int]      )	->							Optional[Any]:
       return self.sp_model.PieceToId(__lowerCamelCase      )






  def    lowercase_	(							self		:	List[Any]			,     __lowerCamelCase		:	Any      )	->							List[str]:
       return self.sp_model.IdToPiece(__lowerCamelCase      )






  def    lowercase_	(							self		:	Optional[int]			,     __lowerCamelCase		:	List[Any]      )	->							Optional[int]:
       SCREAMING_SNAKE_CASE__					=					''''''.join(__lowerCamelCase      ).replace(__lowerCamelCase			,     ''' '''      ).strip()
       return out_string






  def    lowercase_	(							self		:	int			,     __lowerCamelCase		:	List[int]			,     __lowerCamelCase		:	Optional[List[int]] = None      )	->							List[int]:
       SCREAMING_SNAKE_CASE__					=					[self.sep_token_id]
       SCREAMING_SNAKE_CASE__					=					[self.cls_token_id]
       if token_ids_a is None:
            return token_ids_a + sep + cls
       return token_ids_a + sep + token_ids_a + sep + cls






  def    lowercase_	(							self		:	Union[str, Any]			,     __lowerCamelCase		:	List[int]			,     __lowerCamelCase		:	Optional[List[int]] = None			,     __lowerCamelCase		:	bool = False      )	->							List[int]:

       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 not None:
            return ([0] * len(__lowerCamelCase      )) + [1] + ([0] * len(__lowerCamelCase      )) + [1, 1]
       return ([0] * len(__lowerCamelCase      )) + [1, 1]






  def    lowercase_	(							self		:	List[Any]			,     __lowerCamelCase		:	List[int]			,     __lowerCamelCase		:	Optional[List[int]] = None      )	->							List[int]:
       SCREAMING_SNAKE_CASE__					=					[self.sep_token_id]
       SCREAMING_SNAKE_CASE__					=					[2]

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






  def    lowercase_	(							self		:	Any			,     __lowerCamelCase		:	str			,     __lowerCamelCase		:	Optional[str] = None      )	->							Tuple[str]:
       if not os.path.isdir(__lowerCamelCase      ):
            logger.error(f'''Vocabulary path ({save_directory}) should be a directory'''      )
            return
       SCREAMING_SNAKE_CASE__					=					os.path.join(
           __lowerCamelCase			,     (filename_prefix + '''-''' if filename_prefix else '''''') + VOCAB_FILES_NAMES['''vocab_file''']      )

       if os.path.abspath(self.vocab_file      ) != os.path.abspath(__lowerCamelCase      ) and os.path.isfile(self.vocab_file      ):
            copyfile(self.vocab_file			,     __lowerCamelCase      )
       elif not os.path.isfile(self.vocab_file      ):
            with open(__lowerCamelCase			,     '''wb'''      ) as fi:
                 SCREAMING_SNAKE_CASE__					=					self.sp_model.serialized_model_proto()
                 fi.write(__lowerCamelCase      )

       return (out_vocab_file,)







  def    lowercase_	(							self		:	List[Any]			,     *__lowerCamelCase		:	List[Any]			,     **__lowerCamelCase		:	Optional[Any]      )	->							List[Any]:
       SCREAMING_SNAKE_CASE__					=					super()._decode(*__lowerCamelCase			,     **__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					text.replace(''' '''			,     ''''''      ).replace('''\u2582'''			,     ''' '''      ).replace('''\u2583'''			,     '''\n'''      )
       return text






import gc
import unittest

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

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    EulerAncestralDiscreteScheduler,
    LMSDiscreteScheduler,
    PNDMScheduler,
    StableDiffusionPanoramaPipeline,
    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 PipelineLatentTesterMixin, PipelineTesterMixin


enable_full_determinism()






@skip_mps
class  UpperCAmelCase__	( A__		,  A__		,  unittest.TestCase ):






  """simple docstring"""


  a     =      StableDiffusionPanoramaPipeline
  a     =      TEXT_TO_IMAGE_PARAMS
  a     =      TEXT_TO_IMAGE_BATCH_PARAMS
  a     =      TEXT_TO_IMAGE_IMAGE_PARAMS
  a     =      TEXT_TO_IMAGE_IMAGE_PARAMS






  def    lowercase_	(							self		:	Union[str, Any]      )	->							List[str]:
       torch.manual_seed(0      )
       SCREAMING_SNAKE_CASE__					=					UNetaDConditionModel(
           block_out_channels=(32, 64)			,     layers_per_block=1			,     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__					=					DDIMScheduler()
       torch.manual_seed(0      )
       SCREAMING_SNAKE_CASE__					=					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__					=					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__					=					CLIPTextModel(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip'''      )

       SCREAMING_SNAKE_CASE__					=					{
           '''unet''': unet,
           '''scheduler''': scheduler,
           '''vae''': vae,
           '''text_encoder''': text_encoder,
           '''tokenizer''': tokenizer,
           '''safety_checker''': None,
           '''feature_extractor''': None,
       }
       return components






  def    lowercase_	(							self		:	Union[str, Any]			,     __lowerCamelCase		:	Union[str, Any]			,     __lowerCamelCase		:	List[str]=0      )	->							Any:
       SCREAMING_SNAKE_CASE__					=					torch.manual_seed(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					{
           '''prompt''': '''a photo of the dolomites''',
           '''generator''': generator,
           # Setting height and width to None to prevent OOMs on CPU.
           '''height''': None,
           '''width''': None,
           '''num_inference_steps''': 1,
           '''guidance_scale''': 6.0,
           '''output_type''': '''numpy''',
       }
       return inputs






  def    lowercase_	(							self		:	Optional[int]      )	->							List[str]:
       SCREAMING_SNAKE_CASE__					=					'''cpu'''  # ensure determinism for the device-dependent torch.Generator
       SCREAMING_SNAKE_CASE__					=					self.get_dummy_components()
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline(**__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe.to(__lowerCamelCase      )
       sd_pipe.set_progress_bar_config(disable=__lowerCamelCase      )

       SCREAMING_SNAKE_CASE__					=					self.get_dummy_inputs(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe(**__lowerCamelCase      ).images
       SCREAMING_SNAKE_CASE__					=					image[0, -3:, -3:, -1]
       assert image.shape == (1, 64, 64, 3)

       SCREAMING_SNAKE_CASE__					=					np.array([0.6186, 0.5374, 0.4915, 0.4135, 0.4114, 0.4563, 0.5128, 0.4977, 0.4757]      )

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






  def    lowercase_	(							self		:	Any      )	->							Optional[Any]:
       super().test_inference_batch_consistent(batch_sizes=[1, 2]      )






  def    lowercase_	(							self		:	List[Any]      )	->							List[Any]:
       super().test_inference_batch_single_identical(batch_size=2			,     expected_max_diff=3.25e-3      )






  def    lowercase_	(							self		:	Union[str, Any]      )	->							str:
       SCREAMING_SNAKE_CASE__					=					'''cpu'''  # ensure determinism for the device-dependent torch.Generator
       SCREAMING_SNAKE_CASE__					=					self.get_dummy_components()
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline(**__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe.to(__lowerCamelCase      )
       sd_pipe.set_progress_bar_config(disable=__lowerCamelCase      )

       SCREAMING_SNAKE_CASE__					=					self.get_dummy_inputs(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					'''french fries'''
       SCREAMING_SNAKE_CASE__					=					sd_pipe(**__lowerCamelCase			,     negative_prompt=__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					output.images
       SCREAMING_SNAKE_CASE__					=					image[0, -3:, -3:, -1]

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

       SCREAMING_SNAKE_CASE__					=					np.array([0.6187, 0.5375, 0.4915, 0.4136, 0.4114, 0.4563, 0.5128, 0.4976, 0.4757]      )

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






  def    lowercase_	(							self		:	Tuple      )	->							Dict:
       SCREAMING_SNAKE_CASE__					=					'''cpu'''  # ensure determinism for the device-dependent torch.Generator
       SCREAMING_SNAKE_CASE__					=					self.get_dummy_components()
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline(**__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe.to(__lowerCamelCase      )
       sd_pipe.set_progress_bar_config(disable=__lowerCamelCase      )

       SCREAMING_SNAKE_CASE__					=					self.get_dummy_inputs(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe(**__lowerCamelCase			,     view_batch_size=2      )
       SCREAMING_SNAKE_CASE__					=					output.images
       SCREAMING_SNAKE_CASE__					=					image[0, -3:, -3:, -1]

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

       SCREAMING_SNAKE_CASE__					=					np.array([0.6187, 0.5375, 0.4915, 0.4136, 0.4114, 0.4563, 0.5128, 0.4976, 0.4757]      )

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






  def    lowercase_	(							self		:	Optional[Any]      )	->							Any:
       SCREAMING_SNAKE_CASE__					=					'''cpu'''  # ensure determinism for the device-dependent torch.Generator
       SCREAMING_SNAKE_CASE__					=					self.get_dummy_components()
       SCREAMING_SNAKE_CASE__					=					EulerAncestralDiscreteScheduler(
           beta_start=0.00085			,     beta_end=0.012			,     beta_schedule='''scaled_linear'''      )
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline(**__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe.to(__lowerCamelCase      )
       sd_pipe.set_progress_bar_config(disable=__lowerCamelCase      )

       SCREAMING_SNAKE_CASE__					=					self.get_dummy_inputs(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe(**__lowerCamelCase      ).images
       SCREAMING_SNAKE_CASE__					=					image[0, -3:, -3:, -1]

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

       SCREAMING_SNAKE_CASE__					=					np.array([0.4024, 0.6510, 0.4901, 0.5378, 0.5813, 0.5622, 0.4795, 0.4467, 0.4952]      )

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







  def    lowercase_	(							self		:	Optional[int]      )	->							List[str]:
       SCREAMING_SNAKE_CASE__					=					'''cpu'''  # ensure determinism for the device-dependent torch.Generator
       SCREAMING_SNAKE_CASE__					=					self.get_dummy_components()
       SCREAMING_SNAKE_CASE__					=					PNDMScheduler(
           beta_start=0.00085			,     beta_end=0.012			,     beta_schedule='''scaled_linear'''			,     skip_prk_steps=__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline(**__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe.to(__lowerCamelCase      )
       sd_pipe.set_progress_bar_config(disable=__lowerCamelCase      )

       SCREAMING_SNAKE_CASE__					=					self.get_dummy_inputs(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					sd_pipe(**__lowerCamelCase      ).images
       SCREAMING_SNAKE_CASE__					=					image[0, -3:, -3:, -1]

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

       SCREAMING_SNAKE_CASE__					=					np.array([0.6391, 0.6291, 0.4861, 0.5134, 0.5552, 0.4578, 0.5032, 0.5023, 0.4539]      )

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






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






  """simple docstring"""


  def    lowercase_	(							self		:	Tuple      )	->							str:
       super().tearDown()
       gc.collect()
       torch.cuda.empty_cache()






  def    lowercase_	(							self		:	Any			,     __lowerCamelCase		:	Dict=0      )	->							Dict:
       SCREAMING_SNAKE_CASE__					=					torch.manual_seed(__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					{
           '''prompt''': '''a photo of the dolomites''',
           '''generator''': generator,
           '''num_inference_steps''': 3,
           '''guidance_scale''': 7.5,
           '''output_type''': '''numpy''',
       }
       return inputs






  def    lowercase_	(							self		:	Union[str, Any]      )	->							List[Any]:
       SCREAMING_SNAKE_CASE__					=					'''stabilityai/stable-diffusion-2-base'''
       SCREAMING_SNAKE_CASE__					=					DDIMScheduler.from_pretrained(__lowerCamelCase			,     subfolder='''scheduler'''      )
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline.from_pretrained(__lowerCamelCase			,     scheduler=__lowerCamelCase			,     safety_checker=__lowerCamelCase      )
       pipe.to(__lowerCamelCase      )
       pipe.set_progress_bar_config(disable=__lowerCamelCase      )
       pipe.enable_attention_slicing()

       SCREAMING_SNAKE_CASE__					=					self.get_inputs()
       SCREAMING_SNAKE_CASE__					=					pipe(**__lowerCamelCase      ).images
       SCREAMING_SNAKE_CASE__					=					image[0, -3:, -3:, -1].flatten()

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

       SCREAMING_SNAKE_CASE__					=					np.array(
           [
               0.36968392,
               0.27025372,
               0.32446766,
               0.28379387,
               0.36363274,
               0.30733347,
               0.27100027,
               0.27054125,
               0.25536096,
           ]      )

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






  def    lowercase_	(							self		:	Optional[Any]      )	->							Dict:
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline.from_pretrained(
           '''stabilityai/stable-diffusion-2-base'''			,     safety_checker=__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					LMSDiscreteScheduler.from_config(pipe.scheduler.config      )
       pipe.to(__lowerCamelCase      )
       pipe.set_progress_bar_config(disable=__lowerCamelCase      )
       pipe.enable_attention_slicing()

       SCREAMING_SNAKE_CASE__					=					self.get_inputs()
       SCREAMING_SNAKE_CASE__					=					pipe(**__lowerCamelCase      ).images
       SCREAMING_SNAKE_CASE__					=					image[0, -3:, -3:, -1].flatten()

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

       SCREAMING_SNAKE_CASE__					=					np.array(
           [
               [
                   0.0,
                   0.0,
                   0.0,
                   0.0,
                   0.0,
                   0.0,
                   0.0,
                   0.0,
                   0.0,
               ]
           ]      )

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






  def    lowercase_	(							self		:	List[str]      )	->							List[str]:
       SCREAMING_SNAKE_CASE__					=					0

       def callback_fn(__lowerCamelCase		:	int			,     __lowerCamelCase		:	int			,     __lowerCamelCase		:	torch.FloatTensor      ) -> None:
            SCREAMING_SNAKE_CASE__					=					True
            nonlocal number_of_steps
            number_of_steps += 1
            if step == 1:
                 SCREAMING_SNAKE_CASE__					=					latents.detach().cpu().numpy()
                 assert latents.shape == (1, 4, 64, 256)
                 SCREAMING_SNAKE_CASE__					=					latents[0, -3:, -3:, -1]

                 SCREAMING_SNAKE_CASE__					=					np.array(
                     [
                         0.18681869,
                         0.33907816,
                         0.5361276,
                         0.14432865,
                         -0.02856611,
                         -0.73941123,
                         0.23397987,
                         0.47322682,
                         -0.37823164,
                     ]      )
                 assert np.abs(latents_slice.flatten() - expected_slice      ).max() < 5e-2
            elif step == 2:
                 SCREAMING_SNAKE_CASE__					=					latents.detach().cpu().numpy()
                 assert latents.shape == (1, 4, 64, 256)
                 SCREAMING_SNAKE_CASE__					=					latents[0, -3:, -3:, -1]

                 SCREAMING_SNAKE_CASE__					=					np.array(
                     [
                         0.18539645,
                         0.33987248,
                         0.5378559,
                         0.14437142,
                         -0.02455261,
                         -0.7338317,
                         0.23990755,
                         0.47356272,
                         -0.3786505,
                     ]      )

                 assert np.abs(latents_slice.flatten() - expected_slice      ).max() < 5e-2

       SCREAMING_SNAKE_CASE__					=					False

       SCREAMING_SNAKE_CASE__					=					'''stabilityai/stable-diffusion-2-base'''
       SCREAMING_SNAKE_CASE__					=					DDIMScheduler.from_pretrained(__lowerCamelCase			,     subfolder='''scheduler'''      )
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline.from_pretrained(__lowerCamelCase			,     scheduler=__lowerCamelCase			,     safety_checker=__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					pipe.to(__lowerCamelCase      )
       pipe.set_progress_bar_config(disable=__lowerCamelCase      )
       pipe.enable_attention_slicing()

       SCREAMING_SNAKE_CASE__					=					self.get_inputs()
       pipe(**__lowerCamelCase			,     callback=__lowerCamelCase			,     callback_steps=1      )
       assert callback_fn.has_been_called
       assert number_of_steps == 3







  def    lowercase_	(							self		:	Tuple      )	->							Tuple:
       torch.cuda.empty_cache()
       torch.cuda.reset_max_memory_allocated()
       torch.cuda.reset_peak_memory_stats()

       SCREAMING_SNAKE_CASE__					=					'''stabilityai/stable-diffusion-2-base'''
       SCREAMING_SNAKE_CASE__					=					DDIMScheduler.from_pretrained(__lowerCamelCase			,     subfolder='''scheduler'''      )
       SCREAMING_SNAKE_CASE__					=					StableDiffusionPanoramaPipeline.from_pretrained(__lowerCamelCase			,     scheduler=__lowerCamelCase			,     safety_checker=__lowerCamelCase      )
       SCREAMING_SNAKE_CASE__					=					pipe.to(__lowerCamelCase      )
       pipe.set_progress_bar_config(disable=__lowerCamelCase      )
       pipe.enable_attention_slicing(1      )
       pipe.enable_sequential_cpu_offload()

       SCREAMING_SNAKE_CASE__					=					self.get_inputs()
       SCREAMING_SNAKE_CASE__					=					pipe(**__lowerCamelCase      )

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


