code: def forward(self, x: Tensor, adj_t: SparseTensor, *args) -> Tensor:
      if len(args) > 0:
          batch_size = args[0]
          n_id = args[1]
          P_bar = adj_t[:, batch_size:]
          P_tilde = P_bar.t()
      else:
          print("no batch_size in the forward of conv")
  
      if self.drop_input:
          x = F.dropout(x, p=self.dropout, training=self.training)
  
      x = x_0 = self.lins[0](x).relu_()
      x = F.dropout(x, p=self.dropout, training=self.training)
  
      for conv, bn, hist in zip(
          self.convs[:-1], self.bns[:-1], self.histories
      ):
          x_bar_out_batch = P_tilde.spmm(x[:batch_size]).detach()
  
          h = conv(x, x_0, adj_t)
          if self.batch_norm:
              h = bn(h)
          if self.residual:
              h += x[: h.size(0)]
          x = h.relu_()
  
          # the batch_norm here will make the gamma=0.0 different from the original one
          if n_id is not None and batch_size is not None:
              with torch.no_grad():
                  if self.batch_norm:
                      bn.eval()
                      his_outbatch_emb = bn(
                          conv.transformation(
                              x_bar_out_batch, x_0[batch_size:]
                          )
                      ).relu()
                      hist.forward(his_outbatch_emb, n_id[batch_size:])
                      bn.train()
                  else:
                      his_outbatch_emb = conv.transformation(
                          x_bar_out_batch, x_0[batch_size:]
                      ).relu()
                      hist.forward(his_outbatch_emb, n_id[batch_size:])
  
          x = self.push_and_pull(hist, x, *args)
          x = F.dropout(x, p=self.dropout, training=self.training)
  
      h = self.convs[-1](x, x_0, adj_t)
      if self.batch_norm:
          h = self.bns[-1](h)
      if self.residual:
          h += x[: h.size(0)]
      x = h.relu_()
      x = F.dropout(x, p=self.dropout, training=self.training)
      x = self.lins[1](x)
      return x
  
imports: from typing import Optional
  from torch_geometric.typing import Adj, OptTensor
  import torch.nn.functional
  from torch.nn import ModuleList, Linear, BatchNorm1d
  from torch_geometric.nn import GCN2Conv
  import torch
  from torch import Tensor
  from torch_sparse import SparseTensor
  from ..models import ScalableGNN
label_desc: Use image node_id 5 for calling the GCN2 obj's underlying member method code with example usage: obj.forward(x, adj_t) and returns: x