code: 
  
  import os
  from shutil import copyfile
  from typing import Optional, Tuple
  
  from ...tokenization_utils_fast import PreTrainedTokenizerFast
  from ...utils import is_sentencepiece_available, logging
  
  
  if is_sentencepiece_available():
         from .tokenization_reformer import ReformerTokenizer
  else:
         lowerCamelCase     =      None
  
  
  lowerCamelCase     =      logging.get_logger(__name__)
  
  
  lowerCamelCase     =      '''▁'''
  
  lowerCamelCase     =      {'''vocab_file''': '''spiece.model''', '''tokenizer_file''': '''tokenizer.json'''}
  
  lowerCamelCase     =      {
      '''vocab_file''': {
          '''google/reformer-crime-and-punishment''': (
              '''https://huggingface.co/google/reformer-crime-and-punishment/resolve/main/spiece.model'''
          )
      },
      '''tokenizer_file''': {
          '''google/reformer-crime-and-punishment''': (
              '''https://huggingface.co/google/reformer-crime-and-punishment/resolve/main/tokenizer.json'''
          )
      },
  }
  
  lowerCamelCase     =      {
      '''google/reformer-crime-and-punishment''': 52_4288,
  }
  
  
  
  
  
  
  
  class 		__magic_name__    (							lowerCamelCase__							):
  
     '''simple docstring'''
  
  
  
  
     lowerCamelCase__				:			Optional[Any]												=     VOCAB_FILES_NAMES
     lowerCamelCase__				:			Tuple												=     PRETRAINED_VOCAB_FILES_MAP
     lowerCamelCase__				:			Optional[int]												=     PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
     lowerCamelCase__				:			Optional[int]												=     ['input_ids', 'attention_mask']
     lowerCamelCase__				:			Tuple												=     ReformerTokenizer
  
  
  
     def __init__(       self,					lowercase_=None,					lowercase_=None,					lowercase_="</s>",					lowercase_="<unk>",					lowercase_=[],					**lowercase_,					)							->					List[str]:
  
  
  
  
  
  
       """simple docstring"""
  
  
  
  
  
  
       super().__init__(
           lowercase_,					tokenizer_file=lowercase_,					eos_token=lowercase_,					unk_token=lowercase_,					additional_special_tokens=lowercase_,					**lowercase_,					)
  
       a__						=vocab_file
       a__						=False if not self.vocab_file else True
  
  
  
     def 				_UpperCAmelCase				(       self,					lowercase_,					lowercase_ = None )							->					Tuple[str]:
  
  
  
  
  
  
       """simple docstring"""
  
  
  
  
  
  
       if not self.can_save_slow_tokenizer:
         raise ValueError(
             '''Your fast tokenizer does not have the necessary information to save the vocabulary for a slow '''
             '''tokenizer.''' )
  
       if not os.path.isdir(lowercase_ ):
         logger.error(F"""Vocabulary path ({save_directory}) should be a directory""" )
         return
       a__						=os.path.join(
           lowercase_,					(filename_prefix + '''-''' if filename_prefix else '''''') + VOCAB_FILES_NAMES['''vocab_file'''] )
  
       if os.path.abspath(self.vocab_file ) != os.path.abspath(lowercase_ ):
         copyfile(self.vocab_file,					lowercase_ )
  
       return (out_vocab_file,)
  
