






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
												lowercase__     				=    FlaxDiffusionPipeline.from_pretrained(
												    '''hf-internal-testing/tiny-stable-diffusion-pipe''',						safety_checker=lowerCamelCase,						cache_dir=lowerCamelCase						)

												lowercase__     				=    [t[-1] for t in os.walk(os.path.join(lowerCamelCase,						os.listdir(lowerCamelCase						)[0],						'''snapshots'''						)						)]
												lowercase__     				=    [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		:					int						):

								'''simple docstring'''
								lowercase__				,		lowercase__     				=    FlaxStableDiffusionPipeline.from_pretrained(
								    '''hf-internal-testing/tiny-stable-diffusion-pipe''',						safety_checker=lowerCamelCase						)

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

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

								lowercase__     				=    jax.device_count()
								lowercase__     				=    num_samples * [prompt]
								lowercase__     				=    pipeline.prepare_inputs(lowerCamelCase						)

								# shard inputs and rng
								lowercase__     				=    replicate(lowerCamelCase						)
								lowercase__     				=    jax.random.split(lowerCamelCase,						lowerCamelCase						)
								lowercase__     				=    shard(lowerCamelCase						)

								lowercase__     				=    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.1514745						) < 1E-3
												assert np.abs(np.abs(lowerCamelCase,						dtype=np.floataa						).sum() - 49947.875						) < 5E-1

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




				def        lowercase__     (  self		:					Any						):

								'''simple docstring'''
								lowercase__				,		lowercase__     				=    FlaxStableDiffusionPipeline.from_pretrained(
								    '''CompVis/stable-diffusion-v1-4''',						revision='''flax''',						safety_checker=lowerCamelCase						)

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

								lowercase__     				=    jax.random.PRNGKey(0						)
								lowercase__     				=    50

								lowercase__     				=    jax.device_count()
								lowercase__     				=    num_samples * [prompt]
								lowercase__     				=    pipeline.prepare_inputs(lowerCamelCase						)

								# shard inputs and rng
								lowercase__     				=    replicate(lowerCamelCase						)
								lowercase__     				=    jax.random.split(lowerCamelCase,						lowerCamelCase						)
								lowercase__     				=    shard(lowerCamelCase						)

								lowercase__     				=    pipeline(lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						jit=lowerCamelCase						).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.05652401)						) < 1E-3
												assert np.abs((np.abs(lowerCamelCase,						dtype=np.floataa						).sum() - 2383808.2)						) < 5E-1




				def        lowercase__     (  self		:					int						):

								'''simple docstring'''
								lowercase__				,		lowercase__     				=    FlaxStableDiffusionPipeline.from_pretrained(
								    '''CompVis/stable-diffusion-v1-4''',						revision='''bf16''',						dtype=jnp.bfloataa,						safety_checker=lowerCamelCase						)

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

								lowercase__     				=    jax.random.PRNGKey(0						)
								lowercase__     				=    50

								lowercase__     				=    jax.device_count()
								lowercase__     				=    num_samples * [prompt]
								lowercase__     				=    pipeline.prepare_inputs(lowerCamelCase						)

								# shard inputs and rng
								lowercase__     				=    replicate(lowerCamelCase						)
								lowercase__     				=    jax.random.split(lowerCamelCase,						lowerCamelCase						)
								lowercase__     				=    shard(lowerCamelCase						)

								lowercase__     				=    pipeline(lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						jit=lowerCamelCase						).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.04003906)						) < 1E-3
												assert np.abs((np.abs(lowerCamelCase,						dtype=np.floataa						).sum() - 2373516.75)						) < 5E-1




				def        lowercase__     (  self		:					Dict						):

								'''simple docstring'''
								lowercase__				,		lowercase__     				=    FlaxStableDiffusionPipeline.from_pretrained(
								    '''CompVis/stable-diffusion-v1-4''',						revision='''bf16''',						dtype=jnp.bfloataa						)

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

								lowercase__     				=    jax.random.PRNGKey(0						)
								lowercase__     				=    50

								lowercase__     				=    jax.device_count()
								lowercase__     				=    num_samples * [prompt]
								lowercase__     				=    pipeline.prepare_inputs(lowerCamelCase						)

								# shard inputs and rng
								lowercase__     				=    replicate(lowerCamelCase						)
								lowercase__     				=    jax.random.split(lowerCamelCase,						lowerCamelCase						)
								lowercase__     				=    shard(lowerCamelCase						)

								lowercase__     				=    pipeline(lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						jit=lowerCamelCase						).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.04003906)						) < 1E-3
												assert np.abs((np.abs(lowerCamelCase,						dtype=np.floataa						).sum() - 2373516.75)						) < 5E-1




				def        lowercase__     (  self		:					Optional[int]						):

								'''simple docstring'''
								lowercase__     				=    FlaxDDIMScheduler(
								    beta_start=0.00085,						beta_end=0.012,						beta_schedule='''scaled_linear''',						set_alpha_to_one=lowerCamelCase,						steps_offset=1,						)

								lowercase__				,		lowercase__     				=    FlaxStableDiffusionPipeline.from_pretrained(
								    '''CompVis/stable-diffusion-v1-4''',						revision='''bf16''',						dtype=jnp.bfloataa,						scheduler=lowerCamelCase,						safety_checker=lowerCamelCase,						)
								lowercase__     				=    scheduler.create_state()

								lowercase__     				=    scheduler_state

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

								lowercase__     				=    jax.random.PRNGKey(0						)
								lowercase__     				=    50

								lowercase__     				=    jax.device_count()
								lowercase__     				=    num_samples * [prompt]
								lowercase__     				=    pipeline.prepare_inputs(lowerCamelCase						)

								# shard inputs and rng
								lowercase__     				=    replicate(lowerCamelCase						)
								lowercase__     				=    jax.random.split(lowerCamelCase,						lowerCamelCase						)
								lowercase__     				=    shard(lowerCamelCase						)

								lowercase__     				=    pipeline(lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						jit=lowerCamelCase						).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.045043945)						) < 1E-3
												assert np.abs((np.abs(lowerCamelCase,						dtype=np.floataa						).sum() - 2347693.5)						) < 5E-1




				def        lowercase__     (  self		:					str						):

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

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

								lowercase__				,		lowercase__     				=    FlaxStableDiffusionPipeline.from_pretrained(
								    '''CompVis/stable-diffusion-v1-4''',						revision='''bf16''',						dtype=jnp.bfloataa,						safety_checker=lowerCamelCase,						)

								lowercase__     				=    replicate(lowerCamelCase						)
								lowercase__     				=    pipeline.prepare_inputs(lowerCamelCase						)
								lowercase__     				=    shard(lowerCamelCase						)
								lowercase__     				=    pipeline(lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						jit=lowerCamelCase						).images
								assert images.shape == (num_samples, 1, 512, 512, 3)
								lowercase__     				=    images[2, 0, 256, 10:17, 1]

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

								lowercase__     				=    replicate(lowerCamelCase						)
								lowercase__     				=    pipeline.prepare_inputs(lowerCamelCase						)
								lowercase__     				=    shard(lowerCamelCase						)
								lowercase__     				=    pipeline(lowerCamelCase,						lowerCamelCase,						lowerCamelCase,						jit=lowerCamelCase						).images
								assert images_eff.shape == (num_samples, 1, 512, 512, 3)
								lowercase__     				=    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












