





import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModel

from diffusers import DDIMScheduler, LDMPipeline, UNetaDModel, VQModel
from diffusers.utils.testing_utils import enable_full_determinism, require_torch, slow, torch_device


enable_full_determinism()



class 					__snake_case	(  unittest.TestCase    ):


    '''simple docstring'''







    @property
    def  lowercase_					(       self     ):





        '''simple docstring'''

        torch.manual_seed(0     )
        SCREAMING_SNAKE_CASE__											=			UNetaDModel(
            block_out_channels=(32, 64)   ,				layers_per_block=2   ,				sample_size=32   ,				in_channels=3   ,				out_channels=3   ,				down_block_types=('''DownBlock2D''', '''AttnDownBlock2D''')   ,				up_block_types=('''AttnUpBlock2D''', '''UpBlock2D''')   ,				)
        return model



    @property
    def  lowercase_					(       self     ):





        '''simple docstring'''

        torch.manual_seed(0     )
        SCREAMING_SNAKE_CASE__											=			VQModel(
            block_out_channels=[32, 64]   ,				in_channels=3   ,				out_channels=3   ,				down_block_types=['''DownEncoderBlock2D''', '''DownEncoderBlock2D''']   ,				up_block_types=['''UpDecoderBlock2D''', '''UpDecoderBlock2D''']   ,				latent_channels=3   ,				)
        return model



    @property
    def  lowercase_					(       self     ):





        '''simple docstring'''

        torch.manual_seed(0     )
        SCREAMING_SNAKE_CASE__											=			CLIPTextConfig(
            bos_token_id=0   ,				eos_token_id=2   ,				hidden_size=32   ,				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 CLIPTextModel(A_     )




    def  lowercase_					(       self     ):





        '''simple docstring'''

        SCREAMING_SNAKE_CASE__											=			self.dummy_uncond_unet
        SCREAMING_SNAKE_CASE__											=			DDIMScheduler()
        SCREAMING_SNAKE_CASE__											=			self.dummy_vq_model

        SCREAMING_SNAKE_CASE__											=			LDMPipeline(unet=A_   ,				vqvae=A_   ,				scheduler=A_     )
        ldm.to(A_     )
        ldm.set_progress_bar_config(disable=A_     )

        SCREAMING_SNAKE_CASE__											=			torch.manual_seed(0     )
        SCREAMING_SNAKE_CASE__											=			ldm(generator=A_   ,				num_inference_steps=2   ,				output_type='''numpy'''     ).images

        SCREAMING_SNAKE_CASE__											=			torch.manual_seed(0     )
        SCREAMING_SNAKE_CASE__											=			ldm(generator=A_   ,				num_inference_steps=2   ,				output_type='''numpy'''   ,				return_dict=A_     )[0]

        SCREAMING_SNAKE_CASE__											=			image[0, -3:, -3:, -1]
        SCREAMING_SNAKE_CASE__											=			image_from_tuple[0, -3:, -3:, -1]

        assert image.shape == (1, 64, 64, 3)
        SCREAMING_SNAKE_CASE__											=			np.array([0.8512, 0.818, 0.6411, 0.6808, 0.4465, 0.5618, 0.46, 0.6231, 0.5172]     )
        SCREAMING_SNAKE_CASE__											=			1E-2 if torch_device != '''mps''' else 3E-2

        assert np.abs(image_slice.flatten() - expected_slice     ).max() < tolerance
        assert np.abs(image_from_tuple_slice.flatten() - expected_slice     ).max() < tolerance





@slow
@require_torch
class 					__snake_case	(  unittest.TestCase    ):


    '''simple docstring'''







    def  lowercase_					(       self     ):





        '''simple docstring'''

        SCREAMING_SNAKE_CASE__											=			LDMPipeline.from_pretrained('''CompVis/ldm-celebahq-256'''     )
        ldm.to(A_     )
        ldm.set_progress_bar_config(disable=A_     )

        SCREAMING_SNAKE_CASE__											=			torch.manual_seed(0     )
        SCREAMING_SNAKE_CASE__											=			ldm(generator=A_   ,				num_inference_steps=5   ,				output_type='''numpy'''     ).images

        SCREAMING_SNAKE_CASE__											=			image[0, -3:, -3:, -1]

        assert image.shape == (1, 2_56, 2_56, 3)
        SCREAMING_SNAKE_CASE__											=			np.array([0.4399, 0.44975, 0.46825, 0.474, 0.4359, 0.4581, 0.45095, 0.4341, 0.4447]     )
        SCREAMING_SNAKE_CASE__											=			1E-2 if torch_device != '''mps''' else 3E-2

        assert np.abs(image_slice.flatten() - expected_slice     ).max() < tolerance







import random
import unittest

import torch

from diffusers import IFInpaintingPipeline
from diffusers.utils import floats_tensor
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import skip_mps, torch_device

from ..pipeline_params import (
    TEXT_GUIDED_IMAGE_INPAINTING_BATCH_PARAMS,
    TEXT_GUIDED_IMAGE_INPAINTING_PARAMS,
)
from ..test_pipelines_common import PipelineTesterMixin
from . import IFPipelineTesterMixin



@skip_mps
class 					__snake_case	(  __SCREAMING_SNAKE_CASE			,     __SCREAMING_SNAKE_CASE			,     unittest.TestCase    ):


    '''simple docstring'''







    lowerCamelCase__    :		Any				=	IFInpaintingPipeline
    lowerCamelCase__    :		str				=	TEXT_GUIDED_IMAGE_INPAINTING_PARAMS - {"""width""", """height"""}
    lowerCamelCase__    :		Optional[Any]				=	TEXT_GUIDED_IMAGE_INPAINTING_BATCH_PARAMS
    lowerCamelCase__    :		Tuple				=	PipelineTesterMixin.required_optional_params - {"""latents"""}



    def  lowercase_					(       self     ):





        '''simple docstring'''

        return self._get_dummy_components()



    def  lowercase_					(       self   ,				A_   ,				A_=0     ):





        '''simple docstring'''

        if str(A_     ).startswith('''mps'''     ):
            SCREAMING_SNAKE_CASE__											=			torch.manual_seed(A_     )
        else:
            SCREAMING_SNAKE_CASE__											=			torch.Generator(device=A_     ).manual_seed(A_     )

        SCREAMING_SNAKE_CASE__											=			floats_tensor((1, 3, 32, 32)   ,				rng=random.Random(A_     )     ).to(A_     )
        SCREAMING_SNAKE_CASE__											=			floats_tensor((1, 3, 32, 32)   ,				rng=random.Random(A_     )     ).to(A_     )

        SCREAMING_SNAKE_CASE__											=			{
            '''prompt''': '''A painting of a squirrel eating a burger''',
            '''image''': image,
            '''mask_image''': mask_image,
            '''generator''': generator,
            '''num_inference_steps''': 2,
            '''output_type''': '''numpy''',
        }

        return inputs



    @unittest.skipIf(
        torch_device != '''cuda''' or not is_xformers_available()   ,				reason='''XFormers attention is only available with CUDA and `xformers` installed'''   ,				)
    def  lowercase_					(       self     ):





        '''simple docstring'''

        self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1E-3     )



    def  lowercase_					(       self     ):





        '''simple docstring'''

        self._test_save_load_optional_components()



    @unittest.skipIf(torch_device != '''cuda'''   ,				reason='''float16 requires CUDA'''     )
    def  lowercase_					(       self     ):





        '''simple docstring'''

        super().test_save_load_floataa(expected_max_diff=1E-1     )



    def  lowercase_					(       self     ):





        '''simple docstring'''

        self._test_attention_slicing_forward_pass(expected_max_diff=1E-2     )



    def  lowercase_					(       self     ):





        '''simple docstring'''

        self._test_save_load_local()




    def  lowercase_					(       self     ):





        '''simple docstring'''

        self._test_inference_batch_single_identical(
            expected_max_diff=1E-2   ,				)
