



'''simple docstring'''


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 	UpperCAmelCase	(		unittest.TestCase):


	'''simple docstring'''




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



						"""simple docstring"""







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

											a_       		=[t[-1] for t in os.walk(os.path.join(__lowercase							,  os.listdir(__lowercase)[0]							,  "snapshots"))]
											a_       		=[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 	UpperCAmelCase	(		unittest.TestCase):


	'''simple docstring'''




	def       lowercase_  (   self) ->      str:



						"""simple docstring"""







						a_		,						a_       		=FlaxStableDiffusionPipeline.from_pretrained(
						    "hf-internal-testing/tiny-stable-diffusion-pipe"							,  safety_checker=__lowercase)

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

						a_       		=jax.random.PRNGKey(0)
						a_       		=4

						a_       		=jax.device_count()
						a_       		=num_samples * [prompt]
						a_       		=pipeline.prepare_inputs(__lowercase)

						# shard inputs and rng
						a_       		=replicate(__lowercase)
						a_       		=jax.random.split(__lowercase							,  __lowercase)
						a_       		=shard(__lowercase)

						a_       		=pipeline(__lowercase							,  __lowercase							,  __lowercase							,  __lowercase							,  jit=__lowercase).images

						assert images.shape == (num_samples, 1, 6_4, 6_4, 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(__lowercase							,  dtype=np.floataa).sum() - 4_9_9_4_7.8_7_5) < 5e-1

						a_       		=pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:])))
						assert len(__lowercase) == num_samples




	def       lowercase_  (   self) ->      Optional[Any]:



						"""simple docstring"""







						a_		,						a_       		=FlaxStableDiffusionPipeline.from_pretrained(
						    "CompVis/stable-diffusion-v1-4"							,  revision="flax"							,  safety_checker=__lowercase)

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

						a_       		=jax.random.PRNGKey(0)
						a_       		=5_0

						a_       		=jax.device_count()
						a_       		=num_samples * [prompt]
						a_       		=pipeline.prepare_inputs(__lowercase)

						# shard inputs and rng
						a_       		=replicate(__lowercase)
						a_       		=jax.random.split(__lowercase							,  __lowercase)
						a_       		=shard(__lowercase)

						a_       		=pipeline(__lowercase							,  __lowercase							,  __lowercase							,  __lowercase							,  jit=__lowercase).images

						assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 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(__lowercase							,  dtype=np.floataa).sum() - 2_3_8_3_8_0_8.2)) < 5e-1




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



						"""simple docstring"""







						a_		,						a_       		=FlaxStableDiffusionPipeline.from_pretrained(
						    "CompVis/stable-diffusion-v1-4"							,  revision="bf16"							,  dtype=jnp.bfloataa							,  safety_checker=__lowercase)

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

						a_       		=jax.random.PRNGKey(0)
						a_       		=5_0

						a_       		=jax.device_count()
						a_       		=num_samples * [prompt]
						a_       		=pipeline.prepare_inputs(__lowercase)

						# shard inputs and rng
						a_       		=replicate(__lowercase)
						a_       		=jax.random.split(__lowercase							,  __lowercase)
						a_       		=shard(__lowercase)

						a_       		=pipeline(__lowercase							,  __lowercase							,  __lowercase							,  __lowercase							,  jit=__lowercase).images

						assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 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(__lowercase							,  dtype=np.floataa).sum() - 2_3_7_3_5_1_6.7_5)) < 5e-1




	def       lowercase_  (   self) ->      Dict:



						"""simple docstring"""







						a_		,						a_       		=FlaxStableDiffusionPipeline.from_pretrained(
						    "CompVis/stable-diffusion-v1-4"							,  revision="bf16"							,  dtype=jnp.bfloataa)

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

						a_       		=jax.random.PRNGKey(0)
						a_       		=5_0

						a_       		=jax.device_count()
						a_       		=num_samples * [prompt]
						a_       		=pipeline.prepare_inputs(__lowercase)

						# shard inputs and rng
						a_       		=replicate(__lowercase)
						a_       		=jax.random.split(__lowercase							,  __lowercase)
						a_       		=shard(__lowercase)

						a_       		=pipeline(__lowercase							,  __lowercase							,  __lowercase							,  __lowercase							,  jit=__lowercase).images

						assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 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(__lowercase							,  dtype=np.floataa).sum() - 2_3_7_3_5_1_6.7_5)) < 5e-1




	def       lowercase_  (   self) ->      Optional[Any]:



						"""simple docstring"""







						a_       		=FlaxDDIMScheduler(
						    beta_start=0.0_0_0_8_5							,  beta_end=0.0_1_2							,  beta_schedule="scaled_linear"							,  set_alpha_to_one=__lowercase							,  steps_offset=1							,  )

						a_		,						a_       		=FlaxStableDiffusionPipeline.from_pretrained(
						    "CompVis/stable-diffusion-v1-4"							,  revision="bf16"							,  dtype=jnp.bfloataa							,  scheduler=__lowercase							,  safety_checker=__lowercase							,  )
						a_       		=scheduler.create_state()

						a_       		=scheduler_state

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

						a_       		=jax.random.PRNGKey(0)
						a_       		=5_0

						a_       		=jax.device_count()
						a_       		=num_samples * [prompt]
						a_       		=pipeline.prepare_inputs(__lowercase)

						# shard inputs and rng
						a_       		=replicate(__lowercase)
						a_       		=jax.random.split(__lowercase							,  __lowercase)
						a_       		=shard(__lowercase)

						a_       		=pipeline(__lowercase							,  __lowercase							,  __lowercase							,  __lowercase							,  jit=__lowercase).images

						assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 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(__lowercase							,  dtype=np.floataa).sum() - 2_3_4_7_6_9_3.5)) < 5e-1




	def       lowercase_  (   self) ->      int:



						"""simple docstring"""







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

						a_       		=jax.device_count()
						a_       		=num_samples * [prompt]
						a_       		=jax.random.split(jax.random.PRNGKey(0)							,  __lowercase)

						a_		,						a_       		=FlaxStableDiffusionPipeline.from_pretrained(
						    "CompVis/stable-diffusion-v1-4"							,  revision="bf16"							,  dtype=jnp.bfloataa							,  safety_checker=__lowercase							,  )

						a_       		=replicate(__lowercase)
						a_       		=pipeline.prepare_inputs(__lowercase)
						a_       		=shard(__lowercase)
						a_       		=pipeline(__lowercase							,  __lowercase							,  __lowercase							,  jit=__lowercase).images
						assert images.shape == (num_samples, 1, 5_1_2, 5_1_2, 3)
						a_       		=images[2, 0, 2_5_6, 1_0:1_7, 1]

						# With memory efficient attention
						a_		,						a_       		=FlaxStableDiffusionPipeline.from_pretrained(
						    "CompVis/stable-diffusion-v1-4"							,  revision="bf16"							,  dtype=jnp.bfloataa							,  safety_checker=__lowercase							,  use_memory_efficient_attention=__lowercase							,  )

						a_       		=replicate(__lowercase)
						a_       		=pipeline.prepare_inputs(__lowercase)
						a_       		=shard(__lowercase)
						a_       		=pipeline(__lowercase							,  __lowercase							,  __lowercase							,  jit=__lowercase).images
						assert images_eff.shape == (num_samples, 1, 5_1_2, 5_1_2, 3)
						a_       		=images[2, 0, 2_5_6, 1_0:1_7, 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







'''simple docstring'''


from typing import Any

import numpy as np






def  UpperCAmelCase_       (		lowercase__       ):


     '''simple docstring'''







     return np.array_equal(lowercase__       ,	matrix.conjugate().T       )






def  UpperCAmelCase_       (		lowercase__       ,	lowercase__       ):


     '''simple docstring'''







     a_       		=v.conjugate().T
     a_       		=v_star.dot(lowercase__       )
     assert isinstance(lowercase__       ,	np.ndarray       )
     return (v_star_dot.dot(lowercase__       )) / (v_star.dot(lowercase__       ))






def  UpperCAmelCase_       (		):


     '''simple docstring'''







     a_       		=np.array([[2, 2 + 1j, 4], [2 - 1j, 3, 1j], [4, -1j, 1]]       )
     a_       		=np.array([[1], [2], [3]]       )
     assert is_hermitian(lowercase__       ), F"""{a} is not hermitian."""
     print(rayleigh_quotient(lowercase__       ,	lowercase__       )       )

     a_       		=np.array([[1, 2, 4], [2, 3, -1], [4, -1, 1]]       )
     assert is_hermitian(lowercase__       ), F"""{a} is not hermitian."""
     assert rayleigh_quotient(lowercase__       ,	lowercase__       ) == float(3       )


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  tests()