from functools import reduce

A__			:    Union[str, Any]         =				(
    '73167176531330624919225119674426574742355349194934'
    '96983520312774506326239578318016984801869478851843'
    '85861560789112949495459501737958331952853208805511'
    '12540698747158523863050715693290963295227443043557'
    '66896648950445244523161731856403098711121722383113'
    '62229893423380308135336276614282806444486645238749'
    '30358907296290491560440772390713810515859307960866'
    '70172427121883998797908792274921901699720888093776'
    '65727333001053367881220235421809751254540594752243'
    '52584907711670556013604839586446706324415722155397'
    '53697817977846174064955149290862569321978468622482'
    '83972241375657056057490261407972968652414535100474'
    '82166370484403199890008895243450658541227588666881'
    '16427171479924442928230863465674813919123162824586'
    '17866458359124566529476545682848912883142607690042'
    '24219022671055626321111109370544217506941658960408'
    '07198403850962455444362981230987879927244284909188'
    '84580156166097919133875499200524063689912560717606'
    '05886116467109405077541002256983155200055935729725'
    '71636269561882670428252483600823257530420752963450'
)






def 						a    (		lowerCamelCase_ = N       ):






				'''simple docstring'''
				return max(
				    # mypy cannot properly interpret reduce
				    int(reduce(lambda lowerCamelCase_	,     lowerCamelCase_       : str(int(lowerCamelCase_       ) * int(lowerCamelCase_       )       )	,     n[i : i + 13]       )       )
				    for i in range(len(lowerCamelCase_       ) - 12       )       )


if __name__ == "__main__":
							print(F"{solution() = }")




