


import itertools
import os
import random
import tempfile
import unittest

import numpy as np

from transformers import TvltFeatureExtractor, is_datasets_available
from transformers.testing_utils import check_json_file_has_correct_format, require_torch, require_torchaudio
from transformers.utils.import_utils import is_torch_available

from ...test_sequence_feature_extraction_common import SequenceFeatureExtractionTestMixin


if is_torch_available():
			import torch

if is_datasets_available():
			from datasets import load_dataset

lowerCAmelCase       =							random.Random()
def 			_a (      SCREAMING_SNAKE_CASE						,				SCREAMING_SNAKE_CASE=1.0						,				SCREAMING_SNAKE_CASE=None						,				SCREAMING_SNAKE_CASE=None     ):


		"""simple docstring"""




		if rng is None:
				lowercase__            =      global_rng

		lowercase__            =      []
		for batch_idx in range(shape[0]     ):
				values.append([]     )
				for _ in range(shape[1]     ):
						values[-1].append(rng.random() * scale     )

		return values


class        _a							(			unittest.TestCase			):

							def __init__(							self:	int    ,						UpperCamelCase_:	Optional[Any]    ,						UpperCamelCase_:	Tuple=7    ,						UpperCamelCase_:	Any=400    ,						UpperCamelCase_:	Optional[int]=2_000    ,						UpperCamelCase_:	Tuple=2_048    ,						UpperCamelCase_:	int=128    ,						UpperCamelCase_:	Optional[int]=1    ,						UpperCamelCase_:	List[str]=512    ,						UpperCamelCase_:	str=30    ,						UpperCamelCase_:	int=44_100    ,						)			->   Any:





									"""simple docstring"""







									lowercase__            =      parent
									lowercase__            =      batch_size
									lowercase__            =      min_seq_length
									lowercase__            =      max_seq_length
									lowercase__            =      (self.max_seq_length - self.min_seq_length) // (self.batch_size - 1)
									lowercase__            =      spectrogram_length
									lowercase__            =      feature_size
									lowercase__            =      num_audio_channels
									lowercase__            =      hop_length
									lowercase__            =      chunk_length
									lowercase__            =      sampling_rate

							def       lowerCamelCase_ (							self:	List[Any]							)			->   int:





									"""simple docstring"""







									return {
									    "spectrogram_length": self.spectrogram_length,
									    "feature_size": self.feature_size,
									    "num_audio_channels": self.num_audio_channels,
									    "hop_length": self.hop_length,
									    "chunk_length": self.chunk_length,
									    "sampling_rate": self.sampling_rate,
									}


							def       lowerCamelCase_ (							self:	Union[str, Any]    ,						UpperCamelCase_:	int=False    ,						UpperCamelCase_:	Optional[int]=False							)			->   str:





									"""simple docstring"""







									def _flatten(UpperCamelCase_:	List[Any]							):
											return list(itertools.chain(*UpperCamelCase_							)							)

									if equal_length:
											lowercase__            =      [floats_list((self.max_seq_length, self.feature_size)							) for _ in range(self.batch_size							)]
									else:
											# make sure that inputs increase in size
											lowercase__            =      [
											    floats_list((x, self.feature_size)							)
											    for x in range(self.min_seq_length    ,						self.max_seq_length    ,						self.seq_length_diff							)
											]
									if numpify:
											lowercase__            =      [np.asarray(UpperCamelCase_							) for x in speech_inputs]
									return speech_inputs


