
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 			__A( 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 				SCREAMING_SNAKE_CASE_		(     self				)    ->      int:


								'''simple docstring'''




								return self._get_superresolution_dummy_components()




				def 				SCREAMING_SNAKE_CASE_		(     self		,     _snake_case		,     _snake_case=0				)    ->      int:


								'''simple docstring'''




								if str(_snake_case				).startswith('''mps'''				):
												__a										=    torch.manual_seed(_snake_case				)
								else:
												__a										=    torch.Generator(device=_snake_case				).manual_seed(_snake_case				)

								__a										=    floats_tensor((1, 3, 32, 32)		,     rng=random.Random(_snake_case				)				).to(_snake_case				)
								__a										=    floats_tensor((1, 3, 16, 16)		,     rng=random.Random(_snake_case				)				).to(_snake_case				)

								__a										=    {
								    '''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 				SCREAMING_SNAKE_CASE_		(     self				)    ->      List[Any]:


								'''simple docstring'''




								self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1E-3				)




				def 				SCREAMING_SNAKE_CASE_		(     self				)    ->      Any:


								'''simple docstring'''




								self._test_save_load_optional_components()




				@unittest.skipIf(torch_device != '''cuda'''		,     reason='''float16 requires CUDA'''				)
				def 				SCREAMING_SNAKE_CASE_		(     self				)    ->      Any:


								'''simple docstring'''




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




				def 				SCREAMING_SNAKE_CASE_		(     self				)    ->      List[Any]:


								'''simple docstring'''




								self._test_attention_slicing_forward_pass(expected_max_diff=1E-2				)




				def 				SCREAMING_SNAKE_CASE_		(     self				)    ->      Union[str, Any]:


								'''simple docstring'''




								self._test_save_load_local()




				def 				SCREAMING_SNAKE_CASE_		(     self				)    ->      Optional[int]:


								'''simple docstring'''




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

from dataclasses import dataclass, field
from typing import ClassVar, Dict

from ..features import Features, Value
from .base import TaskTemplate







@dataclass(frozen=a			)
class 			__A( a			):
				snake_case_						   =    field(default='''language-modeling'''  ,   metadata={'''include_in_asdict_even_if_is_default''': True}			)

				snake_case_						   =    Features({'''text''': Value('''string'''			)}			)
				snake_case_						   =    Features({}			)
				snake_case_						   =    "text"




				@property
				def 				SCREAMING_SNAKE_CASE_		(     self				)    ->      Dict[str, str]:


								'''simple docstring'''




								return {self.text_column: "text"}