
'''simple docstring'''





import gc
import unittest

import numpy as np
import torch

from diffusers import RePaintPipeline, RePaintScheduler, UNetaDModel
from diffusers.utils.testing_utils import (
    enable_full_determinism,
    load_image,
    load_numpy,
    nightly,
    require_torch_gpu,
    skip_mps,
    torch_device,
)

from ..pipeline_params import IMAGE_INPAINTING_BATCH_PARAMS, IMAGE_INPAINTING_PARAMS
from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()


class 	UpperCamelCase__					(      SCREAMING_SNAKE_CASE ,       unittest.TestCase):
 UpperCAmelCase__      :      Tuple  			=   RePaintPipeline
 UpperCAmelCase__      :      Any  			=   IMAGE_INPAINTING_PARAMS - {'width', 'height', 'guidance_scale'}
 UpperCAmelCase__      :      List[Any]  			=   PipelineTesterMixin.required_optional_params - {
     'latents',
     'num_images_per_prompt',
     'callback',
     'callback_steps',
 }
 UpperCAmelCase__      :      Union[str, Any]  			=   IMAGE_INPAINTING_BATCH_PARAMS
 UpperCAmelCase__      :      List[str]  			=   False






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







       '''simple docstring'''



       torch.manual_seed(0     )
       torch.manual_seed(0     )
       __A    		=     UNetaDModel(
           block_out_channels=(32, 64)		,			layers_per_block=2		,			sample_size=32		,			in_channels=3		,			out_channels=3		,			down_block_types=('DownBlock2D', 'AttnDownBlock2D')		,			up_block_types=('AttnUpBlock2D', 'UpBlock2D')		,			)
       __A    		=     RePaintScheduler()
       __A    		=     {'unet': unet, 'scheduler': scheduler}
       return components






 def 		lowercase_  (     self					:Any		,			_A					:Union[str, Any]		,			_A					:Dict=0     )			->     Any:







       '''simple docstring'''



       if str(_A     ).startswith('mps'     ):
             __A    		=     torch.manual_seed(_A     )
       else:
             __A    		=     torch.Generator(device=_A     ).manual_seed(_A     )
       __A    		=     np.random.RandomState(_A     ).standard_normal((1, 3, 32, 32)     )
       __A    		=     torch.from_numpy(_A     ).to(device=_A		,			dtype=torch.floataa     )
       __A    		=     (image > 0).to(device=_A		,			dtype=torch.floataa     )
       __A    		=     {
           'image': image,
           'mask_image': mask,
           'generator': generator,
           'num_inference_steps': 5,
           'eta': 0.0,
           'jump_length': 2,
           'jump_n_sample': 2,
           'output_type': 'numpy',
       }
       return inputs






 def 		lowercase_  (     self					:str     )			->     Optional[Any]:







       '''simple docstring'''



       __A    		=     'cpu'  # ensure determinism for the device-dependent torch.Generator
       __A    		=     self.get_dummy_components()
       __A    		=     RePaintPipeline(**_A     )
       __A    		=     sd_pipe.to(_A     )
       sd_pipe.set_progress_bar_config(disable=_A     )

       __A    		=     self.get_dummy_inputs(_A     )
       __A    		=     sd_pipe(**_A     ).images
       __A    		=     image[0, -3:, -3:, -1]

       assert image.shape == (1, 32, 32, 3)
       __A    		=     np.array([1.0_000, 0.5_426, 0.5_497, 0.2_200, 1.0_000, 1.0_000, 0.5_623, 1.0_000, 0.6_274]     )

       assert np.abs(image_slice.flatten() - expected_slice     ).max() < 1E-3






 @skip_mps
 def 		lowercase_  (     self					:Optional[int]     )			->     Dict:







       '''simple docstring'''



       return super().test_save_load_local()






 @unittest.skip('non-deterministic pipeline'     )
 def 		lowercase_  (     self					:Optional[Any]     )			->     List[str]:







       '''simple docstring'''



       return super().test_inference_batch_single_identical()






 @skip_mps
 def 		lowercase_  (     self					:Optional[int]     )			->     str:







       '''simple docstring'''



       return super().test_dict_tuple_outputs_equivalent()






 @skip_mps
 def 		lowercase_  (     self					:Union[str, Any]     )			->     int:







       '''simple docstring'''



       return super().test_save_load_optional_components()






 @skip_mps
 def 		lowercase_  (     self					:Optional[Any]     )			->     str:







       '''simple docstring'''



       return super().test_attention_slicing_forward_pass()


