code: def embed(self, n_id):
      batch_size = tf.shape(n_id)[0]
      n_id = tf.reshape(n_id, [-1])
      mu_emb = self.gnn(n_id)
      # log_var = self.gnn(n_id)
      log_var = self.log_var_encoder(n_id)
      emb = mu_emb + self.radius * tf.random.normal(
          tf.shape(log_var)
      ) * tf.math.sqrt(tf.math.exp(log_var))
      emb = tf.reshape(emb, [batch_size, -1, self.dim])
      if self.train:
          return mu_emb, log_var, emb
      else:
          return (
              mu_emb,
              log_var,
              tf.reshape(mu_emb, [batch_size, -1, self.dim]),
          )
  
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 3 for calling the VariationalGraphAutoEncoder obj's underlying member method code with example usage: obj.embed(n_id) and returns: mu_emb,  log_var,  emb, mu_emb,  log_var,  tf