code: def redo(self):
          
          # Go forward in the stack, and retrieve the new assignment.
          item = self._undo_stack.forward()
          if item is None:
              # No redo has been performed: abort.
              return
  
          # NOTE: the undo_state object is only returned when undoing.
          # It represents data associated to the state
          # *before* the action. What might be more useful would be the
          # undo_state object of the next item in the list (if it exists).
          spike_ids, cluster_ids, undo_state = item
          assert spike_ids is not None
  
          # We apply the new assignment.
          up = self._do_assign(spike_ids, cluster_ids)
          up.history = 'redo'
  
          self.emit('cluster', up)
          return up
docs: Redo the last cluster assignment operation.
  
          Returns
          -------
  
          up : UpdateInfo instance of the changes done by this operation.