import gc
import unittest

import numpy as np
import torch

from diffusers import (
    AudioDiffusionPipeline,
    AutoencoderKL,
    DDIMScheduler,
    DDPMScheduler,
    DiffusionPipeline,
    Mel,
    UNetaDConditionModel,
    UNetaDModel,
)
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu


enable_full_determinism()



class      _A (     unittest.TestCase				):






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





       '''simple docstring'''





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






  @property
  def 		_a       (self						)		->   Union[str, Any]:





       '''simple docstring'''





       torch.manual_seed(0						)
       UpperCamelCase__					    =   UNetaDModel(
           sample_size=(32, 64) ,					in_channels=1 ,					out_channels=1 ,					layers_per_block=2 ,					block_out_channels=(128, 128) ,					down_block_types=('''AttnDownBlock2D''', '''DownBlock2D''') ,					up_block_types=('''UpBlock2D''', '''AttnUpBlock2D''') ,					)
       return model






  @property
  def 		_a       (self						)		->   int:





       '''simple docstring'''





       torch.manual_seed(0						)
       UpperCamelCase__					    =   UNetaDConditionModel(
           sample_size=(64, 32) ,					in_channels=1 ,					out_channels=1 ,					layers_per_block=2 ,					block_out_channels=(128, 128) ,					down_block_types=('''CrossAttnDownBlock2D''', '''DownBlock2D''') ,					up_block_types=('''UpBlock2D''', '''CrossAttnUpBlock2D''') ,					cross_attention_dim=10 ,					)
       return model






  @property
  def 		_a       (self						)		->   Optional[int]:





       '''simple docstring'''





       torch.manual_seed(0						)
       UpperCamelCase__					    =   AutoencoderKL(
           sample_size=(128, 64) ,					in_channels=1 ,					out_channels=1 ,					latent_channels=1 ,					layers_per_block=2 ,					block_out_channels=(128, 128) ,					down_block_types=('''DownEncoderBlock2D''', '''DownEncoderBlock2D''') ,					up_block_types=('''UpDecoderBlock2D''', '''UpDecoderBlock2D''') ,					)
       UpperCamelCase__					    =   UNetaDModel(
           sample_size=(64, 32) ,					in_channels=1 ,					out_channels=1 ,					layers_per_block=2 ,					block_out_channels=(128, 128) ,					down_block_types=('''AttnDownBlock2D''', '''DownBlock2D''') ,					up_block_types=('''UpBlock2D''', '''AttnUpBlock2D''') ,					)
       return vqvae, unet






  @slow
  def 		_a       (self						)		->   Tuple:





       '''simple docstring'''





       UpperCamelCase__					    =   '''cpu'''  # ensure determinism for the device-dependent torch.Generator
       UpperCamelCase__					    =   Mel(
           x_res=self.dummy_unet.config.sample_size[1] ,					y_res=self.dummy_unet.config.sample_size[0] ,					)

       UpperCamelCase__					    =   DDPMScheduler()
       UpperCamelCase__					    =   AudioDiffusionPipeline(vqvae=__lowerCamelCase ,					unet=self.dummy_unet ,					mel=__lowerCamelCase ,					scheduler=__lowerCamelCase						)
       UpperCamelCase__					    =   pipe.to(__lowerCamelCase						)
       pipe.set_progress_bar_config(disable=__lowerCamelCase						)

       UpperCamelCase__					    =   torch.Generator(device=__lowerCamelCase						).manual_seed(42						)
       UpperCamelCase__					    =   pipe(generator=__lowerCamelCase ,					steps=4						)
       UpperCamelCase__					    =   output.audios[0]
       UpperCamelCase__					    =   output.images[0]

       UpperCamelCase__					    =   torch.Generator(device=__lowerCamelCase						).manual_seed(42						)
       UpperCamelCase__					    =   pipe(generator=__lowerCamelCase ,					steps=4 ,					return_dict=__lowerCamelCase						)
       UpperCamelCase__					    =   output[0][0]

       assert audio.shape == (1, (self.dummy_unet.config.sample_size[1] - 1) * mel.hop_length)
       assert (
           image.height == self.dummy_unet.config.sample_size[0]
           and image.width == self.dummy_unet.config.sample_size[1]
       )
       UpperCamelCase__					    =   np.frombuffer(image.tobytes() ,					dtype='''uint8'''						)[:10]
       UpperCamelCase__					    =   np.frombuffer(image_from_tuple.tobytes() ,					dtype='''uint8'''						)[:10]
       UpperCamelCase__					    =   np.array([69, 255, 255, 255, 0, 0, 77, 181, 12, 127]						)

       assert np.abs(image_slice.flatten() - expected_slice						).max() == 0
       assert np.abs(image_from_tuple_slice.flatten() - expected_slice						).max() == 0

       UpperCamelCase__					    =   Mel(
           x_res=self.dummy_vqvae_and_unet[0].config.sample_size[1] ,					y_res=self.dummy_vqvae_and_unet[0].config.sample_size[0] ,					)

       UpperCamelCase__					    =   DDIMScheduler()
       UpperCamelCase__					    =   self.dummy_vqvae_and_unet
       UpperCamelCase__					    =   AudioDiffusionPipeline(
           vqvae=self.dummy_vqvae_and_unet[0] ,					unet=dummy_vqvae_and_unet[1] ,					mel=__lowerCamelCase ,					scheduler=__lowerCamelCase						)
       UpperCamelCase__					    =   pipe.to(__lowerCamelCase						)
       pipe.set_progress_bar_config(disable=__lowerCamelCase						)

       np.random.seed(0						)
       UpperCamelCase__					    =   np.random.uniform(-1 ,					1 ,					((dummy_vqvae_and_unet[0].config.sample_size[1] - 1) * mel.hop_length,)						)
       UpperCamelCase__					    =   torch.Generator(device=__lowerCamelCase						).manual_seed(42						)
       UpperCamelCase__					    =   pipe(raw_audio=__lowerCamelCase ,					generator=__lowerCamelCase ,					start_step=5 ,					steps=10						)
       UpperCamelCase__					    =   output.images[0]

       assert (
           image.height == self.dummy_vqvae_and_unet[0].config.sample_size[0]
           and image.width == self.dummy_vqvae_and_unet[0].config.sample_size[1]
       )
       UpperCamelCase__					    =   np.frombuffer(image.tobytes() ,					dtype='''uint8'''						)[:10]
       UpperCamelCase__					    =   np.array([120, 117, 110, 109, 138, 167, 138, 148, 132, 121]						)

       assert np.abs(image_slice.flatten() - expected_slice						).max() == 0

       UpperCamelCase__					    =   self.dummy_unet_condition
       UpperCamelCase__					    =   AudioDiffusionPipeline(
           vqvae=self.dummy_vqvae_and_unet[0] ,					unet=__lowerCamelCase ,					mel=__lowerCamelCase ,					scheduler=__lowerCamelCase						)
       UpperCamelCase__					    =   pipe.to(__lowerCamelCase						)
       pipe.set_progress_bar_config(disable=__lowerCamelCase						)

       np.random.seed(0						)
       UpperCamelCase__					    =   torch.rand((1, 1, 10)						)
       UpperCamelCase__					    =   pipe(generator=__lowerCamelCase ,					encoding=__lowerCamelCase						)
       UpperCamelCase__					    =   output.images[0]
       UpperCamelCase__					    =   np.frombuffer(image.tobytes() ,					dtype='''uint8'''						)[:10]
       UpperCamelCase__					    =   np.array([107, 103, 120, 127, 142, 122, 113, 122, 97, 111]						)

       assert np.abs(image_slice.flatten() - expected_slice						).max() == 0



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






  def 		_a       (self						)		->   Dict:





       '''simple docstring'''





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






  def 		_a       (self						)		->   Any:





       '''simple docstring'''





       UpperCamelCase__					    =   torch_device

       UpperCamelCase__					    =   DiffusionPipeline.from_pretrained('''teticio/audio-diffusion-ddim-256'''						)
       UpperCamelCase__					    =   pipe.to(__lowerCamelCase						)
       pipe.set_progress_bar_config(disable=__lowerCamelCase						)

       UpperCamelCase__					    =   torch.Generator(device=__lowerCamelCase						).manual_seed(42						)
       UpperCamelCase__					    =   pipe(generator=__lowerCamelCase						)
       UpperCamelCase__					    =   output.audios[0]
       UpperCamelCase__					    =   output.images[0]

       assert audio.shape == (1, (pipe.unet.config.sample_size[1] - 1) * pipe.mel.hop_length)
       assert image.height == pipe.unet.config.sample_size[0] and image.width == pipe.unet.config.sample_size[1]
       UpperCamelCase__					    =   np.frombuffer(image.tobytes() ,					dtype='''uint8'''						)[:10]
       UpperCamelCase__					    =   np.array([151, 167, 154, 144, 122, 134, 121, 105, 70, 26]						)

       assert np.abs(image_slice.flatten() - expected_slice						).max() == 0










"""simple docstring"""



def 						__lowercase	(  snake_case_    :    int							,snake_case_    :    int		)  ->int:



    '''simple docstring'''







    return int((input_a, input_a).count(0		) == 0		)







def 						__lowercase	(  )  ->None:



    '''simple docstring'''







    assert and_gate(0							,0		) == 0
    assert and_gate(0							,1		) == 0
    assert and_gate(1							,0		) == 0
    assert and_gate(1							,1		) == 1


if __name__ == "__main__":
       test_and_gate()
       print(and_gate(1, 0))
       print(and_gate(0, 0))
       print(and_gate(0, 1))
       print(and_gate(1, 1))




