class_docstr: Data processing class for GCN models which use implicit feedback.
  
  Initialize train and test set, create normalized adjacency matrix and sample data for training epochs.
docstr: Sample train data every batch. One positive item and one negative item sampled for each user.
  
  Args:
      batch_size (int): Batch size of users.
  
  Returns:
      numpy.ndarray, numpy.ndarray, numpy.ndarray:
      - Sampled users.
      - Sampled positive items.
      - Sampled negative items.
docstr_tok: ["Sample","train","data","every","batch",".","One","positive","item","and","one","negative","item","sampled","for","each","user",".","Args",":","batch_size","(","int",")",":","Batch","size","of","users",".","Returns",":","numpy.ndarray",",","numpy.ndarray",",","numpy.ndarray",":","-","Sampled","users",".","-","Sampled","positive","items",".","-","Sampled","negative","items","."]
code: def train_loader(self, batch_size):
      """Sample train data every batch. One positive item and one negative item sampled for each user.
  
      Args:
          batch_size (int): Batch size of users.
  
      Returns:
          numpy.ndarray, numpy.ndarray, numpy.ndarray:
          - Sampled users.
          - Sampled positive items.
          - Sampled negative items.
      """
  
      def sample_neg(x):
          while True:
              neg_id = random.randint(0, self.n_items - 1)
              if neg_id not in x:
                  return neg_id
  
      indices = range(self.n_users)
      if self.n_users < batch_size:
          users = [random.choice(indices) for _ in range(batch_size)]
      else:
          users = random.sample(indices, batch_size)
  
      interact = self.interact_status.iloc[users]
      pos_items = interact[self.col_item + "_interacted"].apply(
          lambda x: random.choice(list(x))
      )
      neg_items = interact[self.col_item + "_interacted"].apply(
          lambda x: sample_neg(x)
      )
  
      return np.array(users), np.array(pos_items), np.array(neg_items)
  
file_path: recommenders/recommenders/models/deeprec/DataModel/ImplicitCF.py
imports: import random
  import numpy
  import pandas
  import scipy.sparse
  from recommenders.utils.constants import DEFAULT_ITEM_COL, DEFAULT_USER_COL, DEFAULT_RATING_COL, DEFAULT_PREDICTION_COL
label_desc: Use image node_id 7 for calling the ImplicitCF obj's underlying member method code with example usage: obj.train_loader(batch_size) and returns: np,  np,  np, neg_id