code: def _load_training_state(self, train_iter: data_io.BaseParallelSampleIter):
          
          # (1) Parameters
          params_fname = os.path.join(self.training_state_dirname, C.TRAINING_STATE_PARAMS_NAME)
          self.model.load_params_from_file(params_fname)
  
          # (2) Optimizer states
          opt_state_fname = os.path.join(self.training_state_dirname, C.OPT_STATES_LAST)
          self.model.load_optimizer_states(opt_state_fname)
  
          # (3) Data Iterator
          train_iter.load_state(os.path.join(self.training_state_dirname, C.BUCKET_ITER_STATE_NAME))
  
          # (4) Random generators
          # RNG states: python's random and np.random provide functions for
          # storing the state, mxnet does not, but inside our code mxnet's RNG is
          # not used AFAIK
          with open(os.path.join(self.training_state_dirname, C.RNG_STATE_NAME), "rb") as fp:
              random.setstate(pickle.load(fp))
              np.random.set_state(pickle.load(fp))
  
          # (5) Training state
          self.state = TrainState.load(os.path.join(self.training_state_dirname, C.TRAINING_STATE_NAME))
  
          # (6) Learning rate scheduler
          with open(os.path.join(self.training_state_dirname, C.SCHEDULER_STATE_NAME), "rb") as fp:
              self.optimizer_config.set_lr_scheduler(pickle.load(fp))
          # initialize optimizer again
          self._initialize_optimizer()
docs: Loads the full training state from disk.
  
          :param train_iter: training data iterator.