






import gc
import random
import unittest

import numpy as np
import torch

from diffusers import DDIMScheduler, KandinskyVaaPipeline, KandinskyVaaPriorPipeline, UNetaDConditionModel, VQModel
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     lowerCamelCase_					(   lowerCamelCase      ,					unittest.TestCase			):
				a__       							=	KandinskyVaaPipeline
				a__       							=	[
				    '''image_embeds''',
				    '''negative_image_embeds''',
				]
				a__       							=	['''image_embeds''', '''negative_image_embeds''']
				a__       							=	[
				    '''generator''',
				    '''height''',
				    '''width''',
				    '''latents''',
				    '''guidance_scale''',
				    '''num_inference_steps''',
				    '''return_dict''',
				    '''guidance_scale''',
				    '''num_images_per_prompt''',
				    '''output_type''',
				    '''return_dict''',
				]
				a__       							=	False







				@property
				def       A						(    self  ):
								"""simple docstring"""
								return 3_2







				@property
				def       A						(    self  ):
								"""simple docstring"""
								return 3_2







				@property
				def       A						(    self  ):
								"""simple docstring"""
								return self.time_input_dim







				@property
				def       A						(    self  ):
								"""simple docstring"""
								return self.time_input_dim * 4







				@property
				def       A						(    self  ):
								"""simple docstring"""
								return 1_0_0







				@property
				def       A						(    self  ):
								"""simple docstring"""
								torch.manual_seed(0  )

								__magic_name__		:str   =   {
								    '''in_channels''': 4,
								    # Out channels is double in channels because predicts mean and variance
								    '''out_channels''': 8,
								    '''addition_embed_type''': '''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''': '''image_proj''',
								    '''cross_attention_dim''': self.cross_attention_dim,
								    '''attention_head_dim''': 4,
								    '''resnet_time_scale_shift''': '''scale_shift''',
								    '''class_embed_type''': None,
								}

								__magic_name__		:Optional[int]   =   UNetaDConditionModel(**__lowerCAmelCase  )
								return model







				@property
				def       A						(    self  ):
								"""simple docstring"""
								return {
								    "block_out_channels": [3_2, 6_4],
								    "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": 1_2,
								    "out_channels": 3,
								    "up_block_types": [
								        "AttnUpDecoderBlock2D",
								        "UpDecoderBlock2D",
								    ],
								    "vq_embed_dim": 4,
								}







				@property
				def       A						(    self  ):
								"""simple docstring"""
								torch.manual_seed(0  )
								__magic_name__		:int   =   VQModel(**self.dummy_movq_kwargs  )
								return model







				def       A						(    self  ):
								"""simple docstring"""
								__magic_name__		:Dict   =   self.dummy_unet
								__magic_name__		:str   =   self.dummy_movq

								__magic_name__		:Tuple   =   DDIMScheduler(
								    num_train_timesteps=1_0_0_0							,       beta_schedule='''linear'''							,       beta_start=0.00085							,       beta_end=0.012							,       clip_sample=__lowerCAmelCase							,       set_alpha_to_one=__lowerCAmelCase							,       steps_offset=1							,       prediction_type='''epsilon'''							,       thresholding=__lowerCAmelCase							,       )

								__magic_name__		:Dict   =   {
								    '''unet''': unet,
								    '''scheduler''': scheduler,
								    '''movq''': movq,
								}
								return components







				def       A						(    self							,       __lowerCAmelCase							,       __lowerCAmelCase=0  ):
								"""simple docstring"""
								__magic_name__		:int   =   floats_tensor((1, self.text_embedder_hidden_size)							,       rng=random.Random(__lowerCAmelCase  )  ).to(__lowerCAmelCase  )
								__magic_name__		:Optional[int]   =   floats_tensor((1, self.text_embedder_hidden_size)							,       rng=random.Random(seed + 1  )  ).to(
								    __lowerCAmelCase  )
								if str(__lowerCAmelCase  ).startswith('''mps'''  ):
												__magic_name__		:Dict   =   torch.manual_seed(__lowerCAmelCase  )
								else:
												__magic_name__		:Any   =   torch.Generator(device=__lowerCAmelCase  ).manual_seed(__lowerCAmelCase  )
								__magic_name__		:Union[str, Any]   =   {
								    '''image_embeds''': image_embeds,
								    '''negative_image_embeds''': negative_image_embeds,
								    '''generator''': generator,
								    '''height''': 6_4,
								    '''width''': 6_4,
								    '''guidance_scale''': 4.0,
								    '''num_inference_steps''': 2,
								    '''output_type''': '''np''',
								}
								return inputs







				def       A						(    self  ):
								"""simple docstring"""
								__magic_name__		:Dict   =   '''cpu'''

								__magic_name__		:int   =   self.get_dummy_components()

								__magic_name__		:List[Any]   =   self.pipeline_class(**__lowerCAmelCase  )
								__magic_name__		:Optional[int]   =   pipe.to(__lowerCAmelCase  )

								pipe.set_progress_bar_config(disable=__lowerCAmelCase  )

								__magic_name__		:Optional[int]   =   pipe(**self.get_dummy_inputs(__lowerCAmelCase  )  )
								__magic_name__		:Optional[int]   =   output.images

								__magic_name__		:Optional[int]   =   pipe(
								    **self.get_dummy_inputs(__lowerCAmelCase  )							,       return_dict=__lowerCAmelCase							,       )[0]

								__magic_name__		:List[Any]   =   image[0, -3:, -3:, -1]
								__magic_name__		:Dict   =   image_from_tuple[0, -3:, -3:, -1]

								assert image.shape == (1, 6_4, 6_4, 3)

								__magic_name__		:str   =   np.array(
								    [0.6237976, 1.0, 0.36441332, 1.0, 0.70639634, 0.29877186, 0.85652125, 0.5216843, 0.54454046]  )

								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     lowerCamelCase_					(   unittest.TestCase			):







				def       A						(    self  ):
								"""simple docstring"""
								# clean up the VRAM after each test
								super().tearDown()
								gc.collect()
								torch.cuda.empty_cache()







				def       A						(    self  ):
								"""simple docstring"""
								__magic_name__		:Tuple   =   load_numpy(
								    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'''
								    '''/kandinskyv22/kandinskyv22_text2img_cat_fp16.npy'''  )

								__magic_name__		:Dict   =   KandinskyVaaPriorPipeline.from_pretrained(
								    '''kandinsky-community/kandinsky-2-2-prior'''							,       torch_dtype=torch.floataa  )
								pipe_prior.to(__lowerCAmelCase  )

								__magic_name__		:Any   =   KandinskyVaaPipeline.from_pretrained(
								    '''kandinsky-community/kandinsky-2-2-decoder'''							,       torch_dtype=torch.floataa  )
								__magic_name__		:List[str]   =   pipeline.to(__lowerCAmelCase  )
								pipeline.set_progress_bar_config(disable=__lowerCAmelCase  )

								__magic_name__		:int   =   '''red cat, 4k photo'''

								__magic_name__		:int   =   torch.Generator(device='''cuda'''  ).manual_seed(0  )
								__magic_name__  ,					__magic_name__		:int   =   pipe_prior(
								    __lowerCAmelCase							,       generator=__lowerCAmelCase							,       num_inference_steps=5							,       negative_prompt=''''''							,       ).to_tuple()

								__magic_name__		:int   =   torch.Generator(device='''cuda'''  ).manual_seed(0  )
								__magic_name__		:Optional[Any]   =   pipeline(
								    image_embeds=__lowerCAmelCase							,       negative_image_embeds=__lowerCAmelCase							,       generator=__lowerCAmelCase							,       num_inference_steps=1_0_0							,       output_type='''np'''							,       )

								__magic_name__		:Union[str, Any]   =   output.images[0]

								assert image.shape == (5_1_2, 5_1_2, 3)

								assert_mean_pixel_difference(__lowerCAmelCase							,       __lowerCAmelCase  )














from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tokenizers_available, is_torch_available


SCREAMING_SNAKE_CASE__   :      Dict				=		{
    """configuration_canine""": ["""CANINE_PRETRAINED_CONFIG_ARCHIVE_MAP""", """CanineConfig"""],
    """tokenization_canine""": ["""CanineTokenizer"""],
}

try:
					if not is_torch_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					SCREAMING_SNAKE_CASE__   :      str				=		[
					    """CANINE_PRETRAINED_MODEL_ARCHIVE_LIST""",
					    """CanineForMultipleChoice""",
					    """CanineForQuestionAnswering""",
					    """CanineForSequenceClassification""",
					    """CanineForTokenClassification""",
					    """CanineLayer""",
					    """CanineModel""",
					    """CaninePreTrainedModel""",
					    """load_tf_weights_in_canine""",
					]


if TYPE_CHECKING:
					from .configuration_canine import CANINE_PRETRAINED_CONFIG_ARCHIVE_MAP, CanineConfig
					from .tokenization_canine import CanineTokenizer

					try:
										if not is_torch_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .modeling_canine import (
										    CANINE_PRETRAINED_MODEL_ARCHIVE_LIST,
										    CanineForMultipleChoice,
										    CanineForQuestionAnswering,
										    CanineForSequenceClassification,
										    CanineForTokenClassification,
										    CanineLayer,
										    CanineModel,
										    CaninePreTrainedModel,
										    load_tf_weights_in_canine,
										)


else:
					import sys

					SCREAMING_SNAKE_CASE__   :      Union[str, Any]				=		_LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)






