


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   __a			(    unittest.TestCase      ):
 def 		SCREAMING_SNAKE_CASE__   (   self )					->				int:




        '''simple docstring'''
        lowercase__:   Optional[Any]  			=   inspect.getfile(accelerate.test_utils )
        lowercase__:   Union[str, Any]  			=   os.path.sep.join(mod_file.split(os.path.sep )[:-1] + ['scripts', 'test_script.py'] )
        lowercase__:   int  			=   os.path.sep.join(
            mod_file.split(os.path.sep )[:-1] + ['scripts', 'test_distributed_data_loop.py'] )
        lowercase__:   int  			=   os.path.sep.join(mod_file.split(os.path.sep )[:-1] + ['scripts', 'test_ops.py'] )
 @require_multi_gpu
 def 		SCREAMING_SNAKE_CASE__   (   self )					->				Union[str, Any]:




        '''simple docstring'''
        print(F'Found {torch.cuda.device_count()} devices.' )
        lowercase__:   Any  			=   ['torchrun', F'--nproc_per_node={torch.cuda.device_count()}', self.test_file_path]
        with patch_environment(omp_num_threads=1 ):
               execute_subprocess_async(lowerCAmelCase__				, env=os.environ.copy() )
 @require_multi_gpu
 def 		SCREAMING_SNAKE_CASE__   (   self )					->				Dict:




        '''simple docstring'''
        print(F'Found {torch.cuda.device_count()} devices.' )
        lowercase__:   int  			=   ['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(lowerCAmelCase__				, env=os.environ.copy() )
 @require_multi_gpu
 def 		SCREAMING_SNAKE_CASE__   (   self )					->				Optional[Any]:




        '''simple docstring'''
        lowercase__:   str  			=   ['torchrun', F'--nproc_per_node={torch.cuda.device_count()}', inspect.getfile(self.__class__ )]
        with patch_environment(omp_num_threads=1 ):
               execute_subprocess_async(lowerCAmelCase__				, env=os.environ.copy() )
 @require_multi_gpu
 def 		SCREAMING_SNAKE_CASE__   (   self )					->				Tuple:




        '''simple docstring'''
        print(F'Found {torch.cuda.device_count()} devices, using 2 devices only' )
        lowercase__:   Tuple  			=   ['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(lowerCAmelCase__				, env=os.environ.copy() )


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

 __lowerCAmelCase		       =							''''''

 __lowerCAmelCase		       =							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)."

 __lowerCAmelCase		       =							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."
 __lowerCAmelCase		       =							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)






from __future__ import annotations




def    snake_case_     (  snake_case			,							snake_case     )  ->				list[int]:
       lowercase__:   List[str]  			=   0
       lowercase__:   Dict  			=   len(snake_case     ) - 1

       while i < j:
              if nums[i] + nums[j] == target:
                     return [i, j]
              elif nums[i] + nums[j] < target:
                     lowercase__:   Dict  			=   i + 1
              else:
                     lowercase__:   List[Any]  			=   j - 1

       return []


if __name__ == "__main__":
 import doctest

 doctest.testmod()
 print(F'''{two_pointer([2, 7, 11, 15], 9) = }''')


