





'''simple docstring'''






import os
import random
import sys

from . import cryptomath_module as cryptoMath  # noqa: N812
from . import rabin_miller as rabinMiller  # noqa: N812
def 							_lowerCamelCase(  )		->  None:
    print('''Making key files...'''		)
    make_key_files('''rsa'''    ,       1_024		)
    print('''Key files generation successful.'''		)
def 							_lowerCamelCase(  UpperCamelCase__    : int		)		->  tuple[tuple[int, int], tuple[int, int]]:
    print('''Generating prime p...'''		)
    A       :       str							=						rabinMiller.generate_large_prime(UpperCamelCase__		)
    print('''Generating prime q...'''		)
    A       :       Tuple							=						rabinMiller.generate_large_prime(UpperCamelCase__		)
    A       :       int							=						p * q

    print('''Generating e that is relatively prime to (p - 1) * (q - 1)...'''		)
    while True:
        A       :       Optional[int]							=						random.randrange(2 ** (key_size - 1)    ,       2 ** (key_size)		)
        if cryptoMath.gcd(UpperCamelCase__    ,       (p - 1) * (q - 1)		) == 1:
            break

    print('''Calculating d that is mod inverse of e...'''		)
    A       :       List[Any]							=						cryptoMath.find_mod_inverse(UpperCamelCase__    ,       (p - 1) * (q - 1)		)

    A       :       Tuple							=						(n, e)
    A       :       Optional[int]							=						(n, d)
    return (public_key, private_key)
def 							_lowerCamelCase(  UpperCamelCase__    : str    ,       UpperCamelCase__    : int		)		->  None:
    if os.path.exists(F'''{name}_pubkey.txt'''		) or os.path.exists(F'''{name}_privkey.txt'''		):
        print('''\nWARNING:'''		)
        print(
            F'''"{name}_pubkey.txt" or "{name}_privkey.txt" already exists. \n'''
            '''Use a different name or delete these files and re-run this program.'''		)
        sys.exit()

    A,	A       :       Optional[int]							=						generate_key(UpperCamelCase__		)
    print(F'''\nWriting public key to file {name}_pubkey.txt...'''		)
    with open(F'''{name}_pubkey.txt'''    ,       '''w'''		) as out_file:
        out_file.write(F'''{key_size},{public_key[0]},{public_key[1]}'''		)

    print(F'''Writing private key to file {name}_privkey.txt...'''		)
    with open(F'''{name}_privkey.txt'''    ,       '''w'''		) as out_file:
        out_file.write(F'''{key_size},{private_key[0]},{private_key[1]}'''		)


if __name__ == "__main__":
     main()







'''simple docstring'''






import unittest

from transformers.models.xlm_prophetnet.tokenization_xlm_prophetnet import SPIECE_UNDERLINE, XLMProphetNetTokenizer
from transformers.testing_utils import get_tests_dir, require_sentencepiece, slow
from transformers.utils import cached_property

from ...test_tokenization_common import TokenizerTesterMixin


snake_case_     =	get_tests_dir("""fixtures/test_sentencepiece.model""")


