






"""simple docstring"""


import copy

from ...configuration_utils import PretrainedConfig
from ...utils import logging


lowercase_								=	logging.get_logger(__name__)

lowercase_								=	{
    'facebook/sam-vit-huge': 'https://huggingface.co/facebook/sam-vit-huge/resolve/main/config.json',
    'facebook/sam-vit-large': 'https://huggingface.co/facebook/sam-vit-large/resolve/main/config.json',
    'facebook/sam-vit-base': 'https://huggingface.co/facebook/sam-vit-base/resolve/main/config.json',
}


class    snake_case						(				_lowerCAmelCase		):


   '''simple docstring'''

   def __init__(      self					:	int,			_lowerCamelCase					:	Any=2_56,			_lowerCamelCase					:	str=10_24,			_lowerCamelCase					:	Any=16,			_lowerCamelCase					:	Any=16,			_lowerCamelCase					:	Tuple=4,			_lowerCamelCase					:	str="gelu",			_lowerCamelCase					:	int=1e-6,			**_lowerCamelCase					:	Tuple,			):

     '''simple docstring'''
     super().__init__(**_lowerCamelCase    )
     __A		     =					hidden_size
     __A		     =					image_size
     __A		     =					patch_size
     __A		     =					image_size // patch_size
     __A		     =					mask_input_channels
     __A		     =					num_point_embeddings
     __A		     =					hidden_act
     __A		     =					layer_norm_eps





class    snake_case						(				_lowerCAmelCase		):


   '''simple docstring'''

   def __init__(      self					:	int,			_lowerCamelCase					:	str=2_56,			_lowerCamelCase					:	Tuple="relu",			_lowerCamelCase					:	Optional[Any]=20_48,			_lowerCamelCase					:	int=2,			_lowerCamelCase					:	List[Any]=8,			_lowerCamelCase					:	List[Any]=2,			_lowerCamelCase					:	str=3,			_lowerCamelCase					:	Dict=3,			_lowerCamelCase					:	List[str]=2_56,			_lowerCamelCase					:	str=1e-6,			**_lowerCamelCase					:	Union[str, Any],			):

     '''simple docstring'''
     super().__init__(**_lowerCamelCase    )
     __A		     =					hidden_size
     __A		     =					hidden_act
     __A		     =					mlp_dim
     __A		     =					num_hidden_layers
     __A		     =					num_attention_heads
     __A		     =					attention_downsample_rate
     __A		     =					num_multimask_outputs
     __A		     =					iou_head_depth
     __A		     =					iou_head_hidden_dim
     __A		     =					layer_norm_eps





class    snake_case						(				_lowerCAmelCase		):


   '''simple docstring'''

   def __init__(      self					:	int,			_lowerCamelCase					:	Union[str, Any]=7_68,			_lowerCamelCase					:	List[Any]=2_56,			_lowerCamelCase					:	Optional[int]=12,			_lowerCamelCase					:	Tuple=12,			_lowerCamelCase					:	Optional[Any]=3,			_lowerCamelCase					:	Any=10_24,			_lowerCamelCase					:	Dict=16,			_lowerCamelCase					:	List[str]="gelu",			_lowerCamelCase					:	Optional[int]=1e-06,			_lowerCamelCase					:	Optional[Any]=0.0,			_lowerCamelCase					:	Any=1e-10,			_lowerCamelCase					:	Tuple=True,			_lowerCamelCase					:	int=4.0,			_lowerCamelCase					:	str=True,			_lowerCamelCase					:	List[Any]=True,			_lowerCamelCase					:	List[str]=14,			_lowerCamelCase					:	Optional[int]=[2, 5, 8, 11],			_lowerCamelCase					:	List[str]=1_28,			_lowerCamelCase					:	Union[str, Any]=None,			**_lowerCamelCase					:	int,			):

     '''simple docstring'''
     super().__init__(**_lowerCamelCase    )

     __A		     =					hidden_size
     __A		     =					output_channels
     __A		     =					num_hidden_layers
     __A		     =					num_attention_heads
     __A		     =					num_channels
     __A		     =					image_size
     __A		     =					patch_size
     __A		     =					hidden_act
     __A		     =					layer_norm_eps
     __A		     =					attention_dropout
     __A		     =					initializer_range
     __A		     =					qkv_bias
     __A		     =					mlp_ratio
     __A		     =					use_abs_pos
     __A		     =					use_rel_pos
     __A		     =					window_size
     __A		     =					global_attn_indexes
     __A		     =					num_pos_feats
     __A		     =					int(hidden_size * mlp_ratio    ) if mlp_dim is None else mlp_dim





