



'''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


_lowerCamelCase	:       int      	=	False

@skip_mps
class  SCREAMING_SNAKE_CASE (  _a   ,						_a   ,						_a   ,						unittest.TestCase		):






    """simple docstring"""





    _SCREAMING_SNAKE_CASE	  =  StableDiffusionAttendAndExcitePipeline
    _SCREAMING_SNAKE_CASE	  =  False
    _SCREAMING_SNAKE_CASE	  =  TEXT_TO_IMAGE_PARAMS
    _SCREAMING_SNAKE_CASE	  =  TEXT_TO_IMAGE_BATCH_PARAMS.union({"""token_indices"""}		)
    _SCREAMING_SNAKE_CASE	  =  TEXT_TO_IMAGE_IMAGE_PARAMS
    _SCREAMING_SNAKE_CASE	  =  TEXT_TO_IMAGE_IMAGE_PARAMS






    @classmethod
    def  A       (  cls      :					Union[str, Any] ):


       """simple docstring"""







       super().setUpClass()
       torch.use_deterministic_algorithms(UpperCamelCase__ )






    @classmethod
    def  A       (  cls      :					Union[str, Any] ):


       """simple docstring"""







       super().tearDownClass()
       torch.use_deterministic_algorithms(UpperCamelCase__ )






    def  A       (  self      :					Optional[int] ):


       """simple docstring"""







       torch.manual_seed(0 )
       UpperCamelCase					=  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=UpperCamelCase__  ,						)
       UpperCamelCase					=  DDIMScheduler(
           beta_start=0.0_0_0_8_5  ,						beta_end=0.0_1_2  ,						beta_schedule='scaled_linear'  ,						clip_sample=UpperCamelCase__  ,						set_alpha_to_one=UpperCamelCase__  ,						)
       torch.manual_seed(0 )
       UpperCamelCase					=  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 )
       UpperCamelCase					=  CLIPTextConfig(
           bos_token_id=0  ,						eos_token_id=2  ,						hidden_size=3_2  ,						intermediate_size=3_7  ,						layer_norm_eps=1E-0_5  ,						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  ,						)
       UpperCamelCase					=  CLIPTextModel(UpperCamelCase__ )
       UpperCamelCase					=  CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip' )

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

       return components






    def  A       (  self      :					Dict  ,						UpperCamelCase__      :					Optional[int]  ,						UpperCamelCase__      :					List[str]=0 ):


       """simple docstring"""







       if str(UpperCamelCase__ ).startswith('mps' ):
          UpperCamelCase					=  torch.manual_seed(UpperCamelCase__ )
       else:
          UpperCamelCase					=  torch.Generator(device=UpperCamelCase__ ).manual_seed(UpperCamelCase__ )
       UpperCamelCase					=  UpperCamelCase					=  {
           '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  A       (  self      :					int ):


       """simple docstring"""







       UpperCamelCase					=  'cpu'

       UpperCamelCase					=  self.get_dummy_components()
       UpperCamelCase					=  self.pipeline_class(**UpperCamelCase__ )
       pipe.to(UpperCamelCase__ )
       pipe.set_progress_bar_config(disable=UpperCamelCase__ )

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

       self.assertEqual(image.shape  ,						(1, 6_4, 6_4, 3) )
       UpperCamelCase					=  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] )
       UpperCamelCase					=  np.abs(image_slice.flatten() - expected_slice ).max()
       self.assertLessEqual(UpperCamelCase__  ,						1E-3 )






    def  A       (  self      :					Any ):


       """simple docstring"""







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






    def  A       (  self      :					int ):


       """simple docstring"""







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






    def  A       (  self      :					Union[str, Any] ):


       """simple docstring"""







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






    def  A       (  self      :					Tuple ):


       """simple docstring"""







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






    def  A       (  self      :					Optional[int] ):


       """simple docstring"""







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






    def  A       (  self      :					List[Any] ):


       """simple docstring"""







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






    def  A       (  self      :					Optional[Any] ):


       """simple docstring"""







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

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






    """simple docstring"""





    @classmethod
    def  A       (  cls      :					Union[str, Any] ):


       """simple docstring"""







       super().setUpClass()
       torch.use_deterministic_algorithms(UpperCamelCase__ )






    @classmethod
    def  A       (  cls      :					Any ):


       """simple docstring"""







       super().tearDownClass()
       torch.use_deterministic_algorithms(UpperCamelCase__ )






    def  A       (  self      :					int ):


       """simple docstring"""







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






    def  A       (  self      :					Tuple ):


       """simple docstring"""







       UpperCamelCase					=  torch.manual_seed(5_1 )

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

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

       UpperCamelCase					=  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]

       UpperCamelCase					=  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 __future__ import annotations

from itertools import permutations
from random import randint
from timeit import repeat
def 		UpperCamelCase	(   )	->     tuple[list[int], int]:
   UpperCamelCase    :  int							=	[randint(-1000       ,     1000	) for i in range(10	)]
   UpperCamelCase    :  Dict							=	randint(-5000       ,     5000	)
   return (arr, r)


__UpperCAmelCase          =       make_dataset()
def 		UpperCamelCase	(   snake_case__       :    list[int]       ,     snake_case__       :    int	)	->     tuple[int, ...]:
   for triplet in permutations(snake_case__       ,     3	):
      if sum(snake_case__	) == target:
         return tuple(sorted(snake_case__	)	)
   return (0, 0, 0)
def 		UpperCamelCase	(   snake_case__       :    list[int]       ,     snake_case__       :    int	)	->     tuple[int, int, int]:
   arr.sort()
   UpperCamelCase    :  List[str]							=	len(snake_case__	)
   for i in range(n - 1	):
      UpperCamelCase	,     UpperCamelCase    :  Optional[Any]							=	i + 1, n - 1
      while left < right:
         if arr[i] + arr[left] + arr[right] == target:
            return (arr[i], arr[left], arr[right])
         elif arr[i] + arr[left] + arr[right] < target:
            left += 1
         elif arr[i] + arr[left] + arr[right] > target:
            right -= 1
   return (0, 0, 0)
def 		UpperCamelCase	(   )	->     tuple[float, float]:
   UpperCamelCase    :  Any							=	'\nfrom __main__ import dataset, triplet_sum1, triplet_sum2\n'
   UpperCamelCase    :  Optional[Any]							=	'\ntriplet_sum1(*dataset)\n'
   UpperCamelCase    :  Dict							=	'\ntriplet_sum2(*dataset)\n'
   UpperCamelCase    :  Optional[int]							=	repeat(setup=snake_case__       ,     stmt=snake_case__       ,     repeat=5       ,     number=10000	)
   UpperCamelCase    :  Any							=	repeat(setup=snake_case__       ,     stmt=snake_case__       ,     repeat=5       ,     number=10000	)
   return (min(snake_case__	), min(snake_case__	))


if __name__ == "__main__":
    from doctest import testmod

    testmod()
    __UpperCAmelCase          =       solution_times()
    print(F"""The time for naive implementation is {times[0]}.""")
    print(F"""The time for optimized implementation is {times[1]}.""")



