





"""simple docstring"""
import unittest

from transformers import AlbertTokenizer, AlbertTokenizerFast
from transformers.testing_utils import get_tests_dir, require_sentencepiece, require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin


_snake_case     :		List[str]       						= get_tests_dir('fixtures/spiece.model')






@require_sentencepiece
@require_tokenizers
class 					_UpperCAmelCase   (	_SCREAMING_SNAKE_CASE     ,							unittest.TestCase ):
					UpperCamelCase      =							AlbertTokenizer
					UpperCamelCase      =							AlbertTokenizerFast
					UpperCamelCase      =							True
					UpperCamelCase      =							True
					UpperCamelCase      =							True


					def 	lowerCamelCase       (					self			:List[Any]		):
												super().setUp()

												# We have a SentencePiece fixture for testing
												A		=  AlbertTokenizer(A_		)
												tokenizer.save_pretrained(self.tmpdirname		)


					def 	lowerCamelCase       (					self			:Optional[int]     ,       __UpperCamelCase			:Dict		):
												A		=  "this is a test"
												A		=  "this is a test"
												return input_text, output_text


					def 	lowerCamelCase       (					self			:Optional[int]		):
												A		=  "<pad>"
												A		=  0

												self.assertEqual(self.get_tokenizer()._convert_token_to_id(A_		)     ,       A_		)
												self.assertEqual(self.get_tokenizer()._convert_id_to_token(A_		)     ,       A_		)


					def 	lowerCamelCase       (					self			:int		):
												A		=  list(self.get_tokenizer().get_vocab().keys()		)

												self.assertEqual(vocab_keys[0]     ,       "<pad>"		)
												self.assertEqual(vocab_keys[1]     ,       "<unk>"		)
												self.assertEqual(vocab_keys[-1]     ,       "▁eloquent"		)
												self.assertEqual(len(A_		)     ,       3_00_00		)


					def 	lowerCamelCase       (					self			:Union[str, Any]		):
												self.assertEqual(self.get_tokenizer().vocab_size     ,       3_00_00		)


					def 	lowerCamelCase       (					self			:Any		):
												if not self.test_rust_tokenizer:
																			return

												A		=  self.get_tokenizer()
												A		=  self.get_rust_tokenizer()

												A		=  "I was born in 92000, and this is falsé."

												A		=  tokenizer.tokenize(A_		)
												A		=  rust_tokenizer.tokenize(A_		)
												self.assertListEqual(A_     ,       A_		)

												A		=  tokenizer.encode(A_     ,       add_special_tokens=A_		)
												A		=  rust_tokenizer.encode(A_     ,       add_special_tokens=A_		)
												self.assertListEqual(A_     ,       A_		)

												A		=  self.get_rust_tokenizer()
												A		=  tokenizer.encode(A_		)
												A		=  rust_tokenizer.encode(A_		)
												self.assertListEqual(A_     ,       A_		)


					def 	lowerCamelCase       (					self			:str		):
												A		=  AlbertTokenizer(A_     ,       keep_accents=A_		)

												A		=  tokenizer.tokenize("This is a test"		)
												self.assertListEqual(A_     ,       ["▁this", "▁is", "▁a", "▁test"]		)

												self.assertListEqual(tokenizer.convert_tokens_to_ids(A_		)     ,       [48, 25, 21, 12_89]		)

												A		=  tokenizer.tokenize("I was born in 92000, and this is falsé."		)
												self.assertListEqual(
												    A_     ,       ["▁i", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "é", "."]		)
												A		=  tokenizer.convert_tokens_to_ids(A_		)
												self.assertListEqual(A_     ,       [31, 23, 3_86, 19, 5_61, 30_50, 15, 17, 48, 25, 82_56, 18, 1, 9]		)

												A		=  tokenizer.convert_ids_to_tokens(A_		)
												self.assertListEqual(
												    A_     ,       ["▁i", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "."]     ,       )


					def 	lowerCamelCase       (					self			:Union[str, Any]		):
												A		=  AlbertTokenizer(A_		)

												A		=  tokenizer.encode("sequence builders"		)
												A		=  tokenizer.encode("multi-sequence build"		)

												A		=  tokenizer.build_inputs_with_special_tokens(A_		)
												A		=  tokenizer.build_inputs_with_special_tokens(A_     ,       A_		)

												assert encoded_sentence == [tokenizer.cls_token_id] + text + [tokenizer.sep_token_id]
												assert encoded_pair == [tokenizer.cls_token_id] + text + [tokenizer.sep_token_id] + text_a + [
												    tokenizer.sep_token_id
												]


					@slow
					def 	lowerCamelCase       (					self			:Union[str, Any]		):
												A		=  {"attention_mask": [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], "input_ids": [[2, 2_19_70, 13, 5, 60_92, 1_67, 28, 71_03, 21_53, 6_73, 8, 70_28, 1_20_51, 18, 17, 71_03, 21_53, 6_73, 8, 35_15, 1_86_84, 8, 44_61, 6, 19_27, 2_97, 8, 1_20_60, 26_07, 18, 13, 5, 44_61, 15, 1_05_38, 38, 8, 1_35, 15, 8_22, 58, 15, 9_93, 1_03_63, 15, 14_60, 80_05, 44_61, 15, 9_93, 2_55, 23_28, 9, 9, 9, 6, 26, 11_12, 8_16, 32_60, 13, 5, 1_03, 23_77, 6, 17, 11_12, 8_16, 27_82, 13, 5, 1_03, 1_06_41, 6, 29, 84, 25_12, 24_30, 7_82, 1_86_84, 27_61, 19, 8_08, 24_30, 25_56, 17, 8_55, 14_80, 94_77, 40_91, 1_28, 1_17_12, 15, 71_03, 21_53, 6_73, 17, 2_48_83, 99_90, 9, 3], [2, 1_15_02, 25, 10_06, 20, 7_82, 8, 1_18_09, 8_55, 17_32, 1_93_93, 1_86_67, 37, 3_67, 2_10_18, 69, 18_54, 34, 1_18_60, 1_91_24, 27, 1_56, 2_25, 17, 1_93, 41_41, 19, 65, 91_24, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 14, 22_31, 8_86, 23_85, 1_76_59, 84, 14, 1_67_92, 19_52, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], "token_type_ids": [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]}  # noqa: E501
												# fmt: on

												self.tokenizer_integration_test_util(
												    expected_encoding=A_     ,       model_name="albert-base-v2"     ,       revision="6b6560eaf5ff2e250b00c50f380c5389a9c2d82e"     ,       )




from decimal import Decimal, getcontext
from math import ceil, factorial


def       A       (					lowercase )   ->  str:
		'''simple docstring'''

		if not isinstance(lowercase    ,       lowercase ):
				raise TypeError('Undefined for non-integers' )
		elif precision < 1:
				raise ValueError('Undefined for non-natural numbers' )

		UpperCamelCase		=     precision
		UpperCamelCase		=     ceil(precision / 14 )
		UpperCamelCase		=     426_880 * Decimal(10_005 ).sqrt()
		UpperCamelCase		=     1
		UpperCamelCase		=     13_591_409
		UpperCamelCase		=     Decimal(lowercase )
		for k in range(1    ,       lowercase ):
				UpperCamelCase		=     factorial(6 * k ) // (factorial(3 * k ) * factorial(lowercase ) ** 3)
				linear_term += 545_140_134
				exponential_term *= -262_537_412_640_768_000
				partial_sum += Decimal(multinomial_term * linear_term ) / exponential_term
		return str(constant_term / partial_sum )[:-1]


if __name__ == "__main__":
					_UpperCAmelCase					: Dict      =       50
					print(F'''The first {n} digits of pi is: {pi(n)}''')
