





import gc
import random
import tempfile
import unittest

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

from diffusers import AutoencoderKL, DDIMScheduler, LMSDiscreteScheduler, PNDMScheduler, UNetaDConditionModel
from diffusers.pipelines.stable_diffusion_safe import StableDiffusionPipelineSafe as StableDiffusionPipeline
from diffusers.utils import floats_tensor, nightly, torch_device
from diffusers.utils.testing_utils import require_torch_gpu





class 				A_				(      unittest.TestCase	):







       """simple docstring"""





       def    __UpperCAmelCase (    self	:	Optional[int]  )						->					List[Any]:
         # clean up the VRAM after each test
         super().tearDown()
         gc.collect()
         torch.cuda.empty_cache()







       @property
       def    __UpperCAmelCase (    self	:	Dict  )						->					Dict:
         _lowercase							= 1
         _lowercase							= 3
         _lowercase							= (32, 32)

         _lowercase							= floats_tensor((batch_size, num_channels) + sizes						,rng=random.Random(0  )  ).to(__A  )
         return image







       @property
       def    __UpperCAmelCase (    self	:	Tuple  )						->					Optional[Any]:
         torch.manual_seed(0  )
         _lowercase							= 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						,)
         return model







       @property
       def    __UpperCAmelCase (    self	:	Union[str, Any]  )						->					str:
         torch.manual_seed(0  )
         _lowercase							= 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						,)
         return model







       @property
       def    __UpperCAmelCase (    self	:	List[str]  )						->					Union[str, Any]:
         torch.manual_seed(0  )
         _lowercase							= 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						,)
         return CLIPTextModel(__A  )







       @property
       def    __UpperCAmelCase (    self	:	List[str]  )						->					List[Any]:
         def extract(*__A	:	List[str]						,**__A	:	Dict  ):





           class 				A_				:







                  """simple docstring"""





                  def __init__(    self	:	Optional[Any]  )						->					Union[str, Any]:
                    _lowercase							= torch.ones([0]  )







                  def    __UpperCAmelCase (    self	:	Union[str, Any]						,__A	:	Union[str, Any]  )						->					List[str]:
                    self.pixel_values.to(__A  )
                    return self
           return Out()

         return extract







       def    __UpperCAmelCase (    self	:	Optional[int]  )						->					Union[str, Any]:
         _lowercase							= 'cpu'  # ensure determinism for the device-dependent torch.Generator
         _lowercase							= self.dummy_cond_unet
         _lowercase							= DDIMScheduler(
             beta_start=0.00085						,beta_end=0.012						,beta_schedule='scaled_linear'						,clip_sample=__A						,set_alpha_to_one=__A						,)

         _lowercase							= self.dummy_vae
         _lowercase							= self.dummy_text_encoder
         _lowercase							= CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip'  )

         # make sure here that pndm scheduler skips prk
         _lowercase							= StableDiffusionPipeline(
             unet=__A						,scheduler=__A						,vae=__A						,text_encoder=__A						,tokenizer=__A						,safety_checker=__A						,feature_extractor=self.dummy_extractor						,)
         _lowercase							= sd_pipe.to(__A  )
         sd_pipe.set_progress_bar_config(disable=__A  )

         _lowercase							= 'A painting of a squirrel eating a burger'

         _lowercase							= torch.Generator(device=__A  ).manual_seed(0  )
         _lowercase							= sd_pipe([prompt]						,generator=__A						,guidance_scale=6.0						,num_inference_steps=2						,output_type='np'  )
         _lowercase							= output.images

         _lowercase							= torch.Generator(device=__A  ).manual_seed(0  )
         _lowercase							= sd_pipe(
             [prompt]						,generator=__A						,guidance_scale=6.0						,num_inference_steps=2						,output_type='np'						,return_dict=__A						,)[0]

         _lowercase							= image[0, -3:, -3:, -1]
         _lowercase							= image_from_tuple[0, -3:, -3:, -1]

         assert image.shape == (1, 64, 64, 3)
         _lowercase							= np.array([0.5756, 0.6118, 0.5005, 0.5041, 0.5471, 0.4726, 0.4976, 0.4865, 0.4864]  )

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







       def    __UpperCAmelCase (    self	:	int  )						->					str:
         _lowercase							= 'cpu'  # ensure determinism for the device-dependent torch.Generator
         _lowercase							= self.dummy_cond_unet
         _lowercase							= PNDMScheduler(skip_prk_steps=__A  )
         _lowercase							= self.dummy_vae
         _lowercase							= self.dummy_text_encoder
         _lowercase							= CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip'  )

         # make sure here that pndm scheduler skips prk
         _lowercase							= StableDiffusionPipeline(
             unet=__A						,scheduler=__A						,vae=__A						,text_encoder=__A						,tokenizer=__A						,safety_checker=__A						,feature_extractor=self.dummy_extractor						,)
         _lowercase							= sd_pipe.to(__A  )
         sd_pipe.set_progress_bar_config(disable=__A  )

         _lowercase							= 'A painting of a squirrel eating a burger'
         _lowercase							= torch.Generator(device=__A  ).manual_seed(0  )
         _lowercase							= sd_pipe([prompt]						,generator=__A						,guidance_scale=6.0						,num_inference_steps=2						,output_type='np'  )

         _lowercase							= output.images

         _lowercase							= torch.Generator(device=__A  ).manual_seed(0  )
         _lowercase							= sd_pipe(
             [prompt]						,generator=__A						,guidance_scale=6.0						,num_inference_steps=2						,output_type='np'						,return_dict=__A						,)[0]

         _lowercase							= image[0, -3:, -3:, -1]
         _lowercase							= image_from_tuple[0, -3:, -3:, -1]

         assert image.shape == (1, 64, 64, 3)
         _lowercase							= np.array([0.5125, 0.5716, 0.4828, 0.5060, 0.5650, 0.4768, 0.5185, 0.4895, 0.4993]  )

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







       def    __UpperCAmelCase (    self	:	List[Any]  )						->					Tuple:
         _lowercase							= StableDiffusionPipeline.from_pretrained(
             'hf-internal-testing/tiny-stable-diffusion-lms-pipe'						,safety_checker=__A  )
         assert isinstance(__A						,__A  )
         assert isinstance(pipe.scheduler						,__A  )
         assert pipe.safety_checker is None

         _lowercase							= pipe('example prompt'						,num_inference_steps=2  ).images[0]
         assert image is not None

         # check that there's no error when saving a pipeline with one of the models being None
         with tempfile.TemporaryDirectory() as tmpdirname:
           pipe.save_pretrained(__A  )
           _lowercase							= StableDiffusionPipeline.from_pretrained(__A  )

         # sanity check that the pipeline still works
         assert pipe.safety_checker is None
         _lowercase							= pipe('example prompt'						,num_inference_steps=2  ).images[0]
         assert image is not None







       @unittest.skipIf(torch_device != 'cuda'						,'This test requires a GPU'  )
       def    __UpperCAmelCase (    self	:	Dict  )						->					List[Any]:
         _lowercase							= self.dummy_cond_unet
         _lowercase							= PNDMScheduler(skip_prk_steps=__A  )
         _lowercase							= self.dummy_vae
         _lowercase							= self.dummy_text_encoder
         _lowercase							= CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip'  )

         # put models in fp16
         _lowercase							= unet.half()
         _lowercase							= vae.half()
         _lowercase							= bert.half()

         # make sure here that pndm scheduler skips prk
         _lowercase							= StableDiffusionPipeline(
             unet=__A						,scheduler=__A						,vae=__A						,text_encoder=__A						,tokenizer=__A						,safety_checker=__A						,feature_extractor=self.dummy_extractor						,)
         _lowercase							= sd_pipe.to(__A  )
         sd_pipe.set_progress_bar_config(disable=__A  )

         _lowercase							= 'A painting of a squirrel eating a burger'
         _lowercase							= sd_pipe([prompt]						,num_inference_steps=2						,output_type='np'  ).images

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





