


"""simple docstring"""






import unittest

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

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    DPMSolverMultistepScheduler,
    TextToVideoSDPipeline,
    UNetaDConditionModel,
)
from diffusers.utils import is_xformers_available, load_numpy, skip_mps, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()





@skip_mps
class      lowerCamelCase__   (     A     ,    unittest.TestCase				):







					"""simple docstring"""


					__a	       =							TextToVideoSDPipeline
					__a	       =							TEXT_TO_IMAGE_PARAMS
					__a	       =							TEXT_TO_IMAGE_BATCH_PARAMS
					# No `output_type`.
					__a	       =							frozenset(
					    [
					        """num_inference_steps""",
					        """generator""",
					        """latents""",
					        """return_dict""",
					        """callback""",
					        """callback_steps""",
					    ]				)






					def lowerCamelCase__							(       self    : str  ):
												'''simple docstring'''






												torch.manual_seed(0  )
												__UpperCAmelCase   :						Optional[int]      							=					UNetaDConditionModel(
												    block_out_channels=(32, 64, 64, 64) ,       layers_per_block=2 ,       sample_size=32 ,       in_channels=4 ,       out_channels=4 ,       down_block_types=("""CrossAttnDownBlock3D""", """CrossAttnDownBlock3D""", """CrossAttnDownBlock3D""", """DownBlock3D""") ,       up_block_types=("""UpBlock3D""", """CrossAttnUpBlock3D""", """CrossAttnUpBlock3D""", """CrossAttnUpBlock3D""") ,       cross_attention_dim=32 ,       attention_head_dim=4 ,       )
												__UpperCAmelCase   :						Optional[int]      							=					DDIMScheduler(
												    beta_start=0.00085 ,       beta_end=0.012 ,       beta_schedule="""scaled_linear""" ,       clip_sample=UpperCamelCase ,       set_alpha_to_one=UpperCamelCase ,       )
												torch.manual_seed(0  )
												__UpperCAmelCase   :						Dict      							=					AutoencoderKL(
												    block_out_channels=[32, 64] ,       in_channels=3 ,       out_channels=3 ,       down_block_types=["""DownEncoderBlock2D""", """DownEncoderBlock2D"""] ,       up_block_types=["""UpDecoderBlock2D""", """UpDecoderBlock2D"""] ,       latent_channels=4 ,       sample_size=128 ,       )
												torch.manual_seed(0  )
												__UpperCAmelCase   :						List[Any]      							=					CLIPTextConfig(
												    bos_token_id=0 ,       eos_token_id=2 ,       hidden_size=32 ,       intermediate_size=37 ,       layer_norm_eps=1e-0_5 ,       num_attention_heads=4 ,       num_hidden_layers=5 ,       pad_token_id=1 ,       vocab_size=1_000 ,       hidden_act="""gelu""" ,       projection_dim=512 ,       )
												__UpperCAmelCase   :						Dict      							=					CLIPTextModel(UpperCamelCase  )
												__UpperCAmelCase   :						Tuple      							=					CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""  )

												__UpperCAmelCase   :						Any      							=					{
												    """unet""": unet,
												    """scheduler""": scheduler,
												    """vae""": vae,
												    """text_encoder""": text_encoder,
												    """tokenizer""": tokenizer,
												}
												return components






					def lowerCamelCase__							(       self    : int ,       UpperCamelCase    : Any ,       UpperCamelCase    : Optional[int]=0  ):
												'''simple docstring'''






												if str(UpperCamelCase  ).startswith("""mps"""  ):
																			__UpperCAmelCase   :						Tuple      							=					torch.manual_seed(UpperCamelCase  )
												else:
																			__UpperCAmelCase   :						str      							=					torch.Generator(device=UpperCamelCase  ).manual_seed(UpperCamelCase  )
												__UpperCAmelCase   :						Any      							=					{
												    """prompt""": """A painting of a squirrel eating a burger""",
												    """generator""": generator,
												    """num_inference_steps""": 2,
												    """guidance_scale""": 6.0,
												    """output_type""": """pt""",
												}
												return inputs






					def lowerCamelCase__							(       self    : Tuple  ):
												'''simple docstring'''






												__UpperCAmelCase   :						Tuple      							=					"""cpu"""  # ensure determinism for the device-dependent torch.Generator
												__UpperCAmelCase   :						List[str]      							=					self.get_dummy_components()
												__UpperCAmelCase   :						Tuple      							=					TextToVideoSDPipeline(**UpperCamelCase  )
												__UpperCAmelCase   :						str      							=					sd_pipe.to(UpperCamelCase  )
												sd_pipe.set_progress_bar_config(disable=UpperCamelCase  )

												__UpperCAmelCase   :						Any      							=					self.get_dummy_inputs(UpperCamelCase  )
												__UpperCAmelCase   :						Union[str, Any]      							=					"""np"""
												__UpperCAmelCase   :						Any      							=					sd_pipe(**UpperCamelCase  ).frames
												__UpperCAmelCase   :						str      							=					frames[0][-3:, -3:, -1]

												assert frames[0].shape == (64, 64, 3)
												__UpperCAmelCase   :						Optional[Any]      							=					np.array([158.0, 160.0, 153.0, 125.0, 100.0, 121.0, 111.0, 93.0, 113.0]  )

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






					def lowerCamelCase__							(       self    : Optional[Any]  ):
												'''simple docstring'''






												self._test_attention_slicing_forward_pass(test_mean_pixel_difference=UpperCamelCase ,       expected_max_diff=3e-3  )






					@unittest.skipIf(
					    torch_device != """cuda""" or not is_xformers_available() ,       reason="""XFormers attention is only available with CUDA and `xformers` installed""" ,       )
					def lowerCamelCase__							(       self    : Tuple  ):
												'''simple docstring'''






												self._test_xformers_attention_forwardGenerator_pass(test_mean_pixel_difference=UpperCamelCase ,       expected_max_diff=1e-2  )






					@unittest.skip(reason="""Batching needs to be properly figured out first for this pipeline."""  )
					def lowerCamelCase__							(       self    : Dict  ):
												'''simple docstring'''






												pass






					@unittest.skip(reason="""Batching needs to be properly figured out first for this pipeline."""  )
					def lowerCamelCase__							(       self    : List[str]  ):
												'''simple docstring'''






												pass






					@unittest.skip(reason="""`num_images_per_prompt` argument is not supported for this pipeline."""  )
					def lowerCamelCase__							(       self    : List[Any]  ):
												'''simple docstring'''






												pass






					def lowerCamelCase__							(       self    : Optional[int]  ):
												'''simple docstring'''






												return super().test_progress_bar()






