





'''simple docstring'''

import random
import unittest

import torch

from diffusers import IFImgaImgSuperResolutionPipeline
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_VARIATION_BATCH_PARAMS, TEXT_GUIDED_IMAGE_VARIATION_PARAMS
from ..test_pipelines_common import PipelineTesterMixin
from . import IFPipelineTesterMixin
@skip_mps
class 				__lowerCAmelCase     (    __snake_case						,						__snake_case						,						unittest.TestCase ):






       """simple docstring"""
       _snake_case	:     int										=    IFImgaImgSuperResolutionPipeline
       _snake_case	:     List[str]										=    TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {'width', 'height'}
       _snake_case	:     Optional[int]										=    TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS.union({'original_image'} )
       _snake_case	:     Dict										=    PipelineTesterMixin.required_optional_params - {'latents'}





       def snake_case__						(							self   :		str     )    ->     int:

            '''simple docstring'''




            return self._get_superresolution_dummy_components()





       def snake_case__						(							self   :		Optional[Any]       , lowerCAmelCase__   :		Any       , lowerCAmelCase__   :		int=0     )    ->     Optional[int]:

            '''simple docstring'''




            if str(A_     ).startswith('''mps'''     ):
                 _UpperCamelCase				    =       torch.manual_seed(A_     )
            else:
                 _UpperCamelCase				    =       torch.Generator(device=A_     ).manual_seed(A_     )

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

            _UpperCamelCase				    =       {
                "prompt": "A painting of a squirrel eating a burger",
                "image": image,
                "original_image": original_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   :		Tuple     )    ->     List[str]:

            '''simple docstring'''




            self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1e-3     )





       def snake_case__						(							self   :		str     )    ->     Dict:

            '''simple docstring'''




            self._test_save_load_optional_components()





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

            '''simple docstring'''




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





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

            '''simple docstring'''




            self._test_attention_slicing_forward_pass(expected_max_diff=1e-2     )





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

            '''simple docstring'''




            self._test_save_load_local()







       def snake_case__						(							self   :		Tuple     )    ->     List[Any]:

            '''simple docstring'''




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










from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ...utils.backbone_utils import BackboneConfigMixin, get_aligned_output_features_output_indices


__lowerCamelCase       :     str   =     logging.get_logger(__name__)

__lowerCamelCase       :     str   =     {
    """facebook/convnextv2-tiny-1k-224""": """https://huggingface.co/facebook/convnextv2-tiny-1k-224/resolve/main/config.json""",
}



class 					A__   (       __snake_case       ,   __snake_case			):
      _UpperCAmelCase	:Optional[int]						    =   'convnextv2'





      def __init__( self       ,							A_=3       ,							A_=4       ,							A_=4       ,							A_=None       ,							A_=None       ,							A_="gelu"       ,							A_=0.02       ,							A_=1e-12       ,							A_=0.0       ,							A_=224       ,							A_=None       ,							A_=None       ,							**A_       ,							):
       '''simple docstring'''




       super().__init__(**A_   )

       UpperCamelCase	:					Dict       	=   num_channels
       UpperCamelCase	:					Union[str, Any]       	=   patch_size
       UpperCamelCase	:					Union[str, Any]       	=   num_stages
       UpperCamelCase	:					List[Any]       	=   [96, 192, 384, 768] if hidden_sizes is None else hidden_sizes
       UpperCamelCase	:					List[str]       	=   [3, 3, 9, 3] if depths is None else depths
       UpperCamelCase	:					Dict       	=   hidden_act
       UpperCamelCase	:					Union[str, Any]       	=   initializer_range
       UpperCamelCase	:					Tuple       	=   layer_norm_eps
       UpperCamelCase	:					str       	=   drop_path_rate
       UpperCamelCase	:					List[str]       	=   image_size
       UpperCamelCase	:					List[str]       	=   ["stem"] + [F"""stage{idx}""" for idx in range(1       ,							len(self.depths   ) + 1   )]
       UpperCamelCase	,    UpperCamelCase	:					str       	=   get_aligned_output_features_output_indices(
           out_features=A_       ,							out_indices=A_       ,							stage_names=self.stage_names   )
