


import os
import random
import sys

from . import cryptomath_module as cryptoMath  # noqa: N812
from . import rabin_miller as rabinMiller  # noqa: N812



def 							UpperCamelCase_( )       ->		Any:
    print('Making key files...'					)
    make_key_files('rsa'				,					1024					)
    print('Key files generation successful.'					)



def 							UpperCamelCase_( lowerCamelCase_					)       ->		List[Any]:
    print('Generating prime p...'					)
    _lowercase			:				Tuple 						=						rabinMiller.generate_large_prime(SCREAMING_SNAKE_CASE__					)
    print('Generating prime q...'					)
    _lowercase			:				Optional[int] 						=						rabinMiller.generate_large_prime(SCREAMING_SNAKE_CASE__					)
    _lowercase			:				Dict 						=						p * q

    print('Generating e that is relatively prime to (p - 1) * (q - 1)...'					)
    while True:
        _lowercase			:				Tuple 						=						random.randrange(2 ** (key_size - 1)				,					2 ** (key_size)					)
        if cryptoMath.gcd(SCREAMING_SNAKE_CASE__				,					(p - 1) * (q - 1)					) == 1:
            break

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

    _lowercase			:				int 						=						(n, e)
    _lowercase			:				Union[str, Any] 						=						(n, d)
    return (public_key, private_key)



def 							UpperCamelCase_( lowerCamelCase_				,					lowerCamelCase_					)       ->		Any:





    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()

    _lowercase			:				Optional[int] 						=						generate_key(SCREAMING_SNAKE_CASE__					)
    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'''


from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCAmelCase_						:  List[Any]				  =						logging.get_logger(__name__)

UpperCAmelCase_						:  Any				  =						{
    'bigcode/gpt_bigcode-santacoder': 'https://huggingface.co/bigcode/gpt_bigcode-santacoder/resolve/main/config.json',
}





class        lowercase__    (		_snake_case   ):





							'''simple docstring'''


							A_				: Dict       =    """gpt_bigcode"""
							A_				: str       =    ["""past_key_values"""]
							A_				: Tuple       =    {
							    """hidden_size""": """n_embd""",
							    """max_position_embeddings""": """n_positions""",
							    """num_attention_heads""": """n_head""",
							    """num_hidden_layers""": """n_layer""",
							}






							def __init__(       self       ,   __snake_case=5_0257       ,   __snake_case=1024       ,   __snake_case=768       ,   __snake_case=12       ,   __snake_case=12       ,   __snake_case=None       ,   __snake_case="gelu_pytorch_tanh"       ,   __snake_case=0.1       ,   __snake_case=0.1       ,   __snake_case=0.1       ,   __snake_case=1e-5       ,   __snake_case=0.02       ,   __snake_case=True       ,   __snake_case=True       ,   __snake_case=5_0256       ,   __snake_case=5_0256       ,   __snake_case=True       ,   __snake_case=True       ,   __snake_case=True       ,   **__snake_case       ,   ):
											_SCREAMING_SNAKE_CASE					:			Optional[Any]							= vocab_size
											_SCREAMING_SNAKE_CASE					:			Optional[Any]							= n_positions
											_SCREAMING_SNAKE_CASE					:			List[Any]							= n_embd
											_SCREAMING_SNAKE_CASE					:			Union[str, Any]							= n_layer
											_SCREAMING_SNAKE_CASE					:			Union[str, Any]							= n_head
											_SCREAMING_SNAKE_CASE					:			Optional[int]							= n_inner
											_SCREAMING_SNAKE_CASE					:			Optional[Any]							= activation_function
											_SCREAMING_SNAKE_CASE					:			Union[str, Any]							= resid_pdrop
											_SCREAMING_SNAKE_CASE					:			Union[str, Any]							= embd_pdrop
											_SCREAMING_SNAKE_CASE					:			List[Any]							= attn_pdrop
											_SCREAMING_SNAKE_CASE					:			Optional[int]							= layer_norm_epsilon
											_SCREAMING_SNAKE_CASE					:			Any							= initializer_range
											_SCREAMING_SNAKE_CASE					:			str							= scale_attn_weights
											_SCREAMING_SNAKE_CASE					:			Tuple							= use_cache
											_SCREAMING_SNAKE_CASE					:			Optional[int]							= attention_softmax_in_fpaa
											_SCREAMING_SNAKE_CASE					:			List[Any]							= scale_attention_softmax_in_fpaa
											_SCREAMING_SNAKE_CASE					:			Any							= multi_query

											_SCREAMING_SNAKE_CASE					:			Optional[int]							= bos_token_id
											_SCREAMING_SNAKE_CASE					:			Optional[int]							= eos_token_id

											super().__init__(bos_token_id=__snake_case       ,   eos_token_id=__snake_case       ,   **__snake_case    )