@slow
@skip_mps
class      lowerCamelCase__   (     unittest.TestCase				):







					"""simple docstring"""


					def lowerCamelCase__							(       self    : List[Any]  ):
												'''simple docstring'''






												__UpperCAmelCase   :						Optional[Any]      							=					load_numpy(
												    """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/text_to_video/video.npy"""  )

												__UpperCAmelCase   :						int      							=					TextToVideoSDPipeline.from_pretrained("""damo-vilab/text-to-video-ms-1.7b"""  )
												__UpperCAmelCase   :						Any      							=					DPMSolverMultistepScheduler.from_config(pipe.scheduler.config  )
												__UpperCAmelCase   :						Optional[int]      							=					pipe.to("""cuda"""  )

												__UpperCAmelCase   :						Optional[Any]      							=					"""Spiderman is surfing"""
												__UpperCAmelCase   :						Tuple      							=					torch.Generator(device="""cpu"""  ).manual_seed(0  )

												__UpperCAmelCase   :						Tuple      							=					pipe(UpperCamelCase ,       generator=UpperCamelCase ,       num_inference_steps=25 ,       output_type="""pt"""  ).frames
												__UpperCAmelCase   :						Optional[int]      							=					video_frames.cpu().numpy()

												assert np.abs(expected_video - video  ).mean() < 5e-2






					def lowerCamelCase__							(       self    : Optional[int]  ):
												'''simple docstring'''






												__UpperCAmelCase   :						Optional[Any]      							=					load_numpy(
												    """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/text_to_video/video_2step.npy"""  )

												__UpperCAmelCase   :						Any      							=					TextToVideoSDPipeline.from_pretrained("""damo-vilab/text-to-video-ms-1.7b"""  )
												__UpperCAmelCase   :						Union[str, Any]      							=					pipe.to("""cuda"""  )

												__UpperCAmelCase   :						Optional[int]      							=					"""Spiderman is surfing"""
												__UpperCAmelCase   :						Optional[int]      							=					torch.Generator(device="""cpu"""  ).manual_seed(0  )

												__UpperCAmelCase   :						List[str]      							=					pipe(UpperCamelCase ,       generator=UpperCamelCase ,       num_inference_steps=2 ,       output_type="""pt"""  ).frames
												__UpperCAmelCase   :						Dict      							=					video_frames.cpu().numpy()

												assert np.abs(expected_video - video  ).mean() < 5e-2




