


"""simple docstring"""
from collections.abc import Iterable
from typing import Generic, TypeVar

SCREAMING_SNAKE_CASE :    List[str]									=				TypeVar("""_T""")



class 			_UpperCAmelCase (							Generic[_T]				):






		'''simple docstring'''

		def __init__(self				,       a_ = None					):





			'''simple docstring'''

			__snake_case	:						list[_T]						=				list(iterable or []					)
			__snake_case	:						list[_T]						=				[]



		def __len__(self					):





			'''simple docstring'''

			return len(self._stacka					) + len(self._stacka					)



		def __repr__(self					):





			'''simple docstring'''

			return f"""Queue({tuple(self._stacka[::-1] + self._stacka					)})"""



		def 				SCREAMING_SNAKE_CASE  (self				,       a_					):





			'''simple docstring'''

			self._stacka.append(a_					)



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						List[Any]						=				self._stacka.pop
			__snake_case	:						Optional[int]						=				self._stacka.append

			if not self._stacka:
				while self._stacka:
					stacka_append(stacka_pop()					)

			if not self._stacka:
				raise IndexError('''Queue is empty'''					)
			return self._stacka.pop()


if __name__ == "__main__":
			from doctest import testmod

			testmod()









"""simple docstring"""
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 			_UpperCAmelCase (							__snake_case,				unittest.TestCase				):






		'''simple docstring'''

		lowerCamelCase__				=ShapEPipeline
		lowerCamelCase__				=['prompt']
		lowerCamelCase__				=['prompt']
		lowerCamelCase__				=[
		    'num_images_per_prompt',
		    'num_inference_steps',
		    'generator',
		    'latents',
		    'guidance_scale',
		    'frame_size',
		    'output_type',
		    'return_dict',
		]
		lowerCamelCase__				=False



		@property
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			return 32



		@property
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			return 32



		@property
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			return self.time_input_dim * 4



		@property
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			return 8



		@property
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						Optional[Any]						=				CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip'''					)
			return tokenizer



		@property
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			torch.manual_seed(0					)
			__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=10_00				,       )
			return CLIPTextModelWithProjection(a_					)



		@property
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			torch.manual_seed(0					)

			__snake_case	:						Optional[int]						=				{
			    '''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,
			}

			__snake_case	:						Optional[int]						=				PriorTransformer(**a_					)
			return model



		@property
		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			torch.manual_seed(0					)

			__snake_case	:						Optional[int]						=				{
			    '''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,
			    ),
			}
			__snake_case	:						List[Any]						=				ShapERenderer(**a_					)
			return model



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						int						=				self.dummy_prior
			__snake_case	:						str						=				self.dummy_text_encoder
			__snake_case	:						str						=				self.dummy_tokenizer
			__snake_case	:						Tuple						=				self.dummy_renderer

			__snake_case	:						int						=				HeunDiscreteScheduler(
			    beta_schedule='''exp'''				,       num_train_timesteps=10_24				,       prediction_type='''sample'''				,       use_karras_sigmas=a_				,       clip_sample=a_				,       clip_sample_range=1.0				,       )
			__snake_case	:						Union[str, Any]						=				{
			    '''prior''': prior,
			    '''text_encoder''': text_encoder,
			    '''tokenizer''': tokenizer,
			    '''renderer''': renderer,
			    '''scheduler''': scheduler,
			}

			return components



		def 				SCREAMING_SNAKE_CASE  (self				,       a_				,       a_=0					):





			'''simple docstring'''

			if str(a_					).startswith('''mps'''					):
				__snake_case	:						Tuple						=				torch.manual_seed(a_					)
			else:
				__snake_case	:						Union[str, Any]						=				torch.Generator(device=a_					).manual_seed(a_					)
			__snake_case	:						Optional[int]						=				{
			    '''prompt''': '''horse''',
			    '''generator''': generator,
			    '''num_inference_steps''': 1,
			    '''frame_size''': 32,
			    '''output_type''': '''np''',
			}
			return inputs



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						Optional[int]						=				'''cpu'''

			__snake_case	:						str						=				self.get_dummy_components()

			__snake_case	:						List[Any]						=				self.pipeline_class(**a_					)
			__snake_case	:						str						=				pipe.to(a_					)

			pipe.set_progress_bar_config(disable=a_					)

			__snake_case	:						Optional[Any]						=				pipe(**self.get_dummy_inputs(a_					)					)
			__snake_case	:						List[str]						=				output.images[0]
			__snake_case	:						List[str]						=				image[0, -3:, -3:, -1]

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

			__snake_case	:						List[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					):





			'''simple docstring'''

			self._test_inference_batch_consistent(batch_sizes=[1, 2]					)



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						Any						=				torch_device == '''cpu'''
			__snake_case	:						Tuple						=				True

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



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__snake_case	:						int						=				self.get_dummy_components()
			__snake_case	:						int						=				self.pipeline_class(**a_					)
			__snake_case	:						int						=				pipe.to(a_					)
			pipe.set_progress_bar_config(disable=a_					)

			__snake_case	:						Optional[Any]						=				1
			__snake_case	:						List[Any]						=				2

			__snake_case	:						int						=				self.get_dummy_inputs(a_					)

			for key in inputs.keys():
				if key in self.batch_params:
					__snake_case	:						Dict						=				batch_size * [inputs[key]]

			__snake_case	:						Union[str, Any]						=				pipe(**a_				,       num_images_per_prompt=a_					)[0]

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



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






		'''simple docstring'''

		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

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



		def 				SCREAMING_SNAKE_CASE  (self					):





			'''simple docstring'''

			__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'''					)
			__snake_case	:						Optional[Any]						=				ShapEPipeline.from_pretrained('''openai/shap-e'''					)
			__snake_case	:						Optional[int]						=				pipe.to(a_					)
			pipe.set_progress_bar_config(disable=a_					)

			__snake_case	:						Optional[Any]						=				torch.Generator(device=a_					).manual_seed(0					)

			__snake_case	:						str						=				pipe(
			    '''a shark'''				,       generator=a_				,       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(a_				,       a_					)





