class_docstr: :class:`NegSampleEvalDataLoader` is a dataloader for neg-sampling evaluation.
  It is similar to :class:`TrainDataLoader` which can generate negative items,
  and this dataloader also permits that all the interactions corresponding to each user are in the same batch
  and positive interactions are before negative interactions.
  
  Args:
      config (Config): The config of dataloader.
      dataset (Dataset): The dataset of dataloader.
      sampler (Sampler): The sampler of dataloader.
      shuffle (bool, optional): Whether the dataloader will be shuffle after a round. Defaults to ``False``.
code: def _init_batch_size_and_step(self):
      batch_size = self.config["eval_batch_size"]
      if (
          self.neg_sample_args["distribution"] != "none"
          and self.neg_sample_args["sample_num"] != "none"
      ):
          inters_num = sorted(
              self.uid2items_num * self.times, reverse=True
          )
          batch_num = 1
          new_batch_size = inters_num[0]
          for i in range(1, len(inters_num)):
              if new_batch_size + inters_num[i] > batch_size:
                  break
              batch_num = i + 1
              new_batch_size += inters_num[i]
          self.step = batch_num
          self.set_batch_size(new_batch_size)
      else:
          self.step = batch_size
          self.set_batch_size(batch_size)
  
imports: import numpy
  import torch
  from logging import getLogger
  from recbole.data.dataloader.abstract_dataloader import AbstractDataLoader, NegSampleDataLoader
  from recbole.data.interaction import Interaction, cat_interactions
  from recbole.utils import InputType, ModelType
label_desc: Use image node_id 2 for calling the NegSampleEvalDataLoader obj's underlying member method code with example usage: obj._init_batch_size_and_step() without return types