





import os
import tempfile
import unittest

import numpy as np

from diffusers.utils import is_flax_available
from diffusers.utils.testing_utils import require_flax, slow


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

						from diffusers import FlaxDDIMScheduler, FlaxDiffusionPipeline, FlaxStableDiffusionPipeline
@require_flax
class SCREAMING_SNAKE_CASE_						(					unittest.TestCase					):






						def UpperCAmelCase_				(      self      :      Dict	)							->    Union[str, Any]:







							"""simple docstring"""


							with tempfile.TemporaryDirectory() as tmpdirname:
								# pipeline has Flax weights
								snake_case_		:			int											=	FlaxDiffusionPipeline.from_pretrained(
								    'hf-internal-testing/tiny-stable-diffusion-pipe'		,   safety_checker=_A		,   cache_dir=_A	)

								snake_case_		:			Optional[int]											=	[t[-1] for t in os.walk(os.path.join(_A		,   os.listdir(_A	)[0]		,   'snapshots'	)	)]
								snake_case_		:			Union[str, Any]											=	[item for sublist in all_root_files for item in sublist]

								# None of the downloaded files should be a PyTorch file even if we have some here:
								# https://huggingface.co/hf-internal-testing/tiny-stable-diffusion-pipe/blob/main/unet/diffusion_pytorch_model.bin
								assert not any(f.endswith('.bin'	) for f in files	)
