






import gc
import unittest

import numpy as np
import torch

from diffusers import StableDiffusionKDiffusionPipeline
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu


enable_full_determinism()



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







							'''simple docstring'''



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



							def  __UpperCAmelCase      (							self       )     ->							str:
												UpperCAmelCase_   :				Optional[int]						=						StableDiffusionKDiffusionPipeline.from_pretrained('CompVis/stable-diffusion-v1-4'       )
												UpperCAmelCase_   :				int						=						sd_pipe.to(_UpperCamelCase       )
												sd_pipe.set_progress_bar_config(disable=_UpperCamelCase       )

												sd_pipe.set_scheduler('sample_euler'       )

												UpperCAmelCase_   :				Any						=						'A painting of a squirrel eating a burger'
												UpperCAmelCase_   :				Optional[Any]						=						torch.manual_seed(0       )
												UpperCAmelCase_   :				Tuple						=						sd_pipe([prompt]    ,		generator=_UpperCamelCase    ,		guidance_scale=9.0    ,		num_inference_steps=2_0    ,		output_type='np'       )

												UpperCAmelCase_   :				Optional[Any]						=						output.images

												UpperCAmelCase_   :				Optional[Any]						=						image[0, -3:, -3:, -1]

												assert image.shape == (1, 5_1_2, 5_1_2, 3)
												UpperCAmelCase_   :				Tuple						=						np.array([0.04_47, 0.04_92, 0.04_68, 0.04_08, 0.03_83, 0.04_08, 0.03_54, 0.03_80, 0.03_39]       )

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



							def  __UpperCAmelCase      (							self       )     ->							int:
												UpperCAmelCase_   :				int						=						StableDiffusionKDiffusionPipeline.from_pretrained('stabilityai/stable-diffusion-2-1-base'       )
												UpperCAmelCase_   :				Dict						=						sd_pipe.to(_UpperCamelCase       )
												sd_pipe.set_progress_bar_config(disable=_UpperCamelCase       )

												sd_pipe.set_scheduler('sample_euler'       )

												UpperCAmelCase_   :				List[str]						=						'A painting of a squirrel eating a burger'
												UpperCAmelCase_   :				List[str]						=						torch.manual_seed(0       )
												UpperCAmelCase_   :				int						=						sd_pipe([prompt]    ,		generator=_UpperCamelCase    ,		guidance_scale=9.0    ,		num_inference_steps=2_0    ,		output_type='np'       )

												UpperCAmelCase_   :				List[Any]						=						output.images

												UpperCAmelCase_   :				Tuple						=						image[0, -3:, -3:, -1]

												assert image.shape == (1, 5_1_2, 5_1_2, 3)
												UpperCAmelCase_   :				int						=						np.array([0.12_37, 0.13_20, 0.14_38, 0.13_59, 0.13_90, 0.11_32, 0.12_77, 0.11_75, 0.11_12]       )

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



							def  __UpperCAmelCase      (							self       )     ->							Dict:
												UpperCAmelCase_   :				Any						=						StableDiffusionKDiffusionPipeline.from_pretrained('stabilityai/stable-diffusion-2-1-base'       )
												UpperCAmelCase_   :				Optional[Any]						=						sd_pipe.to(_UpperCamelCase       )
												sd_pipe.set_progress_bar_config(disable=_UpperCamelCase       )

												sd_pipe.set_scheduler('sample_dpmpp_2m'       )

												UpperCAmelCase_   :				List[str]						=						'A painting of a squirrel eating a burger'
												UpperCAmelCase_   :				Optional[Any]						=						torch.manual_seed(0       )
												UpperCAmelCase_   :				int						=						sd_pipe(
												    [prompt]    ,		generator=_UpperCamelCase    ,		guidance_scale=7.5    ,		num_inference_steps=1_5    ,		output_type='np'    ,		use_karras_sigmas=_UpperCamelCase    ,		)

												UpperCAmelCase_   :				str						=						output.images

												UpperCAmelCase_   :				List[str]						=						image[0, -3:, -3:, -1]

												assert image.shape == (1, 5_1_2, 5_1_2, 3)
												UpperCAmelCase_   :				str						=						np.array(
												    [0.11_38_16_89, 0.12_11_29_21, 0.1_38_94_57, 0.12_54_96_06, 0.1_24_49_64, 0.10_83_15_17, 0.11_56_28_66, 0.10_86_78_16, 0.10_49_90_48]       )

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














from typing import Mapping

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxSeqaSeqConfigWithPast
from ...utils import logging


__UpperCAmelCase     							=						logging.get_logger(__name__)

__UpperCAmelCase     							=						{
    'google/umt5-small': 'https://huggingface.co/google/umt5-small/resolve/main/config.json',
    # See all umt5 models at https://huggingface.co/models?filter=umt5
}



