

import gc
import random
import unittest

import torch

from diffusers import (
    IFImgaImgPipeline,
    IFImgaImgSuperResolutionPipeline,
    IFInpaintingPipeline,
    IFInpaintingSuperResolutionPipeline,
    IFPipeline,
    IFSuperResolutionPipeline,
)
from diffusers.models.attention_processor import AttnAddedKVProcessor
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import floats_tensor, load_numpy, require_torch_gpu, skip_mps, slow, torch_device

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference
from . import IFPipelineTesterMixin





@skip_mps
class 				__lowerCAmelCase  (      SCREAMING_SNAKE_CASE    ,    SCREAMING_SNAKE_CASE    ,    unittest.TestCase							):
  _a		    =						IFPipeline
  _a		    =						TEXT_TO_IMAGE_PARAMS - {"""width""", """height""", """latents"""}
  _a		    =						TEXT_TO_IMAGE_BATCH_PARAMS
  _a		    =						PipelineTesterMixin.required_optional_params - {"""latents"""}




  def 						A__  (       self      )						->				str:
      '''simple docstring'''






      return self._get_dummy_components()




  def 						A__  (       self							,     lowerCAmelCase							,     lowerCAmelCase=0      )						->				Union[str, Any]:
      '''simple docstring'''






      if str(__A      ).startswith('mps'      ):
          _lowercase			 =torch.manual_seed(__A      )
      else:
          _lowercase			 =torch.Generator(device=__A      ).manual_seed(__A      )

      _lowercase			 ={
          'prompt': 'A painting of a squirrel eating a burger',
          'generator': generator,
          'num_inference_steps': 2,
          'output_type': 'numpy',
      }

      return inputs




  def 						A__  (       self      )						->				int:
      '''simple docstring'''






      self._test_save_load_optional_components()




  @unittest.skipIf(torch_device != 'cuda'							,     reason='float16 requires CUDA'      )
  def 						A__  (       self      )						->				Tuple:
      '''simple docstring'''






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




  def 						A__  (       self      )						->				Optional[Any]:
      '''simple docstring'''






      self._test_attention_slicing_forward_pass(expected_max_diff=1e-2      )




  def 						A__  (       self      )						->				Dict:
      '''simple docstring'''






      self._test_save_load_local()




  def 						A__  (       self      )						->				List[Any]:
      '''simple docstring'''






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




  @unittest.skipIf(
      torch_device != 'cuda' or not is_xformers_available()							,     reason='XFormers attention is only available with CUDA and `xformers` installed'							,     )
  def 						A__  (       self      )						->				List[str]:
      '''simple docstring'''






      self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1e-3      )





