code: def call(self, inputs, training=False):
      atom_features = inputs[0]
      degree_slice = tf.cast(inputs[1], dtype=tf.int32)
      membership = tf.cast(inputs[2], dtype=tf.int32)
      n_samples = tf.cast(inputs[3], dtype=tf.int32)
      deg_adjs = [
          tf.cast(deg_adj, dtype=tf.int32) for deg_adj in inputs[4:]
      ]
  
      in_layer = atom_features
      for i in range(len(self.graph_convs)):
          gc_in = [in_layer, degree_slice, membership] + deg_adjs
          gc1 = self.graph_convs[i](gc_in)
          if self.batch_norms[i] is not None:
              gc1 = self.batch_norms[i](gc1, training=training)
          if training and self.dropouts[i] is not None:
              gc1 = self.dropouts[i](gc1, training=training)
          gp_in = [gc1, degree_slice, membership] + deg_adjs
          in_layer = self.graph_pools[i](gp_in)
      dense = self.dense(in_layer)
      if self.batch_norms[-1] is not None:
          dense = self.batch_norms[-1](dense, training=training)
      if training and self.dropouts[-1] is not None:
          dense = self.dropouts[-1](dense, training=training)
      neural_fingerprint = self.graph_gather(
          [dense, degree_slice, membership] + deg_adjs
      )
      if self.mode == "classification":
          logits = self.reshape(self.reshape_dense(neural_fingerprint))
          logits = self.trim([logits, n_samples])
          output = self.softmax(logits)
          outputs = [output, logits, neural_fingerprint]
      else:
          output = self.regression_dense(neural_fingerprint)
          output = self.trim([output, n_samples])
          if self.uncertainty:
              log_var = self.uncertainty_dense(neural_fingerprint)
              log_var = self.uncertainty_trim([log_var, n_samples])
              var = self.uncertainty_activation(log_var)
              outputs = [
                  output,
                  var,
                  output,
                  log_var,
                  neural_fingerprint,
              ]
          else:
              outputs = [output, neural_fingerprint]
  
      return outputs
  
imports: from collections.abc import Sequence
  import deepchem
  import numpy
  import tensorflow
  from typing import List, Union, Tuple, Iterable, Dict, Optional
  from deepchem.utils.typing import OneOrMany, LossFn, ActivationFn
  from deepchem.data import Dataset, pad_features
  from deepchem.feat.mol_graphs import ConvMol
  from deepchem.metrics import to_one_hot
  from deepchem.models import KerasModel, layers
  from deepchem.models.losses import L2Loss, SoftmaxCrossEntropy, Loss
  from tensorflow.keras.layers import Input, Dense, Reshape, Softmax, Dropout, Activation, BatchNormalization
  import warnings
label_desc: Use image node_id 2 for calling the _GraphConvKerasModel obj's underlying member method code with example usage: obj.call(inputs, training) and returns: outputs