class_docstr: Performs self convolution to each node
docstr: Update node representations.
  
  Parameters
  ----------
  node_feats: torch.Tensor
      The node features. The shape is `(N, Node_feature_size)`.
  
  Returns
  -------
  node_feats: torch.Tensor
      The updated node features. The shape is `(N, Node_feature_size)`.
docstr_tok: ["Update","node","representations",".","Parameters","--","--","--","--","--","node_feats",":","torch.Tensor","The","node","features",".","The","shape","is","`","(","N",",","Node_feature_size",")","`",".","Returns","--","--","--","-","node_feats",":","torch.Tensor","The","updated","node","features",".","The","shape","is","`","(","N",",","Node_feature_size",")","`","."]
code: def forward(self, node_feats):
      """
      Update node representations.
  
      Parameters
      ----------
      node_feats: torch.Tensor
          The node features. The shape is `(N, Node_feature_size)`.
  
      Returns
      -------
      node_feats: torch.Tensor
          The updated node features. The shape is `(N, Node_feature_size)`.
  
      """
  
      node_feats = self.conv_weights(node_feats)
      if self.UseBN:
          node_feats = self.batch_norm(node_feats)
  
      node_feats = self.activation(node_feats)
      node_feats = self.dropout(node_feats)
  
      return node_feats
  
imports: import torch
  import torch.nn
  from deepchem.models.torch_models.torch_model import TorchModel
  from deepchem.models.losses import L2Loss
label_desc: Use image node_id 2 for calling the Atom_Wise_Convolution obj's underlying member method code with example usage: obj.forward(node_feats) and returns: node_feats