






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

import torch_xla.distributed.xla_multiprocessing as xmp

def 			__lowerCamelCase     (						)				->    List[Any]:






						"""simple docstring"""





						_SCREAMING_SNAKE_CASE       =    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=a_			,default=1			,help="""Number of TPU cores to use (1 or 8)."""						)

						# positional
						parser.add_argument(
						    """training_script"""			,type=a_			,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=a_						)

						return parser.parse_args()

def 			__lowerCamelCase     (						)				->    List[str]:






						"""simple docstring"""





						_SCREAMING_SNAKE_CASE       =    parse_args()

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

						# Patch sys.argv
						_SCREAMING_SNAKE_CASE       =    [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()






'''simple docstring'''





def     UpperCAmelCase     (    a_      ,		a_		)   ->       set:



   """simple docstring"""






   assert isinstance(a_      ,		a_		), F"The input value of [set_a={set_a}] is not a set"
   assert isinstance(a_      ,		a_		), F"The input value of [set_b={set_b}] is not a set"

   return {a + b for a in set_a for b in set_b}


if __name__ == "__main__":
  from doctest import testmod

  testmod()