@nightly
@require_torch_gpu
class 	UpperCamelCase__					(      unittest.TestCase):






 def 		lowercase_  (     self					:List[str]     )			->     Optional[Any]:







       '''simple docstring'''



       super().tearDown()
       gc.collect()
       torch.cuda.empty_cache()






 def 		lowercase_  (     self					:List[str]     )			->     Dict:







       '''simple docstring'''



       __A    		=     load_image(
           'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/'
           'repaint/celeba_hq_256.png'     )
       __A    		=     load_image(
           'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/mask_256.png'     )
       __A    		=     load_numpy(
           'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/'
           'repaint/celeba_hq_256_result.npy'     )

       __A    		=     'google/ddpm-ema-celebahq-256'
       __A    		=     UNetaDModel.from_pretrained(_A     )
       __A    		=     RePaintScheduler.from_pretrained(_A     )

       __A    		=     RePaintPipeline(unet=_A		,			scheduler=_A     ).to(_A     )
       repaint.set_progress_bar_config(disable=_A     )
       repaint.enable_attention_slicing()

       __A    		=     torch.manual_seed(0     )
       __A    		=     repaint(
           _A		,			_A		,			num_inference_steps=250		,			eta=0.0		,			jump_length=10		,			jump_n_sample=10		,			generator=_A		,			output_type='np'		,			)
       __A    		=     output.images[0]

       assert image.shape == (256, 256, 3)
       assert np.abs(expected_image - image     ).mean() < 1E-2








'''simple docstring'''





from __future__ import annotations





def     snake_case							(						UpperCAmelCase ,					UpperCAmelCase ,					UpperCAmelCase		)->     tuple[float, float]:







      """simple docstring"""
      assert (
          c % greatest_common_divisor(UpperCAmelCase ,					UpperCAmelCase		) == 0
      )  # greatest_common_divisor(a,b) function implemented below
      ((__A)		, (__A)		, (__A))    		=     extended_gcd(UpperCAmelCase ,					UpperCAmelCase		)  # extended_gcd(a,b) function implemented below
      __A    		=     c / d
      return (r * x, r * y)





def     snake_case							(						UpperCAmelCase ,					UpperCAmelCase ,					UpperCAmelCase ,					UpperCAmelCase = 2		)->     None:







      """simple docstring"""
      ((__A)		, (__A))    		=     diophantine(UpperCAmelCase ,					UpperCAmelCase ,					UpperCAmelCase		)  # Initial value
      __A    		=     greatest_common_divisor(UpperCAmelCase ,					UpperCAmelCase		)
      __A    		=     a // d
      __A    		=     b // d

      for i in range(UpperCAmelCase		):
            __A    		=     xa + i * q
            __A    		=     ya - i * p
            print(UpperCAmelCase ,					UpperCAmelCase		)





def     snake_case							(						UpperCAmelCase ,					UpperCAmelCase		)->     int:







      """simple docstring"""
      if a < b:
            __A		, __A    		=     b, a

      while a % b != 0:
            __A		, __A    		=     b, a % b

      return b





def     snake_case							(						UpperCAmelCase ,					UpperCAmelCase		)->     tuple[int, int, int]:







      """simple docstring"""
      assert a >= 0 and b >= 0

      if b == 0:
            __A		, __A		, __A    		=     a, 1, 0
      else:
            ((__A)		, (__A)		, (__A))    		=     extended_gcd(UpperCAmelCase ,					a % b		)
            __A    		=     q
            __A    		=     p - q * (a // b)

      assert a % d == 0 and b % d == 0
      assert d == a * x + b * y

      return (d, x, y)


if __name__ == "__main__":
 from doctest import testmod

 testmod(name="diophantine", verbose=True)
 testmod(name="diophantine_all_soln", verbose=True)
 testmod(name="extended_gcd", verbose=True)
 testmod(name="greatest_common_divisor", verbose=True)






