


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

							def 				lowerCamelCase_			(							self:     Any   ,						UpperCamelCase_:     List[str]   ,						UpperCamelCase_:     int							)      ->       Union[str, Any]:





									"""simple docstring"""







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

							def 				lowerCamelCase_			(							self:     List[str]							)      ->       Tuple:





									"""simple docstring"""







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

							def 				lowerCamelCase_			(							self:     str   ,						UpperCamelCase_:     str=0   ,						UpperCamelCase_:     Tuple=(4, 4, 64, 64)   ,						UpperCamelCase_:     Optional[int]=False							)      ->       Any:





									"""simple docstring"""







									lowercase__						=				jnp.bfloataa if fpaa else jnp.floataa
									lowercase__						=				jnp.array(load_hf_numpy(self.get_file_format(UpperCamelCase_   ,						UpperCamelCase_							)							)   ,						dtype=UpperCamelCase_							)
									return image

							def 				lowerCamelCase_			(							self:     List[str]   ,						UpperCamelCase_:     List[Any]=False   ,						UpperCamelCase_:     Dict="CompVis/stable-diffusion-v1-4"							)      ->       List[Any]:





									"""simple docstring"""







									lowercase__						=				jnp.bfloataa if fpaa else jnp.floataa
									lowercase__						=				'''bf16''' if fpaa else None

									lowercase__					,		lowercase__						=				FlaxUNetaDConditionModel.from_pretrained(
									    UpperCamelCase_   ,						subfolder='''unet'''   ,						dtype=UpperCamelCase_   ,						revision=UpperCamelCase_							)
									return model, params

							def 				lowerCamelCase_			(							self:     Union[str, Any]   ,						UpperCamelCase_:     Dict=0   ,						UpperCamelCase_:     Tuple=(4, 77, 768)   ,						UpperCamelCase_:     Tuple=False							)      ->       Dict:





									"""simple docstring"""







									lowercase__						=				jnp.bfloataa if fpaa else jnp.floataa
									lowercase__						=				jnp.array(load_hf_numpy(self.get_file_format(UpperCamelCase_   ,						UpperCamelCase_							)							)   ,						dtype=UpperCamelCase_							)
									return hidden_states

							@parameterized.expand(
							    [
							        # fmt: off
							        [83, 4, [-0.2323, -0.1304, 0.0813, -0.3093, -0.0919, -0.1571, -0.1125, -0.5806]],
							        [17, 0.55, [-0.0831, -0.2443, 0.0901, -0.0919, 0.3396, 0.0103, -0.3743, 0.0701]],
							        [8, 0.89, [-0.4863, 0.0859, 0.0875, -0.1658, 0.9199, -0.0114, 0.4839, 0.4639]],
							        [3, 1_000, [-0.5649, 0.2402, -0.5518, 0.1248, 1.1328, -0.2443, -0.0325, -1.0078]],
							        # fmt: on
							    ]							)
							def 				lowerCamelCase_			(							self:     Tuple   ,						UpperCamelCase_:     Optional[Any]   ,						UpperCamelCase_:     Any   ,						UpperCamelCase_:     Optional[int]							)      ->       Tuple:





									"""simple docstring"""







									lowercase__					,		lowercase__						=				self.get_unet_model(model_id='''CompVis/stable-diffusion-v1-4'''   ,						fpaa=UpperCamelCase_							)
									lowercase__						=				self.get_latents(UpperCamelCase_   ,						fpaa=UpperCamelCase_							)
									lowercase__						=				self.get_encoder_hidden_states(UpperCamelCase_   ,						fpaa=UpperCamelCase_							)

									lowercase__						=				model.apply(
									    {'''params''': params}   ,						UpperCamelCase_   ,						jnp.array(UpperCamelCase_   ,						dtype=jnp.intaa							)   ,						encoder_hidden_states=UpperCamelCase_   ,						).sample

									assert sample.shape == latents.shape

									lowercase__						=				jnp.asarray(jax.device_get((sample[-1, -2:, -2:, :2].flatten())							)   ,						dtype=jnp.floataa							)
									lowercase__						=				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
							        [83, 4, [0.1514, 0.0807, 0.1624, 0.1016, -0.1896, 0.0263, 0.0677, 0.2310]],
							        [17, 0.55, [0.1164, -0.0216, 0.0170, 0.1589, -0.3120, 0.1005, -0.0581, -0.1458]],
							        [8, 0.89, [-0.1758, -0.0169, 0.1004, -0.1411, 0.1312, 0.1103, -0.1996, 0.2139]],
							        [3, 1_000, [0.1214, 0.0352, -0.0731, -0.1562, -0.0994, -0.0906, -0.2340, -0.0539]],
							        # fmt: on
							    ]							)
							def 				lowerCamelCase_			(							self:     List[str]   ,						UpperCamelCase_:     List[str]   ,						UpperCamelCase_:     Tuple   ,						UpperCamelCase_:     Optional[Any]							)      ->       str:





									"""simple docstring"""







									lowercase__					,		lowercase__						=				self.get_unet_model(model_id='''stabilityai/stable-diffusion-2'''   ,						fpaa=UpperCamelCase_							)
									lowercase__						=				self.get_latents(UpperCamelCase_   ,						shape=(4, 4, 96, 96)   ,						fpaa=UpperCamelCase_							)
									lowercase__						=				self.get_encoder_hidden_states(UpperCamelCase_   ,						shape=(4, 77, 1_024)   ,						fpaa=UpperCamelCase_							)

									lowercase__						=				model.apply(
									    {'''params''': params}   ,						UpperCamelCase_   ,						jnp.array(UpperCamelCase_   ,						dtype=jnp.intaa							)   ,						encoder_hidden_states=UpperCamelCase_   ,						).sample

									assert sample.shape == latents.shape

									lowercase__						=				jnp.asarray(jax.device_get((sample[-1, -2:, -2:, :2].flatten())							)   ,						dtype=jnp.floataa							)
									lowercase__						=				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							)






