"""simple docstring"""


# This test is meant to be run in on an instance with TPUs like this:
#
#   python examples/pytorch/xla_spawn.py --num_cores=8 tests/test_trainer_tpu.py
#
# Replace 8 with the number of TPU cores you have.
#

import sys
from typing import Dict

from transformers import EvalPrediction, HfArgumentParser, TrainingArguments, is_torch_available
from transformers.utils import logging


a							=logging.get_logger(__name__)


if is_torch_available():
	import torch
	from torch import nn
	from torch.utils.data import Dataset

	from transformers import Trainer






	class    __UpperCAmelCase						(	__lowerCAmelCase	):

					def __init__(      self	, _lowerCamelCase = 101      ):
											lowerCamelCase__					=length

					def __len__(      self      ):
											return self.length






					def __getitem__(      self	, _lowerCamelCase      ):
											return i






	class    __UpperCAmelCase						:

					def __call__(      self	, _lowerCamelCase      ):
											return {"input_ids": torch.tensor(_lowerCamelCase      ), "labels": torch.tensor(_lowerCamelCase      )}






	class    __UpperCAmelCase						(	nn.Module	):

					def __init__(      self      ):
											super().__init__()
											# Add some (unused) params otherwise DDP will complain.
											lowerCamelCase__					=nn.Linear(120	, 80      )






					def 		_a	(      self	, _lowerCamelCase	, _lowerCamelCase=None      ):
											if labels is not None:
																	return torch.tensor(0.0	, device=input_ids.device      ), input_ids
											else:
																	return input_ids





def 			lowerCamelCase_ (					)							->					Union[str, Any]:




						'''simple docstring'''



						lowerCamelCase__					=HfArgumentParser((TrainingArguments,)				)
						sys.argv += ["--output_dir", "./examples"]
						lowerCamelCase__					=parser.parse_args_into_dataclasses()[0]

						logger.warning(
						    F'''Process rank: {training_args.local_rank}, device: {training_args.device}, '''
						    F'''tpu_num_cores: {training_args.tpu_num_cores}'''   ,    )

						# Essentially, what we want to verify in the distributed case is
						# that we get all samples back, in the right order.
						# (this is crucial for prediction for instance)
						for dataset_length in [1001, 256, 15]:
												lowerCamelCase__					=DummyDataset(__lowerCAmelCase				)

												def compute_metrics(__lowerCAmelCase				) -> Dict:
																		lowerCamelCase__					=list(range(len(__lowerCAmelCase				)				)				)
																		lowerCamelCase__					=p.predictions.tolist() == sequential and p.label_ids.tolist() == sequential
																		return {"success": success}

												lowerCamelCase__					=Trainer(
												    model=DummyModel()   ,    args=__lowerCAmelCase   ,    data_collator=DummyDataCollator()   ,    eval_dataset=__lowerCAmelCase   ,    compute_metrics=__lowerCAmelCase   ,    )
												lowerCamelCase__					=trainer.evaluate()
												logger.info(__lowerCAmelCase				)
												if metrics["eval_success"] is not True:
																		logger.error(__lowerCAmelCase				)
																		exit(1				)

												lowerCamelCase__					=trainer.predict(__lowerCAmelCase				)
												logger.info(p.metrics				)
												if p.metrics["test_success"] is not True:
																		logger.error(p.metrics				)
																		exit(1				)

												lowerCamelCase__					=2

												lowerCamelCase__					=trainer.evaluate()
												logger.info(__lowerCAmelCase				)
												if metrics["eval_success"] is not True:
																		logger.error(__lowerCAmelCase				)
																		exit(1				)

												lowerCamelCase__					=trainer.predict(__lowerCAmelCase				)
												logger.info(p.metrics				)
												if p.metrics["test_success"] is not True:
																		logger.error(p.metrics				)
																		exit(1				)

												lowerCamelCase__					=None

						logger.info("🔥 All distributed tests successful"				)





def 			lowerCamelCase_ (					__lowerCAmelCase				)							->					Tuple:




						'''simple docstring'''



						main()


if __name__ == "__main__":
	main()



"""simple docstring"""


from __future__ import annotations





def 			lowerCamelCase_ (					__lowerCAmelCase				)							->					int | float:




						'''simple docstring'''



						if len(__lowerCAmelCase				) == 0:
												raise ValueError("find_max() arg is an empty sequence"				)
						lowerCamelCase__					=nums[0]
						for x in nums:
												if x > max_num:
																		lowerCamelCase__					=x
						return max_num


if __name__ == "__main__":
	import doctest

	doctest.testmod(verbose=True)


