


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

						"""simple docstring"""






						def 				_UpperCAmelCase       (  self							:      Optional[int]	):
													with tempfile.TemporaryDirectory() as tmpdirname:
																				# pipeline has Flax weights
																				A_			    =		FlaxDiffusionPipeline.from_pretrained(
																				    "hf-internal-testing/tiny-stable-diffusion-pipe" ,  safety_checker=lowerCAmelCase ,  cache_dir=lowerCAmelCase	)

																				A_			    =		[t[-1] for t in os.walk(os.path.join(lowerCAmelCase ,  os.listdir(lowerCAmelCase	)[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 					__lowerCAmelCase   (   unittest.TestCase						):

						"""simple docstring"""






						def 				_UpperCAmelCase       (  self							:      Union[str, Any]	):
													A_    ,					A_			    =		FlaxStableDiffusionPipeline.from_pretrained(
													    "hf-internal-testing/tiny-stable-diffusion-pipe" ,  safety_checker=lowerCAmelCase	)

													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(lowerCAmelCase	)

													# shard inputs and rng
													A_			    =		replicate(lowerCAmelCase	)
													A_			    =		jax.random.split(lowerCAmelCase ,  lowerCAmelCase	)
													A_			    =		shard(lowerCAmelCase	)

													A_			    =		pipeline(lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  jit=lowerCAmelCase	).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(lowerCAmelCase ,  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(lowerCAmelCase	) == num_samples






						def 				_UpperCAmelCase       (  self							:      Any	):
													A_    ,					A_			    =		FlaxStableDiffusionPipeline.from_pretrained(
													    "CompVis/stable-diffusion-v1-4" ,  revision="flax" ,  safety_checker=lowerCAmelCase	)

													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_			    =		50

													A_			    =		jax.device_count()
													A_			    =		num_samples * [prompt]
													A_			    =		pipeline.prepare_inputs(lowerCAmelCase	)

													# shard inputs and rng
													A_			    =		replicate(lowerCAmelCase	)
													A_			    =		jax.random.split(lowerCAmelCase ,  lowerCAmelCase	)
													A_			    =		shard(lowerCAmelCase	)

													A_			    =		pipeline(lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  jit=lowerCAmelCase	).images

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






						def 				_UpperCAmelCase       (  self							:      Dict	):
													A_    ,					A_			    =		FlaxStableDiffusionPipeline.from_pretrained(
													    "CompVis/stable-diffusion-v1-4" ,  revision="bf16" ,  dtype=jnp.bfloataa ,  safety_checker=lowerCAmelCase	)

													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_			    =		50

													A_			    =		jax.device_count()
													A_			    =		num_samples * [prompt]
													A_			    =		pipeline.prepare_inputs(lowerCAmelCase	)

													# shard inputs and rng
													A_			    =		replicate(lowerCAmelCase	)
													A_			    =		jax.random.split(lowerCAmelCase ,  lowerCAmelCase	)
													A_			    =		shard(lowerCAmelCase	)

													A_			    =		pipeline(lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  jit=lowerCAmelCase	).images

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






						def 				_UpperCAmelCase       (  self							:      List[str]	):
													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_			    =		50

													A_			    =		jax.device_count()
													A_			    =		num_samples * [prompt]
													A_			    =		pipeline.prepare_inputs(lowerCAmelCase	)

													# shard inputs and rng
													A_			    =		replicate(lowerCAmelCase	)
													A_			    =		jax.random.split(lowerCAmelCase ,  lowerCAmelCase	)
													A_			    =		shard(lowerCAmelCase	)

													A_			    =		pipeline(lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  jit=lowerCAmelCase	).images

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






						def 				_UpperCAmelCase       (  self							:      List[Any]	):
													A_			    =		FlaxDDIMScheduler(
													    beta_start=0.0_0_0_8_5 ,  beta_end=0.0_1_2 ,  beta_schedule="scaled_linear" ,  set_alpha_to_one=lowerCAmelCase ,  steps_offset=1 ,  )

													A_    ,					A_			    =		FlaxStableDiffusionPipeline.from_pretrained(
													    "CompVis/stable-diffusion-v1-4" ,  revision="bf16" ,  dtype=jnp.bfloataa ,  scheduler=lowerCAmelCase ,  safety_checker=lowerCAmelCase ,  )
													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_			    =		50

													A_			    =		jax.device_count()
													A_			    =		num_samples * [prompt]
													A_			    =		pipeline.prepare_inputs(lowerCAmelCase	)

													# shard inputs and rng
													A_			    =		replicate(lowerCAmelCase	)
													A_			    =		jax.random.split(lowerCAmelCase ,  lowerCAmelCase	)
													A_			    =		shard(lowerCAmelCase	)

													A_			    =		pipeline(lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  jit=lowerCAmelCase	).images

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






						def 				_UpperCAmelCase       (  self							:      Tuple	):
													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	) ,  lowerCAmelCase	)

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

													A_			    =		replicate(lowerCAmelCase	)
													A_			    =		pipeline.prepare_inputs(lowerCAmelCase	)
													A_			    =		shard(lowerCAmelCase	)
													A_			    =		pipeline(lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  jit=lowerCAmelCase	).images
													assert images.shape == (num_samples, 1, 5_12, 5_12, 3)
													A_			    =		images[2, 0, 2_56, 10:17, 1]

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

													A_			    =		replicate(lowerCAmelCase	)
													A_			    =		pipeline.prepare_inputs(lowerCAmelCase	)
													A_			    =		shard(lowerCAmelCase	)
													A_			    =		pipeline(lowerCAmelCase ,  lowerCAmelCase ,  lowerCAmelCase ,  jit=lowerCAmelCase	).images
													assert images_eff.shape == (num_samples, 1, 5_12, 5_12, 3)
													A_			    =		images[2, 0, 2_56, 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









'''simple docstring'''
from ...configuration_utils import PretrainedConfig
from ...utils import logging


__SCREAMING_SNAKE_CASE					:				Optional[int]									=		logging.get_logger(__name__)

__SCREAMING_SNAKE_CASE					:				Union[str, Any]									=		{
    '''tanreinama/GPTSAN-2.8B-spout_is_uniform''': (
        '''https://huggingface.co/tanreinama/GPTSAN-2.8B-spout_is_uniform/resolve/main/config.json'''
    ),
}






class 					__lowerCAmelCase   (   lowercase						):

						"""simple docstring"""






						_UpperCAmelCase		:       Optional[int]   						="gptsan-japanese"
						_UpperCAmelCase		:       Union[str, Any]   						=[
						    "past_key_values",
						]
						_UpperCAmelCase		:       int   						={
						    "hidden_size": "d_model",
						    "num_attention_heads": "num_heads",
						    "num_hidden_layers": "num_layers",
						}






						def __init__(  self							:      List[str] ,  lowerCAmelCase							:      Dict=3_60_00 ,  lowerCAmelCase							:      Union[str, Any]=12_80 ,  lowerCAmelCase							:      Tuple=10_24 ,  lowerCAmelCase							:      Any=81_92 ,  lowerCAmelCase							:      List[str]=40_96 ,  lowerCAmelCase							:      Dict=1_28 ,  lowerCAmelCase							:      int=10 ,  lowerCAmelCase							:      str=0 ,  lowerCAmelCase							:      int=16 ,  lowerCAmelCase							:      int=16 ,  lowerCAmelCase							:      str=1_28 ,  lowerCAmelCase							:      Dict=0.0 ,  lowerCAmelCase							:      List[str]=1e-5 ,  lowerCAmelCase							:      List[str]=False ,  lowerCAmelCase							:      int=0.0 ,  lowerCAmelCase							:      Tuple="float32" ,  lowerCAmelCase							:      Optional[int]=False ,  lowerCAmelCase							:      int=False ,  lowerCAmelCase							:      Tuple=False ,  lowerCAmelCase							:      Optional[Any]=0.0_0_2 ,  lowerCAmelCase							:      Tuple=False ,  lowerCAmelCase							:      str=True ,  lowerCAmelCase							:      Optional[int]=3_59_98 ,  lowerCAmelCase							:      Optional[Any]=3_59_95 ,  lowerCAmelCase							:      Tuple=3_59_99 ,  **lowerCAmelCase							:      Dict ,  ):
													A_			    =		vocab_size
													A_			    =		max_position_embeddings
													A_			    =		d_model
													A_			    =		d_ff
													A_			    =		d_ext
													A_			    =		d_spout
													A_			    =		num_switch_layers
													A_			    =		num_ext_layers
													A_			    =		num_switch_layers + num_ext_layers
													A_			    =		num_heads
													A_			    =		num_experts
													A_			    =		expert_capacity
													A_			    =		dropout_rate
													A_			    =		layer_norm_epsilon
													A_			    =		router_bias
													A_			    =		router_jitter_noise
													A_			    =		router_dtype
													A_			    =		router_ignore_padding_tokens
													A_			    =		output_hidden_states
													A_			    =		output_attentions
													A_			    =		initializer_factor
													A_			    =		output_router_logits
													A_			    =		use_cache

													super().__init__(
													    separator_token_id=lowerCAmelCase ,  pad_token_id=lowerCAmelCase ,  eos_token_id=lowerCAmelCase ,  **lowerCAmelCase ,  )





