



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						  =		False



@skip_mps
class     _UpperCAmelCase			(       A__			,      A__			,      A__			,      unittest.TestCase     ):
     UpperCamelCase__		    =				StableDiffusionAttendAndExcitePipeline
     UpperCamelCase__		    =				False
     UpperCamelCase__		    =				TEXT_TO_IMAGE_PARAMS
     UpperCamelCase__		    =				TEXT_TO_IMAGE_BATCH_PARAMS.union({'''token_indices'''}     )
     UpperCamelCase__		    =				TEXT_TO_IMAGE_IMAGE_PARAMS
     UpperCamelCase__		    =				TEXT_TO_IMAGE_IMAGE_PARAMS




     @classmethod
     def 		snake_case_		(				cls):
         super().setUpClass()
         torch.use_deterministic_algorithms(a__)




     @classmethod
     def 		snake_case_		(				cls):
         super().tearDownClass()
         torch.use_deterministic_algorithms(a__)




     def 		snake_case_		(				self):
         torch.manual_seed(0)
         A__		 =					UNetaDConditionModel(
             block_out_channels=(3_2, 6_4) ,						layers_per_block=1 ,						sample_size=3_2 ,						in_channels=4 ,						out_channels=4 ,						down_block_types=('''DownBlock2D''', '''CrossAttnDownBlock2D''') ,						up_block_types=('''CrossAttnUpBlock2D''', '''UpBlock2D''') ,						cross_attention_dim=3_2 ,						attention_head_dim=(2, 4) ,						use_linear_projection=a__ ,						)
         A__		 =					DDIMScheduler(
             beta_start=0.0_0_0_8_5 ,						beta_end=0.0_1_2 ,						beta_schedule='''scaled_linear''' ,						clip_sample=a__ ,						set_alpha_to_one=a__ ,						)
         torch.manual_seed(0)
         A__		 =					AutoencoderKL(
             block_out_channels=[3_2, 6_4] ,						in_channels=3 ,						out_channels=3 ,						down_block_types=['''DownEncoderBlock2D''', '''DownEncoderBlock2D'''] ,						up_block_types=['''UpDecoderBlock2D''', '''UpDecoderBlock2D'''] ,						latent_channels=4 ,						sample_size=1_2_8 ,						)
         torch.manual_seed(0)
         A__		 =					CLIPTextConfig(
             bos_token_id=0 ,						eos_token_id=2 ,						hidden_size=3_2 ,						intermediate_size=3_7 ,						layer_norm_eps=1e-05 ,						num_attention_heads=4 ,						num_hidden_layers=5 ,						pad_token_id=1 ,						vocab_size=1_0_0_0 ,						hidden_act='''gelu''' ,						projection_dim=5_1_2 ,						)
         A__		 =					CLIPTextModel(a__)
         A__		 =					CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip''')

         A__		 =					{
             '''unet''': unet,
             '''scheduler''': scheduler,
             '''vae''': vae,
             '''text_encoder''': text_encoder,
             '''tokenizer''': tokenizer,
             '''safety_checker''': None,
             '''feature_extractor''': None,
         }

         return components




     def 		snake_case_		(				self ,						a__ ,						a__=0):
         if str(a__).startswith('''mps'''):
             A__		 =					torch.manual_seed(a__)
         else:
             A__		 =					torch.Generator(device=a__).manual_seed(a__)
         A__		 =					A__		 =					{
             '''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 		snake_case_		(				self):
         A__		 =					'''cpu'''

         A__		 =					self.get_dummy_components()
         A__		 =					self.pipeline_class(**a__)
         pipe.to(a__)
         pipe.set_progress_bar_config(disable=a__)

         A__		 =					self.get_dummy_inputs(a__)
         A__		 =					pipe(**a__).images
         A__		 =					image[0, -3:, -3:, -1]

         self.assertEqual(image.shape ,						(1, 6_4, 6_4, 3))
         A__		 =					np.array(
             [0.6_3_9_0_5_3_6_4, 0.6_2_8_9_7_3_0_7, 0.4_8_5_9_9_0_1_7, 0.5_1_3_3_6_2_4, 0.5_5_5_0_0_4_8, 0.4_5_7_6_9_5_1_6, 0.5_0_3_2_6_9_7_3, 0.5_0_2_3_1_3_9, 0.4_5_3_8_4_4_9_6])
         A__		 =					np.abs(image_slice.flatten() - expected_slice).max()
         self.assertLessEqual(a__ ,						1e-3)




     def 		snake_case_		(				self):
         super().test_cpu_offload_forward_pass(expected_max_diff=5e-4)




     def 		snake_case_		(				self):
         # NOTE: Larger batch sizes cause this test to timeout, only test on smaller batches
         self._test_inference_batch_consistent(batch_sizes=[1, 2])




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




     def 		snake_case_		(				self):
         super().test_dict_tuple_outputs_equivalent(expected_max_difference=3e-3)




     def 		snake_case_		(				self):
         super().test_pt_np_pil_outputs_equivalent(expected_max_diff=5e-4)




     def 		snake_case_		(				self):
         super().test_save_load_local(expected_max_difference=5e-4)




     def 		snake_case_		(				self):
         super().test_save_load_optional_components(expected_max_difference=4e-4)







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




     @classmethod
     def 		snake_case_		(				cls):
         super().setUpClass()
         torch.use_deterministic_algorithms(a__)




     @classmethod
     def 		snake_case_		(				cls):
         super().tearDownClass()
         torch.use_deterministic_algorithms(a__)




     def 		snake_case_		(				self):
         super().tearDown()
         gc.collect()
         torch.cuda.empty_cache()




     def 		snake_case_		(				self):
         A__		 =					torch.manual_seed(5_1)

         A__		 =					StableDiffusionAttendAndExcitePipeline.from_pretrained(
             '''CompVis/stable-diffusion-v1-4''' ,						safety_checker=a__ ,						torch_dtype=torch.floataa)
         pipe.to('''cuda''')

         A__		 =					'''a painting of an elephant with glasses'''
         A__		 =					[5, 7]

         A__		 =					pipe(
             prompt=a__ ,						token_indices=a__ ,						guidance_scale=7.5 ,						generator=a__ ,						num_inference_steps=5 ,						max_iter_to_alter=5 ,						output_type='''numpy''' ,						).images[0]

         A__		 =					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





