

'''simple docstring'''







import random
import unittest

import torch

from diffusers import IFInpaintingSuperResolutionPipeline
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 					A__      (      UpperCamelCase_						,						UpperCamelCase_						,						unittest.TestCase			):
    lowercase						=		IFInpaintingSuperResolutionPipeline
    lowercase						=		TEXT_GUIDED_IMAGE_INPAINTING_PARAMS - {"width", "height"}
    lowercase						=		TEXT_GUIDED_IMAGE_INPAINTING_BATCH_PARAMS.union({"original_image"}			)
    lowercase						=		PipelineTesterMixin.required_optional_params - {"latents"}



    def 					snake_case_			(					self       )						->      Optional[Any]:





           '''simple docstring'''
           return self._get_superresolution_dummy_components()



    def 					snake_case_			(					self		,				UpperCamelCase__		,				UpperCamelCase__=0       )						->      List[str]:





           '''simple docstring'''





           if str(UpperCamelCase__       ).startswith("""mps"""       ):
                  A_						=      torch.manual_seed(UpperCamelCase__       )
           else:
                  A_						=      torch.Generator(device=UpperCamelCase__       ).manual_seed(UpperCamelCase__       )

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

           A_						=      {
               '''prompt''': '''A painting of a squirrel eating a burger''',
               '''image''': image,
               '''original_image''': original_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 					snake_case_			(					self       )						->      Optional[Any]:





           '''simple docstring'''
           self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1e-3       )



    def 					snake_case_			(					self       )						->      int:





           '''simple docstring'''
           self._test_save_load_optional_components()



    @unittest.skipIf(torch_device != """cuda"""		,				reason="""float16 requires CUDA"""       )
    def 					snake_case_			(					self       )						->      List[str]:





           '''simple docstring'''
           super().test_save_load_floataa(expected_max_diff=1e-1       )



    def 					snake_case_			(					self       )						->      int:





           '''simple docstring'''
           self._test_attention_slicing_forward_pass(expected_max_diff=1e-2       )



    def 					snake_case_			(					self       )						->      Optional[Any]:





           '''simple docstring'''
           self._test_save_load_local()







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





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



'''simple docstring'''







def       UpperCAmelCase__    (      UpperCAmelCase__,       UpperCAmelCase__,       UpperCAmelCase__ = 0,       UpperCAmelCase__ = 0				)			->			int:
       A_						=      right or len(UpperCAmelCase__				) - 1
       if left > right:
              return -1
       elif list_data[left] == key:
              return left
       elif list_data[right] == key:
              return right
       else:
              return search(UpperCAmelCase__,       UpperCAmelCase__,       left + 1,       right - 1				)


if __name__ == "__main__":
      import doctest

      doctest.testmod()
