


import unittest

from transformers import is_tf_available
from transformers.testing_utils import require_tf


if is_tf_available():
    import tensorflow as tf
    from tensorflow.python.eager import context
    from tensorflow.python.framework import ops

    from transformers import GradientAccumulator, create_optimizer







@require_tf
class      lowerCAmelCase__       (				unittest.TestCase):




     '''simple docstring'''


     def  _lowerCamelCase (						self ,						__lowerCamelCase ,						__lowerCamelCase ,						__lowerCamelCase)			->				Optional[Any]:
            self.assertEqual(len(__lowerCamelCase) ,						len(__lowerCamelCase))
            for a, b in zip(__lowerCamelCase ,						__lowerCamelCase):
                   self.assertAlmostEqual(__lowerCamelCase ,						__lowerCamelCase ,						delta=__lowerCamelCase)


     def  _lowerCamelCase (						self)			->				int:
            _A      :       Dict				    = GradientAccumulator()
            accumulator([tf.constant([1.0, 2.0])])
            accumulator([tf.constant([-2.0, 1.0])])
            accumulator([tf.constant([-1.0, 2.0])])
            with self.assertRaises(__lowerCamelCase):
                   accumulator([tf.constant([1.0, 1.0]), tf.constant([2.0, 2.0])])
            self.assertEqual(accumulator.step ,						3)
            self.assertEqual(len(accumulator.gradients) ,						1)
            self.assertListAlmostEqual(accumulator.gradients[0].numpy().tolist() ,						[-2.0, 5.0] ,						tol=1e-2)
            accumulator.reset()
            self.assertEqual(accumulator.step ,						0)
            self.assertListAlmostEqual(accumulator.gradients[0].numpy().tolist() ,						[0.0, 0.0] ,						tol=1e-2)


     def  _lowerCamelCase (						self)			->				List[Any]:
            _A      :       Optional[int]				    = None
            ops.enable_eager_execution_internal()
            _A      :       Dict				    = tf.config.list_physical_devices("CPU")
            if len(__lowerCamelCase) == 1:
                   tf.config.set_logical_device_configuration(
                       physical_devices[0] ,						[tf.config.LogicalDeviceConfiguration(), tf.config.LogicalDeviceConfiguration()])
            _A      :       int				    = tf.config.list_logical_devices(device_type="CPU")
            _A      :       Tuple				    = tf.distribute.MirroredStrategy(devices=devices[:2])

            with strategy.scope():
                   _A      :       Any				    = GradientAccumulator()
                   _A      :       Optional[Any]				    = tf.Variable([4.0, 3.0])
                   _A    ,			_A      :       Optional[int]				    = create_optimizer(5e-5 ,						1_0 ,						5)
                   _A      :       List[Any]				    = tf.Variable([0.0, 0.0] ,						trainable=__lowerCamelCase)

            def accumulate_on_replica(__lowerCamelCase):
                   accumulator([gradient])

            def apply_on_replica():
                   optimizer.apply_gradients(list(zip(accumulator.gradients ,						[variable])))

            @tf.function
            def accumulate(__lowerCamelCase ,						__lowerCamelCase):
                   with strategy.scope():
                          _A      :       Optional[int]				    = strategy.experimental_local_results(__lowerCamelCase)
                          local_variables[0].assign(__lowerCamelCase)
                          local_variables[1].assign(__lowerCamelCase)
                          strategy.run(__lowerCamelCase ,						args=(gradient_placeholder,))

            @tf.function
            def apply_grad():
                   with strategy.scope():
                          strategy.run(__lowerCamelCase)

            def _check_local_values(__lowerCamelCase ,						__lowerCamelCase):
                   _A      :       Optional[Any]				    = strategy.experimental_local_results(accumulator._gradients[0])
                   self.assertListAlmostEqual(values[0].value() ,						__lowerCamelCase ,						tol=1e-2)
                   self.assertListAlmostEqual(values[1].value() ,						__lowerCamelCase ,						tol=1e-2)

            accumulate([1.0, 2.0] ,						[-1.0, 1.0])
            accumulate([3.0, -1.0] ,						[-1.0, -1.0])
            accumulate([-2.0, 2.0] ,						[3.0, -2.0])
            self.assertEqual(accumulator.step ,						3)
            _check_local_values([2.0, 3.0] ,						[1.0, -2.0])
            apply_grad()
            self.assertListAlmostEqual(variable.value() ,						[4.0, 3.0] ,						tol=1e-2)
            accumulator.reset()
            self.assertEqual(accumulator.step ,						0)
            _check_local_values([0.0, 0.0] ,						[0.0, 0.0])




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  _lowerCamelCase (						self ,						__lowerCamelCase)			->				Dict:
            for model_result in results.values():
                   for batch_size, sequence_length in zip(model_result["bs"] ,						model_result["ss"]):
                          _A      :       Optional[int]				    = model_result["result"][batch_size][sequence_length]
                          self.assertIsNotNone(__lowerCamelCase)


     def  _lowerCamelCase (						self)			->				int:
            _A      :       Optional[int]				    = "sshleifer/tiny-gpt2"
            _A      :       int				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						)
            _A      :       List[str]				    = PyTorchBenchmark(__lowerCamelCase)
            _A      :       Optional[Any]				    = benchmark.run()
            self.check_results_dict_not_empty(results.time_inference_result)
            self.check_results_dict_not_empty(results.memory_inference_result)


     def  _lowerCamelCase (						self)			->				Dict:
            _A      :       int				    = "sgugger/tiny-distilbert-classification"
            _A      :       str				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						only_pretrain_model=__lowerCamelCase ,						)
            _A      :       Dict				    = PyTorchBenchmark(__lowerCamelCase)
            _A      :       Union[str, Any]				    = benchmark.run()
            self.check_results_dict_not_empty(results.time_inference_result)
            self.check_results_dict_not_empty(results.memory_inference_result)


     def  _lowerCamelCase (						self)			->				Optional[Any]:
            _A      :       Tuple				    = "sshleifer/tiny-gpt2"
            _A      :       Optional[Any]				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						torchscript=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						)
            _A      :       Union[str, Any]				    = PyTorchBenchmark(__lowerCamelCase)
            _A      :       List[str]				    = 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  _lowerCamelCase (						self)			->				int:
            _A      :       Any				    = "sshleifer/tiny-gpt2"
            _A      :       Tuple				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						fpaa=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						)
            _A      :       Any				    = PyTorchBenchmark(__lowerCamelCase)
            _A      :       Union[str, Any]				    = benchmark.run()
            self.check_results_dict_not_empty(results.time_inference_result)
            self.check_results_dict_not_empty(results.memory_inference_result)


     def  _lowerCamelCase (						self)			->				Any:
            _A      :       Union[str, Any]				    = "sshleifer/tiny-gpt2"
            _A      :       Any				    = AutoConfig.from_pretrained(__lowerCamelCase)
            # set architectures equal to `None`
            _A      :       Dict				    = None
            _A      :       Any				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						)
            _A      :       Union[str, Any]				    = PyTorchBenchmark(__lowerCamelCase ,						configs=[config])
            _A      :       int				    = benchmark.run()
            self.check_results_dict_not_empty(results.time_inference_result)
            self.check_results_dict_not_empty(results.memory_inference_result)


     def  _lowerCamelCase (						self)			->				int:
            _A      :       List[Any]				    = "sshleifer/tiny-gpt2"
            _A      :       int				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						)
            _A      :       Optional[Any]				    = PyTorchBenchmark(__lowerCamelCase)
            _A      :       int				    = 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  _lowerCamelCase (						self)			->				Optional[Any]:
            _A      :       Any				    = "sshleifer/tiny-gpt2"
            _A      :       Tuple				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						fpaa=__lowerCamelCase ,						multi_process=__lowerCamelCase ,						)
            _A      :       List[Any]				    = PyTorchBenchmark(__lowerCamelCase)
            _A      :       Tuple				    = benchmark.run()
            self.check_results_dict_not_empty(results.time_train_result)
            self.check_results_dict_not_empty(results.memory_train_result)


     def  _lowerCamelCase (						self)			->				str:
            _A      :       List[str]				    = "sshleifer/tiny-gpt2"
            _A      :       Union[str, Any]				    = AutoConfig.from_pretrained(__lowerCamelCase)
            _A      :       Any				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						)
            _A      :       Optional[Any]				    = PyTorchBenchmark(__lowerCamelCase ,						configs=[config])
            _A      :       Tuple				    = benchmark.run()
            self.check_results_dict_not_empty(results.time_inference_result)
            self.check_results_dict_not_empty(results.memory_inference_result)


     def  _lowerCamelCase (						self)			->				int:
            _A      :       Tuple				    = "sshleifer/tinier_bart"
            _A      :       Optional[Any]				    = AutoConfig.from_pretrained(__lowerCamelCase)
            _A      :       Optional[int]				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						)
            _A      :       Dict				    = PyTorchBenchmark(__lowerCamelCase ,						configs=[config])
            _A      :       Optional[int]				    = benchmark.run()
            self.check_results_dict_not_empty(results.time_inference_result)
            self.check_results_dict_not_empty(results.memory_inference_result)


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


     def  _lowerCamelCase (						self)			->				int:
            _A      :       int				    = "sshleifer/tinier_bart"
            _A      :       str				    = AutoConfig.from_pretrained(__lowerCamelCase)
            _A      :       Tuple				    = PyTorchBenchmarkArguments(
                models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						multi_process=__lowerCamelCase ,						)
            _A      :       Tuple				    = PyTorchBenchmark(__lowerCamelCase ,						configs=[config])
            _A      :       Union[str, Any]				    = benchmark.run()
            self.check_results_dict_not_empty(results.time_train_result)
            self.check_results_dict_not_empty(results.memory_train_result)


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


     def  _lowerCamelCase (						self)			->				int:
            _A      :       Dict				    = "sshleifer/tiny-gpt2"

            def _check_summary_is_not_empty(__lowerCamelCase):
                   self.assertTrue(hasattr(__lowerCamelCase ,						"sequential"))
                   self.assertTrue(hasattr(__lowerCamelCase ,						"cumulative"))
                   self.assertTrue(hasattr(__lowerCamelCase ,						"current"))
                   self.assertTrue(hasattr(__lowerCamelCase ,						"total"))

            with tempfile.TemporaryDirectory() as tmp_dir:
                   _A      :       Union[str, Any]				    = PyTorchBenchmarkArguments(
                       models=[MODEL_ID] ,						training=__lowerCamelCase ,						inference=__lowerCamelCase ,						sequence_lengths=[8] ,						batch_sizes=[1] ,						log_filename=os.path.join(__lowerCamelCase ,						"log.txt") ,						log_print=__lowerCamelCase ,						trace_memory_line_by_line=__lowerCamelCase ,						multi_process=__lowerCamelCase ,						)
                   _A      :       Optional[int]				    = PyTorchBenchmark(__lowerCamelCase)
                   _A      :       Dict				    = benchmark.run()
                   _check_summary_is_not_empty(result.inference_summary)
                   _check_summary_is_not_empty(result.train_summary)
                   self.assertTrue(Path(os.path.join(__lowerCamelCase ,						"log.txt")).exists())