class    snake_case						(				_lowerCAmelCase		):


   '''simple docstring'''

   A_		:      Any							=					"sam"
   A_		:      Optional[Any]							=					True


   def __init__(      self					:	Tuple,			_lowerCamelCase					:	Optional[int]=None,			_lowerCamelCase					:	Dict=None,			_lowerCamelCase					:	int=None,			_lowerCamelCase					:	str=0.02,			**_lowerCamelCase					:	List[str],			):

     '''simple docstring'''
     super().__init__(**_lowerCamelCase    )
     __A		     =					vision_config if vision_config is not None else {}
     __A		     =					prompt_encoder_config if prompt_encoder_config is not None else {}
     __A		     =					mask_decoder_config if mask_decoder_config is not None else {}

     if isinstance(_lowerCamelCase,			_lowerCamelCase    ):
       __A		     =					vision_config.to_dict()
     if isinstance(_lowerCamelCase,			_lowerCamelCase    ):
       __A		     =					prompt_encoder_config.to_dict()
     if isinstance(_lowerCamelCase,			_lowerCamelCase    ):
       __A		     =					mask_decoder_config.to_dict()

     __A		     =					SamVisionConfig(**_lowerCamelCase    )
     __A		     =					SamPromptEncoderConfig(**_lowerCamelCase    )
     __A		     =					SamMaskDecoderConfig(**_lowerCamelCase    )
     __A		     =					initializer_range






   def 							_SCREAMING_SNAKE_CASE							(      self					:	Optional[int]    ):

     '''simple docstring'''
     __A		     =					copy.deepcopy(self.__dict__    )
     __A		     =					self.vision_config.to_dict()
     __A		     =					self.prompt_encoder_config.to_dict()
     __A		     =					self.mask_decoder_config.to_dict()
     __A		     =					self.__class__.model_type
     return output






'''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__     :     Union[str, Any]    					=       RePaintPipeline
 UpperCAmelCase__     :     Any    					=       IMAGE_INPAINTING_PARAMS - {'width', 'height', 'guidance_scale'}
 UpperCAmelCase__     :     Optional[int]    					=       PipelineTesterMixin.required_optional_params - {
     'latents',
     'num_images_per_prompt',
     'callback',
     'callback_steps',
 }
 UpperCAmelCase__     :     Optional[int]    					=       IMAGE_INPAINTING_BATCH_PARAMS
 UpperCAmelCase__     :     Any    					=       False






 def 						lowercase_    (      self	:Any      )					->      int:







       '''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	:List[Any]						,					_A	:Tuple=0      )					->      List[str]:







       '''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	:Union[str, Any]      )					->      Optional[int]:







       '''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	:Dict      )					->      Optional[int]:







       '''simple docstring'''



       return super().test_save_load_local()






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







       '''simple docstring'''



       return super().test_inference_batch_single_identical()






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







       '''simple docstring'''



       return super().test_dict_tuple_outputs_equivalent()






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







       '''simple docstring'''



       return super().test_save_load_optional_components()






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







       '''simple docstring'''



       return super().test_attention_slicing_forward_pass()


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






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







       '''simple docstring'''



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






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







       '''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






