


'''simple docstring'''







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 					lowercase_     (    unittest.TestCase   ):


    def    __a							(     self    ):
          # clean up the VRAM after each test
          super().tearDown()
          gc.collect()
          torch.cuda.empty_cache()


    @property
    def    __a							(     self    ):
          torch.manual_seed(0    )
          UpperCamelCase__										=				UNetaDModel(
              sample_size=(32, 64)  ,					in_channels=1  ,					out_channels=1  ,					layers_per_block=2  ,					block_out_channels=(1_28, 1_28)  ,					down_block_types=("AttnDownBlock2D", "DownBlock2D")  ,					up_block_types=("UpBlock2D", "AttnUpBlock2D")  ,					)
          return model


    @property
    def    __a							(     self    ):
          torch.manual_seed(0    )
          UpperCamelCase__										=				UNetaDConditionModel(
              sample_size=(64, 32)  ,					in_channels=1  ,					out_channels=1  ,					layers_per_block=2  ,					block_out_channels=(1_28, 1_28)  ,					down_block_types=("CrossAttnDownBlock2D", "DownBlock2D")  ,					up_block_types=("UpBlock2D", "CrossAttnUpBlock2D")  ,					cross_attention_dim=10  ,					)
          return model


    @property
    def    __a							(     self    ):
          torch.manual_seed(0    )
          UpperCamelCase__										=				AutoencoderKL(
              sample_size=(1_28, 64)  ,					in_channels=1  ,					out_channels=1  ,					latent_channels=1  ,					layers_per_block=2  ,					block_out_channels=(1_28, 1_28)  ,					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=(1_28, 1_28)  ,					down_block_types=("AttnDownBlock2D", "DownBlock2D")  ,					up_block_types=("UpBlock2D", "AttnUpBlock2D")  ,					)
          return vqvae, unet


    @slow
    def    __a							(     self    ):
          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=a  ,					unet=self.dummy_unet  ,					mel=a  ,					scheduler=a    )
          UpperCamelCase__										=				pipe.to(a    )
          pipe.set_progress_bar_config(disable=a    )

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

          UpperCamelCase__										=				torch.Generator(device=a    ).manual_seed(42    )
          UpperCamelCase__										=				pipe(generator=a  ,					steps=4  ,					return_dict=a    )
          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, 2_55, 2_55, 2_55, 0, 0, 77, 1_81, 12, 1_27]    )

          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=a  ,					scheduler=a    )
          UpperCamelCase__										=				pipe.to(a    )
          pipe.set_progress_bar_config(disable=a    )

          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=a    ).manual_seed(42    )
          UpperCamelCase__										=				pipe(raw_audio=a  ,					generator=a  ,					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([1_20, 1_17, 1_10, 1_09, 1_38, 1_67, 1_38, 1_48, 1_32, 1_21]    )

          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=a  ,					mel=a  ,					scheduler=a    )
          UpperCamelCase__										=				pipe.to(a    )
          pipe.set_progress_bar_config(disable=a    )

          np.random.seed(0    )
          UpperCamelCase__										=				torch.rand((1, 1, 10)    )
          UpperCamelCase__										=				pipe(generator=a  ,					encoding=a    )
          UpperCamelCase__										=				output.images[0]
          UpperCamelCase__										=				np.frombuffer(image.tobytes()  ,					dtype="uint8"    )[:10]
          UpperCamelCase__										=				np.array([1_07, 1_03, 1_20, 1_27, 1_42, 1_22, 1_13, 1_22, 97, 1_11]    )

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

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


    def    __a							(     self    ):
          # clean up the VRAM after each test
          super().tearDown()
          gc.collect()
          torch.cuda.empty_cache()


    def    __a							(     self    ):
          UpperCamelCase__										=				torch_device

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

          UpperCamelCase__										=				torch.Generator(device=a    ).manual_seed(42    )
          UpperCamelCase__										=				pipe(generator=a    )
          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([1_51, 1_67, 1_54, 1_44, 1_22, 1_34, 1_21, 1_05, 70, 26]    )

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









'''simple docstring'''

from ....utils import logging


lowerCamelCase							:   Optional[Any]  						=	logging.get_logger(__name__)
class   __lowerCAmelCase						(lowercase_     ):





      '''simple docstring'''






      def __init__(self    :    Optional[int]   ,						UpperCamelCase    :    Union[str, Any]   ,						UpperCamelCase    :    Optional[Any]=None   ,						UpperCamelCase    :    int=2048 ):

             '''simple docstring'''







             lowercase__      			= config.__dict__
             lowercase__      			= modal_hidden_size
             if num_labels:
                    lowercase__      			= num_labels




