


'''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 						a__							(				a__							,							unittest.TestCase    ):





							'''simple docstring'''






							lowercase__     :  Optional[Any]      		= KandinskyVaaPriorPipeline
							lowercase__     :  List[str]      		= ["prompt"]
							lowercase__     :  Union[str, Any]      		= ["prompt", "negative_prompt"]
							lowercase__     :  Optional[int]      		= [
							    "num_images_per_prompt",
							    "generator",
							    "num_inference_steps",
							    "latents",
							    "negative_prompt",
							    "guidance_scale",
							    "output_type",
							    "return_dict",
							]
							lowercase__     :  str      		= False







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Dict:
														return 32







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				str:
														return 32







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				int:
														return self.time_input_dim







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Union[str, Any]:
														return self.time_input_dim * 4







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				List[Any]:
														return 1_00







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Union[str, Any]:
														lowerCAmelCase__			  =      CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip'''  )
														return tokenizer







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				List[str]:
														torch.manual_seed(0  )
														lowerCAmelCase__			  =      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=10_00   ,       )
														return CLIPTextModelWithProjection(lowerCamelCase_  )







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				List[str]:
														torch.manual_seed(0  )

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

														lowerCAmelCase__			  =      PriorTransformer(**lowerCamelCase_  )
														# 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
														lowerCAmelCase__			  =      nn.Parameter(torch.ones(model.clip_std.shape  )  )
														return model







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				int:
														torch.manual_seed(0  )
														lowerCAmelCase__			  =      CLIPVisionConfig(
														    hidden_size=self.text_embedder_hidden_size   ,       image_size=2_24   ,       projection_dim=self.text_embedder_hidden_size   ,       intermediate_size=37   ,       num_attention_heads=4   ,       num_channels=3   ,       num_hidden_layers=5   ,       patch_size=14   ,       )

														lowerCAmelCase__			  =      CLIPVisionModelWithProjection(lowerCamelCase_  )
														return model







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Any:
														lowerCAmelCase__			  =      CLIPImageProcessor(
														    crop_size=2_24   ,       do_center_crop=lowerCamelCase_   ,       do_normalize=lowerCamelCase_   ,       do_resize=lowerCamelCase_   ,       image_mean=[0.48_145_466, 0.4_578_275, 0.40_821_073]   ,       image_std=[0.26_862_954, 0.26_130_258, 0.27_577_711]   ,       resample=3   ,       size=2_24   ,       )

														return image_processor







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Dict:
														lowerCAmelCase__			  =      self.dummy_prior
														lowerCAmelCase__			  =      self.dummy_image_encoder
														lowerCAmelCase__			  =      self.dummy_text_encoder
														lowerCAmelCase__			  =      self.dummy_tokenizer
														lowerCAmelCase__			  =      self.dummy_image_processor

														lowerCAmelCase__			  =      UnCLIPScheduler(
														    variance_type='''fixed_small_log'''   ,       prediction_type='''sample'''   ,       num_train_timesteps=10_00   ,       clip_sample=lowerCamelCase_   ,       clip_sample_range=10.0   ,       )

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

														return components







							def     __SCREAMING_SNAKE_CASE				(						self   ,       lowerCamelCase_   ,       lowerCamelCase_=0  )			->				int:
														if str(lowerCamelCase_  ).startswith('''mps'''  ):
																					lowerCAmelCase__			  =      torch.manual_seed(lowerCamelCase_  )
														else:
																					lowerCAmelCase__			  =      torch.Generator(device=lowerCamelCase_  ).manual_seed(lowerCamelCase_  )
														lowerCAmelCase__			  =      {
														    '''prompt''': '''horse''',
														    '''generator''': generator,
														    '''guidance_scale''': 4.0,
														    '''num_inference_steps''': 2,
														    '''output_type''': '''np''',
														}
														return inputs







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				str:
														lowerCAmelCase__			  =      '''cpu'''

														lowerCAmelCase__			  =      self.get_dummy_components()

														lowerCAmelCase__			  =      self.pipeline_class(**lowerCamelCase_  )
														lowerCAmelCase__			  =      pipe.to(lowerCamelCase_  )

														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

														lowerCAmelCase__			  =      pipe(**self.get_dummy_inputs(lowerCamelCase_  )  )
														lowerCAmelCase__			  =      output.image_embeds

														lowerCAmelCase__			  =      pipe(
														    **self.get_dummy_inputs(lowerCamelCase_  )   ,       return_dict=lowerCamelCase_   ,       )[0]

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

														assert image.shape == (1, 32)

														lowerCAmelCase__			  =      np.array(
														    [-0.0_532, 1.7_120, 0.3_656, -1.0_852, -0.8_946, -1.1_756, 0.4_348, 0.2_482, 0.5_146, -0.1_156]  )

														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     __SCREAMING_SNAKE_CASE				(						self  )			->				Tuple:
														lowerCAmelCase__			  =      torch_device == '''cpu'''
														lowerCAmelCase__			  =      True
														lowerCAmelCase__			  =      False

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







							@skip_mps
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Tuple:
														lowerCAmelCase__			  =      torch_device == '''cpu'''
														lowerCAmelCase__			  =      False

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






from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCAmelCase_							=				logging.get_logger(__name__)

UpperCAmelCase_							=				{
    """google/canine-s""": """https://huggingface.co/google/canine-s/resolve/main/config.json""",
    # See all CANINE models at https://huggingface.co/models?filter=canine
}
class     UpperCamelCase__					(     lowerCamelCase__				):






		'''simple docstring'''






		__a       :       Optional[int]       =	"""canine"""






		def __init__(							self,   snake_case__=7_68,   snake_case__=12,   snake_case__=12,   snake_case__=30_72,   snake_case__="gelu",   snake_case__=0.1,   snake_case__=0.1,   snake_case__=1_63_84,   snake_case__=16,   snake_case__=0.02,   snake_case__=1E-12,   snake_case__=0,   snake_case__=0XE_0_0_0,   snake_case__=0XE_0_0_1,   snake_case__=4,   snake_case__=4,   snake_case__=8,   snake_case__=1_63_84,   snake_case__=1_28,   **snake_case__,   )       -> Optional[int]:






									"""simple docstring"""
									super().__init__(pad_token_id=snake_case__,   bos_token_id=snake_case__,   eos_token_id=snake_case__,   **snake_case__  )

									lowercase_	:   int  				=     max_position_embeddings
									lowercase_	:   Union[str, Any]  				=     hidden_size
									lowercase_	:   Optional[Any]  				=     num_hidden_layers
									lowercase_	:   str  				=     num_attention_heads
									lowercase_	:   List[Any]  				=     intermediate_size
									lowercase_	:   Optional[Any]  				=     hidden_act
									lowercase_	:   List[str]  				=     hidden_dropout_prob
									lowercase_	:   Any  				=     attention_probs_dropout_prob
									lowercase_	:   Union[str, Any]  				=     initializer_range
									lowercase_	:   Optional[Any]  				=     type_vocab_size
									lowercase_	:   Dict  				=     layer_norm_eps

									# Character config:
									lowercase_	:   Optional[int]  				=     downsampling_rate
									lowercase_	:   List[str]  				=     upsampling_kernel_size
									lowercase_	:   int  				=     num_hash_functions
									lowercase_	:   List[str]  				=     num_hash_buckets
									lowercase_	:   List[str]  				=     local_transformer_stride