code: def forward(self, e1, rel, kg_graph=None):
      e1_embedded_real = self.emb_e_real(e1).squeeze(1)
      rel_embedded_real = self.emb_rel_real(rel).squeeze(1)
      e1_embedded_img = self.emb_e_img(e1).squeeze(1)
      rel_embedded_img = self.emb_rel_img(rel).squeeze(1)
  
      e1_embedded_real = self.inp_drop(e1_embedded_real)
      rel_embedded_real = self.inp_drop(rel_embedded_real)
      e1_embedded_img = self.inp_drop(e1_embedded_img)
      rel_embedded_img = self.inp_drop(rel_embedded_img)
  
      # complex space bilinear product (equivalent to HolE)
      realrealreal = torch.mm(
          e1_embedded_real * rel_embedded_real,
          self.emb_e_real.weight.transpose(1, 0),
      )
      realimgimg = torch.mm(
          e1_embedded_real * rel_embedded_img,
          self.emb_e_img.weight.transpose(1, 0),
      )
      imgrealimg = torch.mm(
          e1_embedded_img * rel_embedded_real,
          self.emb_e_img.weight.transpose(1, 0),
      )
      imgimgreal = torch.mm(
          e1_embedded_img * rel_embedded_img,
          self.emb_e_real.weight.transpose(1, 0),
      )
      pred = realrealreal + realimgimg + imgrealimg - imgimgreal
      pred = torch.sigmoid(pred)
  
      return pred
  
imports: import torch
  from torch.nn import Parameter
  from torch.nn import functional
  from torch.nn.init import xavier_normal_
  from graph4nlp.pytorch.modules.graph_embedding_learning.gcn import GCN
  from graph4nlp.pytorch.modules.graph_embedding_learning.ggnn import GGNN
  from graph4nlp.pytorch.modules.prediction.classification.kg_completion import ComplEx, DistMult
label_desc: Use image node_id 3 for calling the Complex obj's underlying member method code with example usage: obj.forward(e1, rel, kg_graph) and returns: pred