class_docstr: General wrapper for layers
class_docstr_tok: ["General","wrapper","for","layers"]
code: def forward(self, batch):
      batch = self.layer(batch)
      if isinstance(batch, torch.Tensor):
          batch = self.post_layer(batch)
          if self.has_l2norm:
              batch = F.normalize(batch, p=2, dim=1)
      else:
          batch.node_feature = self.post_layer(batch.node_feature)
          if self.has_l2norm:
              batch.node_feature = F.normalize(
                  batch.node_feature, p=2, dim=1
              )
      return batch
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  import torch_geometric
  import graphgym.register
  from graphgym.config import cfg
  from graphgym.contrib.layer.generalconv import GeneralConvLayer, GeneralEdgeConvLayer
  from graphgym.models.act import act_dict
label_desc: Use image node_id 2 for calling the GeneralLayer obj's underlying member method code with example usage: obj.forward(batch) and returns: batch