
"""simple docstring"""




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

import torch_xla.distributed.xla_multiprocessing as xmp

def lowercase_  (       ):
							SCREAMING_SNAKE_CASE__						:	Union[str, Any]									=       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=_snake_case       ,default=1       ,help="""Number of TPU cores to use (1 or 8)."""						)

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

							return parser.parse_args()

def lowercase_  (       ):
							SCREAMING_SNAKE_CASE__						:	Optional[Any]									=       parse_args()

							# Import training_script as a module.
							SCREAMING_SNAKE_CASE__						:	Optional[int]									=       Path(args.training_script						)
							sys.path.append(str(script_fpath.parent.resolve()						)						)
							SCREAMING_SNAKE_CASE__						:	Optional[int]									=       script_fpath.stem
							SCREAMING_SNAKE_CASE__						:	str									=       importlib.import_module(_snake_case						)

							# Patch sys.argv
							SCREAMING_SNAKE_CASE__						:	Tuple									=       [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"""




import re

def lowercase_  (       _snake_case						):
							def docstring_decorator(_snake_case						):
														SCREAMING_SNAKE_CASE__						:	Any									=       fn.__doc__
														SCREAMING_SNAKE_CASE__						:	Dict									=       func_doc.split("""\n"""						)
														SCREAMING_SNAKE_CASE__						:	Any									=       0
														while i < len(_snake_case						) and re.search(R"""^\s*Examples?:\s*$"""       ,lines[i]						) is None:
																					i += 1
														if i < len(_snake_case						):
																					SCREAMING_SNAKE_CASE__						:	List[str]									=       example_docstring
																					SCREAMING_SNAKE_CASE__						:	List[Any]									=       """\n""".join(_snake_case						)
														else:
																					raise ValueError(
																					    f'''The function {fn} should have an empty \'Examples:\' in its docstring as placeholder, '''
																					    f'''current docstring is:\n{func_doc}'''						)
														SCREAMING_SNAKE_CASE__						:	int									=       func_doc
														return fn

							return docstring_decorator




