import importlib
import sys
from argparse import REMAINDER, ArgumentParser
from pathlib import Path

import torch_xla.distributed.xla_multiprocessing as xmp
def 					__lowercase						(    )					->Optional[int]:

  '''simple docstring'''




  a__  		=  ArgumentParser(
      description=(
          "PyTorch TPU distributed training launch helper utility that will spawn up multiple distributed processes"
      )       )

  # Optional arguments for the launch helper
  parser.add_argument("--num_cores"			,					type=lowerCamelCase__			,					default=1			,					help="Number of TPU cores to use (1 or 8)."       )

  # positional
  parser.add_argument(
      "training_script"			,					type=lowerCamelCase__			,					help=(
          "The full path to the single TPU training "
          "program/script to be launched in parallel, "
          "followed by all the arguments for the "
          "training script"
      )			,					)

  # rest from the training program
  parser.add_argument("training_script_args"			,					nargs=lowerCamelCase__       )

  return parser.parse_args()
def 					__lowercase						(    )					->Union[str, Any]:

  '''simple docstring'''




  a__  		=  parse_args()

  # Import training_script as a module.
  a__  		=  Path(args.training_script       )
  sys.path.append(str(script_fpath.parent.resolve()       )       )
  a__  		=  script_fpath.stem
  a__  		=  importlib.import_module(lowerCamelCase__       )

  # Patch sys.argv
  a__  		=  [args.training_script] + args.training_script_args + ["--tpu_num_cores", str(args.num_cores       )]

  xmp.spawn(mod._mp_fn			,					args=()			,					nprocs=args.num_cores       )


if __name__ == "__main__":
     main()


def 					__lowercase						(    lowerCamelCase__       )					->int:

  '''simple docstring'''




  if not isinstance(lowerCamelCase__			,					lowerCamelCase__       ):
    raise ValueError("double_factorial() only accepts integral values"       )
  if n < 0:
    raise ValueError("double_factorial() not defined for negative values"       )
  return 1 if n <= 1 else n * double_factorial(n - 2       )


if __name__ == "__main__":
     import doctest

     doctest.testmod()