@slow
@require_torch_gpu
class 				__lowerCAmelCase  (      unittest.TestCase							):




  def 						A__  (       self      )						->				Any:
      '''simple docstring'''






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




  def 						A__  (       self      )						->				Union[str, Any]:
      '''simple docstring'''






      _lowercase			 =IFPipeline.from_pretrained('DeepFloyd/IF-I-XL-v1.0'							,     variant='fp16'							,     torch_dtype=torch.floataa      )

      _lowercase			 =IFSuperResolutionPipeline.from_pretrained(
          'DeepFloyd/IF-II-L-v1.0'							,     variant='fp16'							,     torch_dtype=torch.floataa							,     text_encoder=__A							,     tokenizer=__A      )

      # pre compute text embeddings and remove T5 to save memory

      pipe_a.text_encoder.to('cuda'      )

      _lowercase , _lowercase			 =pipe_a.encode_prompt('anime turtle'							,     device='cuda'      )

      del pipe_a.tokenizer
      del pipe_a.text_encoder
      gc.collect()

      _lowercase			 =None
      _lowercase			 =None

      pipe_a.enable_model_cpu_offload()
      pipe_a.enable_model_cpu_offload()

      pipe_a.unet.set_attn_processor(AttnAddedKVProcessor()      )
      pipe_a.unet.set_attn_processor(AttnAddedKVProcessor()      )

      self._test_if(__A							,     __A							,     __A							,     __A      )

      pipe_a.remove_all_hooks()
      pipe_a.remove_all_hooks()

      # img2img

      _lowercase			 =IFImgaImgPipeline(**pipe_a.components      )
      _lowercase			 =IFImgaImgSuperResolutionPipeline(**pipe_a.components      )

      pipe_a.enable_model_cpu_offload()
      pipe_a.enable_model_cpu_offload()

      pipe_a.unet.set_attn_processor(AttnAddedKVProcessor()      )
      pipe_a.unet.set_attn_processor(AttnAddedKVProcessor()      )

      self._test_if_imgaimg(__A							,     __A							,     __A							,     __A      )

      pipe_a.remove_all_hooks()
      pipe_a.remove_all_hooks()

      # inpainting

      _lowercase			 =IFInpaintingPipeline(**pipe_a.components      )
      _lowercase			 =IFInpaintingSuperResolutionPipeline(**pipe_a.components      )

      pipe_a.enable_model_cpu_offload()
      pipe_a.enable_model_cpu_offload()

      pipe_a.unet.set_attn_processor(AttnAddedKVProcessor()      )
      pipe_a.unet.set_attn_processor(AttnAddedKVProcessor()      )

      self._test_if_inpainting(__A							,     __A							,     __A							,     __A      )




  def 						A__  (       self							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase      )						->				Optional[int]:
      '''simple docstring'''






      _start_torch_memory_measurement()

      _lowercase			 =torch.Generator(device='cpu'      ).manual_seed(0      )
      _lowercase			 =pipe_a(
          prompt_embeds=__A							,     negative_prompt_embeds=__A							,     num_inference_steps=2							,     generator=__A							,     output_type='np'							,     )

      _lowercase			 =output.images[0]

      assert image.shape == (64, 64, 3)

      _lowercase			 =torch.cuda.max_memory_allocated()
      assert mem_bytes < 13 * 10**9

      _lowercase			 =load_numpy(
          'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if.npy'      )
      assert_mean_pixel_difference(__A							,     __A      )

      # pipeline 2

      _start_torch_memory_measurement()

      _lowercase			 =torch.Generator(device='cpu'      ).manual_seed(0      )

      _lowercase			 =floats_tensor((1, 3, 64, 64)							,     rng=random.Random(0      )      ).to(__A      )

      _lowercase			 =pipe_a(
          prompt_embeds=__A							,     negative_prompt_embeds=__A							,     image=__A							,     generator=__A							,     num_inference_steps=2							,     output_type='np'							,     )

      _lowercase			 =output.images[0]

      assert image.shape == (256, 256, 3)

      _lowercase			 =torch.cuda.max_memory_allocated()
      assert mem_bytes < 4 * 10**9

      _lowercase			 =load_numpy(
          'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_superresolution_stage_II.npy'      )
      assert_mean_pixel_difference(__A							,     __A      )




  def 						A__  (       self							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase      )						->				List[Any]:
      '''simple docstring'''






      _start_torch_memory_measurement()

      _lowercase			 =floats_tensor((1, 3, 64, 64)							,     rng=random.Random(0      )      ).to(__A      )

      _lowercase			 =torch.Generator(device='cpu'      ).manual_seed(0      )

      _lowercase			 =pipe_a(
          prompt_embeds=__A							,     negative_prompt_embeds=__A							,     image=__A							,     num_inference_steps=2							,     generator=__A							,     output_type='np'							,     )

      _lowercase			 =output.images[0]

      assert image.shape == (64, 64, 3)

      _lowercase			 =torch.cuda.max_memory_allocated()
      assert mem_bytes < 10 * 10**9

      _lowercase			 =load_numpy(
          'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_img2img.npy'      )
      assert_mean_pixel_difference(__A							,     __A      )

      # pipeline 2

      _start_torch_memory_measurement()

      _lowercase			 =torch.Generator(device='cpu'      ).manual_seed(0      )

      _lowercase			 =floats_tensor((1, 3, 256, 256)							,     rng=random.Random(0      )      ).to(__A      )
      _lowercase			 =floats_tensor((1, 3, 64, 64)							,     rng=random.Random(0      )      ).to(__A      )

      _lowercase			 =pipe_a(
          prompt_embeds=__A							,     negative_prompt_embeds=__A							,     image=__A							,     original_image=__A							,     generator=__A							,     num_inference_steps=2							,     output_type='np'							,     )

      _lowercase			 =output.images[0]

      assert image.shape == (256, 256, 3)

      _lowercase			 =torch.cuda.max_memory_allocated()
      assert mem_bytes < 4 * 10**9

      _lowercase			 =load_numpy(
          'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_img2img_superresolution_stage_II.npy'      )
      assert_mean_pixel_difference(__A							,     __A      )




  def 						A__  (       self							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase      )						->				Optional[int]:
      '''simple docstring'''






      _start_torch_memory_measurement()

      _lowercase			 =floats_tensor((1, 3, 64, 64)							,     rng=random.Random(0      )      ).to(__A      )
      _lowercase			 =floats_tensor((1, 3, 64, 64)							,     rng=random.Random(1      )      ).to(__A      )

      _lowercase			 =torch.Generator(device='cpu'      ).manual_seed(0      )
      _lowercase			 =pipe_a(
          prompt_embeds=__A							,     negative_prompt_embeds=__A							,     image=__A							,     mask_image=__A							,     num_inference_steps=2							,     generator=__A							,     output_type='np'							,     )

      _lowercase			 =output.images[0]

      assert image.shape == (64, 64, 3)

      _lowercase			 =torch.cuda.max_memory_allocated()
      assert mem_bytes < 10 * 10**9

      _lowercase			 =load_numpy(
          'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_inpainting.npy'      )
      assert_mean_pixel_difference(__A							,     __A      )

      # pipeline 2

      _start_torch_memory_measurement()

      _lowercase			 =torch.Generator(device='cpu'      ).manual_seed(0      )

      _lowercase			 =floats_tensor((1, 3, 64, 64)							,     rng=random.Random(0      )      ).to(__A      )
      _lowercase			 =floats_tensor((1, 3, 256, 256)							,     rng=random.Random(0      )      ).to(__A      )
      _lowercase			 =floats_tensor((1, 3, 256, 256)							,     rng=random.Random(1      )      ).to(__A      )

      _lowercase			 =pipe_a(
          prompt_embeds=__A							,     negative_prompt_embeds=__A							,     image=__A							,     mask_image=__A							,     original_image=__A							,     generator=__A							,     num_inference_steps=2							,     output_type='np'							,     )

      _lowercase			 =output.images[0]

      assert image.shape == (256, 256, 3)

      _lowercase			 =torch.cuda.max_memory_allocated()
      assert mem_bytes < 4 * 10**9

      _lowercase			 =load_numpy(
          'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/if/test_if_inpainting_superresolution_stage_II.npy'      )
      assert_mean_pixel_difference(__A							,     __A      )