@require_torch
@require_torchaudio
class        _a							(			UpperCamelCase__     ,	unittest.TestCase			):
							_lowercase	:			Optional[int]        = TvltFeatureExtractor

							def       lowerCamelCase_ (							self:	Optional[int]							)			->   str:





									"""simple docstring"""







									lowercase__            =      TvltFeatureExtractionTester(self							)

							def       lowerCamelCase_ (							self:	Optional[int]							)			->   Optional[Any]:





									"""simple docstring"""







									lowercase__            =      self.feature_extraction_class(**self.feat_extract_dict							)
									self.assertTrue(hasattr(UpperCamelCase_    ,						'''spectrogram_length'''							)							)
									self.assertTrue(hasattr(UpperCamelCase_    ,						'''feature_size'''							)							)
									self.assertTrue(hasattr(UpperCamelCase_    ,						'''num_audio_channels'''							)							)
									self.assertTrue(hasattr(UpperCamelCase_    ,						'''hop_length'''							)							)
									self.assertTrue(hasattr(UpperCamelCase_    ,						'''chunk_length'''							)							)
									self.assertTrue(hasattr(UpperCamelCase_    ,						'''sampling_rate'''							)							)

							def       lowerCamelCase_ (							self:	int							)			->   List[str]:





									"""simple docstring"""







									lowercase__            =      self.feature_extraction_class(**self.feat_extract_dict							)

									with tempfile.TemporaryDirectory() as tmpdirname:
											lowercase__            =      feat_extract_first.save_pretrained(UpperCamelCase_							)[0]
											check_json_file_has_correct_format(UpperCamelCase_							)
											lowercase__            =      self.feature_extraction_class.from_pretrained(UpperCamelCase_							)

									lowercase__            =      feat_extract_first.to_dict()
									lowercase__            =      feat_extract_second.to_dict()
									lowercase__            =      dict_first.pop('''mel_filters'''							)
									lowercase__            =      dict_second.pop('''mel_filters'''							)
									self.assertTrue(np.allclose(UpperCamelCase_    ,						UpperCamelCase_							)							)
									self.assertEqual(UpperCamelCase_    ,						UpperCamelCase_							)

							def       lowerCamelCase_ (							self:	int							)			->   Optional[Any]:





									"""simple docstring"""







									lowercase__            =      self.feature_extraction_class(**self.feat_extract_dict							)

									with tempfile.TemporaryDirectory() as tmpdirname:
											lowercase__            =      os.path.join(UpperCamelCase_    ,						'''feat_extract.json'''							)
											feat_extract_first.to_json_file(UpperCamelCase_							)
											lowercase__            =      self.feature_extraction_class.from_json_file(UpperCamelCase_							)

									lowercase__            =      feat_extract_first.to_dict()
									lowercase__            =      feat_extract_second.to_dict()
									lowercase__            =      dict_first.pop('''mel_filters'''							)
									lowercase__            =      dict_second.pop('''mel_filters'''							)
									self.assertTrue(np.allclose(UpperCamelCase_    ,						UpperCamelCase_							)							)
									self.assertEqual(UpperCamelCase_    ,						UpperCamelCase_							)

							def       lowerCamelCase_ (							self:	Optional[Any]							)			->   List[str]:





									"""simple docstring"""







									lowercase__            =      self.feature_extraction_class(**self.feat_extract_dict							)

									# create three inputs of length 800, 1000, and 1200
									lowercase__            =      [floats_list((1, x)							)[0] for x in range(800    ,						1_400    ,						200							)]
									lowercase__            =      [np.asarray(UpperCamelCase_							) for speech_input in speech_inputs]

									# Test not batched input
									lowercase__            =      feature_extractor(np_speech_inputs[0]    ,						return_tensors='''np'''    ,						sampling_rate=44_100							).audio_values

									self.assertTrue(encoded_audios.ndim == 4							)
									self.assertTrue(encoded_audios.shape[-1] == feature_extractor.feature_size							)
									self.assertTrue(encoded_audios.shape[-2] <= feature_extractor.spectrogram_length							)
									self.assertTrue(encoded_audios.shape[-3] == feature_extractor.num_channels							)

									# Test batched
									lowercase__            =      feature_extractor(UpperCamelCase_    ,						return_tensors='''np'''    ,						sampling_rate=44_100							).audio_values

									self.assertTrue(encoded_audios.ndim == 4							)
									self.assertTrue(encoded_audios.shape[-1] == feature_extractor.feature_size							)
									self.assertTrue(encoded_audios.shape[-2] <= feature_extractor.spectrogram_length							)
									self.assertTrue(encoded_audios.shape[-3] == feature_extractor.num_channels							)

									# Test audio masking
									lowercase__            =      feature_extractor(
									    UpperCamelCase_    ,						return_tensors='''np'''    ,						sampling_rate=44_100    ,						mask_audio=UpperCamelCase_							).audio_values

									self.assertTrue(encoded_audios.ndim == 4							)
									self.assertTrue(encoded_audios.shape[-1] == feature_extractor.feature_size							)
									self.assertTrue(encoded_audios.shape[-2] <= feature_extractor.spectrogram_length							)
									self.assertTrue(encoded_audios.shape[-3] == feature_extractor.num_channels							)

									# Test 2-D numpy arrays are batched.
									lowercase__            =      [floats_list((1, x)							)[0] for x in (800, 800, 800)]
									lowercase__            =      np.asarray(UpperCamelCase_							)
									lowercase__            =      feature_extractor(UpperCamelCase_    ,						return_tensors='''np'''    ,						sampling_rate=44_100							).audio_values
									self.assertTrue(encoded_audios.ndim == 4							)
									self.assertTrue(encoded_audios.shape[-1] == feature_extractor.feature_size							)
									self.assertTrue(encoded_audios.shape[-2] <= feature_extractor.spectrogram_length							)
									self.assertTrue(encoded_audios.shape[-3] == feature_extractor.num_channels							)

							def       lowerCamelCase_ (							self:	Optional[Any]    ,						UpperCamelCase_:	str							)			->   List[str]:





									"""simple docstring"""







									lowercase__            =      load_dataset('''hf-internal-testing/librispeech_asr_dummy'''    ,						'''clean'''    ,						split='''validation'''							)
									# automatic decoding with librispeech
									lowercase__            =      ds.sort('''id'''							).select(range(UpperCamelCase_							)							)[:num_samples]['''audio''']

									return [x["array"] for x in speech_samples]


							def       lowerCamelCase_ (							self:	int							)			->   Union[str, Any]:





									"""simple docstring"""







									lowercase__            =      self._load_datasamples(1							)
									lowercase__            =      TvltFeatureExtractor()
									lowercase__            =      feature_extractor(UpperCamelCase_    ,						return_tensors='''pt'''							).audio_values

									self.assertEquals(audio_values.shape    ,						(1, 1, 192, 128)							)

									lowercase__            =      torch.tensor([[-0.3032, -0.2708], [-0.4434, -0.4007]]							)
									self.assertTrue(torch.allclose(audio_values[0, 0, :2, :2]    ,						UpperCamelCase_    ,						atol=1E-4							)							)





