code: def forward(self, node_repr, bond_angle_index, bond_angle, mask):
      node_i, node_j, node_k = bond_angle_index
      node_i_repr = paddle.index_select(node_repr, node_i)
      node_j_repr = paddle.index_select(node_repr, node_j)
      node_k_repr = paddle.index_select(node_repr, node_k)
  
      node_ijk_repr = paddle.concat(
          [node_i_repr, node_j_repr, node_k_repr], axis=1
      )
      bond_angle_pred = self.bond_angle_pred_linear(node_ijk_repr)
      bond_angle_pred = paddle.masked_select(bond_angle_pred, mask)
      bond_angle_pred = paddle.reshape(
          bond_angle_pred,
          [
              -1,
          ],
      )
      bond_angle = paddle.masked_select(bond_angle, mask)
      bond_angle = paddle.reshape(
          bond_angle,
          [
              -1,
          ],
      )
      loss = self.loss(bond_angle_pred, bond_angle)
      loss = paddle.mean(loss)
      return loss
  
imports: import os
  import sys
  import math
  import numpy
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import pgl.nn
  from pgl.utils.logger import log
  import models.conv
  import models.mol_encoder
  import models.layers
label_desc: Use image node_id 2 for calling the PretrainBondAngle obj's underlying member method code with example usage: obj.forward(node_repr, bond_angle_index, bond_angle, mask) and returns: loss