

import inspect
import re

from transformers.utils import direct_transformers_import


# All paths are set with the intent you should run this script from the root of the repo with the command
# python utils/check_config_docstrings.py
lowerCAmelCase__	   = """src/transformers"""


# This is to make sure the transformers module imported is the one in the repo.
lowerCAmelCase__	   = direct_transformers_import(PATH_TO_TRANSFORMERS)

lowerCAmelCase__	   = transformers.models.auto.configuration_auto.CONFIG_MAPPING

# Regex pattern used to find the checkpoint mentioned in the docstring of `config_class`.
# For example, `[bert-base-uncased](https://huggingface.co/bert-base-uncased)`
lowerCAmelCase__	   = re.compile(R"""\[(.+?)\]\((https://huggingface\.co/.+?)\)""")


lowerCAmelCase__	   = {
    """DecisionTransformerConfig""",
    """EncoderDecoderConfig""",
    """MusicgenConfig""",
    """RagConfig""",
    """SpeechEncoderDecoderConfig""",
    """TimmBackboneConfig""",
    """VisionEncoderDecoderConfig""",
    """VisionTextDualEncoderConfig""",
    """LlamaConfig""",
}



def 					lowerCAmelCase__							(	SCREAMING_SNAKE_CASE_:							Union[str, Any]      )			->      Dict:




				'''simple docstring'''





				A__        =			None

				# source code of `config_class`
				A__        =			inspect.getsource(SCREAMING_SNAKE_CASE_      )
				A__        =			_re_checkpoint.findall(SCREAMING_SNAKE_CASE_      )

				# Each `checkpoint` is a tuple of a checkpoint name and a checkpoint link.
				# For example, `('bert-base-uncased', 'https://huggingface.co/bert-base-uncased')`
				for ckpt_name, ckpt_link in checkpoints:
								# allow the link to end with `/`
								if ckpt_link.endswith("/"      ):
												A__        =			ckpt_link[:-1]

								# verify the checkpoint name corresponds to the checkpoint link
								A__        =			F'https://huggingface.co/{ckpt_name}'
								if ckpt_link == ckpt_link_from_name:
												A__        =			ckpt_name
												break

				return checkpoint



def 					lowerCAmelCase__							(	)			->      List[str]:




				'''simple docstring'''





				A__        =			[]

				for config_class in list(CONFIG_MAPPING.values()      ):
								# Skip deprecated models
								if "models.deprecated" in config_class.__module__:
												continue
								A__        =			get_checkpoint_from_config_class(SCREAMING_SNAKE_CASE_      )

								A__        =			config_class.__name__
								if checkpoint is None and name not in CONFIG_CLASSES_TO_IGNORE_FOR_DOCSTRING_CHECKPOINT_CHECK:
												configs_without_checkpoint.append(SCREAMING_SNAKE_CASE_      )

				if len(SCREAMING_SNAKE_CASE_      ) > 0:
								A__        =			"\n".join(sorted(SCREAMING_SNAKE_CASE_      )      )
								raise ValueError(F'The following configurations don\'t contain any valid checkpoint:\n{message}'      )


if __name__ == "__main__":
	check_config_docstrings_have_checkpoints()




import gc
import unittest

import numpy as np
import torch

from diffusers import DanceDiffusionPipeline, IPNDMScheduler, UNetaDModel
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu, skip_mps

from ..pipeline_params import UNCONDITIONAL_AUDIO_GENERATION_BATCH_PARAMS, UNCONDITIONAL_AUDIO_GENERATION_PARAMS
from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()

