


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

import torch_xla.distributed.xla_multiprocessing as xmp






def 							__lowercase       (			):
							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       (			):
							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()








from math import ceil, sqrt






def 							__lowercase       (			__lowerCAmelCase							:    int = 1_0_0_0_0_0_0       ):
							a__					=					0

							for outer_width in range(3 ,   (limit // 4) + 2       ):
														if outer_width**2 > limit:
																					a__					=					max(ceil(sqrt(outer_width**2 - limit       )       ) ,   1       )
														else:
																					a__					=					1
														if (outer_width - hole_width_lower_bound) % 2:
																					hole_width_lower_bound += 1

														answer += (outer_width - hole_width_lower_bound - 2) // 2 + 1

							return answer


if __name__ == "__main__":
						print(f"""{solution() = }""")




