
"""simple docstring"""

import unittest

import numpy as np
import torch
from torch import nn
from transformers import (
    CLIPImageProcessor,
    CLIPTextConfig,
    CLIPTextModelWithProjection,
    CLIPTokenizer,
    CLIPVisionConfig,
    CLIPVisionModelWithProjection,
)

from diffusers import KandinskyVaaPriorPipeline, PriorTransformer, UnCLIPScheduler
from diffusers.utils import torch_device
from diffusers.utils.testing_utils import enable_full_determinism, skip_mps

from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()

class __lowerCAmelCase		(				__SCREAMING_SNAKE_CASE      ,  unittest.TestCase      ):
					lowercase						       =						KandinskyVaaPriorPipeline
					lowercase						       =						["prompt"]
					lowercase						       =						["prompt", "negative_prompt"]
					lowercase						       =						[
					    "num_images_per_prompt",
					    "generator",
					    "num_inference_steps",
					    "latents",
					    "negative_prompt",
					    "guidance_scale",
					    "output_type",
					    "return_dict",
					]
					lowercase						       =						False





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						return 32





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						return 32





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						return self.time_input_dim





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						return self.time_input_dim * 4





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						return 100





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						__UpperCamelCase      =	CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip'				)
						return tokenizer





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						torch.manual_seed(0				)
						__UpperCamelCase      =	CLIPTextConfig(
						    bos_token_id=0     ,					eos_token_id=2     ,					hidden_size=self.text_embedder_hidden_size     ,					projection_dim=self.text_embedder_hidden_size     ,					intermediate_size=37     ,					layer_norm_eps=1E-05     ,					num_attention_heads=4     ,					num_hidden_layers=5     ,					pad_token_id=1     ,					vocab_size=1000     ,					)
						return CLIPTextModelWithProjection(__UpperCAmelCase				)





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						torch.manual_seed(0				)

						__UpperCamelCase      =	{
						    'num_attention_heads': 2,
						    'attention_head_dim': 12,
						    'embedding_dim': self.text_embedder_hidden_size,
						    'num_layers': 1,
						}

						__UpperCamelCase      =	PriorTransformer(**__UpperCAmelCase				)
						# clip_std and clip_mean is initialized to be 0 so PriorTransformer.post_process_latents will always return 0 - set clip_std to be 1 so it won't return 0
						__UpperCamelCase      =	nn.Parameter(torch.ones(model.clip_std.shape				)				)
						return model





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						torch.manual_seed(0				)
						__UpperCamelCase      =	CLIPVisionConfig(
						    hidden_size=self.text_embedder_hidden_size     ,					image_size=224     ,					projection_dim=self.text_embedder_hidden_size     ,					intermediate_size=37     ,					num_attention_heads=4     ,					num_channels=3     ,					num_hidden_layers=5     ,					patch_size=14     ,					)

						__UpperCamelCase      =	CLIPVisionModelWithProjection(__UpperCAmelCase				)
						return model





					@property
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						__UpperCamelCase      =	CLIPImageProcessor(
						    crop_size=224     ,					do_center_crop=__UpperCAmelCase     ,					do_normalize=__UpperCAmelCase     ,					do_resize=__UpperCAmelCase     ,					image_mean=[0.4_8_1_4_5_4_6_6, 0.4_5_7_8_2_7_5, 0.4_0_8_2_1_0_7_3]     ,					image_std=[0.2_6_8_6_2_9_5_4, 0.2_6_1_3_0_2_5_8, 0.2_7_5_7_7_7_1_1]     ,					resample=3     ,					size=224     ,					)

						return image_processor





					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						__UpperCamelCase      =	self.dummy_prior
						__UpperCamelCase      =	self.dummy_image_encoder
						__UpperCamelCase      =	self.dummy_text_encoder
						__UpperCamelCase      =	self.dummy_tokenizer
						__UpperCamelCase      =	self.dummy_image_processor

						__UpperCamelCase      =	UnCLIPScheduler(
						    variance_type='fixed_small_log'     ,					prediction_type='sample'     ,					num_train_timesteps=1000     ,					clip_sample=__UpperCAmelCase     ,					clip_sample_range=10.0     ,					)

						__UpperCamelCase      =	{
						    'prior': prior,
						    'image_encoder': image_encoder,
						    'text_encoder': text_encoder,
						    'tokenizer': tokenizer,
						    'scheduler': scheduler,
						    'image_processor': image_processor,
						}

						return components





					def 						UpperCAmelCase (     self     ,					__UpperCAmelCase     ,					__UpperCAmelCase=0				):

						'''simple docstring'''




						if str(__UpperCAmelCase				).startswith('mps'				):
							__UpperCamelCase      =	torch.manual_seed(__UpperCAmelCase				)
						else:
							__UpperCamelCase      =	torch.Generator(device=__UpperCAmelCase				).manual_seed(__UpperCAmelCase				)
						__UpperCamelCase      =	{
						    'prompt': 'horse',
						    'generator': generator,
						    'guidance_scale': 4.0,
						    'num_inference_steps': 2,
						    'output_type': 'np',
						}
						return inputs





					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						__UpperCamelCase      =	'cpu'

						__UpperCamelCase      =	self.get_dummy_components()

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

						pipe.set_progress_bar_config(disable=__UpperCAmelCase				)

						__UpperCamelCase      =	pipe(**self.get_dummy_inputs(__UpperCAmelCase				)				)
						__UpperCamelCase      =	output.image_embeds

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

						__UpperCamelCase      =	image[0, -10:]
						__UpperCamelCase      =	image_from_tuple[0, -10:]

						assert image.shape == (1, 32)

						__UpperCamelCase      =	np.array(
						    [-0.0_5_3_2, 1.7_1_2_0, 0.3_6_5_6, -1.0_8_5_2, -0.8_9_4_6, -1.1_7_5_6, 0.4_3_4_8, 0.2_4_8_2, 0.5_1_4_6, -0.1_1_5_6]				)

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





					@skip_mps
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						__UpperCamelCase      =	torch_device == 'cpu'
						__UpperCamelCase      =	True
						__UpperCamelCase      =	False

						self._test_inference_batch_single_identical(
						    test_max_difference=__UpperCAmelCase     ,					relax_max_difference=__UpperCAmelCase     ,					test_mean_pixel_difference=__UpperCAmelCase     ,					)







					@skip_mps
					def 						UpperCAmelCase (     self				):

						'''simple docstring'''




						__UpperCamelCase      =	torch_device == 'cpu'
						__UpperCamelCase      =	False

						self._test_attention_slicing_forward_pass(
						    test_max_difference=__UpperCAmelCase     ,					test_mean_pixel_difference=__UpperCAmelCase     ,					)





"""simple docstring"""

from math import factorial

UpperCamelCase     :    List[Any]       =			{str(d): factorial(d) for d in range(1_0)}






def 							A						(    snake_case				:int		)				->     int:
 return sum(DIGIT_FACTORIAL[d] for d in str(snake_case		)		)






def 							A						(    )				->     int:
 __UpperCamelCase      =	7 * factorial(9		) + 1
 return sum(i for i in range(3    , snake_case		) if sum_of_digit_factorial(snake_case		) == i		)


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



