

"""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  :					Optional[int]												=	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				(     _A		):


			def __init__(self				:	Dict  ,  __SCREAMING_SNAKE_CASE				:	int = 1_0_1):
								A    =      length


			def __len__(self				:	Dict):
								return self.length


			def __getitem__(self				:	Any  ,  __SCREAMING_SNAKE_CASE				:	List[str]):
								return i





	class     __UpperCamelCase				:


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





	class     __UpperCamelCase				(     nn.Module		):


			def __init__(self				:	Union[str, Any]):
								super().__init__()
								# Add some (unused) params otherwise DDP will complain.
								A    =      nn.Linear(1_2_0  ,  8_0)


			def       SCREAMING_SNAKE_CASE__     (self				:	List[str]  ,  __SCREAMING_SNAKE_CASE				:	List[Any]  ,  __SCREAMING_SNAKE_CASE				:	Tuple=None):
								if labels is not None:
													return torch.tensor(0.0  ,  device=input_ids.device), input_ids
								else:
													return input_ids
def      __SCREAMING_SNAKE_CASE		(		):
					"""simple docstring"""
					A    =      HfArgumentParser((TrainingArguments,)   )
					sys.argv += ["--output_dir", "./examples"]
					A    =      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 [1_001, 256, 15]:
										A    =      DummyDataset(lowercase__   )

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

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

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

										A    =      2

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

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

										A    =      None

					logger.info("🔥 All distributed tests successful"   )
def      __SCREAMING_SNAKE_CASE		(		lowercase__   ):
					"""simple docstring"""
					# For xla_spawn (TPUs)
					main()


if __name__ == "__main__":
	main()








"""simple docstring"""




def      __SCREAMING_SNAKE_CASE		(		lowercase__    ,							lowercase__   ):
					"""simple docstring"""
					A    =      1
					while b > 0:
										if b & 1:
															res *= a

										a *= a
										b >>= 1

					return res
def      __SCREAMING_SNAKE_CASE		(		lowercase__    ,							lowercase__    ,							lowercase__   ):
					"""simple docstring"""
					A    =      1
					while b > 0:
										if b & 1:
															A    =      ((res % c) * (a % c)) % c

										a *= a
										b >>= 1

					return res





