





'''simple docstring'''




import gc
import unittest

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

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    StableDiffusionAttendAndExcitePipeline,
    UNetaDConditionModel,
)
from diffusers.utils import load_numpy, skip_mps, slow
from diffusers.utils.testing_utils import require_torch_gpu

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


lowercase__    :      str						=    False


@skip_mps
class  SCREAMING_SNAKE_CASE    (a__					,		a__					,		a__					,		unittest.TestCase							):
     lowerCAmelCase					=       StableDiffusionAttendAndExcitePipeline
     lowerCAmelCase					=       False
     lowerCAmelCase					=       TEXT_TO_IMAGE_PARAMS
     lowerCAmelCase					=       TEXT_TO_IMAGE_BATCH_PARAMS.union({'''token_indices'''}							)
     lowerCAmelCase					=       TEXT_TO_IMAGE_IMAGE_PARAMS
     lowerCAmelCase					=       TEXT_TO_IMAGE_IMAGE_PARAMS


     @classmethod
     def 							SCREAMING_SNAKE_CASE  (						cls):

          '''simple docstring'''






          super().setUpClass()
          torch.use_deterministic_algorithms(_UpperCAmelCase)


     @classmethod
     def 							SCREAMING_SNAKE_CASE  (						cls):

          '''simple docstring'''






          super().tearDownClass()
          torch.use_deterministic_algorithms(_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          torch.manual_seed(0)
          __A						: Tuple      =       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						,	attention_head_dim=(2, 4)						,	use_linear_projection=_UpperCAmelCase						,	)
          __A						: Optional[Any]      =       DDIMScheduler(
              beta_start=0.00085						,	beta_end=0.012						,	beta_schedule='scaled_linear'						,	clip_sample=_UpperCAmelCase						,	set_alpha_to_one=_UpperCAmelCase						,	)
          torch.manual_seed(0)
          __A						: 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						,	sample_size=128						,	)
          torch.manual_seed(0)
          __A						: List[str]      =       CLIPTextConfig(
              bos_token_id=0						,	eos_token_id=2						,	hidden_size=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						,	hidden_act='gelu'						,	projection_dim=512						,	)
          __A						: Tuple      =       CLIPTextModel(_UpperCAmelCase)
          __A						: List[Any]      =       CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip')

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

          return components


     def 							SCREAMING_SNAKE_CASE  (						self						,	_UpperCAmelCase						,	_UpperCAmelCase=0):

          '''simple docstring'''






          if str(_UpperCAmelCase).startswith('mps'):
               __A						: List[str]      =       torch.manual_seed(_UpperCAmelCase)
          else:
               __A						: Tuple      =       torch.Generator(device=_UpperCAmelCase).manual_seed(_UpperCAmelCase)
          __A						: Union[str, Any]      =       {
              'prompt': 'a cat and a frog',
              'token_indices': [2, 5],
              'generator': generator,
              'num_inference_steps': 1,
              'guidance_scale': 6.0,
              'output_type': 'numpy',
              'max_iter_to_alter': 2,
              'thresholds': {0: 0.7},
          }
          return inputs


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Union[str, Any]      =       'cpu'

          __A						: Optional[int]      =       self.get_dummy_components()
          __A						: Dict      =       self.pipeline_class(**_UpperCAmelCase)
          pipe.to(_UpperCAmelCase)
          pipe.set_progress_bar_config(disable=_UpperCAmelCase)

          __A						: List[str]      =       self.get_dummy_inputs(_UpperCAmelCase)
          __A						: str      =       pipe(**_UpperCAmelCase).images
          __A						: Optional[int]      =       image[0, -3:, -3:, -1]

          self.assertEqual(image.shape						,	(1, 64, 64, 3))
          __A						: int      =       np.array(
              [0.63905364, 0.62897307, 0.48599017, 0.5133624, 0.5550048, 0.45769516, 0.50326973, 0.5023139, 0.45384496])
          __A						: Tuple      =       np.abs(image_slice.flatten() - expected_slice).max()
          self.assertLessEqual(_UpperCAmelCase						,	1e-3)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          super().test_cpu_offload_forward_pass(expected_max_diff=5e-4)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          self._test_inference_batch_consistent(batch_sizes=[1, 2])


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          self._test_inference_batch_single_identical(batch_size=2						,	expected_max_diff=7e-4)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          super().test_dict_tuple_outputs_equivalent(expected_max_difference=3e-3)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          super().test_pt_np_pil_outputs_equivalent(expected_max_diff=5e-4)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          super().test_save_load_local(expected_max_difference=5e-4)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          super().test_save_load_optional_components(expected_max_difference=4e-4)




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


     @classmethod
     def 							SCREAMING_SNAKE_CASE  (						cls):

          '''simple docstring'''






          super().setUpClass()
          torch.use_deterministic_algorithms(_UpperCAmelCase)


     @classmethod
     def 							SCREAMING_SNAKE_CASE  (						cls):

          '''simple docstring'''






          super().tearDownClass()
          torch.use_deterministic_algorithms(_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






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


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Union[str, Any]      =       torch.manual_seed(51)

          __A						: Tuple      =       StableDiffusionAttendAndExcitePipeline.from_pretrained(
              'CompVis/stable-diffusion-v1-4'						,	safety_checker=_UpperCAmelCase						,	torch_dtype=torch.floataa)
          pipe.to('cuda')

          __A						: List[str]      =       'a painting of an elephant with glasses'
          __A						: Any      =       [5, 7]

          __A						: List[Any]      =       pipe(
              prompt=_UpperCAmelCase						,	token_indices=_UpperCAmelCase						,	guidance_scale=7.5						,	generator=_UpperCAmelCase						,	num_inference_steps=5						,	max_iter_to_alter=5						,	output_type='numpy'						,	).images[0]

          __A						: Optional[int]      =       load_numpy(
              'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/attend-and-excite/elephant_glasses.npy')
          assert np.abs((expected_image - image).max()) < 5e-1






'''simple docstring'''




import json
import os
import shutil
import tempfile
import unittest

import numpy as np
import pytest

from transformers import CLIPTokenizer, CLIPTokenizerFast
from transformers.models.clip.tokenization_clip import VOCAB_FILES_NAMES
from transformers.testing_utils import require_vision
from transformers.utils import IMAGE_PROCESSOR_NAME, is_vision_available


if is_vision_available():
  from PIL import Image

  from transformers import CLIPImageProcessor, CLIPProcessor


@require_vision
class  SCREAMING_SNAKE_CASE    (unittest.TestCase							):


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Optional[Any]      =       tempfile.mkdtemp()

          # fmt: off
          __A						: Optional[int]      =       ['l', 'o', 'w', 'e', 'r', 's', 't', 'i', 'd', 'n', 'lo', 'l</w>', 'w</w>', 'r</w>', 't</w>', 'low</w>', 'er</w>', 'lowest</w>', 'newer</w>', 'wider', '<unk>', '<|startoftext|>', '<|endoftext|>']
          # fmt: on
          __A						: Tuple      =       dict(zip(_UpperCAmelCase						,	range(len(_UpperCAmelCase))))
          __A						: Any      =       ['#version: 0.2', 'l o', 'lo w</w>', 'e r</w>', '']
          __A						: List[str]      =       {'unk_token': '<unk>'}

          __A						: int      =       os.path.join(self.tmpdirname						,	VOCAB_FILES_NAMES['vocab_file'])
          __A						: Optional[int]      =       os.path.join(self.tmpdirname						,	VOCAB_FILES_NAMES['merges_file'])
          with open(self.vocab_file						,	'w'						,	encoding='utf-8') as fp:
               fp.write(json.dumps(_UpperCAmelCase) + '\n')
          with open(self.merges_file						,	'w'						,	encoding='utf-8') as fp:
               fp.write('\n'.join(_UpperCAmelCase))

          __A						: str      =       {
              'do_resize': True,
              'size': 20,
              'do_center_crop': True,
              'crop_size': 18,
              'do_normalize': True,
              'image_mean': [0.48145466, 0.4578275, 0.40821073],
              'image_std': [0.26862954, 0.26130258, 0.27577711],
          }
          __A						: Union[str, Any]      =       os.path.join(self.tmpdirname						,	_UpperCAmelCase)
          with open(self.image_processor_file						,	'w'						,	encoding='utf-8') as fp:
               json.dump(_UpperCAmelCase						,	_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self						,	**_UpperCAmelCase):

          '''simple docstring'''






          return CLIPTokenizer.from_pretrained(self.tmpdirname						,	**_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self						,	**_UpperCAmelCase):

          '''simple docstring'''






          return CLIPTokenizerFast.from_pretrained(self.tmpdirname						,	**_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self						,	**_UpperCAmelCase):

          '''simple docstring'''






          return CLIPImageProcessor.from_pretrained(self.tmpdirname						,	**_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          shutil.rmtree(self.tmpdirname)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Tuple      =       [np.random.randint(255						,	size=(3, 30, 400)						,	dtype=np.uinta)]

          __A						: Optional[int]      =       [Image.fromarray(np.moveaxis(_UpperCAmelCase						,	0						,	-1)) for x in image_inputs]

          return image_inputs


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: str      =       self.get_tokenizer()
          __A						: int      =       self.get_rust_tokenizer()
          __A						: Any      =       self.get_image_processor()

          __A						: Union[str, Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)
          processor_slow.save_pretrained(self.tmpdirname)
          __A						: Dict      =       CLIPProcessor.from_pretrained(self.tmpdirname						,	use_fast=_UpperCAmelCase)

          __A						: Union[str, Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)
          processor_fast.save_pretrained(self.tmpdirname)
          __A						: Union[str, Any]      =       CLIPProcessor.from_pretrained(self.tmpdirname)

          self.assertEqual(processor_slow.tokenizer.get_vocab()						,	tokenizer_slow.get_vocab())
          self.assertEqual(processor_fast.tokenizer.get_vocab()						,	tokenizer_fast.get_vocab())
          self.assertEqual(tokenizer_slow.get_vocab()						,	tokenizer_fast.get_vocab())
          self.assertIsInstance(processor_slow.tokenizer						,	_UpperCAmelCase)
          self.assertIsInstance(processor_fast.tokenizer						,	_UpperCAmelCase)

          self.assertEqual(processor_slow.image_processor.to_json_string()						,	image_processor.to_json_string())
          self.assertEqual(processor_fast.image_processor.to_json_string()						,	image_processor.to_json_string())
          self.assertIsInstance(processor_slow.image_processor						,	_UpperCAmelCase)
          self.assertIsInstance(processor_fast.image_processor						,	_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Dict      =       CLIPProcessor(tokenizer=self.get_tokenizer()						,	image_processor=self.get_image_processor())
          processor.save_pretrained(self.tmpdirname)

          __A						: Dict      =       self.get_tokenizer(bos_token='(BOS)'						,	eos_token='(EOS)')
          __A						: Any      =       self.get_image_processor(do_normalize=_UpperCAmelCase						,	padding_value=1.0)

          __A						: Tuple      =       CLIPProcessor.from_pretrained(
              self.tmpdirname						,	bos_token='(BOS)'						,	eos_token='(EOS)'						,	do_normalize=_UpperCAmelCase						,	padding_value=1.0)

          self.assertEqual(processor.tokenizer.get_vocab()						,	tokenizer_add_kwargs.get_vocab())
          self.assertIsInstance(processor.tokenizer						,	_UpperCAmelCase)

          self.assertEqual(processor.image_processor.to_json_string()						,	image_processor_add_kwargs.to_json_string())
          self.assertIsInstance(processor.image_processor						,	_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Optional[int]      =       self.get_image_processor()
          __A						: List[Any]      =       self.get_tokenizer()

          __A						: List[Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: List[str]      =       self.prepare_image_inputs()

          __A						: Dict      =       image_processor(_UpperCAmelCase						,	return_tensors='np')
          __A						: str      =       processor(images=_UpperCAmelCase						,	return_tensors='np')

          for key in input_image_proc.keys():
               self.assertAlmostEqual(input_image_proc[key].sum()						,	input_processor[key].sum()						,	delta=1e-2)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: List[Any]      =       self.get_image_processor()
          __A						: List[str]      =       self.get_tokenizer()

          __A						: Optional[Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: Dict      =       'lower newer'

          __A						: List[Any]      =       processor(text=_UpperCAmelCase)

          __A						: Optional[int]      =       tokenizer(_UpperCAmelCase)

          for key in encoded_tok.keys():
               self.assertListEqual(encoded_tok[key]						,	encoded_processor[key])


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Dict      =       self.get_image_processor()
          __A						: Optional[int]      =       self.get_tokenizer()

          __A						: Optional[Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: int      =       'lower newer'
          __A						: Any      =       self.prepare_image_inputs()

          __A						: Tuple      =       processor(text=_UpperCAmelCase						,	images=_UpperCAmelCase)

          self.assertListEqual(list(inputs.keys())						,	['input_ids', 'attention_mask', 'pixel_values'])

          # test if it raises when no input is passed
          with pytest.raises(_UpperCAmelCase):
               processor()


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Any      =       self.get_image_processor()
          __A						: str      =       self.get_tokenizer()

          __A						: Optional[Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: Dict      =       [[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

          __A						: str      =       processor.batch_decode(_UpperCAmelCase)
          __A						: Optional[Any]      =       tokenizer.batch_decode(_UpperCAmelCase)

          self.assertListEqual(_UpperCAmelCase						,	_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Optional[int]      =       self.get_image_processor()
          __A						: int      =       self.get_tokenizer()

          __A						: Any      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: Any      =       'lower newer'
          __A						: Any      =       self.prepare_image_inputs()

          __A						: Any      =       processor(text=_UpperCAmelCase						,	images=_UpperCAmelCase)

          self.assertListEqual(list(inputs.keys())						,	processor.model_input_names)