code: def fit(self, train_events, test_events, n_epoch=1):
          
          # make initial status for batch training
          for e in train_events:
              self.__validate(e)
              self.rec.users[e.user.index]['known_items'].add(e.item.index)
              self.item_buffer.append(e.item.index)
  
          # for batch evaluation, temporarily save new users info
          for e in test_events:
              self.__validate(e)
              self.item_buffer.append(e.item.index)
  
          self.__batch_update(train_events, test_events, n_epoch)
  
          # batch test events are considered as a new observations;
          # the model is incrementally updated based on them before the incremental evaluation step
          for e in test_events:
              self.rec.users[e.user.index]['known_items'].add(e.item.index)
              self.rec.update(e)
docs: Train a model using the first 30% positive events to avoid cold-start.
  
          Evaluation of this batch training is done by using the next 20% positive events.
          After the batch SGD training, the models are incrementally updated by using the 20% test events.
  
          Args:
              train_events (list of Event): Positive training events (0-30%).
              test_events (list of Event): Test events (30-50%).
              n_epoch (int): Number of epochs for the batch training.