





import argparse

import torch

from transformers import NystromformerConfig, NystromformerForMaskedLM






def 			lowerCamelCase__	(__lowerCamelCase		):
     if "model" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Tuple  			=							orig_key.replace("model.",				""		)
     if "norm1" in orig_key:
          _SCREAMING_SNAKE_CASE				:		List[Any]  			=							orig_key.replace("norm1",				"attention.output.LayerNorm"		)
     if "norm2" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Tuple  			=							orig_key.replace("norm2",				"output.LayerNorm"		)
     if "norm" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Union[str, Any]  			=							orig_key.replace("norm",				"LayerNorm"		)
     if "transformer" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Optional[Any]  			=							orig_key.split("."		)[0].split("_"		)[-1]
          _SCREAMING_SNAKE_CASE				:		str  			=							orig_key.replace(f"""transformer_{layer_num}""",				f"""encoder.layer.{layer_num}"""		)
     if "mha.attn" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Dict  			=							orig_key.replace("mha.attn",				"attention.self"		)
     if "mha" in orig_key:
          _SCREAMING_SNAKE_CASE				:		str  			=							orig_key.replace("mha",				"attention"		)
     if "W_q" in orig_key:
          _SCREAMING_SNAKE_CASE				:		List[str]  			=							orig_key.replace("W_q",				"self.query"		)
     if "W_k" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Dict  			=							orig_key.replace("W_k",				"self.key"		)
     if "W_v" in orig_key:
          _SCREAMING_SNAKE_CASE				:		str  			=							orig_key.replace("W_v",				"self.value"		)
     if "ff1" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Tuple  			=							orig_key.replace("ff1",				"intermediate.dense"		)
     if "ff2" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Dict  			=							orig_key.replace("ff2",				"output.dense"		)
     if "ff" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Optional[Any]  			=							orig_key.replace("ff",				"output.dense"		)
     if "mlm_class" in orig_key:
          _SCREAMING_SNAKE_CASE				:		List[Any]  			=							orig_key.replace("mlm.mlm_class",				"cls.predictions.decoder"		)
     if "mlm" in orig_key:
          _SCREAMING_SNAKE_CASE				:		Tuple  			=							orig_key.replace("mlm",				"cls.predictions.transform"		)
     if "cls" not in orig_key:
          _SCREAMING_SNAKE_CASE				:		Optional[int]  			=							"nystromformer." + orig_key

     return orig_key






def 			lowerCamelCase__	(__lowerCamelCase,				__lowerCamelCase		):
     for key in orig_state_dict.copy().keys():
          _SCREAMING_SNAKE_CASE				:		Union[str, Any]  			=							orig_state_dict.pop(__lowerCamelCase		)

          if ("pooler" in key) or ("sen_class" in key) or ("conv.bias" in key):
               continue
          else:
               _SCREAMING_SNAKE_CASE				:		Dict  			=							val

     _SCREAMING_SNAKE_CASE				:		Dict  			=							orig_state_dict["cls.predictions.decoder.bias"]
     _SCREAMING_SNAKE_CASE				:		List[Any]  			=							(
         torch.arange(config.max_position_embeddings		).expand((1, -1)		) + 2
     )

     return orig_state_dict






def 			lowerCamelCase__	(__lowerCamelCase,				__lowerCamelCase,				__lowerCamelCase		):
     _SCREAMING_SNAKE_CASE				:		Dict  			=							torch.load(__lowerCamelCase,				map_location="cpu"		)["model_state_dict"]
     _SCREAMING_SNAKE_CASE				:		List[Any]  			=							NystromformerConfig.from_json_file(__lowerCamelCase		)
     _SCREAMING_SNAKE_CASE				:		List[str]  			=							NystromformerForMaskedLM(__lowerCamelCase		)

     _SCREAMING_SNAKE_CASE				:		int  			=							convert_checkpoint_helper(__lowerCamelCase,				__lowerCamelCase		)

     model.load_state_dict(__lowerCamelCase		)
     model.eval()
     model.save_pretrained(__lowerCamelCase		)

     print(f"""Checkpoint successfuly converted. Model saved at {pytorch_dump_path}"""		)


if __name__ == "__main__":
       UpperCamelCase__          =argparse.ArgumentParser()
       # Required parameters
       parser.add_argument(
           '--pytorch_model_path', default=None, type=str, required=True, help='Path to Nystromformer pytorch checkpoint.'
       )
       parser.add_argument(
           '--config_file',
           default=None,
           type=str,
           required=True,
           help='The json file for Nystromformer model config.',
       )
       parser.add_argument(
           '--pytorch_dump_path', default=None, type=str, required=True, help='Path to the output PyTorch model.'
       )
       UpperCamelCase__          =parser.parse_args()
       convert_nystromformer_checkpoint(args.pytorch_model_path, args.config_file, args.pytorch_dump_path)






from itertools import permutations






def 			lowerCamelCase__	():
     _SCREAMING_SNAKE_CASE				:		Dict  			=							list(map("".join,				permutations("0123456789"		)		)		)
     return result[999999]


if __name__ == "__main__":
       print(solution())