

import argparse

import torch

from transformers import GPTaConfig, GPTaModel, load_tf_weights_in_gpta
from transformers.utils import CONFIG_NAME, WEIGHTS_NAME, logging


logging.set_verbosity_info()




def 			lowerCAmelCase(      SCREAMING_SNAKE_CASE_			,						SCREAMING_SNAKE_CASE_			,						SCREAMING_SNAKE_CASE_			)->						Tuple:



    """simple docstring"""






    if gpta_config_file == "":
        UpperCamelCase_			  =						GPTaConfig()
    else:
        UpperCamelCase_			  =						GPTaConfig.from_json_file(SCREAMING_SNAKE_CASE_			)
    UpperCamelCase_			  =						GPTaModel(SCREAMING_SNAKE_CASE_			)

    # Load weights from numpy
    load_tf_weights_in_gpta(SCREAMING_SNAKE_CASE_			,						SCREAMING_SNAKE_CASE_			,						SCREAMING_SNAKE_CASE_			)

    # Save pytorch-model
    UpperCamelCase_			  =						pytorch_dump_folder_path + "/" + WEIGHTS_NAME
    UpperCamelCase_			  =						pytorch_dump_folder_path + "/" + CONFIG_NAME
    print(f"Save PyTorch model to {pytorch_weights_dump_path}"			)
    torch.save(model.state_dict()			,						SCREAMING_SNAKE_CASE_			)
    print(f"Save configuration file to {pytorch_config_dump_path}"			)
    with open(SCREAMING_SNAKE_CASE_			,						"w"			,						encoding="utf-8"			) as f:
        f.write(config.to_json_string()			)


if __name__ == "__main__":
 SCREAMING_SNAKE_CASE		:List[Any]						=     argparse.ArgumentParser()
 # Required parameters
 parser.add_argument(
     """--gpt2_checkpoint_path""", default=None, type=str, required=True, help="""Path to the TensorFlow checkpoint path."""
 )
 parser.add_argument(
     """--pytorch_dump_folder_path""", default=None, type=str, required=True, help="""Path to the output PyTorch model."""
 )
 parser.add_argument(
     """--gpt2_config_file""",
     default="""""",
     type=str,
     help=(
         """An optional config json file corresponding to the pre-trained OpenAI model. \n"""
         """This specifies the model architecture."""
     ),
 )
 SCREAMING_SNAKE_CASE		:List[str]						=     parser.parse_args()
 convert_gpta_checkpoint_to_pytorch(args.gpta_checkpoint_path, args.gpta_config_file, args.pytorch_dump_folder_path)



def 			lowerCAmelCase(      SCREAMING_SNAKE_CASE_			,						SCREAMING_SNAKE_CASE_			,						SCREAMING_SNAKE_CASE_			)->						int:



    """simple docstring"""






    if exponent == 1:
        return base
    if exponent % 2 == 0:
        UpperCamelCase_			  =						_modexpt(SCREAMING_SNAKE_CASE_			,						exponent // 2			,						SCREAMING_SNAKE_CASE_			) % modulo_value
        return (x * x) % modulo_value
    else:
        return (base * _modexpt(SCREAMING_SNAKE_CASE_			,						exponent - 1			,						SCREAMING_SNAKE_CASE_			)) % modulo_value




def 			lowerCAmelCase(      SCREAMING_SNAKE_CASE_ = 1_7_7_7			,						SCREAMING_SNAKE_CASE_ = 1_8_5_5			,						SCREAMING_SNAKE_CASE_ = 8			)->						int:



    """simple docstring"""






    UpperCamelCase_			  =						base
    for _ in range(1			,						SCREAMING_SNAKE_CASE_			):
        UpperCamelCase_			  =						_modexpt(SCREAMING_SNAKE_CASE_			,						SCREAMING_SNAKE_CASE_			,						1_0**digits			)

    return result


if __name__ == "__main__":
 print(F'''{solution() = }''')
