


"""simple docstring"""




from argparse import ArgumentParser

from . import BaseTransformersCLICommand

def        lowercase							(		lowerCAmelCase__ :     List[Any]			) ->      Any:
		return DownloadCommand(args.model    ,					args.cache_dir    ,					args.force    ,					args.trust_remote_code			)




class 					__lowerCAmelCase					(   __SCREAMING_SNAKE_CASE       ):


		'''simple docstring'''



		@staticmethod
		def 			__UpperCAmelCase       (  _a      ):
				__a           =			parser.add_parser('''download'''      )
				download_parser.add_argument(
				    '''--cache-dir'''							, type=_a							, default=_a							, help='''Path to location to store the models'''      )
				download_parser.add_argument(
				    '''--force'''							, action='''store_true'''							, help='''Force the model to be download even if already in cache-dir'''      )
				download_parser.add_argument(
				    '''--trust-remote-code'''							, action='''store_true'''							, help='''Whether or not to allow for custom models defined on the Hub in their own modeling files. Use only if you\'ve reviewed the code as it will execute on your local machine'''							, )
				download_parser.add_argument('''model'''							, type=_a							, help='''Name of the model to download'''      )
				download_parser.set_defaults(func=_a      )

		def __init__(  self							, _a							, _a							, _a							, _a      ):
				__a           =			model
				__a           =			cache
				__a           =			force
				__a           =			trust_remote_code





		def 			__UpperCAmelCase       (  self      ):
				from ..models.auto import AutoModel, AutoTokenizer

				AutoModel.from_pretrained(
				    self._model							, cache_dir=self._cache							, force_download=self._force							, trust_remote_code=self._trust_remote_code      )
				AutoTokenizer.from_pretrained(
				    self._model							, cache_dir=self._cache							, force_download=self._force							, trust_remote_code=self._trust_remote_code      )










"""simple docstring"""




import inspect
import os
import unittest

import torch

import accelerate
from accelerate import Accelerator
from accelerate.test_utils import execute_subprocess_async, require_multi_gpu
from accelerate.utils import patch_environment
class 					__lowerCAmelCase					(   unittest.TestCase       ):


		'''simple docstring'''



		def 			__UpperCAmelCase       (  self      ):
				__a           =			inspect.getfile(accelerate.test_utils      )
				__a           =			os.path.sep.join(mod_file.split(os.path.sep      )[:-1] + ['''scripts''', '''test_script.py''']      )
				__a           =			os.path.sep.join(
				    mod_file.split(os.path.sep      )[:-1] + ['''scripts''', '''test_distributed_data_loop.py''']      )
				__a           =			os.path.sep.join(mod_file.split(os.path.sep      )[:-1] + ['''scripts''', '''test_ops.py''']      )

		@require_multi_gpu
		def 			__UpperCAmelCase       (  self      ):
				print(f'''Found {torch.cuda.device_count()} devices.'''      )
				__a           =			['''torchrun''', f'''--nproc_per_node={torch.cuda.device_count()}''', self.test_file_path]
				with patch_environment(omp_num_threads=1      ):
						execute_subprocess_async(_a							, env=os.environ.copy()      )

		@require_multi_gpu
		def 			__UpperCAmelCase       (  self      ):
				print(f'''Found {torch.cuda.device_count()} devices.'''      )
				__a           =			['''torchrun''', f'''--nproc_per_node={torch.cuda.device_count()}''', self.operation_file_path]
				print(f'''Command: {cmd}'''      )
				with patch_environment(omp_num_threads=1      ):
						execute_subprocess_async(_a							, env=os.environ.copy()      )

		@require_multi_gpu
		def 			__UpperCAmelCase       (  self      ):
				__a           =			['''torchrun''', f'''--nproc_per_node={torch.cuda.device_count()}''', inspect.getfile(self.__class__      )]
				with patch_environment(omp_num_threads=1      ):
						execute_subprocess_async(_a							, env=os.environ.copy()      )





		@require_multi_gpu
		def 			__UpperCAmelCase       (  self      ):
				print(f'''Found {torch.cuda.device_count()} devices, using 2 devices only'''      )
				__a           =			['''torchrun''', f'''--nproc_per_node={torch.cuda.device_count()}''', self.data_loop_file_path]
				with patch_environment(omp_num_threads=1							, cuda_visible_devices='''0,1'''      ):
						execute_subprocess_async(_a							, env=os.environ.copy()      )


if __name__ == "__main__":
				lowercase_			     =  Accelerator()
				lowercase_			     =  (accelerator.state.process_index + 2, 1_0)
				lowercase_			     =  torch.randint(0, 1_0, shape).to(accelerator.device)

				lowercase_			     =  ""

				lowercase_			     =  accelerator.pad_across_processes(tensor)
				if tensora.shape[0] != accelerator.state.num_processes + 1:
								error_msg += F"Found shape {tensora.shape} but should have {accelerator.state.num_processes + 1} at dim 0."
				if not torch.equal(tensora[: accelerator.state.process_index + 2], tensor):
								error_msg += "Tensors have different values."
				if not torch.all(tensora[accelerator.state.process_index + 2 :] == 0):
								error_msg += "Padding was not done with the right value (0)."

				lowercase_			     =  accelerator.pad_across_processes(tensor, pad_first=True)
				if tensora.shape[0] != accelerator.state.num_processes + 1:
								error_msg += F"Found shape {tensora.shape} but should have {accelerator.state.num_processes + 1} at dim 0."
				lowercase_			     =  accelerator.state.num_processes - accelerator.state.process_index - 1
				if not torch.equal(tensora[index:], tensor):
								error_msg += "Tensors have different values."
				if not torch.all(tensora[:index] == 0):
								error_msg += "Padding was not done with the right value (0)."

				# Raise error at the end to make sure we don't stop at the first failure.
				if len(error_msg) > 0:
								raise ValueError(error_msg)






