




"""simple docstring"""




import inspect
import os
import unittest

import torch

import accelerate
from accelerate import Accelerator
from accelerate.test_utils import execute_subprocess_async, require_multi_gpu
from accelerate.utils import patch_environment





class  snake_case     (							unittest.TestCase   ):

							def _lowercase					(self    ):

									"""simple docstring"""







									SCREAMING_SNAKE_CASE_						 = inspect.getfile(accelerate.test_utils    )
									SCREAMING_SNAKE_CASE_						 = os.path.sep.join(mod_file.split(os.path.sep    )[:-1] + ['''scripts''', '''test_script.py''']    )
									SCREAMING_SNAKE_CASE_						 = os.path.sep.join(
									    mod_file.split(os.path.sep    )[:-1] + ['''scripts''', '''test_distributed_data_loop.py''']    )
									SCREAMING_SNAKE_CASE_						 = os.path.sep.join(mod_file.split(os.path.sep    )[:-1] + ['''scripts''', '''test_ops.py''']    )

							@require_multi_gpu
							def _lowercase					(self    ):

									"""simple docstring"""







									print(f'Found {torch.cuda.device_count()} devices.'    )
									SCREAMING_SNAKE_CASE_						 = ['torchrun', f'--nproc_per_node={torch.cuda.device_count()}', self.test_file_path]
									with patch_environment(omp_num_threads=1    ):
											execute_subprocess_async(_A       ,       env=os.environ.copy()    )

							@require_multi_gpu
							def _lowercase					(self    ):

									"""simple docstring"""







									print(f'Found {torch.cuda.device_count()} devices.'    )
									SCREAMING_SNAKE_CASE_						 = ['torchrun', f'--nproc_per_node={torch.cuda.device_count()}', self.operation_file_path]
									print(f'Command: {cmd}'    )
									with patch_environment(omp_num_threads=1    ):
											execute_subprocess_async(_A       ,       env=os.environ.copy()    )

							@require_multi_gpu
							def _lowercase					(self    ):

									"""simple docstring"""







									SCREAMING_SNAKE_CASE_						 = ['torchrun', f'--nproc_per_node={torch.cuda.device_count()}', inspect.getfile(self.__class__    )]
									with patch_environment(omp_num_threads=1    ):
											execute_subprocess_async(_A       ,       env=os.environ.copy()    )







							@require_multi_gpu
							def _lowercase					(self    ):

									"""simple docstring"""







									print(f'Found {torch.cuda.device_count()} devices, using 2 devices only'    )
									SCREAMING_SNAKE_CASE_						 = ['torchrun', f'--nproc_per_node={torch.cuda.device_count()}', self.data_loop_file_path]
									with patch_environment(omp_num_threads=1       ,       cuda_visible_devices='''0,1'''    ):
											execute_subprocess_async(_A       ,       env=os.environ.copy()    )


if __name__ == "__main__":
						lowerCAmelCase__							=				Accelerator()
						lowerCAmelCase__							=				(accelerator.state.process_index + 2, 10)
						lowerCAmelCase__							=				torch.randint(0, 10, shape).to(accelerator.device)

						lowerCAmelCase__							=				''

						lowerCAmelCase__							=				accelerator.pad_across_processes(tensor)
						if tensora.shape[0] != accelerator.state.num_processes + 1:
												error_msg += f"Found shape {tensora.shape} but should have {accelerator.state.num_processes + 1} at dim 0."
						if not torch.equal(tensora[: accelerator.state.process_index + 2], tensor):
												error_msg += "Tensors have different values."
						if not torch.all(tensora[accelerator.state.process_index + 2 :] == 0):
												error_msg += "Padding was not done with the right value (0)."

						lowerCAmelCase__							=				accelerator.pad_across_processes(tensor, pad_first=True)
						if tensora.shape[0] != accelerator.state.num_processes + 1:
												error_msg += f"Found shape {tensora.shape} but should have {accelerator.state.num_processes + 1} at dim 0."
						lowerCAmelCase__							=				accelerator.state.num_processes - accelerator.state.process_index - 1
						if not torch.equal(tensora[index:], tensor):
												error_msg += "Tensors have different values."
						if not torch.all(tensora[:index] == 0):
												error_msg += "Padding was not done with the right value (0)."

						# Raise error at the end to make sure we don't stop at the first failure.
						if len(error_msg) > 0:
												raise ValueError(error_msg)

"""simple docstring"""




from __future__ import annotations

import typing
from collections import Counter



def        _lowerCamelCase ( __a    ):
		SCREAMING_SNAKE_CASE_						 = Counter()
		for base in range(1,							max_perimeter + 1    ):
				for perpendicular in range(__a,							max_perimeter + 1    ):
						SCREAMING_SNAKE_CASE_						 = (base * base + perpendicular * perpendicular) ** 0.5
						if hypotenuse == int(__a    ):
								SCREAMING_SNAKE_CASE_						 = int(base + perpendicular + hypotenuse    )
								if perimeter > max_perimeter:
										continue
								triplets[perimeter] += 1
		return triplets



def        _lowerCamelCase ( __a = 1_000    ):
		SCREAMING_SNAKE_CASE_						 = pythagorean_triple(__a    )
		return triplets.most_common(1    )[0][0]


if __name__ == "__main__":
						print(f'''Perimeter {solution()} has maximum solutions''')