'''simple docstring'''





def      SCREAMING_SNAKE_CASE_  (		snake_case__ = 1_0_0_0							)  ->			int:
							lowerCAmelCase				=	0
							lowerCAmelCase				=	0
							while 1:
														num += 3
														if num >= n:
																					break
														total += num
														num += 2
														if num >= n:
																					break
														total += num
														num += 1
														if num >= n:
																					break
														total += num
														num += 3
														if num >= n:
																					break
														total += num
														num += 1
														if num >= n:
																					break
														total += num
														num += 2
														if num >= n:
																					break
														total += num
														num += 3
														if num >= n:
																					break
														total += num
							return total


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




import torch

from accelerate import Accelerator, DistributedType




class      lowercase_						:



	"""simple docstring"""





	def __enter__(							self       )		->Dict:
								if self.enabled:
															lowerCAmelCase				=	self.model.no_sync()
															self.model_sync_obj.__enter__()

								return self


	def __exit__(							self	,    __SCREAMING_SNAKE_CASE	,    __SCREAMING_SNAKE_CASE	,    __SCREAMING_SNAKE_CASE       )		->Any:
								if self.enabled:
															# Average all models on exit
															self._sync_and_avg_model_params()
															self.model_sync_obj.__exit__(__SCREAMING_SNAKE_CASE	,    __SCREAMING_SNAKE_CASE	,    __SCREAMING_SNAKE_CASE       )


	def __init__(							self	,    __SCREAMING_SNAKE_CASE	,    __SCREAMING_SNAKE_CASE	,    __SCREAMING_SNAKE_CASE	,    __SCREAMING_SNAKE_CASE = True       )		->Tuple:
								if accelerator.distributed_type not in [
								    DistributedType.NO,
								    DistributedType.MULTI_CPU,
								    DistributedType.MULTI_GPU,
								]:
															raise NotImplementedError('''LocalSGD is supported only for CPUs and GPUs (no DeepSpeed or MegatronLM)'''       )
								lowerCAmelCase				=	enabled and accelerator.distributed_type != DistributedType.NO
								lowerCAmelCase				=	0
								if self.enabled:
															lowerCAmelCase				=	accelerator
															lowerCAmelCase				=	model
															lowerCAmelCase				=	local_sgd_steps


	def     SCREAMING_SNAKE_CASE_       (							self       )		->List[Any]:
								self.num_steps += 1
								if not self.enabled:
															return

								if self.num_steps % self.local_sgd_steps == 0:
															self._sync_and_avg_model_params()




	def     SCREAMING_SNAKE_CASE_       (							self       )		->Optional[int]:
								self.accelerator.wait_for_everyone()
								with self.accelerator.autocast():
															for param in self.model.parameters():
																						lowerCAmelCase				=	self.accelerator.reduce(param.data	,    reduction='''mean'''       )



