code: def call(self, user_id, p_item_id, n_item_id):
      user_vec = self.user_latent_factor(user_id)
      p_item_vec = self.item_latent_factor(p_item_id)
      p_item_bias = self.item_bias(p_item_id)
      n_item_vec = self.item_latent_factor(n_item_id)
      n_item_bias = self.item_bias(n_item_id)
  
      loss = self.pairwise_log_loss(
          user_vec=user_vec,
          p_item_vec=p_item_vec,
          p_item_bias=p_item_bias,
          n_item_vec=n_item_vec,
          n_item_bias=n_item_bias,
      )
  
      l2_loss = (
          tf.nn.l2_loss(user_vec)
          + tf.nn.l2_loss(p_item_vec)
          + tf.nn.l2_loss(n_item_vec)
      )
  
      return loss, l2_loss
  
file_path: openrec/openrec/tf2/recommenders/bpr.py
imports: import tensorflow
  from tensorflow.keras import Model
  from openrec.tf2.modules import LatentFactor, PairwiseLogLoss
label_desc: Use image node_id 2 for calling the BPR obj's underlying member method code with example usage: obj.call(user_id, p_item_id, n_item_id) and returns: loss,  l2_loss