

'''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)

_UpperCamelCase						:  Dict							       =				[
    "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 				_snake_case					(   unittest.TestCase			):

  def   _SCREAMING_SNAKE_CASE				(				self      , _SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE = None      , _SCREAMING_SNAKE_CASE = 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(_SCREAMING_SNAKE_CASE	):
          if item not in EXCLUDE_EXAMPLES:
              lowerCAmelCase 						=							os.path.join(_SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE	)
              if os.path.isfile(_SCREAMING_SNAKE_CASE	) and ".py" in item_path:
                  with self.subTest(
                      tested_script=_SCREAMING_SNAKE_CASE      , feature_script=_SCREAMING_SNAKE_CASE      , tested_section='main()' if parser_only else 'training_function()'      , ):
                      lowerCAmelCase 						=							compare_against_test(
                          os.path.join(_SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE	)      , _SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE	)
                      lowerCAmelCase 						=							'\n'.join(_SCREAMING_SNAKE_CASE	)
                      if special_strings is not None:
                          for string in special_strings:
                              lowerCAmelCase 						=							diff.replace(_SCREAMING_SNAKE_CASE      , ''	)
                      self.assertEqual(_SCREAMING_SNAKE_CASE      , ''	)

  def   _SCREAMING_SNAKE_CASE				(				self	):





      '''simple docstring'''

      self.one_complete_example('complete_nlp_example.py'      , _SCREAMING_SNAKE_CASE	)
      self.one_complete_example('complete_nlp_example.py'      , _SCREAMING_SNAKE_CASE	)


  def   _SCREAMING_SNAKE_CASE				(				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'      , _SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE	)
      self.one_complete_example('complete_cv_example.py'      , _SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE      , _SCREAMING_SNAKE_CASE	)



@mock.patch.dict(os.environ     , {'''TESTING_MOCKED_DATALOADERS''': '''1'''}			)
class 				_snake_case					(   a_			):
  SCREAMING_SNAKE_CASE			:       List[str]				=     False

  @classmethod
  def   _SCREAMING_SNAKE_CASE				(				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   _SCREAMING_SNAKE_CASE				(				cls	):





      '''simple docstring'''

      super().tearDownClass()
      shutil.rmtree(cls._tmpdir	)

  def   _SCREAMING_SNAKE_CASE				(				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   _SCREAMING_SNAKE_CASE				(				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   _SCREAMING_SNAKE_CASE				(				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=_SCREAMING_SNAKE_CASE	)
      self.assertNotIn('epoch 0:'      , _SCREAMING_SNAKE_CASE	)
      self.assertIn('epoch 1:'      , _SCREAMING_SNAKE_CASE	)

  def   _SCREAMING_SNAKE_CASE				(				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=_SCREAMING_SNAKE_CASE	)
      if torch.cuda.is_available():
          lowerCAmelCase 						=							torch.cuda.device_count()
      else:
          lowerCAmelCase 						=							1
      if num_processes > 1:
          self.assertNotIn('epoch 0:'      , _SCREAMING_SNAKE_CASE	)
          self.assertIn('epoch 1:'      , _SCREAMING_SNAKE_CASE	)
      else:
          self.assertIn('epoch 0:'      , _SCREAMING_SNAKE_CASE	)
          self.assertIn('epoch 1:'      , _SCREAMING_SNAKE_CASE	)

  @slow
  def   _SCREAMING_SNAKE_CASE				(				self	):





      '''simple docstring'''

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

  def   _SCREAMING_SNAKE_CASE				(				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   _SCREAMING_SNAKE_CASE				(				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(_SCREAMING_SNAKE_CASE      , 'tracking'	)	)	)

  def   _SCREAMING_SNAKE_CASE				(				self	):





      '''simple docstring'''

      lowerCAmelCase 						=							['examples/by_feature/gradient_accumulation.py']
      run_command(self._launch_args + testargs	)


  def   _SCREAMING_SNAKE_CASE				(				self	):





      '''simple docstring'''

      lowerCAmelCase 						=							['examples/by_feature/local_sgd.py']
      run_command(self._launch_args + testargs	)








'''simple docstring'''



def       snake_case   (	snake_case      : list					,		snake_case      : list					,		snake_case      : int					,		snake_case      : int					,		snake_case      : int			) ->  int:


    """simple docstring"""


    if index == number_of_items:
        return 0
    lowerCAmelCase 						=							0
    lowerCAmelCase 						=							0
    lowerCAmelCase 						=							knapsack(snake_case					,		snake_case					,		snake_case					,		snake_case					,		index + 1			)
    if weights[index] <= max_weight:
        lowerCAmelCase 						=							values[index] + knapsack(
            snake_case					,		snake_case					,		snake_case					,		max_weight - weights[index]					,		index + 1			)
    return max(snake_case					,		snake_case			)


if __name__ == "__main__":
     import doctest

     doctest.testmod()





