





"""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 					_lowerCAmelCase   (     unittest.TestCase       ):
       """simple docstring"""




       def      snake_case						(    self    , __UpperCAmelCase    , __UpperCAmelCase      ):



         '''simple docstring'''

         return F"gaussian_noise_s={seed}_shape={'_'.join([str(__UpperCAmelCase      ) for s in shape]      )}.npy"






       def      snake_case						(    self      ):



         '''simple docstring'''

         super().tearDown()
         gc.collect()






       def      snake_case						(    self    , __UpperCAmelCase=0    , __UpperCAmelCase=(4, 4, 6_4, 6_4)    , __UpperCAmelCase=False      ):



         '''simple docstring'''

         lowerCAmelCase__			:Optional[int]											=							jnp.bfloataa if fpaa else jnp.floataa
         lowerCAmelCase__			:int											=							jnp.array(load_hf_numpy(self.get_file_format(__UpperCAmelCase    , __UpperCAmelCase      )      )    , dtype=__UpperCAmelCase      )
         return image






       def      snake_case						(    self    , __UpperCAmelCase=False    , __UpperCAmelCase="CompVis/stable-diffusion-v1-4"      ):



         '''simple docstring'''

         lowerCAmelCase__			:Dict											=							jnp.bfloataa if fpaa else jnp.floataa
         lowerCAmelCase__			:Optional[Any]											=							'bf16' if fpaa else None

         lowerCAmelCase__							,				lowerCAmelCase__			:str											=							FlaxUNetaDConditionModel.from_pretrained(
             __UpperCAmelCase    , subfolder='unet'    , dtype=__UpperCAmelCase    , revision=__UpperCAmelCase      )
         return model, params






       def      snake_case						(    self    , __UpperCAmelCase=0    , __UpperCAmelCase=(4, 7_7, 7_6_8)    , __UpperCAmelCase=False      ):



         '''simple docstring'''

         lowerCAmelCase__			:List[str]											=							jnp.bfloataa if fpaa else jnp.floataa
         lowerCAmelCase__			:str											=							jnp.array(load_hf_numpy(self.get_file_format(__UpperCAmelCase    , __UpperCAmelCase      )      )    , dtype=__UpperCAmelCase      )
         return hidden_states






       @parameterized.expand(
           [
               # fmt: off
               [8_3, 4, [-0.23_23, -0.13_04, 0.08_13, -0.30_93, -0.09_19, -0.15_71, -0.11_25, -0.58_06]],
               [1_7, 0.55, [-0.08_31, -0.24_43, 0.09_01, -0.09_19, 0.33_96, 0.01_03, -0.37_43, 0.07_01]],
               [8, 0.89, [-0.48_63, 0.08_59, 0.08_75, -0.16_58, 0.91_99, -0.01_14, 0.48_39, 0.46_39]],
               [3, 1_0_0_0, [-0.56_49, 0.24_02, -0.55_18, 0.12_48, 1.13_28, -0.24_43, -0.03_25, -1.00_78]],
               # fmt: on
           ]      )
       def      snake_case						(    self    , __UpperCAmelCase    , __UpperCAmelCase    , __UpperCAmelCase      ):



         '''simple docstring'''

         lowerCAmelCase__							,				lowerCAmelCase__			:List[Any]											=							self.get_unet_model(model_id='CompVis/stable-diffusion-v1-4'    , fpaa=__UpperCAmelCase      )
         lowerCAmelCase__			:Dict											=							self.get_latents(__UpperCAmelCase    , fpaa=__UpperCAmelCase      )
         lowerCAmelCase__			:int											=							self.get_encoder_hidden_states(__UpperCAmelCase    , fpaa=__UpperCAmelCase      )

         lowerCAmelCase__			:List[str]											=							model.apply(
             {'params': params}    , __UpperCAmelCase    , jnp.array(__UpperCAmelCase    , dtype=jnp.intaa      )    , encoder_hidden_states=__UpperCAmelCase    , ).sample

         assert sample.shape == latents.shape

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

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






       @parameterized.expand(
           [
               # fmt: off
               [8_3, 4, [0.15_14, 0.08_07, 0.16_24, 0.10_16, -0.18_96, 0.02_63, 0.06_77, 0.23_10]],
               [1_7, 0.55, [0.11_64, -0.02_16, 0.01_70, 0.15_89, -0.31_20, 0.10_05, -0.05_81, -0.14_58]],
               [8, 0.89, [-0.17_58, -0.01_69, 0.10_04, -0.14_11, 0.13_12, 0.11_03, -0.19_96, 0.21_39]],
               [3, 1_0_0_0, [0.12_14, 0.03_52, -0.07_31, -0.15_62, -0.09_94, -0.09_06, -0.23_40, -0.05_39]],
               # fmt: on
           ]      )
       def      snake_case						(    self    , __UpperCAmelCase    , __UpperCAmelCase    , __UpperCAmelCase      ):



         '''simple docstring'''

         lowerCAmelCase__							,				lowerCAmelCase__			:Dict											=							self.get_unet_model(model_id='stabilityai/stable-diffusion-2'    , fpaa=__UpperCAmelCase      )
         lowerCAmelCase__			:Optional[int]											=							self.get_latents(__UpperCAmelCase    , shape=(4, 4, 9_6, 9_6)    , fpaa=__UpperCAmelCase      )
         lowerCAmelCase__			:Tuple											=							self.get_encoder_hidden_states(__UpperCAmelCase    , shape=(4, 7_7, 1_0_2_4)    , fpaa=__UpperCAmelCase      )

         lowerCAmelCase__			:Optional[Any]											=							model.apply(
             {'params': params}    , __UpperCAmelCase    , jnp.array(__UpperCAmelCase    , dtype=jnp.intaa      )    , encoder_hidden_states=__UpperCAmelCase    , ).sample

         assert sample.shape == latents.shape

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

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







"""simple docstring"""





def  __A   (_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			)					->bool:





  """simple docstring"""


  return numa ^ numa < 0


if __name__ == "__main__":
  import doctest

  doctest.testmod()
