"""simple docstring"""




import tempfile
import unittest

import numpy as np
from huggingface_hub import HfFolder, delete_repo
from requests.exceptions import HTTPError

from transformers import BertConfig, is_flax_available
from transformers.testing_utils import TOKEN, USER, is_staging_test, require_flax


if is_flax_available():
			import os

			from flax.core.frozen_dict import unfreeze
			from flax.traverse_util import flatten_dict

			from transformers import FlaxBertModel

			__lowerCAmelCase    :							Tuple													=						"0.12"  # assumed parallelism: 8

@require_flax
@is_staging_test
class       a_      (     unittest.TestCase			):




					@classmethod
					def 						_SCREAMING_SNAKE_CASE						(	cls						:     Optional[int]     ):
							lowerCAmelCase__        =   TOKEN
							HfFolder.save_token(snake_case__     )




					@classmethod
					def 						_SCREAMING_SNAKE_CASE						(	cls						:     Optional[Any]     ):
							try:
									delete_repo(token=cls._token  ,						repo_id="""test-model-flax"""     )
							except HTTPError:
									pass

							try:
									delete_repo(token=cls._token  ,						repo_id="""valid_org/test-model-flax-org"""     )
							except HTTPError:
									pass




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Tuple     ):
							lowerCAmelCase__        =   BertConfig(
							    vocab_size=99  ,						hidden_size=32  ,						num_hidden_layers=5  ,						num_attention_heads=4  ,						intermediate_size=37     )
							lowerCAmelCase__        =   FlaxBertModel(snake_case__     )
							model.push_to_hub("""test-model-flax"""  ,						use_auth_token=self._token     )

							lowerCAmelCase__        =   FlaxBertModel.from_pretrained(F"""{USER}/test-model-flax"""     )

							lowerCAmelCase__        =   flatten_dict(unfreeze(model.params     )     )
							lowerCAmelCase__        =   flatten_dict(unfreeze(new_model.params     )     )

							for key in base_params.keys():
									lowerCAmelCase__        =   (base_params[key] - new_params[key]).sum().item()
									self.assertLessEqual(snake_case__  ,						1E-3  ,						msg=F"""{key} not identical"""     )

							# Reset repo
							delete_repo(token=self._token  ,						repo_id="""test-model-flax"""     )

							# Push to hub via save_pretrained
							with tempfile.TemporaryDirectory() as tmp_dir:
									model.save_pretrained(snake_case__  ,						repo_id="""test-model-flax"""  ,						push_to_hub=snake_case__  ,						use_auth_token=self._token     )

							lowerCAmelCase__        =   FlaxBertModel.from_pretrained(F"""{USER}/test-model-flax"""     )

							lowerCAmelCase__        =   flatten_dict(unfreeze(model.params     )     )
							lowerCAmelCase__        =   flatten_dict(unfreeze(new_model.params     )     )

							for key in base_params.keys():
									lowerCAmelCase__        =   (base_params[key] - new_params[key]).sum().item()
									self.assertLessEqual(snake_case__  ,						1E-3  ,						msg=F"""{key} not identical"""     )




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[int]     ):
							lowerCAmelCase__        =   BertConfig(
							    vocab_size=99  ,						hidden_size=32  ,						num_hidden_layers=5  ,						num_attention_heads=4  ,						intermediate_size=37     )
							lowerCAmelCase__        =   FlaxBertModel(snake_case__     )
							model.push_to_hub("""valid_org/test-model-flax-org"""  ,						use_auth_token=self._token     )

							lowerCAmelCase__        =   FlaxBertModel.from_pretrained("""valid_org/test-model-flax-org"""     )

							lowerCAmelCase__        =   flatten_dict(unfreeze(model.params     )     )
							lowerCAmelCase__        =   flatten_dict(unfreeze(new_model.params     )     )

							for key in base_params.keys():
									lowerCAmelCase__        =   (base_params[key] - new_params[key]).sum().item()
									self.assertLessEqual(snake_case__  ,						1E-3  ,						msg=F"""{key} not identical"""     )

							# Reset repo
							delete_repo(token=self._token  ,						repo_id="""valid_org/test-model-flax-org"""     )

							# Push to hub via save_pretrained
							with tempfile.TemporaryDirectory() as tmp_dir:
									model.save_pretrained(
									    snake_case__  ,						repo_id="""valid_org/test-model-flax-org"""  ,						push_to_hub=snake_case__  ,						use_auth_token=self._token     )

							lowerCAmelCase__        =   FlaxBertModel.from_pretrained("""valid_org/test-model-flax-org"""     )

							lowerCAmelCase__        =   flatten_dict(unfreeze(model.params     )     )
							lowerCAmelCase__        =   flatten_dict(unfreeze(new_model.params     )     )

							for key in base_params.keys():
									lowerCAmelCase__        =   (base_params[key] - new_params[key]).sum().item()
									self.assertLessEqual(snake_case__  ,						1E-3  ,						msg=F"""{key} not identical"""     )







