




'''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 						lowerCAmelCase_	(       UpperCAmelCase_       ,					unittest.TestCase							):







  '''simple docstring'''

  UpperCamelCase_			:      Any										=				RePaintPipeline
  UpperCamelCase_			:      int										=				IMAGE_INPAINTING_PARAMS - {"""width""", """height""", """guidance_scale"""}
  UpperCamelCase_			:      List[str]										=				PipelineTesterMixin.required_optional_params - {
      """latents""",
      """num_images_per_prompt""",
      """callback""",
      """callback_steps""",
  }
  UpperCamelCase_			:      List[str]										=				IMAGE_INPAINTING_BATCH_PARAMS
  UpperCamelCase_			:      str										=				False



  def 					_snake_case     ( self				:							Dict	)			->		Optional[Any]:







       '''simple docstring'''



       torch.manual_seed(0	)
       torch.manual_seed(0	)
       A:		Optional[Any]          =		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:		Optional[int]          =		RePaintScheduler()
       A:		Optional[int]          =		{'''unet''': unet, '''scheduler''': scheduler}
       return components



  def 					_snake_case     ( self				:							Optional[Any]					,  SCREAMING_SNAKE_CASE_				:							List[Any]					,  SCREAMING_SNAKE_CASE_				:							Tuple=0	)			->		Optional[int]:







       '''simple docstring'''



       if str(SCREAMING_SNAKE_CASE_	).startswith('''mps'''	):
            A:		str          =		torch.manual_seed(SCREAMING_SNAKE_CASE_	)
       else:
            A:		Any          =		torch.Generator(device=SCREAMING_SNAKE_CASE_	).manual_seed(SCREAMING_SNAKE_CASE_	)
       A:		str          =		np.random.RandomState(SCREAMING_SNAKE_CASE_	).standard_normal((1, 3, 32, 32)	)
       A:		Tuple          =		torch.from_numpy(SCREAMING_SNAKE_CASE_	).to(device=SCREAMING_SNAKE_CASE_					,  dtype=torch.floataa	)
       A:		List[Any]          =		(image > 0).to(device=SCREAMING_SNAKE_CASE_					,  dtype=torch.floataa	)
       A:		Tuple          =		{
           '''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 					_snake_case     ( self				:							int	)			->		Tuple:







       '''simple docstring'''



       A:		int          =		'''cpu'''  # ensure determinism for the device-dependent torch.Generator
       A:		List[str]          =		self.get_dummy_components()
       A:		int          =		RePaintPipeline(**SCREAMING_SNAKE_CASE_	)
       A:		List[Any]          =		sd_pipe.to(SCREAMING_SNAKE_CASE_	)
       sd_pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE_	)

       A:		Dict          =		self.get_dummy_inputs(SCREAMING_SNAKE_CASE_	)
       A:		List[str]          =		sd_pipe(**SCREAMING_SNAKE_CASE_	).images
       A:		Optional[Any]          =		image[0, -3:, -3:, -1]

       assert image.shape == (1, 32, 32, 3)
       A:		List[Any]          =		np.array([1.0000, 0.5426, 0.5497, 0.2200, 1.0000, 1.0000, 0.5623, 1.0000, 0.6274]	)

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



  @skip_mps
  def 					_snake_case     ( self				:							Union[str, Any]	)			->		Optional[Any]:







       '''simple docstring'''



       return super().test_save_load_local()



  @unittest.skip('''non-deterministic pipeline'''	)
  def 					_snake_case     ( self				:							Tuple	)			->		Optional[Any]:







       '''simple docstring'''



       return super().test_inference_batch_single_identical()



  @skip_mps
  def 					_snake_case     ( self				:							List[Any]	)			->		str:







       '''simple docstring'''



       return super().test_dict_tuple_outputs_equivalent()



  @skip_mps
  def 					_snake_case     ( self				:							List[Any]	)			->		str:







       '''simple docstring'''



       return super().test_save_load_optional_components()




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







       '''simple docstring'''



       return super().test_attention_slicing_forward_pass()






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







  '''simple docstring'''

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







       '''simple docstring'''



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




  def 					_snake_case     ( self				:							Optional[int]	)			->		List[Any]:







       '''simple docstring'''



       A:		str          =		load_image(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/'''
           '''repaint/celeba_hq_256.png'''	)
       A:		Union[str, Any]          =		load_image(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/mask_256.png'''	)
       A:		Optional[Any]          =		load_numpy(
           '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/'''
           '''repaint/celeba_hq_256_result.npy'''	)

       A:		Dict          =		'''google/ddpm-ema-celebahq-256'''
       A:		Tuple          =		UNetaDModel.from_pretrained(SCREAMING_SNAKE_CASE_	)
       A:		List[Any]          =		RePaintScheduler.from_pretrained(SCREAMING_SNAKE_CASE_	)

       A:		Optional[Any]          =		RePaintPipeline(unet=SCREAMING_SNAKE_CASE_					,  scheduler=SCREAMING_SNAKE_CASE_	).to(SCREAMING_SNAKE_CASE_	)
       repaint.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE_	)
       repaint.enable_attention_slicing()

       A:		str          =		torch.manual_seed(0	)
       A:		str          =		repaint(
           SCREAMING_SNAKE_CASE_					,  SCREAMING_SNAKE_CASE_					,  num_inference_steps=2_50					,  eta=0.0					,  jump_length=10					,  jump_n_sample=10					,  generator=SCREAMING_SNAKE_CASE_					,  output_type='''np'''					,  )
       A:		Optional[Any]          =		output.images[0]

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












