class_docstr: Create the structure of the graph convolutional network in the MOGONET method.
  For more information please refer to the MOGONET paper.
  
  Args:
      in_channels (int): Size of each input sample.
      hidden_channels (List[int]): A list of sizes of hidden layers.
      dropout (float): Probability of an element to be zeroed.
code: def forward(self, x: Tensor, edge_index: SparseTensor) -> Tensor:
      x = self.conv1(x, edge_index)
      x = F.leaky_relu(x, 0.25)
      x = F.dropout(x, p=self.dropout, training=self.training)
      x = self.conv2(x, edge_index)
      x = F.leaky_relu(x, 0.25)
      x = F.dropout(x, p=self.dropout, training=self.training)
      x = self.conv3(x, edge_index)
      x = F.leaky_relu(x, 0.25)
  
      return x
  
imports: from typing import List, Optional, Union
  import torch
  import torch.nn.functional
  import torch_sparse
  from torch import Tensor
  from torch.nn import Module, Parameter
  from torch.nn.init import xavier_normal_
  from torch_geometric.nn.aggr import Aggregation
  from torch_geometric.nn.conv import MessagePassing
  from torch_sparse import SparseTensor
label_desc: Use image node_id 2 for calling the MogonetGCN obj's underlying member method code with example usage: obj.forward(x, edge_index) and returns: x