
'''simple docstring'''


from binascii import hexlify
from hashlib import shaaaa
from os import urandom

# RFC 3526 - More Modular Exponential (MODP) Diffie-Hellman groups for
# Internet Key Exchange (IKE) https://tools.ietf.org/html/rfc3526

__lowercase							:   int					=     {
    # 1536-bit
    5: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 2048-bit
    14: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AACAA68FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 3072-bit
    15: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 4096-bit
    16: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7'''
            + '''88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA'''
            + '''2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6'''
            + '''287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED'''
            + '''1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9'''
            + '''93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199'''
            + '''FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 6144-bit
    17: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08'''
            + '''8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B'''
            + '''302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9'''
            + '''A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6'''
            + '''49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8'''
            + '''FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C'''
            + '''180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718'''
            + '''3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D'''
            + '''04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D'''
            + '''B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226'''
            + '''1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC'''
            + '''E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26'''
            + '''99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB'''
            + '''04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2'''
            + '''233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127'''
            + '''D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492'''
            + '''36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406'''
            + '''AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918'''
            + '''DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151'''
            + '''2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03'''
            + '''F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F'''
            + '''BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA'''
            + '''CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B'''
            + '''B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632'''
            + '''387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E'''
            + '''6DCC4024FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 8192-bit
    18: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7'''
            + '''88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA'''
            + '''2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6'''
            + '''287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED'''
            + '''1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9'''
            + '''93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492'''
            + '''36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD'''
            + '''F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831'''
            + '''179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B'''
            + '''DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF'''
            + '''5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6'''
            + '''D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3'''
            + '''23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA'''
            + '''CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328'''
            + '''06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C'''
            + '''DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE'''
            + '''12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4'''
            + '''38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300'''
            + '''741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568'''
            + '''3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9'''
            + '''22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B'''
            + '''4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A'''
            + '''062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36'''
            + '''4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1'''
            + '''B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92'''
            + '''4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47'''
            + '''9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71'''
            + '''60C980DD98EDD3DFFFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
}

