'''simple docstring'''




import unittest

from .lib import (
    Matrix,
    Vector,
    axpy,
    square_zero_matrix,
    unit_basis_vector,
    zero_vector,
)






class 							a__(   unittest.TestCase      ):


			'''simple docstring'''






			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 2, 3])
					self.assertEqual(x.component(0)			,       1)
					self.assertEqual(x.component(2)			,       3)
					lowerCAmelCase     =    Vector()



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([0, 0, 0, 0, 0, 1])
					self.assertEqual(str(__lowerCAmelCase)			,       """(0,0,0,0,0,1)""")



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 2, 3, 4])
					self.assertEqual(len(__lowerCAmelCase)			,       4)



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 2])
					lowerCAmelCase     =    Vector([1, 2, 3, 4, 5])
					lowerCAmelCase     =    Vector([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
					lowerCAmelCase     =    Vector([1, -1, 1, -1, 2, -3, 4, -5])
					self.assertAlmostEqual(x.euclidean_length()			,       2.236			,       3)
					self.assertAlmostEqual(y.euclidean_length()			,       7.416			,       3)
					self.assertEqual(z.euclidean_length()			,       0)
					self.assertAlmostEqual(w.euclidean_length()			,       7.616			,       3)



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 2, 3])
					lowerCAmelCase     =    Vector([1, 1, 1])
					self.assertEqual((x + y).component(0)			,       2)
					self.assertEqual((x + y).component(1)			,       3)
					self.assertEqual((x + y).component(2)			,       4)



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 2, 3])
					lowerCAmelCase     =    Vector([1, 1, 1])
					self.assertEqual((x - y).component(0)			,       0)
					self.assertEqual((x - y).component(1)			,       1)
					self.assertEqual((x - y).component(2)			,       2)



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 2, 3])
					lowerCAmelCase     =    Vector([2, -1, 4])  # for test of dot product
					lowerCAmelCase     =    Vector([1, -2, -1])
					self.assertEqual(str(x * 3.0)			,       """(3.0,6.0,9.0)""")
					self.assertEqual((a * b)			,       0)



			def 				a_			(  self):




					"""simple docstring"""


					self.assertEqual(str(zero_vector(10)).count("""0""")			,       10)



			def 				a_			(  self):




					"""simple docstring"""


					self.assertEqual(str(unit_basis_vector(3			,       1))			,       """(0,1,0)""")



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 2, 3])
					lowerCAmelCase     =    Vector([1, 0, 1])
					self.assertEqual(str(axpy(2			,       __lowerCAmelCase			,       __lowerCAmelCase))			,       """(3,4,7)""")



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 0, 0, 0, 0, 0])
					lowerCAmelCase     =    x.copy()
					self.assertEqual(str(__lowerCAmelCase)			,       str(__lowerCAmelCase))



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Vector([1, 0, 0])
					x.change_component(0			,       0)
					x.change_component(1			,       1)
					self.assertEqual(str(__lowerCAmelCase)			,       """(0,1,0)""")



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]]			,       3			,       3)
					self.assertEqual("""|1,2,3|\n|2,4,5|\n|6,7,8|\n"""			,       str(__lowerCAmelCase))



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]]			,       3			,       3)
					lowerCAmelCase     =    [[-3, -14, -10], [-5, -10, -5], [-2, -1, 0]]
					for x in range(a.height()):
							for y in range(a.width()):
									self.assertEqual(minors[x][y]			,       a.minor(__lowerCAmelCase			,       __lowerCAmelCase))



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]]			,       3			,       3)
					lowerCAmelCase     =    [[-3, 14, -10], [5, -10, 5], [-2, 1, 0]]
					for x in range(a.height()):
							for y in range(a.width()):
									self.assertEqual(cofactors[x][y]			,       a.cofactor(__lowerCAmelCase			,       __lowerCAmelCase))



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]]			,       3			,       3)
					self.assertEqual(-5			,       a.determinant())



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]			,       3			,       3)
					lowerCAmelCase     =    Vector([1, 2, 3])
					self.assertEqual("""(14,32,50)"""			,       str(a * x))
					self.assertEqual("""|2,4,6|\n|8,10,12|\n|14,16,18|\n"""			,       str(a * 2))



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]]			,       3			,       3)
					a.change_component(0			,       2			,       5)
					self.assertEqual("""|1,2,5|\n|2,4,5|\n|6,7,8|\n"""			,       str(__lowerCAmelCase))



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]]			,       3			,       3)
					self.assertEqual(7			,       a.component(2			,       1)			,       0.01)



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]]			,       3			,       3)
					lowerCAmelCase     =    Matrix([[1, 2, 7], [2, 4, 5], [6, 7, 10]]			,       3			,       3)
					self.assertEqual("""|2,4,10|\n|4,8,10|\n|12,14,18|\n"""			,       str(a + b))



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]]			,       3			,       3)
					lowerCAmelCase     =    Matrix([[1, 2, 7], [2, 4, 5], [6, 7, 10]]			,       3			,       3)
					self.assertEqual("""|0,0,-4|\n|0,0,0|\n|0,0,-2|\n"""			,       str(a - b))







			def 				a_			(  self):




					"""simple docstring"""


					self.assertEqual(
					    """|0,0,0,0,0|\n|0,0,0,0,0|\n|0,0,0,0,0|\n|0,0,0,0,0|\n|0,0,0,0,0|\n"""			,       str(square_zero_matrix(5))			,       )


if __name__ == "__main__":
						unittest.main()





'''simple docstring'''




import math
import time

from transformers import Trainer, is_torch_tpu_available
from transformers.trainer_utils import PredictionOutput, speed_metrics


