





'''simple docstring'''






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 			lowerCamelCase					(						__UpperCAmelCase     ,							__UpperCAmelCase     ,							unittest.TestCase  ):
					_SCREAMING_SNAKE_CASE							   =    IFImgaImgSuperResolutionPipeline
					_SCREAMING_SNAKE_CASE							   =    TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {"width", "height"}
					_SCREAMING_SNAKE_CASE							   =    TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS.union({"original_image"}  )
					_SCREAMING_SNAKE_CASE							   =    PipelineTesterMixin.required_optional_params - {"latents"}


					def    SCREAMING_SNAKE_CASE_		(					self	:  Optional[Any]       ):





											'''simple docstring'''





											return self._get_superresolution_dummy_components()


					def    SCREAMING_SNAKE_CASE_		(					self	:  str       ,     __snake_case	:  List[Any]       ,     __snake_case	:  Any=0       ):





											'''simple docstring'''





											if str(__snake_case       ).startswith('mps'       ):
																	_snake_case:   str  					=		torch.manual_seed(__snake_case       )
											else:
																	_snake_case:   Optional[int]  					=		torch.Generator(device=__snake_case       ).manual_seed(__snake_case       )

											_snake_case:   Optional[int]  					=		floats_tensor((1, 3, 32, 32)       ,     rng=random.Random(__snake_case       )       ).to(__snake_case       )
											_snake_case:   Any  					=		floats_tensor((1, 3, 16, 16)       ,     rng=random.Random(__snake_case       )       ).to(__snake_case       )

											_snake_case:   str  					=		{
											    '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	:  int       ):





											'''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	:  List[str]       ):





											'''simple docstring'''





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


					def    SCREAMING_SNAKE_CASE_		(					self	:  str       ):





											'''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	:  int       ):





											'''simple docstring'''





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












'''simple docstring'''






import torch





def       lowercase_      (		)   ->Dict:
						if torch.cuda.is_available():
												_snake_case:   Any  					=		torch.cuda.device_count()
						else:
												_snake_case:   Optional[int]  					=		0
						print(F'''Successfully ran on {num_gpus} GPUs'''						)


if __name__ == "__main__":
		main()





