code: def __init__(
      self,
      in_dim,
      out_dim,
      num_stacks=1,
      num_layers=1,
      activation=None,
      dropout=0.0,
      bias=True,
  ):
      super(ARMAConv, self).__init__()
  
      self.in_dim = in_dim
      self.out_dim = out_dim
      self.K = num_stacks
      self.T = num_layers
      self.activation = activation
      self.dropout = nn.Dropout(p=dropout)
  
      # init weight
      self.w_0 = nn.ModuleDict(
          {
              str(k): nn.Linear(in_dim, out_dim, bias=False)
              for k in range(self.K)
          }
      )
      # deeper weight
      self.w = nn.ModuleDict(
          {
              str(k): nn.Linear(out_dim, out_dim, bias=False)
              for k in range(self.K)
          }
      )
      # v
      self.v = nn.ModuleDict(
          {
              str(k): nn.Linear(in_dim, out_dim, bias=False)
              for k in range(self.K)
          }
      )
      # bias
      if bias:
          self.bias = nn.Parameter(
              torch.Tensor(self.K, self.T, 1, self.out_dim)
          )
      else:
          self.register_parameter("bias", None)
  
      self.reset_parameters()
  
imports: import torch
  from torch import nn
  import torch.nn.functional
  import dgl
  from dgl.nn.pytorch.conv import *
  import dgl.function
  import math
  from dgl.utils import expand_as_pair
  from dgl.nn.functional import edge_softmax
  from torch.nn import Parameter
  import torch
  from torch import Tensor
  from ..scatter_utils import *
  from typing import Optional, Tuple, Union
label_desc: Use image node_id 1 to create a new ARMAConv object from inherited base classes: nn with example: obj = ARMAConv(in_dim, out_dim, num_stacks, num_layers, activation, dropout, bias)