



import random
import unittest

import numpy as np
import torch

from diffusers import DDIMScheduler, LDMSuperResolutionPipeline, UNetaDModel, VQModel
from diffusers.utils import PIL_INTERPOLATION, floats_tensor, load_image, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch


enable_full_determinism()



class 	__lowerCAmelCase       (		unittest.TestCase				):




 @property
 def     lowerCamelCase (  self			):



    '''simple docstring'''
    __lowerCamelCase  							=      1
    __lowerCamelCase  							=      3
    __lowerCamelCase  							=      (32, 32)

    __lowerCamelCase  							=      floats_tensor((batch_size, num_channels) + sizes		,			rng=random.Random(0			)			).to(__UpperCAmelCase			)
    return image




 @property
 def     lowerCamelCase (  self			):



    '''simple docstring'''
    torch.manual_seed(0			)
    __lowerCamelCase  							=      UNetaDModel(
        block_out_channels=(32, 64)		,			layers_per_block=2		,			sample_size=32		,			in_channels=6		,			out_channels=3		,			down_block_types=('''DownBlock2D''', '''AttnDownBlock2D''')		,			up_block_types=('''AttnUpBlock2D''', '''UpBlock2D''')		,			)
    return model




 @property
 def     lowerCamelCase (  self			):



    '''simple docstring'''
    torch.manual_seed(0			)
    __lowerCamelCase  							=      VQModel(
        block_out_channels=[32, 64]		,			in_channels=3		,			out_channels=3		,			down_block_types=['''DownEncoderBlock2D''', '''DownEncoderBlock2D''']		,			up_block_types=['''UpDecoderBlock2D''', '''UpDecoderBlock2D''']		,			latent_channels=3		,			)
    return model




 def     lowerCamelCase (  self			):



    '''simple docstring'''
    __lowerCamelCase  							=      '''cpu'''
    __lowerCamelCase  							=      self.dummy_uncond_unet
    __lowerCamelCase  							=      DDIMScheduler()
    __lowerCamelCase  							=      self.dummy_vq_model

    __lowerCamelCase  							=      LDMSuperResolutionPipeline(unet=__UpperCAmelCase		,			vqvae=__UpperCAmelCase		,			scheduler=__UpperCAmelCase			)
    ldm.to(__UpperCAmelCase			)
    ldm.set_progress_bar_config(disable=__UpperCAmelCase			)

    __lowerCamelCase  							=      self.dummy_image.to(__UpperCAmelCase			)

    __lowerCamelCase  							=      torch.Generator(device=__UpperCAmelCase			).manual_seed(0			)
    __lowerCamelCase  							=      ldm(image=__UpperCAmelCase		,			generator=__UpperCAmelCase		,			num_inference_steps=2		,			output_type='''numpy'''			).images

    __lowerCamelCase  							=      image[0, -3:, -3:, -1]

    assert image.shape == (1, 64, 64, 3)
    __lowerCamelCase  							=      np.array([0.8_678, 0.8_245, 0.6_381, 0.6_830, 0.4_385, 0.5_599, 0.4_641, 0.6_201, 0.5_150]			)

    assert np.abs(image_slice.flatten() - expected_slice			).max() < 1E-2




 @unittest.skipIf(torch_device != '''cuda'''		,			'''This test requires a GPU'''			)
 def     lowerCamelCase (  self			):



    '''simple docstring'''
    __lowerCamelCase  							=      self.dummy_uncond_unet
    __lowerCamelCase  							=      DDIMScheduler()
    __lowerCamelCase  							=      self.dummy_vq_model

    # put models in fp16
    __lowerCamelCase  							=      unet.half()
    __lowerCamelCase  							=      vqvae.half()

    __lowerCamelCase  							=      LDMSuperResolutionPipeline(unet=__UpperCAmelCase		,			vqvae=__UpperCAmelCase		,			scheduler=__UpperCAmelCase			)
    ldm.to(__UpperCAmelCase			)
    ldm.set_progress_bar_config(disable=__UpperCAmelCase			)

    __lowerCamelCase  							=      self.dummy_image.to(__UpperCAmelCase			)

    __lowerCamelCase  							=      ldm(__UpperCAmelCase		,			num_inference_steps=2		,			output_type='''numpy'''			).images

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



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




 def     lowerCamelCase (  self			):



    '''simple docstring'''
    __lowerCamelCase  							=      load_image(
        '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'''
        '''/vq_diffusion/teddy_bear_pool.png'''			)
    __lowerCamelCase  							=      init_image.resize((64, 64)		,			resample=PIL_INTERPOLATION['''lanczos''']			)

    __lowerCamelCase  							=      LDMSuperResolutionPipeline.from_pretrained('''duongna/ldm-super-resolution'''		,			device_map='''auto'''			)
    ldm.set_progress_bar_config(disable=__UpperCAmelCase			)

    __lowerCamelCase  							=      torch.manual_seed(0			)
    __lowerCamelCase  							=      ldm(image=__UpperCAmelCase		,			generator=__UpperCAmelCase		,			num_inference_steps=20		,			output_type='''numpy'''			).images

    __lowerCamelCase  							=      image[0, -3:, -3:, -1]

    assert image.shape == (1, 256, 256, 3)
    __lowerCamelCase  							=      np.array([0.7_644, 0.7_679, 0.7_642, 0.7_633, 0.7_666, 0.7_560, 0.7_425, 0.7_257, 0.6_907]			)

    assert np.abs(image_slice.flatten() - expected_slice			).max() < 1E-2











def 						a__     (						_UpperCamelCase     :	list	,_UpperCamelCase     :	list	,_UpperCamelCase     :	list	,_UpperCamelCase     :	int	,_UpperCamelCase     :	int							):
   if target == 0:
      answer.append(path.copy()							)
   else:
      for index in range(_UpperCamelCase	,len(_UpperCamelCase							)							):
         if target >= candidates[index]:
            path.append(candidates[index]							)
            backtrack(_UpperCamelCase	,_UpperCamelCase	,_UpperCamelCase	,target - candidates[index]	,_UpperCamelCase							)
            path.pop(len(_UpperCamelCase							) - 1							)





def 						a__     (						_UpperCamelCase     :	list	,_UpperCamelCase     :	int							):
   __lowerCamelCase  							=      []  # type: list[int]
   __lowerCamelCase  							=      []  # type: list[int]
   backtrack(_UpperCamelCase	,_UpperCamelCase	,_UpperCamelCase	,_UpperCamelCase	,0							)
   return answer





def 						a__     (						):
   print(combination_sum([-8, 2.3, 0]	,1							)							)


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  main()






