code: 
  
  
  '''simple docstring'''
  
  lowerCamelCase							:     Optional[Any]								=			{
      '0000': '0',
      '0001': '1',
      '0010': '2',
      '0011': '3',
      '0100': '4',
      '0101': '5',
      '0110': '6',
      '0111': '7',
      '1000': '8',
      '1001': '9',
      '1010': 'a',
      '1011': 'b',
      '1100': 'c',
      '1101': 'd',
      '1110': 'e',
      '1111': 'f',
  }
  
  def _SCREAMING_SNAKE_CASE   (A ) -> str:
  
  
  
  
  
  
         """simple docstring"""
  
  
  
  
  
  
  
         lowercase__       =				str(A ).strip()
  
         # Exceptions
         if not binary_str:
                raise ValueError('''Empty string was passed to the function''' )
         lowercase__       =				binary_str[0] == '''-'''
         lowercase__       =				binary_str[1:] if is_negative else binary_str
         if not all(char in '''01''' for char in binary_str ):
                raise ValueError('''Non-binary value was passed to the function''' )
  
         lowercase__       =				(
             '''0''' * (4 * (divmod(len(A )						,				4 )[0] + 1) - len(A )) + binary_str
         )
  
         lowercase__       =				[]
         for x in range(0						,				len(A )						,				4 ):
                hexadecimal.append(BITS_TO_HEX[binary_str[x : x + 4]] )
         lowercase__       =				'''0x''' + ''''''.join(A )
  
         return "-" + hexadecimal_str if is_negative else hexadecimal_str
  
  
  if __name__ == "__main__":
   from doctest import testmod
  
   testmod()
  
  
  
  
  
style_context: 
  
  
  '''simple docstring'''
  
  import torch
  
  from accelerate import Accelerator, DistributedType
  class 						__lowerCAmelCase		:
  
  
  
  
  
        '''simple docstring'''
  
  
  
  
  
  
        def __enter__(self					:					List[Any]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               if self.enabled:
                      lowercase__       =				self.model.no_sync()
                      self.model_sync_obj.__enter__()
  
               return self
  
  
  
        def __exit__(self					:					List[str]     ,		UpperCamelCase					:					List[Any]     ,		UpperCamelCase					:					Optional[int]     ,		UpperCamelCase					:					Optional[int]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               if self.enabled:
                      # Average all models on exit
                      self._sync_and_avg_model_params()
                      self.model_sync_obj.__exit__(UpperCamelCase     ,		UpperCamelCase     ,		UpperCamelCase				)
  
  
  
        def __init__(self					:					Dict     ,		UpperCamelCase					:					Accelerator     ,		UpperCamelCase					:					torch.nn.Module     ,		UpperCamelCase					:					int     ,		UpperCamelCase					:					bool = True				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               if accelerator.distributed_type not in [
                   DistributedType.NO,
                   DistributedType.MULTI_CPU,
                   DistributedType.MULTI_GPU,
               ]:
                      raise NotImplementedError('''LocalSGD is supported only for CPUs and GPUs (no DeepSpeed or MegatronLM)'''				)
               lowercase__       =				enabled and accelerator.distributed_type != DistributedType.NO
               lowercase__       =				0
               if self.enabled:
                      lowercase__       =				accelerator
                      lowercase__       =				model
                      lowercase__       =				local_sgd_steps
  
  
  
        def    UpperCamelCase__	(self					:					List[str]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               self.num_steps += 1
               if not self.enabled:
                      return
  
               if self.num_steps % self.local_sgd_steps == 0:
                      self._sync_and_avg_model_params()
  
  
  
  
  
  
        def    UpperCamelCase__	(self					:					Any				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               self.accelerator.wait_for_everyone()
               with self.accelerator.autocast():
                      for param in self.model.parameters():
                             lowercase__       =				self.accelerator.reduce(param.data     ,		reduction='''mean'''				)
  
  
  
  
  