





import gc
import unittest

from diffusers import FlaxControlNetModel, FlaxStableDiffusionControlNetPipeline
from diffusers.utils import is_flax_available, load_image, slow
from diffusers.utils.testing_utils import require_flax


if is_flax_available():
	import jax
	import jax.numpy as jnp
	from flax.jax_utils import replicate
	from flax.training.common_utils import shard



@slow
@require_flax
class 					_a		(unittest.TestCase       ):


					'''simple docstring'''






					def 						__A    (				self    ):
						super().tearDown()
						gc.collect()






					def 						__A    (				self    ):
						A__							:					Tuple       =	FlaxControlNetModel.from_pretrained(
						    """lllyasviel/sd-controlnet-canny"""					, from_pt=_a					, dtype=jnp.bfloataa    )
						A__							:					Dict       =	FlaxStableDiffusionControlNetPipeline.from_pretrained(
						    """runwayml/stable-diffusion-v1-5"""					, controlnet=_a					, from_pt=_a					, dtype=jnp.bfloataa    )
						A__							:					List[str]       =	controlnet_params

						A__							:					Any       =	"""bird"""
						A__							:					str       =	jax.device_count()
						A__							:					Tuple       =	pipe.prepare_text_inputs([prompts] * num_samples    )

						A__							:					Any       =	load_image(
						    """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/bird_canny.png"""    )
						A__							:					Union[str, Any]       =	pipe.prepare_image_inputs([canny_image] * num_samples    )

						A__							:					Optional[Any]       =	jax.random.PRNGKey(0    )
						A__							:					Union[str, Any]       =	jax.random.split(_a					, jax.device_count()    )

						A__							:					int       =	replicate(_a    )
						A__							:					List[str]       =	shard(_a    )
						A__							:					str       =	shard(_a    )

						A__							:					Optional[Any]       =	pipe(
						    prompt_ids=_a					, image=_a					, params=_a					, prng_seed=_a					, num_inference_steps=50					, jit=_a					, ).images
						assert images.shape == (jax.device_count(), 1, 768, 512, 3)

						A__							:					str       =	images.reshape((images.shape[0] * images.shape[1],) + images.shape[-3:]    )
						A__							:					Union[str, Any]       =	images[0, 253:256, 253:256, -1]

						A__							:					Optional[Any]       =	jnp.asarray(jax.device_get(image_slice.flatten()    )    )
						A__							:					Optional[int]       =	jnp.array(
						    [0.1_6_7_9_6_9, 0.1_1_6_6_9_9, 0.0_8_1_5_4_3, 0.1_5_4_2_9_7, 0.1_3_2_8_1_2, 0.1_0_8_8_8_7, 0.1_6_9_9_2_2, 0.1_6_9_9_2_2, 0.2_0_5_0_7_8]    )
						print(F"""output_slice: {output_slice}"""    )
						assert jnp.abs(output_slice - expected_slice    ).max() < 1e-2






					def 						__A    (				self    ):
						A__							:					Dict       =	FlaxControlNetModel.from_pretrained(
						    """lllyasviel/sd-controlnet-openpose"""					, from_pt=_a					, dtype=jnp.bfloataa    )
						A__							:					int       =	FlaxStableDiffusionControlNetPipeline.from_pretrained(
						    """runwayml/stable-diffusion-v1-5"""					, controlnet=_a					, from_pt=_a					, dtype=jnp.bfloataa    )
						A__							:					Tuple       =	controlnet_params

						A__							:					int       =	"""Chef in the kitchen"""
						A__							:					Any       =	jax.device_count()
						A__							:					Any       =	pipe.prepare_text_inputs([prompts] * num_samples    )

						A__							:					Union[str, Any]       =	load_image(
						    """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/pose.png"""    )
						A__							:					str       =	pipe.prepare_image_inputs([pose_image] * num_samples    )

						A__							:					Optional[Any]       =	jax.random.PRNGKey(0    )
						A__							:					Dict       =	jax.random.split(_a					, jax.device_count()    )

						A__							:					Any       =	replicate(_a    )
						A__							:					Union[str, Any]       =	shard(_a    )
						A__							:					int       =	shard(_a    )

						A__							:					str       =	pipe(
						    prompt_ids=_a					, image=_a					, params=_a					, prng_seed=_a					, num_inference_steps=50					, jit=_a					, ).images
						assert images.shape == (jax.device_count(), 1, 768, 512, 3)

						A__							:					Optional[int]       =	images.reshape((images.shape[0] * images.shape[1],) + images.shape[-3:]    )
						A__							:					Union[str, Any]       =	images[0, 253:256, 253:256, -1]

						A__							:					List[Any]       =	jnp.asarray(jax.device_get(image_slice.flatten()    )    )
						A__							:					Optional[Any]       =	jnp.array(
						    [[0.2_7_1_4_8_4, 0.2_6_1_7_1_9, 0.2_7_5_3_9_1, 0.2_7_7_3_4_4, 0.2_7_9_2_9_7, 0.2_9_1_0_1_6, 0.2_9_4_9_2_2, 0.3_0_2_7_3_4, 0.3_0_2_7_3_4]]    )
						print(F"""output_slice: {output_slice}"""    )
						assert jnp.abs(output_slice - expected_slice    ).max() < 1e-2






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 					_a		(__magic_name__	,     unittest.TestCase       ):


					'''simple docstring'''






					UpperCAmelCase__:     Any													= TextToVideoSDPipeline
					UpperCAmelCase__:     Any													= TEXT_TO_IMAGE_PARAMS
					UpperCAmelCase__:     Optional[Any]													= TEXT_TO_IMAGE_BATCH_PARAMS
					# No `output_type`.
					UpperCAmelCase__:     Optional[int]													= frozenset(
					    [
					        '''num_inference_steps''',
					        '''generator''',
					        '''latents''',
					        '''return_dict''',
					        '''callback''',
					        '''callback_steps''',
					    ]       )






					def 						__A    (				self    ):
						torch.manual_seed(0    )
						A__							:					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					, )
						A__							:					Optional[int]       =	DDIMScheduler(
						    beta_start=0.0_0_0_8_5					, beta_end=0.0_1_2					, beta_schedule="""scaled_linear"""					, clip_sample=A__					, set_alpha_to_one=A__					, )
						torch.manual_seed(0    )
						A__							:					Union[str, Any]       =	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    )
						A__							:					Union[str, Any]       =	CLIPTextConfig(
						    bos_token_id=0					, eos_token_id=2					, hidden_size=32					, intermediate_size=37					, layer_norm_eps=1e-05					, num_attention_heads=4					, num_hidden_layers=5					, pad_token_id=1					, vocab_size=1000					, hidden_act="""gelu"""					, projection_dim=512					, )
						A__							:					Union[str, Any]       =	CLIPTextModel(A__    )
						A__							:					Tuple       =	CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""    )

						A__							:					Dict       =	{
						    """unet""": unet,
						    """scheduler""": scheduler,
						    """vae""": vae,
						    """text_encoder""": text_encoder,
						    """tokenizer""": tokenizer,
						}
						return components






					def 						__A    (				self					, A__					, A__=0    ):
						if str(A__    ).startswith("""mps"""    ):
							A__							:					Tuple       =	torch.manual_seed(A__    )
						else:
							A__							:					List[str]       =	torch.Generator(device=A__    ).manual_seed(A__    )
						A__							:					List[str]       =	{
						    """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 						__A    (				self    ):
						A__							:					List[str]       =	"""cpu"""  # ensure determinism for the device-dependent torch.Generator
						A__							:					Union[str, Any]       =	self.get_dummy_components()
						A__							:					Union[str, Any]       =	TextToVideoSDPipeline(**A__    )
						A__							:					int       =	sd_pipe.to(A__    )
						sd_pipe.set_progress_bar_config(disable=A__    )

						A__							:					int       =	self.get_dummy_inputs(A__    )
						A__							:					int       =	"""np"""
						A__							:					Any       =	sd_pipe(**A__    ).frames
						A__							:					Dict       =	frames[0][-3:, -3:, -1]

						assert frames[0].shape == (64, 64, 3)
						A__							:					Optional[Any]       =	np.array([1_5_8.0, 1_6_0.0, 1_5_3.0, 1_2_5.0, 1_0_0.0, 1_2_1.0, 1_1_1.0, 9_3.0, 1_1_3.0]    )

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






					def 						__A    (				self    ):
						self._test_attention_slicing_forward_pass(test_mean_pixel_difference=A__					, 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 						__A    (				self    ):
						self._test_xformers_attention_forwardGenerator_pass(test_mean_pixel_difference=A__					, expected_max_diff=1e-2    )






					@unittest.skip(reason="""Batching needs to be properly figured out first for this pipeline."""    )
					def 						__A    (				self    ):
						pass






					@unittest.skip(reason="""Batching needs to be properly figured out first for this pipeline."""    )
					def 						__A    (				self    ):
						pass






					@unittest.skip(reason="""`num_images_per_prompt` argument is not supported for this pipeline."""    )
					def 						__A    (				self    ):
						pass






					def 						__A    (				self    ):
						return super().test_progress_bar()



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


					'''simple docstring'''






					def 						__A    (				self    ):
						A__							:					Union[str, Any]       =	load_numpy(
						    """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/text_to_video/video.npy"""    )

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

						A__							:					Optional[Any]       =	"""Spiderman is surfing"""
						A__							:					List[str]       =	torch.Generator(device="""cpu"""    ).manual_seed(0    )

						A__							:					Optional[Any]       =	pipe(A__					, generator=A__					, num_inference_steps=25					, output_type="""pt"""    ).frames
						A__							:					Dict       =	video_frames.cpu().numpy()

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






					def 						__A    (				self    ):
						A__							:					List[Any]       =	load_numpy(
						    """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/text_to_video/video_2step.npy"""    )

						A__							:					Optional[int]       =	TextToVideoSDPipeline.from_pretrained("""damo-vilab/text-to-video-ms-1.7b"""    )
						A__							:					List[str]       =	pipe.to("""cuda"""    )

						A__							:					Dict       =	"""Spiderman is surfing"""
						A__							:					Union[str, Any]       =	torch.Generator(device="""cpu"""    ).manual_seed(0    )

						A__							:					Optional[int]       =	pipe(A__					, generator=A__					, num_inference_steps=2					, output_type="""pt"""    ).frames
						A__							:					Optional[int]       =	video_frames.cpu().numpy()

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



