class_docstr: Simple graph convolution layer.
  
  :param in_features: The number of input features.
  :param out_features: The number of output features.
  :param bias: Specify if a bias should be used.
docstr: Compute the forward pass of the layer with the modified adjacency matrix a_hat.
  
  :param xx: Input feature tensor.
  :param adj_hat: Preprocessed (normalized in row and column) adjacency matrix.
  :return: Output tensor.
docstr_tok: ["Compute","the","forward","pass","of","the","layer","with","the","modified","adjacency","matrix","a_hat",".",":","param","xx",":","Input","feature","tensor",".",":","param","adj_hat",":","Preprocessed","(","normalized","in","row","and","column",")","adjacency","matrix",".",":","return",":","Output","tensor","."]
code: def forward(
      self, xx: torch.Tensor, adj_hat: torch.Tensor
  ) -> torch.Tensor:
      """Compute the forward pass of the layer with the modified adjacency matrix a_hat.
  
      :param xx: Input feature tensor.
      :param adj_hat: Preprocessed (normalized in row and column) adjacency matrix.
      :return: Output tensor.
      """
      support = torch.matmul(xx, self.weight)
      output = torch.matmul(adj_hat, support)
      if self.bias is not None:
          return output + self.bias
      else:
          return output
  
imports: from collections import OrderedDict
  from typing import Union, List, Sequence, Dict, Optional, Callable
  import numpy
  import torch
  from torch import nn
  from torch.nn.parameter import Parameter
  from maze.core.annotations import override
  from maze.core.utils.factory import Factory
  from maze.perception.blocks.shape_normalization import ShapeNormalizationBlock
label_desc: Use image node_id 2 for calling the GraphConvLayer obj's underlying member method code with example usage: obj.forward(xx, adj_hat) and returns: unknown, output