
from __future__ import annotations






def 							UpperCAmelCase_		(							__SCREAMING_SNAKE_CASE							):
	if not nums:
		return 0
	lowercase       =    nums[0]
	lowercase       =    0
	for num in nums[1:]:
		lowercase  ,					lowercase       =    (
		    max_excluding + num,
		    max(__SCREAMING_SNAKE_CASE ,							__SCREAMING_SNAKE_CASE							),
		)
	return max(__SCREAMING_SNAKE_CASE ,							__SCREAMING_SNAKE_CASE							)


if __name__ == "__main__":
	import doctest

	doctest.testmod()



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

import torch_xla.distributed.xla_multiprocessing as xmp






def 							UpperCAmelCase_		(							):
	lowercase       =    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=__SCREAMING_SNAKE_CASE ,							default=1 ,							help='Number of TPU cores to use (1 or 8).'							)

	# positional
	parser.add_argument(
	    'training_script' ,							type=__SCREAMING_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=__SCREAMING_SNAKE_CASE							)

	return parser.parse_args()






def 							UpperCAmelCase_		(							):
	lowercase       =    parse_args()

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

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

