




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 						lowercase							(   UpperCamelCase__,UpperCamelCase__,unittest.TestCase		):
     _a							 =						IFImgaImgSuperResolutionPipeline
     _a							 =						TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {"width", "height"}
     _a							 =						TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS.union({"original_image"}		)
     _a							 =						PipelineTesterMixin.required_optional_params - {"latents"}

     def 					a__	(  self				)						->							List[Any]:
           return self._get_superresolution_dummy_components()

     def 					a__	(  self		,     _a		,     _a=0				)						->							Any:
           if str(_a				).startswith("""mps"""				):
                 _A							:     Tuple			=						torch.manual_seed(_a				)
           else:
                 _A							:     Tuple			=						torch.Generator(device=_a				).manual_seed(_a				)

           _A							:     List[Any]			=						floats_tensor((1, 3, 32, 32)		,     rng=random.Random(_a				)				).to(_a				)
           _A							:     Dict			=						floats_tensor((1, 3, 16, 16)		,     rng=random.Random(_a				)				).to(_a				)

           _A							:     Optional[int]			=						{
               """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 					a__	(  self				)						->							Optional[int]:
           self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1e-3				)

     def 					a__	(  self				)						->							List[Any]:
           self._test_save_load_optional_components()

     @unittest.skipIf(torch_device != """cuda"""		,     reason="""float16 requires CUDA"""				)
     def 					a__	(  self				)						->							Any:
           # Due to non-determinism in save load of the hf-internal-testing/tiny-random-t5 text encoder
           super().test_save_load_floataa(expected_max_diff=1e-1				)

     def 					a__	(  self				)						->							Union[str, Any]:
           self._test_attention_slicing_forward_pass(expected_max_diff=1e-2				)

     def 					a__	(  self				)						->							List[Any]:
           self._test_save_load_local()



     def 					a__	(  self				)						->							str:
           self._test_inference_batch_single_identical(
               expected_max_diff=1e-2		,     )








"""simple docstring"""





import tempfile
import unittest

from transformers import AutoModelForSeqaSeqLM, AutoTokenizer
from transformers.testing_utils import (
    is_torch_available,
    require_optimum,
    require_torch,
    slow,
)


if is_torch_available():
  import torch






@require_torch
@require_optimum
@slow
class 					_lowerCAmelCase   (     unittest.TestCase       ):
       """simple docstring"""




       def      snake_case						(    self      ):



         '''simple docstring'''

         lowerCAmelCase__			:Optional[Any]											=							'hf-internal-testing/tiny-random-t5'
         lowerCAmelCase__			:List[Any]											=							AutoTokenizer.from_pretrained(__UpperCAmelCase      )
         lowerCAmelCase__			:str											=							AutoModelForSeqaSeqLM.from_pretrained(__UpperCAmelCase      )

         lowerCAmelCase__			:Any											=							tokenizer('This is me'    , return_tensors='pt'      )

         lowerCAmelCase__			:Dict											=							model.to_bettertransformer()

         self.assertTrue(any('BetterTransformer' in mod.__class__.__name__ for _, mod in model.named_modules()      )      )

         lowerCAmelCase__			:Optional[Any]											=							model.generate(**__UpperCAmelCase      )

         lowerCAmelCase__			:List[Any]											=							model.reverse_bettertransformer()

         self.assertFalse(any('BetterTransformer' in mod.__class__.__name__ for _, mod in model.named_modules()      )      )

         with tempfile.TemporaryDirectory() as tmpdirname:
           model.save_pretrained(__UpperCAmelCase      )

           lowerCAmelCase__			:Any											=							AutoModelForSeqaSeqLM.from_pretrained(__UpperCAmelCase      )

           self.assertFalse(
               any('BetterTransformer' in mod.__class__.__name__ for _, mod in model_reloaded.named_modules()      )      )

           lowerCAmelCase__			:Union[str, Any]											=							model_reloaded.generate(**__UpperCAmelCase      )
           self.assertTrue(torch.allclose(__UpperCAmelCase    , __UpperCAmelCase      )      )






       def      snake_case						(    self      ):



         '''simple docstring'''

         lowerCAmelCase__			:int											=							'hf-internal-testing/tiny-random-t5'
         lowerCAmelCase__			:Union[str, Any]											=							AutoModelForSeqaSeqLM.from_pretrained(__UpperCAmelCase      )

         lowerCAmelCase__			:str											=							model.to_bettertransformer()

         with tempfile.TemporaryDirectory() as tmpdirname:
           with self.assertRaises(__UpperCAmelCase      ):
             model.save_pretrained(__UpperCAmelCase      )

           lowerCAmelCase__			:Optional[int]											=							model.reverse_bettertransformer()
           model.save_pretrained(__UpperCAmelCase      )
