

import logging
import os

from .state import PartialState







class 						__magic_name__			(							logging.LoggerAdapter							):

   '''simple docstring'''




   @staticmethod
   def  _UpperCAmelCase (				lowercase_       )							->    Dict:






     """simple docstring"""






     a__  =PartialState()
     return not main_process_only or (main_process_only and state.is_main_process)



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






     """simple docstring"""






     if PartialState._shared_state == {}:
       raise RuntimeError(
           '''You must initialize the accelerate state by calling either `PartialState()` or `Accelerator()` before using the logging utility.'''       )
     a__  =kwargs.pop('''main_process_only''',    lowercase_       )
     a__  =kwargs.pop('''in_order''',    lowercase_       )

     if self.isEnabledFor(lowercase_       ):
       if self._should_log(lowercase_       ):
         a__,      a__  =self.process(lowercase_,    lowercase_       )
         self.logger.log(lowercase_,    lowercase_,    *lowercase_,    **lowercase_       )

       elif in_order:
         a__  =PartialState()
         for i in range(state.num_processes       ):
           if i == state.process_index:
             a__,      a__  =self.process(lowercase_,    lowercase_       )
             self.logger.log(lowercase_,    lowercase_,    *lowercase_,    **lowercase_       )
           state.wait_for_everyone()





def 			UpperCAmelCase__				(			_A      : str	,      _A      : str = None							):





  '''simple docstring'''







  if log_level is None:
    a__  =os.environ.get('''ACCELERATE_LOG_LEVEL'''	,      _A							)
  a__  =logging.getLogger(_A							)
  if log_level is not None:
    logger.setLevel(log_level.upper()							)
    logger.root.setLevel(log_level.upper()							)
  return MultiProcessAdapter(_A	,      {}							)



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 						__magic_name__			(							lowerCamelCase__		,       lowerCamelCase__		,       unittest.TestCase							):

   '''simple docstring'''




   lowerCamelCase__ :	List[Any]    =   IFInpaintingSuperResolutionPipeline
   lowerCamelCase__ :	str    =   TEXT_GUIDED_IMAGE_INPAINTING_PARAMS - {'width', 'height'}
   lowerCamelCase__ :	List[Any]    =   TEXT_GUIDED_IMAGE_INPAINTING_BATCH_PARAMS.union({'original_image'}							)
   lowerCamelCase__ :	str    =   PipelineTesterMixin.required_optional_params - {'latents'}



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






     """simple docstring"""






     return self._get_superresolution_dummy_components()



   def  _UpperCAmelCase (				self,    lowercase_,    lowercase_=0       )							->    Tuple:






     """simple docstring"""






     if str(lowercase_       ).startswith('''mps'''       ):
       a__  =torch.manual_seed(lowercase_       )
     else:
       a__  =torch.Generator(device=lowercase_       ).manual_seed(lowercase_       )

     a__  =floats_tensor((1, 3, 16, 16),    rng=random.Random(lowercase_       )       ).to(lowercase_       )
     a__  =floats_tensor((1, 3, 32, 32),    rng=random.Random(lowercase_       )       ).to(lowercase_       )
     a__  =floats_tensor((1, 3, 32, 32),    rng=random.Random(lowercase_       )       ).to(lowercase_       )

     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  _UpperCAmelCase (				self       )							->    List[str]:






     """simple docstring"""






     self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1E-3       )



   def  _UpperCAmelCase (				self       )							->    int:






     """simple docstring"""






     self._test_save_load_optional_components()



   @unittest.skipIf(torch_device != '''cuda''',    reason='''float16 requires CUDA'''       )
   def  _UpperCAmelCase (				self       )							->    List[Any]:






     """simple docstring"""






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



   def  _UpperCAmelCase (				self       )							->    int:






     """simple docstring"""






     self._test_attention_slicing_forward_pass(expected_max_diff=1E-2       )



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






     """simple docstring"""






     self._test_save_load_local()



   def  _UpperCAmelCase (				self       )							->    str:






     """simple docstring"""






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