@nightly
@require_torch_gpu
class 				A_				(      unittest.TestCase	):







       """simple docstring"""





       def    __UpperCAmelCase (    self	:	Tuple  )						->					Optional[Any]:
         # clean up the VRAM after each test
         super().tearDown()
         gc.collect()
         torch.cuda.empty_cache()







       def    __UpperCAmelCase (    self	:	List[str]  )						->					Optional[Any]:
         _lowercase							= StableDiffusionPipeline.from_pretrained('runwayml/stable-diffusion-v1-5'						,safety_checker=__A  )
         _lowercase							= LMSDiscreteScheduler.from_config(sd_pipe.scheduler.config  )
         _lowercase							= sd_pipe.to(__A  )
         sd_pipe.set_progress_bar_config(disable=__A  )

         _lowercase							= (
             'portrait of girl with smokey eyes makeup in abandoned hotel, grange clothes, redshift, wide high angle'
             ' coloured polaroid photograph with flash, kodak film, hyper real, stunning moody cinematography, with'
             ' anamorphic lenses, by maripol, fallen angels by wong kar - wai, style of suspiria and neon demon and'
             ' children from bahnhof zoo, detailed '
         )
         _lowercase							= 40_0366_0346
         _lowercase							= 7

         # without safety guidance (sld_guidance_scale = 0)
         _lowercase							= torch.manual_seed(__A  )
         _lowercase							= sd_pipe(
             [prompt]						,generator=__A						,guidance_scale=__A						,num_inference_steps=50						,output_type='np'						,width=512						,height=512						,sld_guidance_scale=0						,)

         _lowercase							= output.images
         _lowercase							= image[0, -3:, -3:, -1]
         _lowercase							= [0.2278, 0.2231, 0.2249, 0.2333, 0.2303, 0.1885, 0.2273, 0.2144, 0.2176]

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

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

         # without safety guidance (strong configuration)
         _lowercase							= torch.manual_seed(__A  )
         _lowercase							= sd_pipe(
             [prompt]						,generator=__A						,guidance_scale=__A						,num_inference_steps=50						,output_type='np'						,width=512						,height=512						,sld_guidance_scale=2000						,sld_warmup_steps=7						,sld_threshold=0.025						,sld_momentum_scale=0.5						,sld_mom_beta=0.7						,)

         _lowercase							= output.images
         _lowercase							= image[0, -3:, -3:, -1]
         _lowercase							= [0.2383, 0.2276, 0.236, 0.2192, 0.2186, 0.2053, 0.1971, 0.1901, 0.1719]

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

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







       def    __UpperCAmelCase (    self	:	List[str]  )						->					Tuple:
         _lowercase							= StableDiffusionPipeline.from_pretrained('runwayml/stable-diffusion-v1-5'						,safety_checker=__A  )
         _lowercase							= LMSDiscreteScheduler.from_config(sd_pipe.scheduler.config  )
         _lowercase							= sd_pipe.to(__A  )
         sd_pipe.set_progress_bar_config(disable=__A  )

         _lowercase							= 'padme amidala taking a bath artwork, safe for work, no nudity'
         _lowercase							= 27_3497_1755
         _lowercase							= 7

         _lowercase							= torch.manual_seed(__A  )
         _lowercase							= sd_pipe(
             [prompt]						,generator=__A						,guidance_scale=__A						,num_inference_steps=50						,output_type='np'						,width=512						,height=512						,sld_guidance_scale=0						,)

         _lowercase							= output.images
         _lowercase							= image[0, -3:, -3:, -1]
         _lowercase							= [0.3502, 0.3622, 0.3396, 0.3642, 0.3478, 0.3318, 0.35, 0.3348, 0.3297]

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

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

         _lowercase							= torch.manual_seed(__A  )
         _lowercase							= sd_pipe(
             [prompt]						,generator=__A						,guidance_scale=__A						,num_inference_steps=50						,output_type='np'						,width=512						,height=512						,sld_guidance_scale=2000						,sld_warmup_steps=7						,sld_threshold=0.025						,sld_momentum_scale=0.5						,sld_mom_beta=0.7						,)

         _lowercase							= output.images
         _lowercase							= image[0, -3:, -3:, -1]
         _lowercase							= [0.5531, 0.5206, 0.4895, 0.5156, 0.5182, 0.4751, 0.4802, 0.4803, 0.4443]

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

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







       def    __UpperCAmelCase (    self	:	Dict  )						->					str:
         _lowercase							= StableDiffusionPipeline.from_pretrained('runwayml/stable-diffusion-v1-5'  )
         _lowercase							= sd_pipe.to(__A  )
         sd_pipe.set_progress_bar_config(disable=__A  )

         _lowercase							= (
             'the four horsewomen of the apocalypse, painting by tom of finland, gaston bussiere, craig mullins, j. c.'
             ' leyendecker'
         )
         _lowercase							= 10_4435_5234
         _lowercase							= 12

         _lowercase							= torch.manual_seed(__A  )
         _lowercase							= sd_pipe(
             [prompt]						,generator=__A						,guidance_scale=__A						,num_inference_steps=50						,output_type='np'						,width=512						,height=512						,sld_guidance_scale=0						,)

         _lowercase							= output.images
         _lowercase							= image[0, -3:, -3:, -1]
         _lowercase							= np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]  )

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

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

         _lowercase							= torch.manual_seed(__A  )
         _lowercase							= sd_pipe(
             [prompt]						,generator=__A						,guidance_scale=__A						,num_inference_steps=50						,output_type='np'						,width=512						,height=512						,sld_guidance_scale=2000						,sld_warmup_steps=7						,sld_threshold=0.025						,sld_momentum_scale=0.5						,sld_mom_beta=0.7						,)

         _lowercase							= output.images
         _lowercase							= image[0, -3:, -3:, -1]
         _lowercase							= np.array([0.5818, 0.6285, 0.6835, 0.6019, 0.625, 0.6754, 0.6096, 0.6334, 0.6561]  )
         assert image.shape == (1, 512, 512, 3)

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






from itertools import count

def 							SCREAMING_SNAKE_CASE__       (  snake_case__  :int = 50     )      ->						int:
  _lowercase							= [1] * min_block_length

  for n in count(snake_case__     ):
    fill_count_functions.append(1     )

    for block_length in range(snake_case__			,							n + 1     ):
      for block_start in range(n - block_length     ):
        fill_count_functions[n] += fill_count_functions[
            n - block_start - block_length - 1
        ]

      fill_count_functions[n] += 1

    if fill_count_functions[n] > 100_0000:
      break

  return n


if __name__ == "__main__":
      print(F"""{solution() = }""")