class 	__lowercase				:

			def __init__(self			,   A = 1_4      ):
								if group not in primes:
													raise ValueError('''Unsupported Group'''      )
								lowerCamelCase_					:      Any     =		primes[group]['''prime''']
								lowerCamelCase_					:      Dict     =		primes[group]['''generator''']

								lowerCamelCase_					:      Optional[int]     =		int(hexlify(urandom(3_2      )      )			,   base=1_6      )

			def        UpperCAmelCase__ (self      ):
								return hex(self.__private_key      )[2:]

			def        UpperCAmelCase__ (self      ):
								lowerCamelCase_					:      str     =		pow(self.generator			,   self.__private_key			,   self.prime      )
								return hex(A      )[2:]

			def        UpperCAmelCase__ (self			,   A      ):
								# check if the other public key is valid based on NIST SP800-56
								return (
								    2 <= key <= self.prime - 2
								    and pow(A			,   (self.prime - 1) // 2			,   self.prime      ) == 1
								)

			def        UpperCAmelCase__ (self			,   A      ):
								lowerCamelCase_					:      List[str]     =		int(A			,   base=1_6      )
								if not self.is_valid_public_key(A      ):
													raise ValueError('''Invalid public key'''      )
								lowerCamelCase_					:      int     =		pow(A			,   self.__private_key			,   self.prime      )
								return shaaaa(str(A      ).encode()      ).hexdigest()

			@staticmethod
			def        UpperCAmelCase__ (A			,   A      ):
								# check if the other public key is valid based on NIST SP800-56
								return (
								    2 <= remote_public_key_str <= prime - 2
								    and pow(A			,   (prime - 1) // 2			,   A      ) == 1
								)






			@staticmethod
			def        UpperCAmelCase__ (A			,   A			,   A = 1_4      ):
								lowerCamelCase_					:      Optional[Any]     =		int(A			,   base=1_6      )
								lowerCamelCase_					:      Tuple     =		int(A			,   base=1_6      )
								lowerCamelCase_					:      Optional[int]     =		primes[group]['''prime''']
								if not DiffieHellman.is_valid_public_key_static(A			,   A      ):
													raise ValueError('''Invalid public key'''      )
								lowerCamelCase_					:      Dict     =		pow(A			,   A			,   A      )
								return shaaaa(str(A      ).encode()      ).hexdigest()


if __name__ == "__main__":
					import doctest

					doctest.testmod()




'''simple docstring'''


import gc
import random
import unittest

import numpy as np
import torch
from PIL import Image

from diffusers import (
    DDIMScheduler,
    KandinskyVaaInpaintPipeline,
    KandinskyVaaPriorPipeline,
    UNetaDConditionModel,
    VQModel,
)
from diffusers.utils import floats_tensor, load_image, 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 	__lowercase				(  _lowercase      ,     unittest.TestCase    ):
			lowerCamelCase			:		Optional[Any]	      =			KandinskyVaaInpaintPipeline
			lowerCamelCase			:		Tuple	      =			["image_embeds", "negative_image_embeds", "image", "mask_image"]
			lowerCamelCase			:		List[str]	      =			[
			    "image_embeds",
			    "negative_image_embeds",
			    "image",
			    "mask_image",
			]
			lowerCamelCase			:		Optional[int]	      =			[
			    "generator",
			    "height",
			    "width",
			    "latents",
			    "guidance_scale",
			    "num_inference_steps",
			    "return_dict",
			    "guidance_scale",
			    "num_images_per_prompt",
			    "output_type",
			    "return_dict",
			]
			lowerCamelCase			:		List[Any]	      =			False

			@property
			def        UpperCAmelCase__ (self      ):
								return 3_2

			@property
			def        UpperCAmelCase__ (self      ):
								return 3_2

			@property
			def        UpperCAmelCase__ (self      ):
								return self.time_input_dim

			@property
			def        UpperCAmelCase__ (self      ):
								return self.time_input_dim * 4

			@property
			def        UpperCAmelCase__ (self      ):
								return 1_0_0

			@property
			def        UpperCAmelCase__ (self      ):
								torch.manual_seed(0      )

								lowerCamelCase_					:      Optional[Any]     =		{
								    '''in_channels''': 9,
								    # 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,
								}

								lowerCamelCase_					:      str     =		UNetaDConditionModel(**A      )
								return model

			@property
			def        UpperCAmelCase__ (self      ):
								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        UpperCAmelCase__ (self      ):
								torch.manual_seed(0      )
								lowerCamelCase_					:      Optional[Any]     =		VQModel(**self.dummy_movq_kwargs      )
								return model

			def        UpperCAmelCase__ (self      ):
								lowerCamelCase_					:      List[str]     =		self.dummy_unet
								lowerCamelCase_					:      Optional[int]     =		self.dummy_movq

								lowerCamelCase_					:      Union[str, Any]     =		DDIMScheduler(
								    num_train_timesteps=1_0_0_0			,   beta_schedule='''linear'''			,   beta_start=0.0_00_85			,   beta_end=0.0_12			,   clip_sample=A			,   set_alpha_to_one=A			,   steps_offset=1			,   prediction_type='''epsilon'''			,   thresholding=A			,   )

								lowerCamelCase_					:      Dict     =		{
								    '''unet''': unet,
								    '''scheduler''': scheduler,
								    '''movq''': movq,
								}

								return components

			def        UpperCAmelCase__ (self			,   A			,   A=0      ):
								lowerCamelCase_					:      List[Any]     =		floats_tensor((1, self.text_embedder_hidden_size)			,   rng=random.Random(A      )      ).to(A      )
								lowerCamelCase_					:      Tuple     =		floats_tensor((1, self.text_embedder_hidden_size)			,   rng=random.Random(seed + 1      )      ).to(
								    A      )
								# create init_image
								lowerCamelCase_					:      Dict     =		floats_tensor((1, 3, 6_4, 6_4)			,   rng=random.Random(A      )      ).to(A      )
								lowerCamelCase_					:      List[str]     =		image.cpu().permute(0			,   2			,   3			,   1      )[0]
								lowerCamelCase_					:      Any     =		Image.fromarray(np.uinta(A      )      ).convert('''RGB'''      ).resize((2_5_6, 2_5_6)      )
								# create mask
								lowerCamelCase_					:      List[str]     =		np.ones((6_4, 6_4)			,   dtype=np.floataa      )
								lowerCamelCase_					:      Union[str, Any]     =		0

								if str(A      ).startswith('''mps'''      ):
													lowerCamelCase_					:      int     =		torch.manual_seed(A      )
								else:
													lowerCamelCase_					:      Union[str, Any]     =		torch.Generator(device=A      ).manual_seed(A      )
								lowerCamelCase_					:      Optional[Any]     =		{
								    '''image''': init_image,
								    '''mask_image''': mask,
								    '''image_embeds''': image_embeds,
								    '''negative_image_embeds''': negative_image_embeds,
								    '''generator''': generator,
								    '''height''': 6_4,
								    '''width''': 6_4,
								    '''num_inference_steps''': 2,
								    '''guidance_scale''': 4.0,
								    '''output_type''': '''np''',
								}
								return inputs

			def        UpperCAmelCase__ (self      ):
								lowerCamelCase_					:      Optional[Any]     =		'''cpu'''

								lowerCamelCase_					:      str     =		self.get_dummy_components()

								lowerCamelCase_					:      Tuple     =		self.pipeline_class(**A      )
								lowerCamelCase_					:      Union[str, Any]     =		pipe.to(A      )

								pipe.set_progress_bar_config(disable=A      )

								lowerCamelCase_					:      str     =		pipe(**self.get_dummy_inputs(A      )      )
								lowerCamelCase_					:      Any     =		output.images

								lowerCamelCase_					:      Union[str, Any]     =		pipe(
								    **self.get_dummy_inputs(A      )			,   return_dict=A			,   )[0]

								lowerCamelCase_					:      List[Any]     =		image[0, -3:, -3:, -1]
								lowerCamelCase_					:      Tuple     =		image_from_tuple[0, -3:, -3:, -1]

								print(F"""image.shape {image.shape}"""      )

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

								lowerCamelCase_					:      Any     =		np.array(
								    [0.50_77_59_03, 0.49_52_71_95, 0.48_82_45_43, 0.50_19_22_37, 0.48_64_49_06, 0.49_37_38_14, 0.4_78_05_98, 0.47_23_48_27, 0.48_32_78_48]      )

								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()}"""






			def        UpperCAmelCase__ (self      ):
								super().test_inference_batch_single_identical(expected_max_diff=3E-3      )

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

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






			def        UpperCAmelCase__ (self      ):
								lowerCamelCase_					:      Tuple     =		load_numpy(
								    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'''
								    '''/kandinskyv22/kandinskyv22_inpaint_cat_with_hat_fp16.npy'''      )

								lowerCamelCase_					:      Optional[Any]     =		load_image(
								    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main''' '''/kandinsky/cat.png'''      )
								lowerCamelCase_					:      List[str]     =		np.ones((7_6_8, 7_6_8)			,   dtype=np.floataa      )
								lowerCamelCase_					:      int     =		0

								lowerCamelCase_					:      Union[str, Any]     =		'''a hat'''

								lowerCamelCase_					:      Optional[int]     =		KandinskyVaaPriorPipeline.from_pretrained(
								    '''kandinsky-community/kandinsky-2-2-prior'''			,   torch_dtype=torch.floataa      )
								pipe_prior.to(A      )

								lowerCamelCase_					:      Any     =		KandinskyVaaInpaintPipeline.from_pretrained(
								    '''kandinsky-community/kandinsky-2-2-decoder-inpaint'''			,   torch_dtype=torch.floataa      )
								lowerCamelCase_					:      Any     =		pipeline.to(A      )
								pipeline.set_progress_bar_config(disable=A      )

								lowerCamelCase_					:      Any     =		torch.Generator(device='''cpu'''      ).manual_seed(0      )
								lowerCamelCase_,      lowerCamelCase_					:      Tuple     =		pipe_prior(
								    A			,   generator=A			,   num_inference_steps=5			,   negative_prompt=''''''			,   ).to_tuple()

								lowerCamelCase_					:      Union[str, Any]     =		pipeline(
								    image=A			,   mask_image=A			,   image_embeds=A			,   negative_image_embeds=A			,   generator=A			,   num_inference_steps=1_0_0			,   height=7_6_8			,   width=7_6_8			,   output_type='''np'''			,   )

								lowerCamelCase_					:      List[str]     =		output.images[0]

								assert image.shape == (7_6_8, 7_6_8, 3)

								assert_mean_pixel_difference(A			,   A      )


