

'''simple docstring'''
import unittest

import torch
from torch import nn

from accelerate.test_utils import require_cuda
from accelerate.utils.memory import find_executable_batch_size, release_memory







def  _A		(     )      ->     List[str]:
   raise RuntimeError("CUDA out of memory."					)


class        a__  (							nn.Module  ):






   """simple docstring"""




   def __init__(			self  ):





      """simple docstring"""





      super().__init__()
      _lowercase      :				List[str]      					=       nn.Linear(3      ,    4  )
      _lowercase      :				List[str]      					=       nn.BatchNormad(4  )
      _lowercase      :				Optional[Any]      					=       nn.Linear(4      ,    5  )






   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      return self.lineara(self.batchnorm(self.lineara(_UpperCamelCase  )  )  )




class        a__  (							unittest.TestCase  ):






   """simple docstring"""




   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Tuple      					=       []

      @find_executable_batch_size(starting_batch_size=128  )
      def mock_training_loop_function(_UpperCamelCase  ):
         nonlocal batch_sizes
         batch_sizes.append(_UpperCamelCase  )
         if batch_size != 8:
            raise_fake_out_of_memory()

      mock_training_loop_function()
      self.assertListEqual(_UpperCamelCase      ,    [128, 64, 32, 16, 8]  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Optional[int]      					=       []

      @find_executable_batch_size(starting_batch_size=128  )
      def mock_training_loop_function(_UpperCamelCase      ,    _UpperCamelCase  ):
         nonlocal batch_sizes
         batch_sizes.append(_UpperCamelCase  )
         if batch_size != 8:
            raise_fake_out_of_memory()
         return batch_size, arga

      _lowercase      :				List[str]      					=       mock_training_loop_function("hello"  )
      self.assertListEqual(_UpperCamelCase      ,    [128, 64, 32, 16, 8]  )
      self.assertListEqual([bs, arga]      ,    [8, "hello"]  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      @find_executable_batch_size(starting_batch_size=0  )
      def mock_training_loop_function(_UpperCamelCase  ):
         pass

      with self.assertRaises(_UpperCamelCase  ) as cm:
         mock_training_loop_function()
         self.assertIn("No executable batch size found, reached zero."      ,    cm.exception.args[0]  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      @find_executable_batch_size(starting_batch_size=16  )
      def mock_training_loop_function(_UpperCamelCase  ):
         if batch_size > 0:
            raise_fake_out_of_memory()
         pass

      with self.assertRaises(_UpperCamelCase  ) as cm:
         mock_training_loop_function()
         self.assertIn("No executable batch size found, reached zero."      ,    cm.exception.args[0]  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      @find_executable_batch_size(starting_batch_size=128  )
      def mock_training_loop_function(_UpperCamelCase      ,    _UpperCamelCase      ,    _UpperCamelCase  ):
         if batch_size != 8:
            raise raise_fake_out_of_memory()

      with self.assertRaises(_UpperCamelCase  ) as cm:
         mock_training_loop_function(128      ,    "hello"      ,    "world"  )
         self.assertIn("Batch size was passed into `f`"      ,    cm.exception.args[0]  )
         self.assertIn("`f(arg1='hello', arg2='world')"      ,    cm.exception.args[0]  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      @find_executable_batch_size(starting_batch_size=16  )
      def mock_training_loop_function(_UpperCamelCase  ):
         raise ValueError("Oops, we had an error!"  )

      with self.assertRaises(_UpperCamelCase  ) as cm:
         mock_training_loop_function()
         self.assertIn("Oops, we had an error!"      ,    cm.exception.args[0]  )






   @require_cuda
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Optional[int]      					=       torch.cuda.memory_allocated()
      _lowercase      :				List[Any]      					=       ModelForTest()
      model.cuda()
      self.assertGreater(torch.cuda.memory_allocated()      ,    _UpperCamelCase  )
      _lowercase      :				Optional[Any]      					=       release_memory(_UpperCamelCase  )
      self.assertEqual(torch.cuda.memory_allocated()      ,    _UpperCamelCase  )









'''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        a__  (							lowerCamelCase_  ,				lowerCamelCase_  ,				unittest.TestCase  ):
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							IFImgaImgSuperResolutionPipeline
   _SCREAMING_SNAKE_CASE   :					int     	=							TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {'width', 'height'}
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS.union({'original_image'}  )
   _SCREAMING_SNAKE_CASE   :					Optional[int]     	=							PipelineTesterMixin.required_optional_params - {'latents'}


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return self._get_superresolution_dummy_components()


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase=0  ):





      """simple docstring"""





      if str(_UpperCamelCase  ).startswith("mps"  ):
         _lowercase      :				Tuple      					=       torch.manual_seed(_UpperCamelCase  )
      else:
         _lowercase      :				int      					=       torch.Generator(device=_UpperCamelCase  ).manual_seed(_UpperCamelCase  )

      _lowercase      :				List[Any]      					=       floats_tensor((1, 3, 32, 32)      ,    rng=random.Random(_UpperCamelCase  )  ).to(_UpperCamelCase  )
      _lowercase      :				Optional[int]      					=       floats_tensor((1, 3, 16, 16)      ,    rng=random.Random(_UpperCamelCase  )  ).to(_UpperCamelCase  )

      _lowercase      :				List[str]      					=       {
          "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 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1E-3  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      self._test_save_load_optional_components()


   @unittest.skipIf(torch_device != "cuda"      ,    reason="float16 requires CUDA"  )
   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





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


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      self._test_attention_slicing_forward_pass(expected_max_diff=1E-2  )


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      self._test_save_load_local()






   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





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






