code: def forward(
      self, node_emb: Tensor, edge_emb: Tensor, i: Tensor
  ) -> Tensor:
      c1 = torch.cat([node_emb[i], edge_emb], dim=1)
      c1 = self.bn_c1(self.lin_c1(c1))
      c1_filter, c1_core = c1.chunk(2, dim=1)
      c1_filter = c1_filter.sigmoid()
      c1_core = c1_core.tanh()
      c1_emb = scatter(
          c1_filter * c1_core,
          i,
          dim=0,
          dim_size=node_emb.size(0),
          reduce="sum",
      )
      c1_emb = self.bn(c1_emb)
  
      return (node_emb + c1_emb).tanh()
  
imports: import torch
  from torch import Tensor
  from torch.nn import BatchNorm1d, Embedding, Linear, ModuleList, Sequential
  from torch_geometric.nn import radius_graph
  from torch_geometric.nn.inits import reset
  from torch_geometric.nn.models.dimenet import triplets
  from torch_geometric.nn.models.schnet import ShiftedSoftplus
  from torch_geometric.typing import OptTensor
  from torch_geometric.utils import scatter
label_desc: Use image node_id 3 for calling the NodeBlock obj's underlying member method code with example usage: obj.forward(node_emb, edge_emb, i) and returns: unknown