class 					a__						(					snake_case							,	unittest.TestCase			):
			"""simple docstring"""







			__lowerCamelCase        =       DanceDiffusionPipeline
			__lowerCamelCase        =       UNCONDITIONAL_AUDIO_GENERATION_PARAMS
			__lowerCamelCase        =       PipelineTesterMixin.required_optional_params - {
			    'callback',
			    'latents',
			    'callback_steps',
			    'output_type',
			    'num_images_per_prompt',
			}
			__lowerCamelCase        =       UNCONDITIONAL_AUDIO_GENERATION_BATCH_PARAMS
			__lowerCamelCase        =       False
			__lowerCamelCase        =       False


			def      UpperCamelCase		(    self       )  ->						Optional[int]:
							'''simple docstring'''






							torch.manual_seed(0       )
							A__        =			UNetaDModel(
							    block_out_channels=(32, 32, 64)      ,      extra_in_channels=16      ,      sample_size=512      ,      sample_rate=16000      ,      in_channels=2      ,      out_channels=2      ,      flip_sin_to_cos=lowercase      ,      use_timestep_embedding=lowercase      ,      time_embedding_type="fourier"      ,      mid_block_type="UNetMidBlock1D"      ,      down_block_types=("DownBlock1DNoSkip", "DownBlock1D", "AttnDownBlock1D")      ,      up_block_types=("AttnUpBlock1D", "UpBlock1D", "UpBlock1DNoSkip")      ,      )
							A__        =			IPNDMScheduler()

							A__        =			{
							    "unet": unet,
							    "scheduler": scheduler,
							}
							return components


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






							if str(lowercase       ).startswith("mps"       ):
											A__        =			torch.manual_seed(lowercase       )
							else:
											A__        =			torch.Generator(device=lowercase       ).manual_seed(lowercase       )
							A__        =			{
							    "batch_size": 1,
							    "generator": generator,
							    "num_inference_steps": 4,
							}
							return inputs


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






							A__        =			"cpu"  # ensure determinism for the device-dependent torch.Generator
							A__        =			self.get_dummy_components()
							A__        =			DanceDiffusionPipeline(**lowercase       )
							A__        =			pipe.to(lowercase       )
							pipe.set_progress_bar_config(disable=lowercase       )

							A__        =			self.get_dummy_inputs(lowercase       )
							A__        =			pipe(**lowercase       )
							A__        =			output.audios

							A__        =			audio[0, -3:, -3:]

							assert audio.shape == (1, 2, components["unet"].sample_size)
							A__        =			np.array([-0.7265, 1.0000, -0.8388, 0.1175, 0.9498, -1.0000]       )
							assert np.abs(audio_slice.flatten() - expected_slice       ).max() < 1e-2


			@skip_mps
			def      UpperCamelCase		(    self       )  ->						Dict:
							'''simple docstring'''






							return super().test_save_load_local()


			@skip_mps
			def      UpperCamelCase		(    self       )  ->						int:
							'''simple docstring'''






							return super().test_dict_tuple_outputs_equivalent(expected_max_difference=3e-3       )


			@skip_mps
			def      UpperCamelCase		(    self       )  ->						Optional[Any]:
							'''simple docstring'''






							return super().test_save_load_optional_components()


			@skip_mps
			def      UpperCamelCase		(    self       )  ->						int:
							'''simple docstring'''






							return super().test_attention_slicing_forward_pass()


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






							super().test_inference_batch_single_identical(expected_max_diff=3e-3       )

@slow
@require_torch_gpu
class 					a__						(					unittest.TestCase			):
			"""simple docstring"""







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






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


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






							A__        =			torch_device

							A__        =			DanceDiffusionPipeline.from_pretrained("harmonai/maestro-150k"       )
							A__        =			pipe.to(lowercase       )
							pipe.set_progress_bar_config(disable=lowercase       )

							A__        =			torch.manual_seed(0       )
							A__        =			pipe(generator=lowercase      ,      num_inference_steps=100      ,      audio_length_in_s=4.096       )
							A__        =			output.audios

							A__        =			audio[0, -3:, -3:]

							assert audio.shape == (1, 2, pipe.unet.sample_size)
							A__        =			np.array([-0.0192, -0.0231, -0.0318, -0.0059, 0.0002, -0.0020]       )

							assert np.abs(audio_slice.flatten() - expected_slice       ).max() < 1e-2


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






							A__        =			torch_device

							A__        =			DanceDiffusionPipeline.from_pretrained("harmonai/maestro-150k"      ,      torch_dtype=torch.floataa       )
							A__        =			pipe.to(lowercase       )
							pipe.set_progress_bar_config(disable=lowercase       )

							A__        =			torch.manual_seed(0       )
							A__        =			pipe(generator=lowercase      ,      num_inference_steps=100      ,      audio_length_in_s=4.096       )
							A__        =			output.audios

							A__        =			audio[0, -3:, -3:]

							assert audio.shape == (1, 2, pipe.unet.sample_size)
							A__        =			np.array([-0.0367, -0.0488, -0.0771, -0.0525, -0.0444, -0.0341]       )

							assert np.abs(audio_slice.flatten() - expected_slice       ).max() < 1e-2