def 							_UpperCAmelCase		(       lowerCamelCase__			,  lowerCamelCase__     ):





		"""simple docstring"""




		lowerCAmelCase__        =   True
		lowerCAmelCase__        =   flatten_dict(modela.params     )
		lowerCAmelCase__        =   flatten_dict(modela.params     )
		for key in flat_params_a.keys():
				if np.sum(np.abs(flat_params_a[key] - flat_params_a[key]     )     ) > 1e-4:
						lowerCAmelCase__        =   False

		return models_are_equal






@require_flax
class       a_      (     unittest.TestCase			):




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Dict     ):
							lowerCAmelCase__        =   BertConfig.from_pretrained("""hf-internal-testing/tiny-bert-flax-only"""     )
							lowerCAmelCase__        =   FlaxBertModel(snake_case__     )

							lowerCAmelCase__        =   """bert"""
							with tempfile.TemporaryDirectory() as tmp_dir:
									model.save_pretrained(os.path.join(snake_case__  ,						snake_case__     )     )

									with self.assertRaises(snake_case__     ):
											lowerCAmelCase__        =   FlaxBertModel.from_pretrained(snake_case__     )

									lowerCAmelCase__        =   FlaxBertModel.from_pretrained(snake_case__  ,						subfolder=snake_case__     )

							self.assertTrue(check_models_equal(snake_case__  ,						snake_case__     )     )




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[int]     ):
							lowerCAmelCase__        =   BertConfig.from_pretrained("""hf-internal-testing/tiny-bert-flax-only"""     )
							lowerCAmelCase__        =   FlaxBertModel(snake_case__     )

							lowerCAmelCase__        =   """bert"""
							with tempfile.TemporaryDirectory() as tmp_dir:
									model.save_pretrained(os.path.join(snake_case__  ,						snake_case__     )  ,						max_shard_size="""10KB"""     )

									with self.assertRaises(snake_case__     ):
											lowerCAmelCase__        =   FlaxBertModel.from_pretrained(snake_case__     )

									lowerCAmelCase__        =   FlaxBertModel.from_pretrained(snake_case__  ,						subfolder=snake_case__     )

							self.assertTrue(check_models_equal(snake_case__  ,						snake_case__     )     )




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[int]     ):
							lowerCAmelCase__        =   """bert"""
							lowerCAmelCase__        =   """hf-internal-testing/tiny-random-bert-subfolder"""

							with self.assertRaises(snake_case__     ):
									lowerCAmelCase__        =   FlaxBertModel.from_pretrained(snake_case__     )

							lowerCAmelCase__        =   FlaxBertModel.from_pretrained(snake_case__  ,						subfolder=snake_case__     )

							self.assertIsNotNone(snake_case__     )




					def 						_SCREAMING_SNAKE_CASE						(	self						:     Optional[Any]     ):
							lowerCAmelCase__        =   """bert"""
							lowerCAmelCase__        =   """hf-internal-testing/tiny-random-bert-sharded-subfolder"""
							with self.assertRaises(snake_case__     ):
									lowerCAmelCase__        =   FlaxBertModel.from_pretrained(snake_case__     )

							lowerCAmelCase__        =   FlaxBertModel.from_pretrained(snake_case__  ,						subfolder=snake_case__     )

							self.assertIsNotNone(snake_case__     )





"""simple docstring"""




def 							_UpperCAmelCase		(       lowerCamelCase__     ):





		"""simple docstring"""




		assert isinstance(lowerCamelCase__			,  lowerCamelCase__     ), f"""The input value of [n={number}] is not an integer"""

		if number == 1:
				return 2
		elif number < 1:
				lowerCAmelCase__        =   f"""The input value of [n={number}] has to be > 0"""
				raise ValueError(lowerCamelCase__     )
		else:
				lowerCAmelCase__        =   sylvester(number - 1     )
				lowerCAmelCase__        =   num - 1
				lowerCAmelCase__        =   num
				return lower * upper + 1


if __name__ == "__main__":
			print(F"The 8th number in Sylvester's sequence: {sylvester(8)}")