from collections import OrderedDict
from typing import Mapping

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig


_lowercase						  =		{
    "albert-base-v1": "https://huggingface.co/albert-base-v1/resolve/main/config.json",
    "albert-large-v1": "https://huggingface.co/albert-large-v1/resolve/main/config.json",
    "albert-xlarge-v1": "https://huggingface.co/albert-xlarge-v1/resolve/main/config.json",
    "albert-xxlarge-v1": "https://huggingface.co/albert-xxlarge-v1/resolve/main/config.json",
    "albert-base-v2": "https://huggingface.co/albert-base-v2/resolve/main/config.json",
    "albert-large-v2": "https://huggingface.co/albert-large-v2/resolve/main/config.json",
    "albert-xlarge-v2": "https://huggingface.co/albert-xlarge-v2/resolve/main/config.json",
    "albert-xxlarge-v2": "https://huggingface.co/albert-xxlarge-v2/resolve/main/config.json",
}



class     _UpperCAmelCase			(       A__     ):
     UpperCamelCase__		    =				'''albert'''




     def __init__(				self ,						a__=3_0_0_0_0 ,						a__=1_2_8 ,						a__=4_0_9_6 ,						a__=1_2 ,						a__=1 ,						a__=6_4 ,						a__=1_6_3_8_4 ,						a__=1 ,						a__="gelu_new" ,						a__=0 ,						a__=0 ,						a__=5_1_2 ,						a__=2 ,						a__=0.0_2 ,						a__=1e-12 ,						a__=0.1 ,						a__="absolute" ,						a__=0 ,						a__=2 ,						a__=3 ,						**a__ ,						):
         super().__init__(pad_token_id=a__ ,						bos_token_id=a__ ,						eos_token_id=a__ ,						**a__)

         A__		 =					vocab_size
         A__		 =					embedding_size
         A__		 =					hidden_size
         A__		 =					num_hidden_layers
         A__		 =					num_hidden_groups
         A__		 =					num_attention_heads
         A__		 =					inner_group_num
         A__		 =					hidden_act
         A__		 =					intermediate_size
         A__		 =					hidden_dropout_prob
         A__		 =					attention_probs_dropout_prob
         A__		 =					max_position_embeddings
         A__		 =					type_vocab_size
         A__		 =					initializer_range
         A__		 =					layer_norm_eps
         A__		 =					classifier_dropout_prob
         A__		 =					position_embedding_type







class     _UpperCAmelCase			(       A__     ):




     @property
     def 		snake_case_		(				self):
         if self.task == "multiple-choice":
             A__		 =					{0: '''batch''', 1: '''choice''', 2: '''sequence'''}
         else:
             A__		 =					{0: '''batch''', 1: '''sequence'''}
         return OrderedDict(
             [
                 ('''input_ids''', dynamic_axis),
                 ('''attention_mask''', dynamic_axis),
                 ('''token_type_ids''', dynamic_axis),
             ])
