






import random
import unittest

import torch

from diffusers import IFImgaImgSuperResolutionPipeline
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_VARIATION_BATCH_PARAMS, TEXT_GUIDED_IMAGE_VARIATION_PARAMS
from ..test_pipelines_common import PipelineTesterMixin
from . import IFPipelineTesterMixin



@skip_mps
class 							_UpperCamelCase			(a_							,		a_							,		unittest.TestCase			):
      snake_case_  =							IFImgaImgSuperResolutionPipeline
      snake_case_  =							TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {"""width""", """height"""}
      snake_case_  =							TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS.union({"""original_image"""}			)
      snake_case_  =							PipelineTesterMixin.required_optional_params - {"""latents"""}


      def  __UpperCAmelCase		(	self	)->	int:
           return self._get_superresolution_dummy_components()


      def  __UpperCAmelCase		(	self					,						__UpperCamelCase					,						__UpperCamelCase=0	)->	Tuple:
           if str(__UpperCamelCase	).startswith("mps"	):
                __lowerCAmelCase								=					torch.manual_seed(__UpperCamelCase	)
           else:
                __lowerCAmelCase								=					torch.Generator(device=__UpperCamelCase	).manual_seed(__UpperCamelCase	)

           __lowerCAmelCase								=					floats_tensor((1, 3, 3_2, 3_2)					,						rng=random.Random(__UpperCamelCase	)	).to(__UpperCamelCase	)
           __lowerCAmelCase								=					floats_tensor((1, 3, 1_6, 1_6)					,						rng=random.Random(__UpperCamelCase	)	).to(__UpperCamelCase	)

           __lowerCAmelCase								=					{
               "prompt": "A painting of a squirrel eating a burger",
               "image": image,
               "original_image": original_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  __UpperCAmelCase		(	self	)->	Tuple:
           self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1e-3	)


      def  __UpperCAmelCase		(	self	)->	str:
           self._test_save_load_optional_components()


      @unittest.skipIf(torch_device != "cuda"					,						reason="float16 requires CUDA"	)
      def  __UpperCAmelCase		(	self	)->	Tuple:
           # Due to non-determinism in save load of the hf-internal-testing/tiny-random-t5 text encoder
           super().test_save_load_floataa(expected_max_diff=1e-1	)


      def  __UpperCAmelCase		(	self	)->	Tuple:
           self._test_attention_slicing_forward_pass(expected_max_diff=1e-2	)


      def  __UpperCAmelCase		(	self	)->	Dict:
           self._test_save_load_local()


      def  __UpperCAmelCase		(	self	)->	Dict:
           self._test_inference_batch_single_identical(
               expected_max_diff=1e-2					,						)














lowerCamelCase			:					str         =	'''
# Transformers 설치 방법
! pip install transformers datasets
# 마지막 릴리스 대신 소스에서 설치하려면, 위 명령을 주석으로 바꾸고 아래 명령을 해제하세요.
# ! pip install git+https://github.com/huggingface/transformers.git
'''

lowerCamelCase			:					Tuple         =	[{'''type''': '''code''', '''content''': INSTALL_CONTENT}]
lowerCamelCase			:					Dict         =	{
    '''{processor_class}''': '''FakeProcessorClass''',
    '''{model_class}''': '''FakeModelClass''',
    '''{object_class}''': '''FakeObjectClass''',
}