class   lowerCamelCase				(_snake_case      ):







		'''simple docstring'''



		_snake_case   :   Union[str, Any]							=  '''umt5'''
		_snake_case   :   Union[str, Any]							=  ['''past_key_values''']



		def __init__(							self    ,		_UpperCamelCase=2_5_0_1_1_2    ,		_UpperCamelCase=5_1_2    ,		_UpperCamelCase=6_4    ,		_UpperCamelCase=1_0_2_4    ,		_UpperCamelCase=8    ,		_UpperCamelCase=None    ,		_UpperCamelCase=6    ,		_UpperCamelCase=3_2    ,		_UpperCamelCase=1_2_8    ,		_UpperCamelCase=0.1    ,		_UpperCamelCase=1E-6    ,		_UpperCamelCase=1.0    ,		_UpperCamelCase="gated-gelu"    ,		_UpperCamelCase=True    ,		_UpperCamelCase=True    ,		_UpperCamelCase="T5Tokenizer"    ,		_UpperCamelCase=True    ,		_UpperCamelCase=0    ,		_UpperCamelCase=1    ,		_UpperCamelCase=0    ,		**_UpperCamelCase    ,		)     ->							List[Any]:
							super().__init__(
							    is_encoder_decoder=_UpperCamelCase    ,		tokenizer_class=_UpperCamelCase    ,		tie_word_embeddings=_UpperCamelCase    ,		pad_token_id=_UpperCamelCase    ,		eos_token_id=_UpperCamelCase    ,		decoder_start_token_id=_UpperCamelCase    ,		**_UpperCamelCase    ,		)
							UpperCAmelCase_   :				Union[str, Any]						=						vocab_size
							UpperCAmelCase_   :				List[str]						=						d_model
							UpperCAmelCase_   :				Any						=						d_kv
							UpperCAmelCase_   :				Optional[int]						=						d_ff
							UpperCAmelCase_   :				List[Any]						=						num_layers
							UpperCAmelCase_   :				Optional[Any]						=						(
							    num_decoder_layers if num_decoder_layers is not None else self.num_layers
							)  # default = symmetry
							UpperCAmelCase_   :				Optional[int]						=						num_heads
							UpperCAmelCase_   :				Optional[int]						=						relative_attention_num_buckets
							UpperCAmelCase_   :				Dict						=						relative_attention_max_distance
							UpperCAmelCase_   :				Tuple						=						dropout_rate
							UpperCAmelCase_   :				Union[str, Any]						=						layer_norm_epsilon
							UpperCAmelCase_   :				Optional[int]						=						initializer_factor
							UpperCAmelCase_   :				List[str]						=						feed_forward_proj
							UpperCAmelCase_   :				Any						=						use_cache

							UpperCAmelCase_   :				List[Any]						=						self.feed_forward_proj.split('-'       )
							UpperCAmelCase_   :				List[Any]						=						act_info[-1]
							UpperCAmelCase_   :				Union[str, Any]						=						act_info[0] == 'gated'

							if len(_UpperCamelCase       ) > 1 and act_info[0] != "gated" or len(_UpperCamelCase       ) > 2:
												raise ValueError(
												    f"`feed_forward_proj`: {feed_forward_proj} is not a valid activation function of the dense layer."
												    'Please make sure `feed_forward_proj` is of the format `gated-{ACT_FN}` or `{ACT_FN}`, e.g. '
												    '\'gated-gelu\' or \'relu\''       )

							if feed_forward_proj == "gated-gelu":
												UpperCAmelCase_   :				Optional[int]						=						'gelu_new'



		@property
		def  __UpperCAmelCase      (							self       )     ->							int:
							return self.d_model



		@property
		def  __UpperCAmelCase      (							self       )     ->							Any:
							return self.num_heads



		@property
		def  __UpperCAmelCase      (							self       )     ->							List[Any]:
							return self.num_layers





class   lowerCamelCase				(_snake_case      ):







		'''simple docstring'''



		@property
		# Copied from transformers.models.t5.configuration_t5.T5OnnxConfig.inputs
		def  __UpperCAmelCase      (							self       )     ->							Mapping[str, Mapping[int, str]]:
							UpperCAmelCase_   :				str						=						{
							    'input_ids': {0: 'batch', 1: 'encoder_sequence'},
							    'attention_mask': {0: 'batch', 1: 'encoder_sequence'},
							}
							if self.use_past:
												UpperCAmelCase_   :				Optional[int]						=						'past_encoder_sequence + sequence'
												UpperCAmelCase_   :				str						=						{0: 'batch'}
												UpperCAmelCase_   :				Optional[int]						=						{0: 'batch', 1: 'past_decoder_sequence + sequence'}
							else:
												UpperCAmelCase_   :				Optional[int]						=						{0: 'batch', 1: 'decoder_sequence'}
												UpperCAmelCase_   :				Union[str, Any]						=						{0: 'batch', 1: 'decoder_sequence'}

							if self.use_past:
												self.fill_with_past_key_values_(_UpperCamelCase    ,		direction='inputs'       )

							return common_inputs



		@property
		# Copied from transformers.models.t5.configuration_t5.T5OnnxConfig.default_onnx_opset
		def  __UpperCAmelCase      (							self       )     ->							int:
							return 1_3



		@property
		def  __UpperCAmelCase      (							self       )     ->							float:
							return 5E-4