import argparse
from collections import defaultdict

import yaml


lowerCAmelCase	=							'docs/source/en/_toctree.yml'
def       _a			(				SCREAMING_SNAKE_CASE					):


		"""simple docstring"""




		lowercase__						=				defaultdict(SCREAMING_SNAKE_CASE					)
		lowercase__						=				[]
		lowercase__						=				[]
		for doc in doc_list:
				if "local" in doc:
						counts[doc["local"]] += 1

				if doc["title"].lower() == "overview":
						overview_doc.append({'''local''': doc['''local'''], '''title''': doc['''title''']}					)
				else:
						new_doc_list.append(SCREAMING_SNAKE_CASE					)

		lowercase__						=				new_doc_list
		lowercase__						=				[key for key, value in counts.items() if value > 1]

		lowercase__						=				[]
		for duplicate_key in duplicates:
				lowercase__						=				list({doc['''title'''] for doc in doc_list if doc['''local'''] == duplicate_key}					)
				if len(SCREAMING_SNAKE_CASE					) > 1:
						raise ValueError(
						    f'{duplicate_key} is present several times in the documentation table of content at '
						    '''`docs/source/en/_toctree.yml` with different *Title* values. Choose one of those and remove the '''
						    '''others.'''					)
				# Only add this once
				new_doc.append({'''local''': duplicate_key, '''title''': titles[0]}					)

		# Add none duplicate-keys
		new_doc.extend([doc for doc in doc_list if '''local''' not in counts or counts[doc['''local''']] == 1]					)
		lowercase__						=				sorted(SCREAMING_SNAKE_CASE						,    key=lambda SCREAMING_SNAKE_CASE					: s["title"].lower()					)

		# "overview" gets special treatment and is always first
		if len(SCREAMING_SNAKE_CASE					) > 1:
				raise ValueError('''{doc_list} has two \'overview\' docs which is not allowed.'''					)

		overview_doc.extend(SCREAMING_SNAKE_CASE					)

		# Sort
		return overview_doc