"""simple docstring"""






import numpy as np

UpperCAmelCase    :     Optional[Any]   						=		[
    ['a', 'b', 'c', 'd', 'e'],
    ['f', 'g', 'h', 'i', 'k'],
    ['l', 'm', 'n', 'o', 'p'],
    ['q', 'r', 's', 't', 'u'],
    ['v', 'w', 'x', 'y', 'z'],
]





class      lowerCamelCase__   :







					"""simple docstring"""


					def __init__(       self    : Union[str, Any]  ):
												'''simple docstring'''






												__UpperCAmelCase   :						List[Any]      							=					np.array(UpperCamelCase  )






					def lowerCamelCase__							(       self    : int ,       UpperCamelCase    : str  ):
												'''simple docstring'''






												__UpperCAmelCase							,__UpperCAmelCase   :						Optional[Any]      							=					np.where(letter == self.SQUARE  )
												__UpperCAmelCase   :						Optional[Any]      							=					np.concatenate([indexa + 1, indexa + 1]  )
												return indexes






					def lowerCamelCase__							(       self    : Any ,       UpperCamelCase    : int ,       UpperCamelCase    : int  ):
												'''simple docstring'''






												__UpperCAmelCase   :						Tuple      							=					self.SQUARE[indexa - 1, indexa - 1]
												return letter






					def lowerCamelCase__							(       self    : Optional[int] ,       UpperCamelCase    : str  ):
												'''simple docstring'''






												__UpperCAmelCase   :						str      							=					message.lower()
												__UpperCAmelCase   :						List[Any]      							=					message.replace(""" """ ,       """"""  )
												__UpperCAmelCase   :						List[Any]      							=					message.replace("""j""" ,       """i"""  )

												__UpperCAmelCase   :						Optional[int]      							=					np.empty((2, len(UpperCamelCase  ))  )
												for letter_index in range(len(UpperCamelCase  )  ):
																			__UpperCAmelCase   :						List[Any]      							=					self.letter_to_numbers(message[letter_index]  )

																			__UpperCAmelCase   :						str      							=					numbers[0]
																			__UpperCAmelCase   :						int      							=					numbers[1]

												__UpperCAmelCase   :						Union[str, Any]      							=					first_step.reshape(2 * len(UpperCamelCase  )  )
												__UpperCAmelCase   :						Optional[Any]      							=					""""""
												for numbers_index in range(len(UpperCamelCase  )  ):
																			__UpperCAmelCase   :						Any      							=					int(second_step[numbers_index * 2]  )
																			__UpperCAmelCase   :						Any      							=					int(second_step[(numbers_index * 2) + 1]  )
																			__UpperCAmelCase   :						str      							=					self.numbers_to_letter(UpperCamelCase ,       UpperCamelCase  )
																			__UpperCAmelCase   :						Optional[Any]      							=					encoded_message + letter

												return encoded_message






					def lowerCamelCase__							(       self    : Optional[int] ,       UpperCamelCase    : str  ):
												'''simple docstring'''






												__UpperCAmelCase   :						Any      							=					message.lower()
												message.replace(""" """ ,       """"""  )
												__UpperCAmelCase   :						int      							=					np.empty(2 * len(UpperCamelCase  )  )
												for letter_index in range(len(UpperCamelCase  )  ):
																			__UpperCAmelCase   :						Any      							=					self.letter_to_numbers(message[letter_index]  )
																			__UpperCAmelCase   :						Any      							=					numbers[0]
																			__UpperCAmelCase   :						Dict      							=					numbers[1]

												__UpperCAmelCase   :						str      							=					first_step.reshape((2, len(UpperCamelCase  ))  )
												__UpperCAmelCase   :						Union[str, Any]      							=					""""""
												for numbers_index in range(len(UpperCamelCase  )  ):
																			__UpperCAmelCase   :						Optional[int]      							=					int(second_step[0, numbers_index]  )
																			__UpperCAmelCase   :						Tuple      							=					int(second_step[1, numbers_index]  )
																			__UpperCAmelCase   :						Tuple      							=					self.numbers_to_letter(UpperCamelCase ,       UpperCamelCase  )
																			__UpperCAmelCase   :						Any      							=					decoded_message + letter

												return decoded_message
