





"""simple docstring"""


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 							lowercase__			(   __SCREAMING_SNAKE_CASE					,     __SCREAMING_SNAKE_CASE					,     unittest.TestCase	):

			"""simple docstring"""
			__lowerCAmelCase     :				Tuple										=  IFInpaintingPipeline
			__lowerCAmelCase     :				Any										=  TEXT_GUIDED_IMAGE_INPAINTING_PARAMS - {"""width""", """height"""}
			__lowerCAmelCase     :				Tuple										=  TEXT_GUIDED_IMAGE_INPAINTING_BATCH_PARAMS
			__lowerCAmelCase     :				Dict										=  PipelineTesterMixin.required_optional_params - {"""latents"""}







			def   _a      (      self    ):






									'''simple docstring'''







									return self._get_dummy_components()







			def   _a      (      self						,   _A						,   _A=0    ):






									'''simple docstring'''







									if str(_A    ).startswith("""mps"""    ):
															UpperCamelCase				:		Optional[Any]				   =			torch.manual_seed(_A    )
									else:
															UpperCamelCase				:		Optional[Any]				   =			torch.Generator(device=_A    ).manual_seed(_A    )

									UpperCamelCase				:		str				   =			floats_tensor((1, 3, 3_2, 3_2)						,   rng=random.Random(_A    )    ).to(_A    )
									UpperCamelCase				:		Union[str, Any]				   =			floats_tensor((1, 3, 3_2, 3_2)						,   rng=random.Random(_A    )    ).to(_A    )

									UpperCamelCase				:		Dict				   =			{
									    """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   _a      (      self    ):






									'''simple docstring'''







									self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1e-3    )







			def   _a      (      self    ):






									'''simple docstring'''







									self._test_save_load_optional_components()







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






									'''simple docstring'''







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







			def   _a      (      self    ):






									'''simple docstring'''







									self._test_attention_slicing_forward_pass(expected_max_diff=1e-2    )







			def   _a      (      self    ):






									'''simple docstring'''







									self._test_save_load_local()







			def   _a      (      self    ):






									'''simple docstring'''







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










"""simple docstring"""





from packaging import version

from .import_utils import is_accelerate_available


if is_accelerate_available():
							import accelerate



def 					lowerCAmelCase_      (   SCREAMING_SNAKE_CASE							:				str ):


							'''simple docstring'''







							if not is_accelerate_available():
														return method
							__lowerCamelCase   :   Dict       =version.parse(accelerate.__version__ ).base_version
							if version.parse(SCREAMING_SNAKE_CASE ) < version.parse('''0.17.0''' ):
														return method

							def wrapper(self							:				List[Any]     ,    *SCREAMING_SNAKE_CASE							:				Any     ,    **SCREAMING_SNAKE_CASE							:				List[str] ):
														if hasattr(self     ,    '''_hf_hook''' ) and hasattr(self._hf_hook     ,    '''pre_forward''' ):
																					self._hf_hook.pre_forward(self )
														return method(self     ,    *SCREAMING_SNAKE_CASE     ,    **SCREAMING_SNAKE_CASE )

							return wrapper