def       _a			(				SCREAMING_SNAKE_CASE=False					):


		"""simple docstring"""




		with open(SCREAMING_SNAKE_CASE						,    encoding='''utf-8'''					) as f:
				lowercase__						=				yaml.safe_load(f.read()					)

		# Get to the API doc
		lowercase__						=				0
		while content[api_idx]["title"] != "API":
				api_idx += 1
		lowercase__						=				content[api_idx]['''sections''']

		# Then to the model doc
		lowercase__						=				0
		while api_doc[scheduler_idx]["title"] != "Schedulers":
				scheduler_idx += 1

		lowercase__						=				api_doc[scheduler_idx]['''sections''']
		lowercase__						=				clean_doc_toc(SCREAMING_SNAKE_CASE					)

		lowercase__						=				False
		if new_scheduler_doc != scheduler_doc:
				lowercase__						=				True
				if overwrite:
						lowercase__						=				new_scheduler_doc

		if diff:
				if overwrite:
						lowercase__						=				api_doc
						with open(SCREAMING_SNAKE_CASE						,    '''w'''						,    encoding='''utf-8'''					) as f:
								f.write(yaml.dump(SCREAMING_SNAKE_CASE						,    allow_unicode=SCREAMING_SNAKE_CASE					)					)
				else:
						raise ValueError(
						    '''The model doc part of the table of content is not properly sorted, run `make style` to fix this.'''					)
def       _a			(				SCREAMING_SNAKE_CASE=False					):


		"""simple docstring"""




		with open(SCREAMING_SNAKE_CASE						,    encoding='''utf-8'''					) as f:
				lowercase__						=				yaml.safe_load(f.read()					)

		# Get to the API doc
		lowercase__						=				0
		while content[api_idx]["title"] != "API":
				api_idx += 1
		lowercase__						=				content[api_idx]['''sections''']

		# Then to the model doc
		lowercase__						=				0
		while api_doc[pipeline_idx]["title"] != "Pipelines":
				pipeline_idx += 1

		lowercase__						=				False
		lowercase__						=				api_doc[pipeline_idx]['''sections''']
		lowercase__						=				[]

		# sort sub pipeline docs
		for pipeline_doc in pipeline_docs:
				if "section" in pipeline_doc:
						lowercase__						=				pipeline_doc['''section''']
						lowercase__						=				clean_doc_toc(SCREAMING_SNAKE_CASE					)
						if overwrite:
								lowercase__						=				new_sub_pipeline_doc
				new_pipeline_docs.append(SCREAMING_SNAKE_CASE					)

		# sort overall pipeline doc
		lowercase__						=				clean_doc_toc(SCREAMING_SNAKE_CASE					)

		if new_pipeline_docs != pipeline_docs:
				lowercase__						=				True
				if overwrite:
						lowercase__						=				new_pipeline_docs

		if diff:
				if overwrite:
						lowercase__						=				api_doc
						with open(SCREAMING_SNAKE_CASE						,    '''w'''						,    encoding='''utf-8'''					) as f:
								f.write(yaml.dump(SCREAMING_SNAKE_CASE						,    allow_unicode=SCREAMING_SNAKE_CASE					)					)
				else:
						raise ValueError(
						    '''The model doc part of the table of content is not properly sorted, run `make style` to fix this.'''					)


if __name__ == "__main__":
			lowerCAmelCase	=							argparse.ArgumentParser()
			parser.add_argument('--fix_and_overwrite', action='store_true', help='Whether to fix inconsistencies.')
			lowerCAmelCase	=							parser.parse_args()

			check_scheduler_doc(args.fix_and_overwrite)
			check_pipeline_doc(args.fix_and_overwrite)


