




"""simple docstring"""




import ast
import os
import re
import shutil
import tempfile
import unittest
from unittest import mock

import torch

from accelerate.test_utils.examples import compare_against_test
from accelerate.test_utils.testing import TempDirTestCase, require_trackers, run_command, slow
from accelerate.utils import write_basic_config


# DataLoaders built from `test_samples/MRPC` for quick testing
# Should mock `{script_name}.get_dataloaders` via:
# @mock.patch("{script_name}.get_dataloaders", mocked_dataloaders)

lowerCAmelCase				:     List[Any]					=				[
    """cross_validation.py""",
    """gradient_accumulation.py""",
    """local_sgd.py""",
    """multi_process_metrics.py""",
    """memory.py""",
    """automatic_gradient_accumulation.py""",
    """fsdp_with_peak_mem_tracking.py""",
    """deepspeed_with_config_support.py""",
    """megatron_lm_gpt_pretraining.py""",
]






class        __magic_name__				(			unittest.TestCase							):






				'''simple docstring'''





				def   _lowerCAmelCase							(			self						,					_a						,					_a						,					_a = None						,					_a = None					):





							"""simple docstring"""
							lowerCamelCase      =   None
							lowerCamelCase      =   os.path.abspath(os.path.join("""examples"""						,					"""by_feature"""					)					)
							lowerCamelCase      =   os.path.abspath("""examples"""					)
							for item in os.listdir(_a					):
										if item not in EXCLUDE_EXAMPLES:
													lowerCamelCase      =   os.path.join(_a						,					_a					)
													if os.path.isfile(_a					) and ".py" in item_path:
																with self.subTest(
																    tested_script=_a						,					feature_script=_a						,					tested_section="""main()""" if parser_only else """training_function()"""						,					):
																			lowerCamelCase      =   compare_against_test(
																			    os.path.join(_a						,					_a					)						,					_a						,					_a						,					_a					)
																			lowerCamelCase      =   """\n""".join(_a					)
																			if special_strings is not None:
																						for string in special_strings:
																									lowerCamelCase      =   diff.replace(_a						,					""""""					)
																			self.assertEqual(_a						,					""""""					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							self.one_complete_example("""complete_nlp_example.py"""						,					_a					)
							self.one_complete_example("""complete_nlp_example.py"""						,					_a					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   os.path.abspath(os.path.join("""examples"""						,					"""cv_example.py"""					)					)
							lowerCamelCase      =   [
							    """ """ * 16 + """{\n\n""",
							    """ """ * 20 + """\"accuracy\": eval_metric[\"accuracy\"],\n\n""",
							    """ """ * 20 + """\"f1\": eval_metric[\"f1\"],\n\n""",
							    """ """ * 20 + """\"train_loss\": total_loss.item() / len(train_dataloader),\n\n""",
							    """ """ * 20 + """\"epoch\": epoch,\n\n""",
							    """ """ * 16 + """},\n\n""",
							    """ """ * 16 + """step=epoch,\n""",
							    """ """ * 12,
							    """ """ * 8 + """for step, batch in enumerate(active_dataloader):\n""",
							]
							self.one_complete_example("""complete_cv_example.py"""						,					_a						,					_a						,					_a					)
							self.one_complete_example("""complete_cv_example.py"""						,					_a						,					_a						,					_a					)






@mock.patch.dict(os.environ		,   {"TESTING_MOCKED_DATALOADERS": "1"}							)
class        __magic_name__				(			UpperCAmelCase__							):






				'''simple docstring'''
				__UpperCamelCase         =		False





				@classmethod
				def   _lowerCAmelCase							(			cls					):





							"""simple docstring"""
							super().setUpClass()
							lowerCamelCase      =   tempfile.mkdtemp()
							lowerCamelCase      =   os.path.join(cls._tmpdir						,					"""default_config.yml"""					)

							write_basic_config(save_location=cls.configPath					)
							lowerCamelCase      =   ["""accelerate""", """launch""", """--config_file""", cls.configPath]





				@classmethod
				def   _lowerCAmelCase							(			cls					):





							"""simple docstring"""
							super().tearDownClass()
							shutil.rmtree(cls._tmpdir					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   f'\n        examples/by_feature/checkpointing.py\n        --checkpointing_steps epoch\n        --output_dir {self.tmpdir}\n        '.split()
							run_command(self._launch_args + testargs					)
							self.assertTrue(os.path.exists(os.path.join(self.tmpdir						,					"""epoch_0"""					)					)					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   f'\n        examples/by_feature/checkpointing.py\n        --checkpointing_steps 1\n        --output_dir {self.tmpdir}\n        '.split()
							lowerCamelCase      =   run_command(self._launch_args + testargs					)
							self.assertTrue(os.path.exists(os.path.join(self.tmpdir						,					"""step_2"""					)					)					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   f'\n        examples/by_feature/checkpointing.py\n        --resume_from_checkpoint {os.path.join(self.tmpdir						,					"epoch_0"					)}\n        '.split()
							lowerCamelCase      =   run_command(self._launch_args + testargs						,					return_stdout=_a					)
							self.assertNotIn("""epoch 0:"""						,					_a					)
							self.assertIn("""epoch 1:"""						,					_a					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   f'\n        examples/by_feature/checkpointing.py\n        --resume_from_checkpoint {os.path.join(self.tmpdir						,					"step_2"					)}\n        '.split()
							lowerCamelCase      =   run_command(self._launch_args + testargs						,					return_stdout=_a					)
							if torch.cuda.is_available():
										lowerCamelCase      =   torch.cuda.device_count()
							else:
										lowerCamelCase      =   1
							if num_processes > 1:
										self.assertNotIn("""epoch 0:"""						,					_a					)
										self.assertIn("""epoch 1:"""						,					_a					)
							else:
										self.assertIn("""epoch 0:"""						,					_a					)
										self.assertIn("""epoch 1:"""						,					_a					)





				@slow
				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   """
        examples/by_feature/cross_validation.py
        --num_folds 2
        """.split()
							with mock.patch.dict(os.environ						,					{"""TESTING_MOCKED_DATALOADERS""": """0"""}					):
										lowerCamelCase      =   run_command(self._launch_args + testargs						,					return_stdout=_a					)
										lowerCamelCase      =   re.findall("""({.+})"""						,					_a					)
										lowerCamelCase      =   [r for r in results if """accuracy""" in r][-1]
										lowerCamelCase      =   ast.literal_eval(_a					)
										self.assertGreaterEqual(results["""accuracy"""]						,					0.75					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   ["""examples/by_feature/multi_process_metrics.py"""]
							run_command(self._launch_args + testargs					)





				@require_trackers
				@mock.patch.dict(os.environ						,					{"""WANDB_MODE""": """offline"""}					)
				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							with tempfile.TemporaryDirectory() as tmpdir:
										lowerCamelCase      =   f'\n            examples/by_feature/tracking.py\n            --with_tracking\n            --project_dir {tmpdir}\n            '.split()
										run_command(self._launch_args + testargs					)
										self.assertTrue(os.path.exists(os.path.join(_a						,					"""tracking"""					)					)					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   ["""examples/by_feature/gradient_accumulation.py"""]
							run_command(self._launch_args + testargs					)





				def   _lowerCAmelCase							(			self					):





							"""simple docstring"""
							lowerCamelCase      =   ["""examples/by_feature/local_sgd.py"""]
							run_command(self._launch_args + testargs					)









"""simple docstring"""




import warnings

from .generation import TFGenerationMixin






class        __magic_name__				(			UpperCAmelCase__							):






				'''simple docstring'''
				# warning at import time
				warnings.warn(
				    "Importing `TFGenerationMixin` from `src/transformers/generation_tf_utils.py` is deprecated and will "
				    "be removed in Transformers v5. Import as `from transformers import TFGenerationMixin` instead."		,   UpperCAmelCase__		,   )



