





"""simple docstring"""




import gc
import unittest

from parameterized import parameterized

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


if is_flax_available():
		import jax
		import jax.numpy as jnp


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






							def 					__a     (     self   ,      lowerCAmelCase__   ,      lowerCAmelCase__   )			->				str:
								return f"""gaussian_noise_s={seed}_shape={'_'.join([str(lowerCAmelCase__   ) for s in shape]   )}.npy"""






							def 					__a     (     self   )			->				int:
								# clean up the VRAM after each test
								super().tearDown()
								gc.collect()






							def 					__a     (     self   ,      lowerCAmelCase__=0   ,      lowerCAmelCase__=(4, 4, 64, 64)   ,      lowerCAmelCase__=False   )			->				Tuple:
								a   :	List[Any]			=       jnp.bfloataa if fpaa else jnp.floataa
								a   :	Tuple			=       jnp.array(load_hf_numpy(self.get_file_format(lowerCAmelCase__   ,      lowerCAmelCase__   )   )   ,      dtype=lowerCAmelCase__   )
								return image






							def 					__a     (     self   ,      lowerCAmelCase__=False   ,      lowerCAmelCase__="CompVis/stable-diffusion-v1-4"   )			->				Union[str, Any]:
								a   :	Dict			=       jnp.bfloataa if fpaa else jnp.floataa
								a   :	Tuple			=       "bf16" if fpaa else None

								a, a   :	Optional[int]			=       FlaxUNetaDConditionModel.from_pretrained(
								    lowerCAmelCase__   ,      subfolder="unet"   ,      dtype=lowerCAmelCase__   ,      revision=lowerCAmelCase__   )
								return model, params






							def 					__a     (     self   ,      lowerCAmelCase__=0   ,      lowerCAmelCase__=(4, 77, 768)   ,      lowerCAmelCase__=False   )			->				List[Any]:
								a   :	int			=       jnp.bfloataa if fpaa else jnp.floataa
								a   :	Optional[Any]			=       jnp.array(load_hf_numpy(self.get_file_format(lowerCAmelCase__   ,      lowerCAmelCase__   )   )   ,      dtype=lowerCAmelCase__   )
								return hidden_states






							@parameterized.expand(
							    [
							        # fmt: off
							        [83, 4, [-0.2_323, -0.1_304, 0.0_813, -0.3_093, -0.0_919, -0.1_571, -0.1_125, -0.5_806]],
							        [17, 0.55, [-0.0_831, -0.2_443, 0.0_901, -0.0_919, 0.3_396, 0.0_103, -0.3_743, 0.0_701]],
							        [8, 0.89, [-0.4_863, 0.0_859, 0.0_875, -0.1_658, 0.9_199, -0.0_114, 0.4_839, 0.4_639]],
							        [3, 1000, [-0.5_649, 0.2_402, -0.5_518, 0.1_248, 1.1_328, -0.2_443, -0.0_325, -1.0_078]],
							        # fmt: on
							    ]   )
							def 					__a     (     self   ,      lowerCAmelCase__   ,      lowerCAmelCase__   ,      lowerCAmelCase__   )			->				List[str]:
								a, a   :	List[Any]			=       self.get_unet_model(model_id="CompVis/stable-diffusion-v1-4"   ,      fpaa=lowerCAmelCase__   )
								a   :	List[Any]			=       self.get_latents(lowerCAmelCase__   ,      fpaa=lowerCAmelCase__   )
								a   :	str			=       self.get_encoder_hidden_states(lowerCAmelCase__   ,      fpaa=lowerCAmelCase__   )

								a   :	int			=       model.apply(
								    {"params": params}   ,      lowerCAmelCase__   ,      jnp.array(lowerCAmelCase__   ,      dtype=jnp.intaa   )   ,      encoder_hidden_states=lowerCAmelCase__   ,      ).sample

								assert sample.shape == latents.shape

								a   :	Dict			=       jnp.asarray(jax.device_get((sample[-1, -2:, -2:, :2].flatten())   )   ,      dtype=jnp.floataa   )
								a   :	str			=       jnp.array(lowerCAmelCase__   ,      dtype=jnp.floataa   )

								# Found torch (float16) and flax (bfloat16) outputs to be within this tolerance, in the same hardware
								assert jnp.allclose(lowerCAmelCase__   ,      lowerCAmelCase__   ,      atol=1E-2   )






							@parameterized.expand(
							    [
							        # fmt: off
							        [83, 4, [0.1_514, 0.0_807, 0.1_624, 0.1_016, -0.1_896, 0.0_263, 0.0_677, 0.2_310]],
							        [17, 0.55, [0.1_164, -0.0_216, 0.0_170, 0.1_589, -0.3_120, 0.1_005, -0.0_581, -0.1_458]],
							        [8, 0.89, [-0.1_758, -0.0_169, 0.1_004, -0.1_411, 0.1_312, 0.1_103, -0.1_996, 0.2_139]],
							        [3, 1000, [0.1_214, 0.0_352, -0.0_731, -0.1_562, -0.0_994, -0.0_906, -0.2_340, -0.0_539]],
							        # fmt: on
							    ]   )
							def 					__a     (     self   ,      lowerCAmelCase__   ,      lowerCAmelCase__   ,      lowerCAmelCase__   )			->				List[Any]:
								a, a   :	int			=       self.get_unet_model(model_id="stabilityai/stable-diffusion-2"   ,      fpaa=lowerCAmelCase__   )
								a   :	Dict			=       self.get_latents(lowerCAmelCase__   ,      shape=(4, 4, 96, 96)   ,      fpaa=lowerCAmelCase__   )
								a   :	List[Any]			=       self.get_encoder_hidden_states(lowerCAmelCase__   ,      shape=(4, 77, 1024)   ,      fpaa=lowerCAmelCase__   )

								a   :	Optional[int]			=       model.apply(
								    {"params": params}   ,      lowerCAmelCase__   ,      jnp.array(lowerCAmelCase__   ,      dtype=jnp.intaa   )   ,      encoder_hidden_states=lowerCAmelCase__   ,      ).sample

								assert sample.shape == latents.shape

								a   :	int			=       jnp.asarray(jax.device_get((sample[-1, -2:, -2:, :2].flatten())   )   ,      dtype=jnp.floataa   )
								a   :	Optional[Any]			=       jnp.array(lowerCAmelCase__   ,      dtype=jnp.floataa   )

								# Found torch (float16) and flax (bfloat16) outputs to be within this tolerance, on the same hardware
								assert jnp.allclose(lowerCAmelCase__   ,      lowerCAmelCase__   ,      atol=1E-2   )









"""simple docstring"""




from ..utils import DummyObject, requires_backends


class  __UpperCamelCase       (		metaclass=a__		):
							lowerCamelCase     :      Optional[Any]         =["""transformers""", """torch""", """note_seq"""]






							def __init__(     self   ,      *lowerCAmelCase__   ,      **lowerCAmelCase__   )			->				Union[str, Any]:
								requires_backends(self   ,      ["transformers", "torch", "note_seq"]   )






							@classmethod
							def 					__a     (     cls   ,      *lowerCAmelCase__   ,      **lowerCAmelCase__   )			->				Any:
								requires_backends(cls   ,      ["transformers", "torch", "note_seq"]   )






							@classmethod
							def 					__a     (     cls   ,      *lowerCAmelCase__   ,      **lowerCAmelCase__   )			->				int:
								requires_backends(cls   ,      ["transformers", "torch", "note_seq"]   )


