code: def __call__(self, inputs):
      src, pos, negs = self.to_sample(inputs)
      # [batch, 1, dim]
      mu_emb, log_var_emb, embedding = self.embed(src)
      # [batch, num_negs, dim]
      mu_emb_pos, log_var_emb_pos, embedding_pos = self.embed(pos)
      # [batch, num_negs, dim]
      mu_emb_negs, log_var_emb_negs, embedding_negs = self.embed(negs)
  
      # [batch, 1, num_negs]
      logits = tf.matmul(embedding, embedding_pos, transpose_b=True)
      # [batch, 1, num_negs]
      neg_logits = tf.matmul(
          embedding, embedding_negs, transpose_b=True
      )
      true_xent = tf.nn.sigmoid_cross_entropy_with_logits(
          labels=tf.ones_like(logits), logits=logits
      )
      negative_xent = tf.nn.sigmoid_cross_entropy_with_logits(
          labels=tf.zeros_like(neg_logits), logits=neg_logits
      )
      loss = tf.reduce_mean(
          tf.concat(
              [
                  tf.reshape(true_xent, [-1, 1]),
                  tf.reshape(negative_xent, [-1, 1]),
              ],
              0,
          )
      )
  
      kl = self.kl(mu_emb, log_var_emb)
      kl = tf.concat([kl, self.kl(mu_emb_pos, log_var_emb_pos)], 0)
      kl = tf.concat([kl, self.kl(mu_emb_negs, log_var_emb_negs)], 0)
  
      loss = loss + tf.reduce_mean(kl)
  
      predict = tf.nn.sigmoid(logits)
      neg_predict = tf.nn.sigmoid(neg_logits)
      label = tf.ones_like(logits)
      neg_label = tf.zeros_like(neg_logits)
      acc = tf_euler.utils.metrics.acc_score(
          tf.concat([label, neg_label], axis=2),
          tf.concat([predict, neg_predict], axis=2),
      )
  
      embedding = self.embed(inputs)
  
      return (embedding, loss, "acc", acc)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import tensorflow
  import tf_euler
  from tf_euler.python.utils.encoders import ShallowEncoder
  from tf_euler.python.mp_utils.base_gnn import BaseGNNNet
  from tf_euler.python.mp_utils.base_gae import BaseGraphAutoEncoder
label_desc: Use image node_id 4 for calling the VariationalGraphAutoEncoder obj's underlying member method code with example usage: obj.__call__(inputs) and returns: embedding,  loss,  str,  acc