def   a   (    )					->   List[str]:





    """simple docstring"""



    torch.cuda.empty_cache()
    torch.cuda.reset_max_memory_allocated()
    torch.cuda.reset_peak_memory_stats()





import unittest

from knapsack import knapsack as k





class 				__lowerCAmelCase  (      unittest.TestCase							):




  def 						A__  (       self      )						->				List[str]:
        '''simple docstring'''






        _lowercase			 =0
        _lowercase			 =[0]
        _lowercase			 =[0]
        _lowercase			 =len(lowerCAmelCase      )
        self.assertEqual(k.knapsack(lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase      )							,     0      )

        _lowercase			 =[60]
        _lowercase			 =[10]
        _lowercase			 =len(lowerCAmelCase      )
        self.assertEqual(k.knapsack(lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase      )							,     0      )




  def 						A__  (       self      )						->				List[Any]:
        '''simple docstring'''






        _lowercase			 =3
        _lowercase			 =[1, 2, 3]
        _lowercase			 =[3, 2, 1]
        _lowercase			 =len(lowerCAmelCase      )
        self.assertEqual(k.knapsack(lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase      )							,     5      )




  def 						A__  (       self      )						->				str:
        '''simple docstring'''






        _lowercase			 =50
        _lowercase			 =[60, 100, 120]
        _lowercase			 =[10, 20, 30]
        _lowercase			 =len(lowerCAmelCase      )
        self.assertEqual(k.knapsack(lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase      )							,     220      )


if __name__ == "__main__":
  unittest.main()


