






from math import pow







def 					SCREAMING_SNAKE_CASE    (			snake_case_ :							Optional[int]					,  snake_case_ :							List[Any]					,  snake_case_ :							List[str]					,  snake_case_ :							Optional[Any]					,  snake_case_ :							int					,  ):
 if current_sum == needed_sum:
  # If the sum of the powers is equal to needed_sum, then we have a solution.
  solutions_count += 1
  return current_sum, solutions_count

 snake_case__			:				Optional[Any]       =  int(pow(_UpperCAmelCase					,  _UpperCAmelCase       )       )
 if current_sum + i_to_n <= needed_sum:
  # If the sum of the powers is less than needed_sum, then continue adding powers.
  current_sum += i_to_n
  snake_case__			:				int       =  backtrack(
      _UpperCAmelCase					,  _UpperCAmelCase					,  current_number + 1					,  _UpperCAmelCase					,  _UpperCAmelCase       )
  current_sum -= i_to_n
 if i_to_n < needed_sum:
  # If the power of i is less than needed_sum, then try with the next power.
  snake_case__			:				Dict       =  backtrack(
      _UpperCAmelCase					,  _UpperCAmelCase					,  current_number + 1					,  _UpperCAmelCase					,  _UpperCAmelCase       )
 return current_sum, solutions_count







def 					SCREAMING_SNAKE_CASE    (			snake_case_ :							Union[str, Any]					,  snake_case_ :							Optional[Any]       ):
 if not (1 <= needed_sum <= 1000 and 2 <= power <= 10):
  raise ValueError(
      "Invalid input\n"
      "needed_sum must be between 1 and 1000, power between 2 and 10."       )

 return backtrack(_UpperCAmelCase					,  _UpperCAmelCase					,  1					,  0					,  0       )[1]  # Return the solutions_count


if __name__ == "__main__":
 import doctest

 doctest.testmod()











import argparse

import torch

from transformers import MobileBertConfig, MobileBertForPreTraining, load_tf_weights_in_mobilebert
from transformers.utils import logging


logging.set_verbosity_info()







def 					SCREAMING_SNAKE_CASE    (			snake_case_ :							Tuple					,  snake_case_ :							str					,  snake_case_ :							Union[str, Any]       ):
	# Initialise PyTorch model
	snake_case__			:				List[str]       =  MobileBertConfig.from_json_file(snake_case_       )
	print(F'''Building PyTorch model from configuration: {config}'''       )
	snake_case__			:				Dict       =  MobileBertForPreTraining(snake_case_       )
	# Load weights from tf checkpoint
	snake_case__			:				Any       =  load_tf_weights_in_mobilebert(snake_case_					,  snake_case_					,  snake_case_       )
	# Save pytorch-model
	print(F'''Save PyTorch model to {pytorch_dump_path}'''       )
	torch.save(model.state_dict()					,  snake_case_       )


if __name__ == "__main__":
	__lowerCamelCase :      List[Any]										=				argparse.ArgumentParser()
	# Required parameters
	parser.add_argument(
	    """--tf_checkpoint_path""", default=None, type=str, required=True, help="""Path to the TensorFlow checkpoint path."""
	)
	parser.add_argument(
	    """--mobilebert_config_file""",
	    default=None,
	    type=str,
	    required=True,
	    help=(
	        """The config json file corresponding to the pre-trained MobileBERT model. \n"""
	        """This specifies the model architecture."""
	    ),
	)
	parser.add_argument(
	    """--pytorch_dump_path""", default=None, type=str, required=True, help="""Path to the output PyTorch model."""
	)
	__lowerCamelCase :      int										=				parser.parse_args()
	convert_tf_checkpoint_to_pytorch(args.tf_checkpoint_path, args.mobilebert_config_file, args.pytorch_dump_path)