'''simple docstring'''


import importlib
import importlib.metadata
import os
import warnings
from distutils.util import strtobool
from functools import lru_cache

import torch
from packaging import version
from packaging.version import parse

from .environment import parse_flag_from_env
from .versions import compare_versions, is_torch_version


try:
     import torch_xla.core.xla_model as xm  # noqa: F401

     UpperCamelCase			     =					True
except ImportError:
     UpperCamelCase			     =					False


# Cache this result has it's a C FFI call which can be pretty time-consuming
UpperCamelCase			     =					torch.distributed.is_available()
def 					SCREAMING_SNAKE_CASE(   __lowercase	)			-> Optional[int]:
     # Check we're not importing a "pkg_name" directory somewhere but the actual library by trying to grab the version
     A:		Optional[Any]          =		importlib.util.find_spec(__lowercase	) is not None
     if package_exists:
          try:
               A:		Dict          =		importlib.metadata.metadata(__lowercase	)
               return True
          except importlib.metadata.PackageNotFoundError:
               return False
def 					SCREAMING_SNAKE_CASE(   )			-> bool:
     return _torch_distributed_available
def 					SCREAMING_SNAKE_CASE(   )			-> Optional[int]:
     try:
          pass
     except ImportError:
          print(
              '''Intel(R) oneCCL Bindings for PyTorch* is required to run DDP on Intel(R) GPUs, but it is not'''
              ''' detected. If you see \"ValueError: Invalid backend: \'ccl\'\" error, please install Intel(R) oneCCL'''
              ''' Bindings for PyTorch*.'''	)
     return (
         importlib.util.find_spec('''torch_ccl'''	) is not None
         or importlib.util.find_spec('''oneccl_bindings_for_pytorch'''	) is not None
     )