@require_sentencepiece
class   _lowercase						(							a		,					unittest.TestCase				):
   _UpperCamelCase       		=   XLMProphetNetTokenizer
   _UpperCamelCase       		=   False
   _UpperCamelCase       		=   True


   def 					snake_case				( self					):
       super().setUp()

       # We have a SentencePiece fixture for testing
       A       :       Dict							=						XLMProphetNetTokenizer(_UpperCAmelCase    ,   keep_accents=_UpperCAmelCase					)
       tokenizer.save_pretrained(self.tmpdirname					)


   def 					snake_case				( self					):
       A       :       Union[str, Any]							=						'''[PAD]'''
       A       :       Optional[int]							=						0

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


   def 					snake_case				( self					):
       A       :       Union[str, Any]							=						list(self.get_tokenizer().get_vocab().keys()					)

       self.assertEqual(vocab_keys[0]    ,   '''[PAD]'''					)
       self.assertEqual(vocab_keys[1]    ,   '''[CLS]'''					)
       self.assertEqual(vocab_keys[-1]    ,   '''j'''					)
       self.assertEqual(len(_UpperCAmelCase					)    ,   1_012					)


   def 					snake_case				( self					):
       self.assertEqual(self.get_tokenizer().vocab_size    ,   1_012					)


   def 					snake_case				( self					):
       A       :       Dict							=						XLMProphetNetTokenizer(_UpperCAmelCase    ,   keep_accents=_UpperCAmelCase					)

       A       :       int							=						tokenizer.tokenize('''This is a test'''					)
       self.assertListEqual(_UpperCAmelCase    ,   ['''▁This''', '''▁is''', '''▁a''', '''▁t''', '''est''']					)

       self.assertListEqual(
           tokenizer.convert_tokens_to_ids(_UpperCAmelCase					)    ,   [value + tokenizer.fairseq_offset for value in [285, 46, 10, 170, 382]]    ,   )

       A       :       Optional[Any]							=						tokenizer.tokenize('''I was born in 92000, and this is falsé.'''					)
       self.assertListEqual(
           _UpperCAmelCase    ,   [
               SPIECE_UNDERLINE + '''I''',
               SPIECE_UNDERLINE + '''was''',
               SPIECE_UNDERLINE + '''b''',
               '''or''',
               '''n''',
               SPIECE_UNDERLINE + '''in''',
               SPIECE_UNDERLINE + '''''',
               '''9''',
               '''2''',
               '''0''',
               '''0''',
               '''0''',
               ''',''',
               SPIECE_UNDERLINE + '''and''',
               SPIECE_UNDERLINE + '''this''',
               SPIECE_UNDERLINE + '''is''',
               SPIECE_UNDERLINE + '''f''',
               '''al''',
               '''s''',
               '''é''',
               '''.''',
           ]    ,   )
       A       :       int							=						tokenizer.convert_tokens_to_ids(_UpperCAmelCase					)
       self.assertListEqual(
           _UpperCAmelCase    ,   [
               value + tokenizer.fairseq_offset
               for value in [8, 21, 84, 55, 24, 19, 7, -9, 602, 347, 347, 347, 3, 12, 66, 46, 72, 80, 6, -9, 4]
           ]    ,   )

       A       :       Union[str, Any]							=						tokenizer.convert_ids_to_tokens(_UpperCAmelCase					)
       self.assertListEqual(
           _UpperCAmelCase    ,   [
               SPIECE_UNDERLINE + '''I''',
               SPIECE_UNDERLINE + '''was''',
               SPIECE_UNDERLINE + '''b''',
               '''or''',
               '''n''',
               SPIECE_UNDERLINE + '''in''',
               SPIECE_UNDERLINE + '''''',
               '''[UNK]''',
               '''2''',
               '''0''',
               '''0''',
               '''0''',
               ''',''',
               SPIECE_UNDERLINE + '''and''',
               SPIECE_UNDERLINE + '''this''',
               SPIECE_UNDERLINE + '''is''',
               SPIECE_UNDERLINE + '''f''',
               '''al''',
               '''s''',
               '''[UNK]''',
               '''.''',
           ]    ,   )


   @cached_property
   def 					snake_case				( self					):
       return XLMProphetNetTokenizer.from_pretrained('''microsoft/xprophetnet-large-wiki100-cased'''					)


   @slow
   def 					snake_case				( self					):
       A       :       Union[str, Any]							=						'''Hello World!'''
       A       :       Any							=						[35_389, 6_672, 49, 2]
       self.assertListEqual(_UpperCAmelCase    ,   self.big_tokenizer.encode(_UpperCAmelCase					)					)


   @slow
   def 					snake_case				( self					):
       # fmt: off
       A       :       List[Any]							=						{'''input_ids''': [[11_073, 82_783, 18, 26, 82_783, 549, 51_540, 248, 17_209, 1_301, 217, 20, 215_186, 1_325, 147, 17_209, 1_301, 217, 20, 56_370, 53, 122_020, 20, 16_477, 27, 87_355, 4_548, 20, 4_728, 78_392, 17, 159_969, 18, 26, 24_491, 629, 15, 538, 22_704, 5_439, 15, 2_788, 24_491, 9_885, 15, 43_534, 605, 15, 814, 18_403, 33_200, 29, 15, 43_534, 24_458, 12_410, 111, 24_966, 83_669, 9_637, 144_068, 26, 850, 22_346, 27, 147, 24_966, 83_669, 83_490, 26, 39_113, 735, 27, 689, 656, 2_800, 1_339, 4_600, 53, 122_020, 115_785, 34, 816, 1_339, 46_887, 18, 147, 53_905, 1_951, 42_238, 41_170, 17_732, 834, 436, 15, 27_523, 98_733, 217, 147, 5_542, 4_981, 930, 17_347, 16, 2], [20_091, 629, 94, 82_786, 58, 490, 20, 1_528, 84, 53_905, 344, 80_592, 110_128, 18_822, 5_267, 1_306, 62, 152_537, 308, 7_997, 401, 124_427, 549, 35_442, 225, 109, 15_055, 25_748, 147, 7_119, 43_712, 34, 767, 135_366, 18, 16, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [592, 63_784, 119_466, 17, 147_808, 88_214, 18, 656, 81, 32, 3_296, 10_280, 16, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], '''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, 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], [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, 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=_UpperCAmelCase    ,   model_name='''microsoft/xprophetnet-large-wiki100-cased'''    ,   revision='''1acad1643ddd54a44df6a1b797ada8373685d90e'''    ,   )
