
"""simple docstring"""


import os
import tempfile
import unittest
from pathlib import Path

from transformers import AutoConfig, is_torch_available
from transformers.testing_utils import require_torch, torch_device


if is_torch_available():
		from transformers import PyTorchBenchmark, PyTorchBenchmarkArguments







@require_torch
class  lowerCAmelCase_ (					unittest.TestCase			):



						'''simple docstring'''


						def   _SCREAMING_SNAKE_CASE					(       self   :					int     ,A_   :					List[Any]					)   ->      Optional[Any]:
							for model_result in results.values():
								for batch_size, sequence_length in zip(model_result['bs']     ,model_result['ss']					):
									A        =      model_result['result'][batch_size][sequence_length]
									self.assertIsNotNone(A_					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					int					)   ->      Optional[Any]:
							A        =      'sshleifer/tiny-gpt2'
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result					)
							self.check_results_dict_not_empty(results.memory_inference_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Optional[Any]					)   ->      Optional[int]:
							A        =      'sgugger/tiny-distilbert-classification'
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,only_pretrain_model=A_     ,)
							A        =      PyTorchBenchmark(A_					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result					)
							self.check_results_dict_not_empty(results.memory_inference_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Union[str, Any]					)   ->      List[str]:
							A        =      'sshleifer/tiny-gpt2'
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,torchscript=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result					)
							self.check_results_dict_not_empty(results.memory_inference_result					)


						@unittest.skipIf(torch_device == 'cpu'     ,'Cant do half precision'					)
						def   _SCREAMING_SNAKE_CASE					(       self   :					List[Any]					)   ->      List[Any]:
							A        =      'sshleifer/tiny-gpt2'
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,fpaa=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result					)
							self.check_results_dict_not_empty(results.memory_inference_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Optional[Any]					)   ->      Optional[Any]:
							A        =      'sshleifer/tiny-gpt2'
							A        =      AutoConfig.from_pretrained(A_					)
							# set architectures equal to `None`
							A        =      None
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_     ,configs=[config]					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result					)
							self.check_results_dict_not_empty(results.memory_inference_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Tuple					)   ->      Optional[int]:
							A        =      'sshleifer/tiny-gpt2'
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_train_result					)
							self.check_results_dict_not_empty(results.memory_train_result					)


						@unittest.skipIf(torch_device == 'cpu'     ,'Can\'t do half precision'					)
						def   _SCREAMING_SNAKE_CASE					(       self   :					Union[str, Any]					)   ->      List[Any]:
							A        =      'sshleifer/tiny-gpt2'
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,fpaa=A_     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_train_result					)
							self.check_results_dict_not_empty(results.memory_train_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					List[str]					)   ->      Optional[int]:
							A        =      'sshleifer/tiny-gpt2'
							A        =      AutoConfig.from_pretrained(A_					)
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_     ,configs=[config]					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result					)
							self.check_results_dict_not_empty(results.memory_inference_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Any					)   ->      List[Any]:
							A        =      'sshleifer/tinier_bart'
							A        =      AutoConfig.from_pretrained(A_					)
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_     ,configs=[config]					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result					)
							self.check_results_dict_not_empty(results.memory_inference_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Any					)   ->      List[str]:
							A        =      'sshleifer/tiny-gpt2'
							A        =      AutoConfig.from_pretrained(A_					)
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_     ,configs=[config]					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_train_result					)
							self.check_results_dict_not_empty(results.memory_train_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Any					)   ->      List[str]:
							A        =      'sshleifer/tinier_bart'
							A        =      AutoConfig.from_pretrained(A_					)
							A        =      PyTorchBenchmarkArguments(
							    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,multi_process=A_     ,)
							A        =      PyTorchBenchmark(A_     ,configs=[config]					)
							A        =      benchmark.run()
							self.check_results_dict_not_empty(results.time_train_result					)
							self.check_results_dict_not_empty(results.memory_train_result					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Dict					)   ->      Dict:
							A        =      'sshleifer/tiny-gpt2'
							with tempfile.TemporaryDirectory() as tmp_dir:
								A        =      PyTorchBenchmarkArguments(
								    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,save_to_csv=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,inference_time_csv_file=os.path.join(A_     ,'inf_time.csv'					)     ,train_memory_csv_file=os.path.join(A_     ,'train_mem.csv'					)     ,inference_memory_csv_file=os.path.join(A_     ,'inf_mem.csv'					)     ,train_time_csv_file=os.path.join(A_     ,'train_time.csv'					)     ,env_info_csv_file=os.path.join(A_     ,'env.csv'					)     ,multi_process=A_     ,)
								A        =      PyTorchBenchmark(A_					)
								benchmark.run()
								self.assertTrue(Path(os.path.join(A_     ,'inf_time.csv'					)					).exists()					)
								self.assertTrue(Path(os.path.join(A_     ,'train_time.csv'					)					).exists()					)
								self.assertTrue(Path(os.path.join(A_     ,'inf_mem.csv'					)					).exists()					)
								self.assertTrue(Path(os.path.join(A_     ,'train_mem.csv'					)					).exists()					)
								self.assertTrue(Path(os.path.join(A_     ,'env.csv'					)					).exists()					)




						def   _SCREAMING_SNAKE_CASE					(       self   :					Dict					)   ->      List[str]:
							A        =      'sshleifer/tiny-gpt2'

							def _check_summary_is_not_empty(A_   :					Optional[int]					):
								self.assertTrue(hasattr(A_     ,'sequential'					)					)
								self.assertTrue(hasattr(A_     ,'cumulative'					)					)
								self.assertTrue(hasattr(A_     ,'current'					)					)
								self.assertTrue(hasattr(A_     ,'total'					)					)

							with tempfile.TemporaryDirectory() as tmp_dir:
								A        =      PyTorchBenchmarkArguments(
								    models=[MODEL_ID]     ,training=A_     ,inference=A_     ,sequence_lengths=[8]     ,batch_sizes=[1]     ,log_filename=os.path.join(A_     ,'log.txt'					)     ,log_print=A_     ,trace_memory_line_by_line=A_     ,multi_process=A_     ,)
								A        =      PyTorchBenchmark(A_					)
								A        =      benchmark.run()
								_check_summary_is_not_empty(result.inference_summary					)
								_check_summary_is_not_empty(result.train_summary					)
								self.assertTrue(Path(os.path.join(A_     ,'log.txt'					)					).exists()					)

def 				a						(							snake_case__:					list					):


				'''simple docstring'''

				if len(snake_case__					) <= 1:
								return [tuple(snake_case__					)]

				lowercase_       =					[]

				def generate(snake_case__:					int						,   snake_case__:					list					):
								if k == 1:
												res.append(tuple(arr[:]					)					)
												return

								generate(k - 1						,   snake_case__					)

								for i in range(k - 1					):
												if k % 2 == 0:  # k is even
																lowercase_  ,	lowercase_       =					arr[k - 1], arr[i]
												else:  # k is odd
																lowercase_  ,	lowercase_       =					arr[k - 1], arr[0]
												generate(k - 1						,   snake_case__					)

				generate(len(snake_case__					)						,   snake_case__					)
				return res


if __name__ == "__main__":
						__a  			=					input('Enter numbers separated by a comma:\n').strip()
						__a  			=					[int(item) for item in user_input.split(',')]
						print(heaps(arr))