@slow
@require_flax
class SCREAMING_SNAKE_CASE_						(					unittest.TestCase					):






						def UpperCAmelCase_				(      self      :      List[Any]	)							->    List[Any]:







							"""simple docstring"""


							snake_case_						,snake_case_		:			List[Any]											=	FlaxStableDiffusionPipeline.from_pretrained(
							    'hf-internal-testing/tiny-stable-diffusion-pipe'		,   safety_checker=_A	)

							snake_case_		:			List[str]											=	(
							    'A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of'
							    ' field, close up, split lighting, cinematic'
							)

							snake_case_		:			List[str]											=	jax.random.PRNGKey(0	)
							snake_case_		:			int											=	4

							snake_case_		:			int											=	jax.device_count()
							snake_case_		:			Dict											=	num_samples * [prompt]
							snake_case_		:			List[Any]											=	pipeline.prepare_inputs(_A	)

							# shard inputs and rng
							snake_case_		:			Union[str, Any]											=	replicate(_A	)
							snake_case_		:			Dict											=	jax.random.split(_A		,   _A	)
							snake_case_		:			Optional[Any]											=	shard(_A	)

							snake_case_		:			int											=	pipeline(_A		,   _A		,   _A		,   _A		,   jit=_A	).images

							assert images.shape == (num_samples, 1, 64, 64, 3)
							if jax.device_count() == 8:
								assert np.abs(np.abs(images[0, 0, :2, :2, -2:]		,   dtype=np.floataa	).sum() - 4.1_5_1_4_7_4_5	) < 1E-3
								assert np.abs(np.abs(_A		,   dtype=np.floataa	).sum() - 4_9_9_4_7.8_7_5	) < 5E-1

							snake_case_		:			List[Any]											=	pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:]	)	)	)
							assert len(_A	) == num_samples






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







							"""simple docstring"""


							snake_case_						,snake_case_		:			List[Any]											=	FlaxStableDiffusionPipeline.from_pretrained(
							    'CompVis/stable-diffusion-v1-4'		,   revision='flax'		,   safety_checker=_A	)

							snake_case_		:			Optional[int]											=	(
							    'A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of'
							    ' field, close up, split lighting, cinematic'
							)

							snake_case_		:			str											=	jax.random.PRNGKey(0	)
							snake_case_		:			Tuple											=	50

							snake_case_		:			Tuple											=	jax.device_count()
							snake_case_		:			Union[str, Any]											=	num_samples * [prompt]
							snake_case_		:			Dict											=	pipeline.prepare_inputs(_A	)

							# shard inputs and rng
							snake_case_		:			Tuple											=	replicate(_A	)
							snake_case_		:			Optional[int]											=	jax.random.split(_A		,   _A	)
							snake_case_		:			Optional[int]											=	shard(_A	)

							snake_case_		:			Dict											=	pipeline(_A		,   _A		,   _A		,   _A		,   jit=_A	).images

							assert images.shape == (num_samples, 1, 512, 512, 3)
							if jax.device_count() == 8:
								assert np.abs((np.abs(images[0, 0, :2, :2, -2:]		,   dtype=np.floataa	).sum() - 0.0_5_6_5_2_4_0_1)	) < 1E-3
								assert np.abs((np.abs(_A		,   dtype=np.floataa	).sum() - 2_3_8_3_8_0_8.2)	) < 5E-1






						def UpperCAmelCase_				(      self      :      Any	)							->    int:







							"""simple docstring"""


							snake_case_						,snake_case_		:			Tuple											=	FlaxStableDiffusionPipeline.from_pretrained(
							    'CompVis/stable-diffusion-v1-4'		,   revision='bf16'		,   dtype=jnp.bfloataa		,   safety_checker=_A	)

							snake_case_		:			Dict											=	(
							    'A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of'
							    ' field, close up, split lighting, cinematic'
							)

							snake_case_		:			str											=	jax.random.PRNGKey(0	)
							snake_case_		:			Optional[Any]											=	50

							snake_case_		:			Any											=	jax.device_count()
							snake_case_		:			Optional[Any]											=	num_samples * [prompt]
							snake_case_		:			Any											=	pipeline.prepare_inputs(_A	)

							# shard inputs and rng
							snake_case_		:			Any											=	replicate(_A	)
							snake_case_		:			int											=	jax.random.split(_A		,   _A	)
							snake_case_		:			List[str]											=	shard(_A	)

							snake_case_		:			List[Any]											=	pipeline(_A		,   _A		,   _A		,   _A		,   jit=_A	).images

							assert images.shape == (num_samples, 1, 512, 512, 3)
							if jax.device_count() == 8:
								assert np.abs((np.abs(images[0, 0, :2, :2, -2:]		,   dtype=np.floataa	).sum() - 0.0_4_0_0_3_9_0_6)	) < 1E-3
								assert np.abs((np.abs(_A		,   dtype=np.floataa	).sum() - 2_3_7_3_5_1_6.7_5)	) < 5E-1






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







							"""simple docstring"""


							snake_case_						,snake_case_		:			Any											=	FlaxStableDiffusionPipeline.from_pretrained(
							    'CompVis/stable-diffusion-v1-4'		,   revision='bf16'		,   dtype=jnp.bfloataa	)

							snake_case_		:			Tuple											=	(
							    'A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of'
							    ' field, close up, split lighting, cinematic'
							)

							snake_case_		:			Optional[Any]											=	jax.random.PRNGKey(0	)
							snake_case_		:			List[str]											=	50

							snake_case_		:			List[Any]											=	jax.device_count()
							snake_case_		:			str											=	num_samples * [prompt]
							snake_case_		:			List[Any]											=	pipeline.prepare_inputs(_A	)

							# shard inputs and rng
							snake_case_		:			Optional[Any]											=	replicate(_A	)
							snake_case_		:			Tuple											=	jax.random.split(_A		,   _A	)
							snake_case_		:			str											=	shard(_A	)

							snake_case_		:			Dict											=	pipeline(_A		,   _A		,   _A		,   _A		,   jit=_A	).images

							assert images.shape == (num_samples, 1, 512, 512, 3)
							if jax.device_count() == 8:
								assert np.abs((np.abs(images[0, 0, :2, :2, -2:]		,   dtype=np.floataa	).sum() - 0.0_4_0_0_3_9_0_6)	) < 1E-3
								assert np.abs((np.abs(_A		,   dtype=np.floataa	).sum() - 2_3_7_3_5_1_6.7_5)	) < 5E-1






						def UpperCAmelCase_				(      self      :      List[Any]	)							->    Dict:







							"""simple docstring"""


							snake_case_		:			Optional[int]											=	FlaxDDIMScheduler(
							    beta_start=0.0_0_0_8_5		,   beta_end=0.0_1_2		,   beta_schedule='scaled_linear'		,   set_alpha_to_one=_A		,   steps_offset=1		,   )

							snake_case_						,snake_case_		:			Union[str, Any]											=	FlaxStableDiffusionPipeline.from_pretrained(
							    'CompVis/stable-diffusion-v1-4'		,   revision='bf16'		,   dtype=jnp.bfloataa		,   scheduler=_A		,   safety_checker=_A		,   )
							snake_case_		:			int											=	scheduler.create_state()

							snake_case_		:			Optional[Any]											=	scheduler_state

							snake_case_		:			List[Any]											=	(
							    'A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of'
							    ' field, close up, split lighting, cinematic'
							)

							snake_case_		:			Tuple											=	jax.random.PRNGKey(0	)
							snake_case_		:			Dict											=	50

							snake_case_		:			List[Any]											=	jax.device_count()
							snake_case_		:			Tuple											=	num_samples * [prompt]
							snake_case_		:			List[str]											=	pipeline.prepare_inputs(_A	)

							# shard inputs and rng
							snake_case_		:			int											=	replicate(_A	)
							snake_case_		:			Optional[int]											=	jax.random.split(_A		,   _A	)
							snake_case_		:			List[str]											=	shard(_A	)

							snake_case_		:			Optional[Any]											=	pipeline(_A		,   _A		,   _A		,   _A		,   jit=_A	).images

							assert images.shape == (num_samples, 1, 512, 512, 3)
							if jax.device_count() == 8:
								assert np.abs((np.abs(images[0, 0, :2, :2, -2:]		,   dtype=np.floataa	).sum() - 0.0_4_5_0_4_3_9_4_5)	) < 1E-3
								assert np.abs((np.abs(_A		,   dtype=np.floataa	).sum() - 2_3_4_7_6_9_3.5)	) < 5E-1






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







							"""simple docstring"""


							snake_case_		:			Tuple											=	(
							    'A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of'
							    ' field, close up, split lighting, cinematic'
							)

							snake_case_		:			str											=	jax.device_count()
							snake_case_		:			Any											=	num_samples * [prompt]
							snake_case_		:			Tuple											=	jax.random.split(jax.random.PRNGKey(0	)		,   _A	)

							snake_case_						,snake_case_		:			Any											=	FlaxStableDiffusionPipeline.from_pretrained(
							    'CompVis/stable-diffusion-v1-4'		,   revision='bf16'		,   dtype=jnp.bfloataa		,   safety_checker=_A		,   )

							snake_case_		:			List[Any]											=	replicate(_A	)
							snake_case_		:			Tuple											=	pipeline.prepare_inputs(_A	)
							snake_case_		:			Dict											=	shard(_A	)
							snake_case_		:			Optional[Any]											=	pipeline(_A		,   _A		,   _A		,   jit=_A	).images
							assert images.shape == (num_samples, 1, 512, 512, 3)
							snake_case_		:			Optional[Any]											=	images[2, 0, 256, 10:17, 1]

							# With memory efficient attention
							snake_case_						,snake_case_		:			List[Any]											=	FlaxStableDiffusionPipeline.from_pretrained(
							    'CompVis/stable-diffusion-v1-4'		,   revision='bf16'		,   dtype=jnp.bfloataa		,   safety_checker=_A		,   use_memory_efficient_attention=_A		,   )

							snake_case_		:			List[Any]											=	replicate(_A	)
							snake_case_		:			Optional[int]											=	pipeline.prepare_inputs(_A	)
							snake_case_		:			Optional[int]											=	shard(_A	)
							snake_case_		:			List[Any]											=	pipeline(_A		,   _A		,   _A		,   jit=_A	).images
							assert images_eff.shape == (num_samples, 1, 512, 512, 3)
							snake_case_		:			str											=	images[2, 0, 256, 10:17, 1]

							# I checked the results visually and they are very similar. However, I saw that the max diff is `1` and the `sum`
							# over the 8 images is exactly `256`, which is very suspicious. Testing a random slice for now.
							assert abs(slice_eff - slice	).max() < 1E-2








import numpy as np


def 							SCREAMING_SNAKE_CASE__						(    __a   ):
	return (2 / (1 + np.exp(-2 * vector   ))) - 1


if __name__ == "__main__":
						import doctest

						doctest.testmod()