def 					SCREAMING_SNAKE_CASE(   )			-> List[str]:
     return importlib.metadata.version('''oneccl_bind_pt'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Union[str, Any]:
     return _is_package_available('''transformer_engine'''	)
@lru_cache
def 					SCREAMING_SNAKE_CASE(   __lowercase=True	)			-> Union[str, Any]:
     # Due to bugs on the amp series GPUs, we disable torch-xla on them
     if torch.cuda.is_available():
          return False
     if _tpu_available and check_device:
          try:
               # Will raise a RuntimeError if no XLA configuration is found
               A:		Tuple          =		xm.xla_device()
               return True
          except RuntimeError:
               return False
     return _tpu_available
def 					SCREAMING_SNAKE_CASE(   )			-> List[str]:
     return _is_package_available('''deepspeed'''	)
def 					SCREAMING_SNAKE_CASE(   __lowercase=False	)			-> Any:
     if is_tpu_available():
          return not ignore_tpu
     if torch.cuda.is_available():
          return torch.cuda.is_bfaa_supported()
     if is_npu_available():
          return False
     return True
def 					SCREAMING_SNAKE_CASE(   )			-> str:
     A:		List[str]          =		_is_package_available('''bitsandbytes'''	)
     if package_exists:
          A:		Union[str, Any]          =		version.parse(importlib.metadata.version('''bitsandbytes'''	)	)
          return compare_versions(__lowercase		,				'''>='''		,				'''0.39.0'''	)
     return False
def 					SCREAMING_SNAKE_CASE(   )			-> str:
     A:		int          =		_is_package_available('''bitsandbytes'''	)
     if package_exists:
          A:		Tuple          =		version.parse(importlib.metadata.version('''bitsandbytes'''	)	)
          return compare_versions(__lowercase		,				'''>='''		,				'''0.37.2'''	)
     return False
def 					SCREAMING_SNAKE_CASE(   )			-> int:
     return _is_package_available('''bitsandbytes'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Optional[int]:
     if strtobool(os.environ.get('''ACCELERATE_USE_MEGATRON_LM'''		,				'''False'''	)	) == 1:
          A:		Any          =		importlib.util.find_spec('''megatron'''	) is not None
          if package_exists:
               try:
                    A:		str          =		parse(importlib.metadata.version('''megatron-lm'''	)	)
                    return compare_versions(__lowercase		,				'''>='''		,				'''2.2.0'''	)
               except Exception as e:
                    warnings.warn(F"""Parse Megatron version failed. Exception:{e}"""	)
                    return False
def 					SCREAMING_SNAKE_CASE(   )			-> Any:
     return _is_package_available('''safetensors'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Tuple:
     return _is_package_available('''transformers'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Union[str, Any]:
     return _is_package_available('''datasets'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Union[str, Any]:
     return _is_package_available('''aim'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> List[Any]:
     return _is_package_available('''tensorboard'''	) or _is_package_available('''tensorboardX'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Dict:
     return _is_package_available('''wandb'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Optional[Any]:
     return _is_package_available('''comet_ml'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Any:
     return _is_package_available('''boto3'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> str:
     if _is_package_available('''rich'''	):
          if "ACCELERATE_DISABLE_RICH" in os.environ:
               warnings.warn(
                   '''`ACCELERATE_DISABLE_RICH` is deprecated and will be removed in v0.22.0 and deactivated by default. Please use `ACCELERATE_ENABLE_RICH` if you wish to use `rich`.'''	)
               return not parse_flag_from_env('''ACCELERATE_DISABLE_RICH'''		,				__lowercase	)
          return parse_flag_from_env('''ACCELERATE_ENABLE_RICH'''		,				__lowercase	)
     return False
def 					SCREAMING_SNAKE_CASE(   )			-> int:
     return _is_package_available('''sagemaker'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> Union[str, Any]:
     return _is_package_available('''tqdm'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> str:
     return _is_package_available('''mlflow'''	)
def 					SCREAMING_SNAKE_CASE(   )			-> int:
     return is_torch_version('''>='''		,				'''1.12'''	) and torch.backends.mps.is_available() and torch.backends.mps.is_built()
def 					SCREAMING_SNAKE_CASE(   )			-> str:
     def get_major_and_minor_from_version(__lowercase	):
          return str(version.parse(__lowercase	).major	) + "." + str(version.parse(__lowercase	).minor	)

     A:		int          =		importlib.metadata.version('''torch'''	)
     if importlib.util.find_spec('''intel_extension_for_pytorch'''	) is None:
          return False
     A:		Optional[Any]          =		'''N/A'''
     try:
          A:		List[Any]          =		importlib.metadata.version('''intel_extension_for_pytorch'''	)
     except importlib.metadata.PackageNotFoundError:
          return False
     A:		Optional[int]          =		get_major_and_minor_from_version(_torch_version	)
     A:		List[str]          =		get_major_and_minor_from_version(_ipex_version	)
     if torch_major_and_minor != ipex_major_and_minor:
          warnings.warn(
              F"""Intel Extension for PyTorch {ipex_major_and_minor} needs to work with PyTorch {ipex_major_and_minor}.*,"""
              F""" but PyTorch {_torch_version} is found. Please switch to the matching version and run again."""	)
          return False
     return True
@lru_cache
def 					SCREAMING_SNAKE_CASE(   __lowercase=False	)			-> Optional[Any]:
     if importlib.util.find_spec('''torch'''	) is None or importlib.util.find_spec('''torch_npu'''	) is None:
          return False

     import torch
     import torch_npu  # noqa: F401

     if check_device:
          try:
               # Will raise a RuntimeError if no NPU is found
               A:		Tuple          =		torch.npu.device_count()
               return torch.npu.is_available()
          except RuntimeError:
               return False
     return hasattr(__lowercase		,				'''npu'''	) and torch.npu.is_available()


@lru_cache
def 					SCREAMING_SNAKE_CASE(   __lowercase=False	)			-> Tuple:
     if not parse_flag_from_env('''ACCELERATE_USE_XPU'''		,				default=__lowercase	):
          return False
     if is_ipex_available():
          import torch

          if is_torch_version('''<='''		,				'''1.12'''	):
               return False
     else:
          return False

     import intel_extension_for_pytorch  # noqa: F401

     if check_device:
          try:
               # Will raise a RuntimeError if no XPU  is found
               A:		str          =		torch.xpu.device_count()
               return torch.xpu.is_available()
          except RuntimeError:
               return False
     return hasattr(__lowercase		,				'''xpu'''	) and torch.xpu.is_available()