style_context: 
  
  import os
  import random
  from pathlib import Path
  from typing import List
  
  import numpy as np
  import torch
  from torch.cuda.amp import GradScaler
  
  from .utils import (
      MODEL_NAME,
      OPTIMIZER_NAME,
      RNG_STATE_NAME,
      SCALER_NAME,
      SCHEDULER_NAME,
      get_pretty_name,
      is_tpu_available,
      is_xpu_available,
      save,
  )
  
  
  if is_tpu_available(check_device=False):
         import torch_xla.core.xla_model as xm
  
  from .logging import get_logger
  from .state import PartialState
  
  
  lowerCamelCase     =      get_logger(__name__)
  
  
  
  
  def     UpperCAmelCase__       (    _A   :				str			,   _A   :				List[dict]			,   _A   :				list			,   _A   :				list			,   _A   :				int			,   _A   :				GradScaler = None			,   ):
  
  
  
  
  
    '''simple docstring'''
  
  
  
  
  
  
  
    for i, state in enumerate(_A							):
      a__						=F"""{MODEL_NAME}.bin""" if i == 0 else F"""{MODEL_NAME}_{i}.bin"""
      a__						=os.path.join(_A			,   _A							)
      save(_A			,   _A							)
      logger.info(F"""Model weights saved in {output_model_file}"""							)
    # Optimizer states
    for i, opt in enumerate(_A							):
      a__						=opt.state_dict()
      a__						=F"""{OPTIMIZER_NAME}.bin""" if i == 0 else F"""{OPTIMIZER_NAME}_{i}.bin"""
      a__						=os.path.join(_A			,   _A							)
      save(_A			,   _A							)
      logger.info(F"""Optimizer state saved in {output_optimizer_file}"""							)
    # Scheduler states
    for i, scheduler in enumerate(_A							):
      a__						=scheduler.state_dict()
      a__						=F"""{SCHEDULER_NAME}.bin""" if i == 0 else F"""{SCHEDULER_NAME}_{i}.bin"""
      a__						=os.path.join(_A			,   _A							)
      save(_A			,   _A							)
      logger.info(F"""Scheduler state saved in {output_scheduler_file}"""							)
    # GradScaler state
    if scaler is not None:
      a__						=scaler.state_dict()
      a__						=os.path.join(_A			,   _A							)
      torch.save(_A			,   _A							)
      logger.info(F"""Gradient scaler state saved in {output_scaler_file}"""							)
    # Random number generator states
    a__						={}
    a__						=F"""{RNG_STATE_NAME}_{process_index}.pkl"""
    a__						=random.getstate()
    a__						=np.random.get_state()
    a__						=torch.get_rng_state()
    if is_xpu_available():
      a__						=torch.xpu.get_rng_state_all()
    else:
      a__						=torch.cuda.get_rng_state_all()
    if is_tpu_available():
      a__						=xm.get_rng_state()
    a__						=os.path.join(_A			,   _A							)
    torch.save(_A			,   _A							)
    logger.info(F"""Random states saved in {output_states_file}"""							)
    return output_dir
  
  
  
  
  def     UpperCAmelCase__       (    _A   :				Union[str, Any]			,   _A   :				int			,   _A   :				int			,   _A   :				Union[str, Any]			,   _A   :				Tuple			,   _A   :				Optional[int]=None			,   _A   :				List[Any]=None			,   **_A   :				Dict			,   ):
  
  
  
  
  
    '''simple docstring'''
  
  
  
  
  
  
  
    if map_location not in [None, "cpu", "on_device"]:
      raise TypeError(
          '''Unsupported optimizer map location passed, please choose one of `None`, `\'cpu\'`, or `\'on_device\'`'''							)
    if map_location is None:
      a__						='''cpu'''
    elif map_location == "on_device":
      a__						=PartialState().device
    # Model states
    for i, model in enumerate(_A							):
      a__						=F"""{MODEL_NAME}.bin""" if i == 0 else F"""{MODEL_NAME}_{i}.bin"""
      a__						=os.path.join(_A			,   _A							)
      models[i].load_state_dict(torch.load(_A			,   map_location=_A							)			,   **_A							)
    logger.info('''All model weights loaded successfully'''							)
  
    # Optimizer states
    for i, opt in enumerate(_A							):
      a__						=F"""{OPTIMIZER_NAME}.bin""" if i == 0 else F"""{OPTIMIZER_NAME}_{i}.bin"""
      a__						=os.path.join(_A			,   _A							)
      a__						=torch.load(_A			,   map_location=_A							)
      optimizers[i].load_state_dict(_A							)
    logger.info('''All optimizer states loaded successfully'''							)
  
    # Scheduler states
    for i, scheduler in enumerate(_A							):
      a__						=F"""{SCHEDULER_NAME}.bin""" if i == 0 else F"""{SCHEDULER_NAME}_{i}.bin"""
      a__						=os.path.join(_A			,   _A							)
      scheduler.load_state_dict(torch.load(_A							)							)
    logger.info('''All scheduler states loaded successfully'''							)
  
    # GradScaler state
    if scaler is not None:
      a__						=os.path.join(_A			,   _A							)
      scaler.load_state_dict(torch.load(_A							)							)
      logger.info('''GradScaler state loaded successfully'''							)
  
    # Random states
    try:
      a__						=torch.load(os.path.join(_A			,   F"""{RNG_STATE_NAME}_{process_index}.pkl"""							)							)
      random.setstate(states['''random_state''']							)
      np.random.set_state(states['''numpy_random_seed''']							)
      torch.set_rng_state(states['''torch_manual_seed''']							)
      if is_xpu_available():
        torch.xpu.set_rng_state_all(states['''torch_xpu_manual_seed''']							)
      else:
        torch.cuda.set_rng_state_all(states['''torch_cuda_manual_seed''']							)
      if is_tpu_available():
        xm.set_rng_state(states['''xm_seed''']							)
      logger.info('''All random states loaded successfully'''							)
    except Exception:
      logger.info('''Could not load random states'''							)
  
  
  
  
  def     UpperCAmelCase__       (    _A   :				Optional[Any]			,   _A   :				Any			,   _A   :				int = 0							):
  
  
  
  
  
    '''simple docstring'''
  
  
  
  
  
  
  
    a__						=Path(_A							) / F"""custom_checkpoint_{index}.pkl"""
    logger.info(F"""Saving the state of {get_pretty_name(_A							)} to {save_location}"""							)
    torch.save(obj.state_dict()			,   _A							)
  
  
  
  
  def     UpperCAmelCase__       (    _A   :				int			,   _A   :				Any			,   _A   :				int = 0							):
  
  
  
  
  
    '''simple docstring'''
  
  
  
  
  
  
  
    a__						=F"""{path}/custom_checkpoint_{index}.pkl"""
    logger.info(F"""Loading the state of {get_pretty_name(_A							)} from {load_location}"""							)
    obj.load_state_dict(torch.load(_A			,   map_location='''cpu'''							)							)
  