
import gc
import random
import unittest

import numpy as np
import torch
from transformers import XLMRobertaTokenizerFast

from diffusers import DDIMScheduler, KandinskyPipeline, KandinskyPriorPipeline, UNetaDConditionModel, VQModel
from diffusers.pipelines.kandinsky.text_encoder import MCLIPConfig, MultilingualCLIP
from diffusers.utils import floats_tensor, load_numpy, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu

from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference


enable_full_determinism()






class 							SCREAMING_SNAKE_CASE__     (				SCREAMING_SNAKE_CASE_ ,		unittest.TestCase     ):

							"""simple docstring"""






							_snake_case  		=	KandinskyPipeline
							_snake_case  		=	[
							    'prompt',
							    'image_embeds',
							    'negative_image_embeds',
							]
							_snake_case  		=	['prompt', 'negative_prompt', 'image_embeds', 'negative_image_embeds']
							_snake_case  		=	[
							    'generator',
							    'height',
							    'width',
							    'latents',
							    'guidance_scale',
							    'negative_prompt',
							    'num_inference_steps',
							    'return_dict',
							    'guidance_scale',
							    'num_images_per_prompt',
							    'output_type',
							    'return_dict',
							]
							_snake_case  		=	False



							@property
							def      A__		(	self      )-> Optional[int]:





													'''simple docstring'''






													return 32



							@property
							def      A__		(	self      )-> List[str]:





													'''simple docstring'''






													return 32



							@property
							def      A__		(	self      )-> Optional[Any]:





													'''simple docstring'''






													return self.time_input_dim



							@property
							def      A__		(	self      )-> List[str]:





													'''simple docstring'''






													return self.time_input_dim * 4



							@property
							def      A__		(	self      )-> int:





													'''simple docstring'''






													return 100



							@property
							def      A__		(	self      )-> Optional[int]:





													'''simple docstring'''






													__UpperCamelCase  	=      XLMRobertaTokenizerFast.from_pretrained('''YiYiXu/tiny-random-mclip-base'''      )
													return tokenizer



							@property
							def      A__		(	self      )-> Any:





													'''simple docstring'''






													torch.manual_seed(0      )
													__UpperCamelCase  	=      MCLIPConfig(
													    numDims=self.cross_attention_dim  ,						transformerDimensions=self.text_embedder_hidden_size  ,						hidden_size=self.text_embedder_hidden_size  ,						intermediate_size=37  ,						num_attention_heads=4  ,						num_hidden_layers=5  ,						vocab_size=1005  ,						)

													__UpperCamelCase  	=      MultilingualCLIP(SCREAMING_SNAKE_CASE_      )
													__UpperCamelCase  	=      text_encoder.eval()

													return text_encoder



							@property
							def      A__		(	self      )-> int:





													'''simple docstring'''






													torch.manual_seed(0      )

													__UpperCamelCase  	=      {
													    '''in_channels''': 4,
													    # Out channels is double in channels because predicts mean and variance
													    '''out_channels''': 8,
													    '''addition_embed_type''': '''text_image''',
													    '''down_block_types''': ('''ResnetDownsampleBlock2D''', '''SimpleCrossAttnDownBlock2D'''),
													    '''up_block_types''': ('''SimpleCrossAttnUpBlock2D''', '''ResnetUpsampleBlock2D'''),
													    '''mid_block_type''': '''UNetMidBlock2DSimpleCrossAttn''',
													    '''block_out_channels''': (self.block_out_channels_a, self.block_out_channels_a * 2),
													    '''layers_per_block''': 1,
													    '''encoder_hid_dim''': self.text_embedder_hidden_size,
													    '''encoder_hid_dim_type''': '''text_image_proj''',
													    '''cross_attention_dim''': self.cross_attention_dim,
													    '''attention_head_dim''': 4,
													    '''resnet_time_scale_shift''': '''scale_shift''',
													    '''class_embed_type''': None,
													}

													__UpperCamelCase  	=      UNetaDConditionModel(**SCREAMING_SNAKE_CASE_      )
													return model



							@property
							def      A__		(	self      )-> Union[str, Any]:





													'''simple docstring'''






													return {
													    "block_out_channels": [32, 64],
													    "down_block_types": ["DownEncoderBlock2D", "AttnDownEncoderBlock2D"],
													    "in_channels": 3,
													    "latent_channels": 4,
													    "layers_per_block": 1,
													    "norm_num_groups": 8,
													    "norm_type": "spatial",
													    "num_vq_embeddings": 12,
													    "out_channels": 3,
													    "up_block_types": [
													        "AttnUpDecoderBlock2D",
													        "UpDecoderBlock2D",
													    ],
													    "vq_embed_dim": 4,
													}



							@property
							def      A__		(	self      )-> List[str]:





													'''simple docstring'''






													torch.manual_seed(0      )
													__UpperCamelCase  	=      VQModel(**self.dummy_movq_kwargs      )
													return model



							def      A__		(	self      )-> Optional[int]:





													'''simple docstring'''






													__UpperCamelCase  	=      self.dummy_text_encoder
													__UpperCamelCase  	=      self.dummy_tokenizer
													__UpperCamelCase  	=      self.dummy_unet
													__UpperCamelCase  	=      self.dummy_movq

													__UpperCamelCase  	=      DDIMScheduler(
													    num_train_timesteps=1000  ,						beta_schedule='''linear'''  ,						beta_start=0.0_0_0_8_5  ,						beta_end=0.0_1_2  ,						clip_sample=SCREAMING_SNAKE_CASE_  ,						set_alpha_to_one=SCREAMING_SNAKE_CASE_  ,						steps_offset=1  ,						prediction_type='''epsilon'''  ,						thresholding=SCREAMING_SNAKE_CASE_  ,						)

													__UpperCamelCase  	=      {
													    '''text_encoder''': text_encoder,
													    '''tokenizer''': tokenizer,
													    '''unet''': unet,
													    '''scheduler''': scheduler,
													    '''movq''': movq,
													}
													return components



							def      A__		(	self  ,						SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_=0      )-> List[str]:





													'''simple docstring'''






													__UpperCamelCase  	=      floats_tensor((1, self.cross_attention_dim)  ,						rng=random.Random(SCREAMING_SNAKE_CASE_      )      ).to(SCREAMING_SNAKE_CASE_      )
													__UpperCamelCase  	=      floats_tensor((1, self.cross_attention_dim)  ,						rng=random.Random(seed + 1      )      ).to(SCREAMING_SNAKE_CASE_      )
													if str(SCREAMING_SNAKE_CASE_      ).startswith('''mps'''      ):
																			__UpperCamelCase  	=      torch.manual_seed(SCREAMING_SNAKE_CASE_      )
													else:
																			__UpperCamelCase  	=      torch.Generator(device=SCREAMING_SNAKE_CASE_      ).manual_seed(SCREAMING_SNAKE_CASE_      )
													__UpperCamelCase  	=      {
													    '''prompt''': '''horse''',
													    '''image_embeds''': image_embeds,
													    '''negative_image_embeds''': negative_image_embeds,
													    '''generator''': generator,
													    '''height''': 64,
													    '''width''': 64,
													    '''guidance_scale''': 4.0,
													    '''num_inference_steps''': 2,
													    '''output_type''': '''np''',
													}
													return inputs



							def      A__		(	self      )-> Dict:





													'''simple docstring'''






													__UpperCamelCase  	=      '''cpu'''

													__UpperCamelCase  	=      self.get_dummy_components()

													__UpperCamelCase  	=      self.pipeline_class(**SCREAMING_SNAKE_CASE_      )
													__UpperCamelCase  	=      pipe.to(SCREAMING_SNAKE_CASE_      )

													pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE_      )

													__UpperCamelCase  	=      pipe(**self.get_dummy_inputs(SCREAMING_SNAKE_CASE_      )      )
													__UpperCamelCase  	=      output.images

													__UpperCamelCase  	=      pipe(
													    **self.get_dummy_inputs(SCREAMING_SNAKE_CASE_      )  ,						return_dict=SCREAMING_SNAKE_CASE_  ,						)[0]

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

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

													__UpperCamelCase  	=      np.array(
													    [0.3_2_8_6_6_3, 1.0, 0.2_3_2_1_6_8_7_3, 1.0, 0.9_2_7_1_7_5_6_4, 0.4_6_3_9_0_4_6, 0.9_6_8_9_4_7_7_7, 0.3_1_7_1_3_3_7_8, 0.6_2_9_3_9_5_3]      )

													assert (
													    np.abs(image_slice.flatten() - expected_slice      ).max() < 1E-2
													), F" expected_slice {expected_slice}, but got {image_slice.flatten()}"
													assert (
													    np.abs(image_from_tuple_slice.flatten() - expected_slice      ).max() < 1E-2
													), F" expected_slice {expected_slice}, but got {image_from_tuple_slice.flatten()}"






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

							"""simple docstring"""






							def      A__		(	self      )-> List[str]:





													'''simple docstring'''






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



							def      A__		(	self      )-> Optional[int]:





													'''simple docstring'''






													__UpperCamelCase  	=      load_numpy(
													    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'''
													    '''/kandinsky/kandinsky_text2img_cat_fp16.npy'''      )

													__UpperCamelCase  	=      KandinskyPriorPipeline.from_pretrained(
													    '''kandinsky-community/kandinsky-2-1-prior'''  ,						torch_dtype=torch.floataa      )
													pipe_prior.to(SCREAMING_SNAKE_CASE_      )

													__UpperCamelCase  	=      KandinskyPipeline.from_pretrained('''kandinsky-community/kandinsky-2-1'''  ,						torch_dtype=torch.floataa      )
													__UpperCamelCase  	=      pipeline.to(SCREAMING_SNAKE_CASE_      )
													pipeline.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE_      )

													__UpperCamelCase  	=      '''red cat, 4k photo'''

													__UpperCamelCase  	=      torch.Generator(device='''cuda'''      ).manual_seed(0      )
													__UpperCamelCase	,				__UpperCamelCase  	=      pipe_prior(
													    SCREAMING_SNAKE_CASE_  ,						generator=SCREAMING_SNAKE_CASE_  ,						num_inference_steps=5  ,						negative_prompt=''''''  ,						).to_tuple()

													__UpperCamelCase  	=      torch.Generator(device='''cuda'''      ).manual_seed(0      )
													__UpperCamelCase  	=      pipeline(
													    SCREAMING_SNAKE_CASE_  ,						image_embeds=SCREAMING_SNAKE_CASE_  ,						negative_image_embeds=SCREAMING_SNAKE_CASE_  ,						generator=SCREAMING_SNAKE_CASE_  ,						num_inference_steps=100  ,						output_type='''np'''  ,						)

													__UpperCamelCase  	=      output.images[0]

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

													assert_mean_pixel_difference(SCREAMING_SNAKE_CASE_  ,						SCREAMING_SNAKE_CASE_      )





from __future__ import annotations

import sys







def     A__	(       __A						):







    '''simple docstring'''
    if n < 0:
        raise ValueError("""Negative arguments are not supported"""						)
    return _fib(__A						)[0]







def     A__	(       __A						):







    '''simple docstring'''
    if n == 0:  # (F(0), F(1))
        return (0, 1)

    # F(2n) = F(n)[2F(n+1) − F(n)]
    # F(2n+1) = F(n+1)^2+F(n)^2
    _lowerCamelCase    ,				_lowerCamelCase  :		List[Any]			    =    _fib(n // 2						)
    _lowerCamelCase  :		List[Any]			    =    a * (b * 2 - a)
    _lowerCamelCase  :		Optional[int]			    =    a * a + b * b
    return (d, c + d) if n % 2 else (c, d)


if __name__ == "__main__":
    lowerCAmelCase      :				Union[str, Any]     			=int(sys.argv[1])
    print(F"""fibonacci({n}) is {fibonacci(n)}""")