import gc
import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModelWithProjection, CLIPTokenizer

from diffusers import HeunDiscreteScheduler, PriorTransformer, ShapEPipeline
from diffusers.pipelines.shap_e import ShapERenderer
from diffusers.utils import load_numpy, slow
from diffusers.utils.testing_utils import require_torch_gpu, torch_device

from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference



class   __lowercase				( UpperCAmelCase_		,       unittest.TestCase	):




			"""simple docstring"""







			_UpperCAmelCase   :							List[str]										=     ShapEPipeline
			_UpperCAmelCase   :							Tuple										=     ['''prompt''']
			_UpperCAmelCase   :							Dict										=     ['''prompt''']
			_UpperCAmelCase   :							Any										=     [
			    '''num_images_per_prompt''',
			    '''num_inference_steps''',
			    '''generator''',
			    '''latents''',
			    '''guidance_scale''',
			    '''frame_size''',
			    '''output_type''',
			    '''return_dict''',
			]
			_UpperCAmelCase   :							Optional[int]										=     False



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									return 32



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									return 32



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									return self.time_input_dim * 4



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     Optional[int]):
									return 8



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									SCREAMING_SNAKE_CASE_: str  		=       CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip")
									return tokenizer



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     Union[str, Any]):
									torch.manual_seed(0)
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       CLIPTextConfig(
									    bos_token_id=0   ,						eos_token_id=2   ,						hidden_size=self.text_embedder_hidden_size   ,						projection_dim=self.text_embedder_hidden_size   ,						intermediate_size=37   ,						layer_norm_eps=1E-05   ,						num_attention_heads=4   ,						num_hidden_layers=5   ,						pad_token_id=1   ,						vocab_size=1000   ,						)
									return CLIPTextModelWithProjection(lowerCAmelCase__)



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     Optional[Any]):
									torch.manual_seed(0)

									SCREAMING_SNAKE_CASE_: Tuple  		=       {
									    "num_attention_heads": 2,
									    "attention_head_dim": 16,
									    "embedding_dim": self.time_input_dim,
									    "num_embeddings": 32,
									    "embedding_proj_dim": self.text_embedder_hidden_size,
									    "time_embed_dim": self.time_embed_dim,
									    "num_layers": 1,
									    "clip_embed_dim": self.time_input_dim * 2,
									    "additional_embeddings": 0,
									    "time_embed_act_fn": "gelu",
									    "norm_in_type": "layer",
									    "encoder_hid_proj_type": None,
									    "added_emb_type": None,
									}

									SCREAMING_SNAKE_CASE_: Any  		=       PriorTransformer(**lowerCAmelCase__)
									return model



			@property
			def        _SCREAMING_SNAKE_CASE			( self  :     Dict):
									torch.manual_seed(0)

									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       {
									    "param_shapes": (
									        (self.renderer_dim, 93),
									        (self.renderer_dim, 8),
									        (self.renderer_dim, 8),
									        (self.renderer_dim, 8),
									    ),
									    "d_latent": self.time_input_dim,
									    "d_hidden": self.renderer_dim,
									    "n_output": 12,
									    "background": (
									        0.1,
									        0.1,
									        0.1,
									    ),
									}
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       ShapERenderer(**lowerCAmelCase__)
									return model



			def        _SCREAMING_SNAKE_CASE			( self  :     List[str]):
									SCREAMING_SNAKE_CASE_: Dict  		=       self.dummy_prior
									SCREAMING_SNAKE_CASE_: Optional[Any]  		=       self.dummy_text_encoder
									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       self.dummy_tokenizer
									SCREAMING_SNAKE_CASE_: List[str]  		=       self.dummy_renderer

									SCREAMING_SNAKE_CASE_: Any  		=       HeunDiscreteScheduler(
									    beta_schedule="exp"   ,						num_train_timesteps=1024   ,						prediction_type="sample"   ,						use_karras_sigmas=lowerCAmelCase__   ,						clip_sample=lowerCAmelCase__   ,						clip_sample_range=1.0   ,						)
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       {
									    "prior": prior,
									    "text_encoder": text_encoder,
									    "tokenizer": tokenizer,
									    "renderer": renderer,
									    "scheduler": scheduler,
									}

									return components



			def        _SCREAMING_SNAKE_CASE			( self  :     Any   ,						lowerCAmelCase__  :     Optional[int]   ,						lowerCAmelCase__  :     List[Any]=0):
									if str(lowerCAmelCase__).startswith("mps"):
															SCREAMING_SNAKE_CASE_: Optional[Any]  		=       torch.manual_seed(lowerCAmelCase__)
									else:
															SCREAMING_SNAKE_CASE_: Any  		=       torch.Generator(device=lowerCAmelCase__).manual_seed(lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       {
									    "prompt": "horse",
									    "generator": generator,
									    "num_inference_steps": 1,
									    "frame_size": 32,
									    "output_type": "np",
									}
									return inputs



			def        _SCREAMING_SNAKE_CASE			( self  :     Dict):
									SCREAMING_SNAKE_CASE_: str  		=       "cpu"

									SCREAMING_SNAKE_CASE_: Tuple  		=       self.get_dummy_components()

									SCREAMING_SNAKE_CASE_: Dict  		=       self.pipeline_class(**lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_: Any  		=       pipe.to(lowerCAmelCase__)

									pipe.set_progress_bar_config(disable=lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_: Optional[int]  		=       pipe(**self.get_dummy_inputs(lowerCAmelCase__))
									SCREAMING_SNAKE_CASE_: Optional[Any]  		=       output.images[0]
									SCREAMING_SNAKE_CASE_: Any  		=       image[0, -3:, -3:, -1]

									assert image.shape == (20, 32, 32, 3)

									SCREAMING_SNAKE_CASE_: Union[str, Any]  		=       np.array(
									    [
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									        0.0003_9216,
									    ])

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



			def        _SCREAMING_SNAKE_CASE			( self  :     Union[str, Any]):
									# NOTE: Larger batch sizes cause this test to timeout, only test on smaller batches
									self._test_inference_batch_consistent(batch_sizes=[1, 2])



			def        _SCREAMING_SNAKE_CASE			( self  :     Any):
									SCREAMING_SNAKE_CASE_: Dict  		=       torch_device == "cpu"
									SCREAMING_SNAKE_CASE_: List[Any]  		=       True

									self._test_inference_batch_single_identical(
									    batch_size=2   ,						test_max_difference=lowerCAmelCase__   ,						relax_max_difference=lowerCAmelCase__   ,						)




			def        _SCREAMING_SNAKE_CASE			( self  :     int):
									SCREAMING_SNAKE_CASE_: Dict  		=       self.get_dummy_components()
									SCREAMING_SNAKE_CASE_: str  		=       self.pipeline_class(**lowerCAmelCase__)
									SCREAMING_SNAKE_CASE_: Tuple  		=       pipe.to(lowerCAmelCase__)
									pipe.set_progress_bar_config(disable=lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_: List[Any]  		=       1
									SCREAMING_SNAKE_CASE_: Any  		=       2

									SCREAMING_SNAKE_CASE_: Dict  		=       self.get_dummy_inputs(lowerCAmelCase__)

									for key in inputs.keys():
															if key in self.batch_params:
																					SCREAMING_SNAKE_CASE_: List[Any]  		=       batch_size * [inputs[key]]

									SCREAMING_SNAKE_CASE_: Tuple  		=       pipe(**lowerCAmelCase__   ,						num_images_per_prompt=lowerCAmelCase__)[0]

									assert images.shape[0] == batch_size * num_images_per_prompt







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




			"""simple docstring"""







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




			def        _SCREAMING_SNAKE_CASE			( self  :     str):
									SCREAMING_SNAKE_CASE_: List[str]  		=       load_numpy(
									    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"
									    "/shap_e/test_shap_e_np_out.npy")
									SCREAMING_SNAKE_CASE_: List[str]  		=       ShapEPipeline.from_pretrained("openai/shap-e")
									SCREAMING_SNAKE_CASE_: Optional[int]  		=       pipe.to(lowerCAmelCase__)
									pipe.set_progress_bar_config(disable=lowerCAmelCase__)

									SCREAMING_SNAKE_CASE_: int  		=       torch.Generator(device=lowerCAmelCase__).manual_seed(0)

									SCREAMING_SNAKE_CASE_: int  		=       pipe(
									    "a shark"   ,						generator=lowerCAmelCase__   ,						guidance_scale=15.0   ,						num_inference_steps=64   ,						frame_size=64   ,						output_type="np"   ,						).images[0]

									assert images.shape == (20, 64, 64, 3)

									assert_mean_pixel_difference(lowerCAmelCase__   ,						lowerCAmelCase__)