if is_torch_tpu_available(check_device=False):
						import torch_xla.core.xla_model as xm
						import torch_xla.debug.metrics as met






class 							a__(   lowerCAmelCase__      ):


			'''simple docstring'''






			def __init__(  self			,       *__lowerCAmelCase			,       __lowerCAmelCase=None			,       __lowerCAmelCase=None			,       **__lowerCAmelCase):




					"""simple docstring"""


					super().__init__(*__lowerCAmelCase			,       **__lowerCAmelCase)
					lowerCAmelCase     =    eval_examples
					lowerCAmelCase     =    post_process_function



			def 				a_			(  self			,       __lowerCAmelCase=None			,       __lowerCAmelCase=None			,       __lowerCAmelCase=None			,       __lowerCAmelCase = "eval"):




					"""simple docstring"""


					lowerCAmelCase     =    self.eval_dataset if eval_dataset is None else eval_dataset
					lowerCAmelCase     =    self.get_eval_dataloader(__lowerCAmelCase)
					lowerCAmelCase     =    self.eval_examples if eval_examples is None else eval_examples

					# Temporarily disable metric computation, we will do it in the loop here.
					lowerCAmelCase     =    self.compute_metrics
					lowerCAmelCase     =    None
					lowerCAmelCase     =    self.prediction_loop if self.args.use_legacy_prediction_loop else self.evaluation_loop
					lowerCAmelCase     =    time.time()
					try:
							lowerCAmelCase     =    eval_loop(
							    __lowerCAmelCase			,       description="""Evaluation"""			,       prediction_loss_only=True if compute_metrics is None else None			,       ignore_keys=__lowerCAmelCase			,       metric_key_prefix=__lowerCAmelCase			,       )
					finally:
							lowerCAmelCase     =    compute_metrics
					lowerCAmelCase     =    self.args.eval_batch_size * self.args.world_size
					if f"{metric_key_prefix}_jit_compilation_time" in output.metrics:
							start_time += output.metrics[f"{metric_key_prefix}_jit_compilation_time"]
					output.metrics.update(
					    speed_metrics(
					        __lowerCAmelCase			,       __lowerCAmelCase			,       num_samples=output.num_samples			,       num_steps=math.ceil(output.num_samples / total_batch_size)			,       ))
					if self.post_process_function is not None and self.compute_metrics is not None and self.args.should_save:
							# Only the main node write the results by default
							lowerCAmelCase     =    self.post_process_function(__lowerCAmelCase			,       __lowerCAmelCase			,       output.predictions)
							lowerCAmelCase     =    self.compute_metrics(__lowerCAmelCase)

							# Prefix all keys with metric_key_prefix + '_'
							for key in list(metrics.keys()):
									if not key.startswith(f"{metric_key_prefix}_"):
											lowerCAmelCase     =    metrics.pop(__lowerCAmelCase)
							metrics.update(output.metrics)
					else:
							lowerCAmelCase     =    output.metrics

					if self.args.should_log:
							# Only the main node log the results by default
							self.log(__lowerCAmelCase)

					if self.args.tpu_metrics_debug or self.args.debug:
							# tpu-comment: Logging debug metrics for PyTorch/XLA (compile, execute times, ops, etc.)
							xm.master_print(met.metrics_report())

					lowerCAmelCase     =    self.callback_handler.on_evaluate(self.args			,       self.state			,       self.control			,       __lowerCAmelCase)
					return metrics







			def 				a_			(  self			,       __lowerCAmelCase			,       __lowerCAmelCase			,       __lowerCAmelCase=None			,       __lowerCAmelCase = "test"):




					"""simple docstring"""


					lowerCAmelCase     =    self.get_test_dataloader(__lowerCAmelCase)

					# Temporarily disable metric computation, we will do it in the loop here.
					lowerCAmelCase     =    self.compute_metrics
					lowerCAmelCase     =    None
					lowerCAmelCase     =    self.prediction_loop if self.args.use_legacy_prediction_loop else self.evaluation_loop
					lowerCAmelCase     =    time.time()
					try:
							lowerCAmelCase     =    eval_loop(
							    __lowerCAmelCase			,       description="""Prediction"""			,       prediction_loss_only=True if compute_metrics is None else None			,       ignore_keys=__lowerCAmelCase			,       metric_key_prefix=__lowerCAmelCase			,       )
					finally:
							lowerCAmelCase     =    compute_metrics
					lowerCAmelCase     =    self.args.eval_batch_size * self.args.world_size
					if f"{metric_key_prefix}_jit_compilation_time" in output.metrics:
							start_time += output.metrics[f"{metric_key_prefix}_jit_compilation_time"]
					output.metrics.update(
					    speed_metrics(
					        __lowerCAmelCase			,       __lowerCAmelCase			,       num_samples=output.num_samples			,       num_steps=math.ceil(output.num_samples / total_batch_size)			,       ))

					if self.post_process_function is None or self.compute_metrics is None:
							return output

					lowerCAmelCase     =    self.post_process_function(__lowerCAmelCase			,       __lowerCAmelCase			,       output.predictions			,       """predict""")
					lowerCAmelCase     =    self.compute_metrics(__lowerCAmelCase)

					# Prefix all keys with metric_key_prefix + '_'
					for key in list(metrics.keys()):
							if not key.startswith(f"{metric_key_prefix}_"):
									lowerCAmelCase     =    metrics.pop(__lowerCAmelCase)
					metrics.update(output.metrics)
					return PredictionOutput(predictions=predictions.predictions			,       label_ids=predictions.label_ids			,       metrics=__lowerCAmelCase)




