import importlib
import sys
from argparse import REMAINDER, ArgumentParser
from pathlib import Path

import torch_xla.distributed.xla_multiprocessing as xmp

def 				UpperCamelCase					(     )		->    int:




       '''simple docstring'''






       _A=						ArgumentParser(
           description=(
               'PyTorch TPU distributed training launch helper utility that will spawn up multiple distributed processes'
           ) )

       # Optional arguments for the launch helper
       parser.add_argument('--num_cores'							,       type=lowerCAmelCase_							,       default=1							,       help='Number of TPU cores to use (1 or 8).' )

       # positional
       parser.add_argument(
           'training_script'							,       type=lowerCAmelCase_							,       help=(
               'The full path to the single TPU training '
               'program/script to be launched in parallel, '
               'followed by all the arguments for the '
               'training script'
           )							,       )

       # rest from the training program
       parser.add_argument('training_script_args'							,       nargs=lowerCAmelCase_ )

       return parser.parse_args()

def 				UpperCamelCase					(     )		->    Optional[Any]:




       '''simple docstring'''






       _A=						parse_args()

       # Import training_script as a module.
       _A=						Path(args.training_script )
       sys.path.append(str(script_fpath.parent.resolve() ) )
       _A=						script_fpath.stem
       _A=						importlib.import_module(lowerCAmelCase_ )

       # Patch sys.argv
       _A=						[args.training_script] + args.training_script_args + ['--tpu_num_cores', str(args.num_cores )]

       xmp.spawn(mod._mp_fn							,       args=()							,       nprocs=args.num_cores )


if __name__ == "__main__":
      main()
import os
import shutil
import unittest
from unittest.mock import patch

from transformers.testing_utils import CaptureStd, is_pt_tf_cross_test, require_torch





class   lowerCAmelCase    (       unittest.TestCase      ):



     @patch('sys.argv'					,   ['fakeprogrampath', 'env']							)
     def       a__	(       self							):
            # test transformers-cli env
            import transformers.commands.transformers_cli

            with CaptureStd() as cs:
                   transformers.commands.transformers_cli.main()
            self.assertIn('Python version'					,   cs.out							)
            self.assertIn('Platform'					,   cs.out							)
            self.assertIn('Using distributed or parallel set-up in script?'					,   cs.out							)



     @is_pt_tf_cross_test
     @patch(
         'sys.argv'					,   ['fakeprogrampath', 'pt-to-tf', '--model-name', 'hf-internal-testing/tiny-random-gptj', '--no-pr']							)
     def       a__	(       self							):
            import transformers.commands.transformers_cli

            shutil.rmtree('/tmp/hf-internal-testing/tiny-random-gptj'					,   ignore_errors=lowerCAmelCase__							)  # cleans potential past runs
            transformers.commands.transformers_cli.main()

            # The original repo has no TF weights -- if they exist, they were created by the CLI
            self.assertTrue(os.path.exists('/tmp/hf-internal-testing/tiny-random-gptj/tf_model.h5'							)							)



     @require_torch
     @patch('sys.argv'					,   ['fakeprogrampath', 'download', 'hf-internal-testing/tiny-random-gptj', '--cache-dir', '/tmp']							)
     def       a__	(       self							):
            import transformers.commands.transformers_cli

            # # remove any previously downloaded model to start clean
            shutil.rmtree('/tmp/models--hf-internal-testing--tiny-random-gptj'					,   ignore_errors=lowerCAmelCase__							)

            # run the command
            transformers.commands.transformers_cli.main()

            # check if the model files are downloaded correctly on /tmp/models--hf-internal-testing--tiny-random-gptj
            self.assertTrue(os.path.exists('/tmp/models--hf-internal-testing--tiny-random-gptj/blobs'							)							)
            self.assertTrue(os.path.exists('/tmp/models--hf-internal-testing--tiny-random-gptj/refs'							)							)
            self.assertTrue(os.path.exists('/tmp/models--hf-internal-testing--tiny-random-gptj/snapshots'							)							)





     @require_torch
     @patch(
         'sys.argv'					,   [
             'fakeprogrampath',
             'download',
             'hf-internal-testing/test_dynamic_model_with_tokenizer',
             '--trust-remote-code',
             '--cache-dir',
             '/tmp',
         ]					,   )
     def       a__	(       self							):
            import transformers.commands.transformers_cli

            # # remove any previously downloaded model to start clean
            shutil.rmtree('/tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer'					,   ignore_errors=lowerCAmelCase__							)

            # run the command
            transformers.commands.transformers_cli.main()

            # check if the model files are downloaded correctly on /tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer
            self.assertTrue(os.path.exists('/tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer/blobs'							)							)
            self.assertTrue(os.path.exists('/tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer/refs'							)							)
            self.assertTrue(
                os.path.exists('/tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer/snapshots'							)							)