




import inspect
import os
import unittest
from dataclasses import dataclass

import torch

from accelerate import Accelerator, DistributedDataParallelKwargs, GradScalerKwargs
from accelerate.state import AcceleratorState
from accelerate.test_utils import execute_subprocess_async, require_cuda, require_multi_gpu
from accelerate.utils import KwargsHandler




@dataclass
class 						__lowercase		(UpperCamelCase__							):




      """simple docstring"""





      _snake_case												=						0
      _snake_case												=						False
      _snake_case												=						3.0




class 						__lowercase		(unittest.TestCase							):




      """simple docstring"""





      def      UpperCAmelCase				(				self     )		->    Dict:
         # If no defaults are changed, `to_kwargs` returns an empty dict.
         self.assertDictEqual(MockClass().to_kwargs()    ,				{}     )
         self.assertDictEqual(MockClass(a=2     ).to_kwargs()    ,				{"""a""": 2}     )
         self.assertDictEqual(MockClass(a=2    ,				b=A     ).to_kwargs()    ,				{"""a""": 2, """b""": True}     )
         self.assertDictEqual(MockClass(a=2    ,				c=2.25     ).to_kwargs()    ,				{"""a""": 2, """c""": 2.25}     )

      @require_cuda
      def      UpperCAmelCase				(				self     )		->    Optional[int]:
         # If no defaults are changed, `to_kwargs` returns an empty dict.
         snake_case				:    List[Any]           =	GradScalerKwargs(init_scale=1_0_2_4    ,				growth_factor=2     )
         AcceleratorState._reset_state()
         snake_case				:    Optional[int]           =	Accelerator(mixed_precision="""fp16"""    ,				kwargs_handlers=[scaler_handler]     )
         print(accelerator.use_fpaa     )
         snake_case				:    Optional[Any]           =	accelerator.scaler

         # Check the kwargs have been applied
         self.assertEqual(scaler._init_scale    ,				1_0_2_4.0     )
         self.assertEqual(scaler._growth_factor    ,				2.0     )

         # Check the other values are at the default
         self.assertEqual(scaler._backoff_factor    ,				0.5     )
         self.assertEqual(scaler._growth_interval    ,				2_0_0_0     )
         self.assertEqual(scaler._enabled    ,				A     )

      @require_multi_gpu
      def      UpperCAmelCase				(				self     )		->    Tuple:
         snake_case				:    Dict           =	["""torchrun""", f"""--nproc_per_node={torch.cuda.device_count()}""", inspect.getfile(self.__class__     )]
         execute_subprocess_async(A    ,				env=os.environ.copy()     )


if __name__ == "__main__":
       lowerCamelCase	:	List[str]				=   DistributedDataParallelKwargs(bucket_cap_mb=1_5, find_unused_parameters=True)
       lowerCamelCase	:	Dict				=   Accelerator(kwargs_handlers=[ddp_scaler])
       lowerCamelCase	:	List[str]				=   torch.nn.Linear(1_0_0, 2_0_0)
       lowerCamelCase	:	str				=   accelerator.prepare(model)

       # Check the values changed in kwargs
       lowerCamelCase	:	Union[str, Any]				=   ''
       lowerCamelCase	:	Dict				=   model.bucket_bytes_cap // (1_0_2_4 * 1_0_2_4)
       if observed_bucket_cap_map != 1_5:
              error_msg += f"Kwargs badly passed, should have `15` but found {observed_bucket_cap_map}.\n"
       if model.find_unused_parameters is not True:
              error_msg += f"Kwargs badly passed, should have `True` but found {model.find_unused_parameters}.\n"

       # Check the values of the defaults
       if model.dim != 0:
              error_msg += f"Default value not respected, should have `0` but found {model.dim}.\n"
       if model.broadcast_buffers is not True:
              error_msg += f"Default value not respected, should have `True` but found {model.broadcast_buffers}.\n"
       if model.gradient_as_bucket_view is not False:
              error_msg += f"Default value not respected, should have `False` but found {model.gradient_as_bucket_view}.\n"

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











import pytest
import requests

from datasets.utils.file_utils import http_head

from .utils import OfflineSimulationMode, RequestWouldHangIndefinitelyError, offline




@pytest.mark.integration
def 						SCREAMING_SNAKE_CASE__ (   )  ->       List[Any]:
   with offline(OfflineSimulationMode.CONNECTION_TIMES_OUT					):
      with pytest.raises(lowercase					):
         requests.request("""GET"""						,"""https://huggingface.co"""					)
      with pytest.raises(requests.exceptions.ConnectTimeout					):
         requests.request("""GET"""						,"""https://huggingface.co"""						,timeout=1.0					)




@pytest.mark.integration
def 						SCREAMING_SNAKE_CASE__ (   )  ->       Any:
   with offline(OfflineSimulationMode.CONNECTION_FAILS					):
      with pytest.raises(requests.exceptions.ConnectionError					):
         requests.request("""GET"""						,"""https://huggingface.co"""					)




def 						SCREAMING_SNAKE_CASE__ (   )  ->       int:
   with offline(OfflineSimulationMode.HF_DATASETS_OFFLINE_SET_TO_1					):
      with pytest.raises(lowercase					):
         http_head("""https://huggingface.co"""					)





