code: def __init__(
      self,
      hidden_channels,
      output_channels,
      num_radial,
      num_spherical,
      num_layers,
      mid_emb,
      act=swish,
      num_pos_emb=16,
      dropout=0,
      level="allatom",
  ):
      super(InteractionBlock, self).__init__()
      self.act = act
      self.dropout = nn.Dropout(dropout)
  
      self.conv0 = EdgeGraphConv(hidden_channels, hidden_channels)
      self.conv1 = EdgeGraphConv(hidden_channels, hidden_channels)
      self.conv2 = EdgeGraphConv(hidden_channels, hidden_channels)
  
      self.lin_feature0 = TwoLinear(
          num_radial * num_spherical**2, mid_emb, hidden_channels
      )
      if level == "aminoacid":
          self.lin_feature1 = TwoLinear(
              num_radial * num_spherical, mid_emb, hidden_channels
          )
      elif level == "backbone" or level == "allatom":
          self.lin_feature1 = TwoLinear(
              3 * num_radial * num_spherical, mid_emb, hidden_channels
          )
      self.lin_feature2 = TwoLinear(
          num_pos_emb, mid_emb, hidden_channels
      )
  
      self.lin_1 = Linear(hidden_channels, hidden_channels)
      self.lin_2 = Linear(hidden_channels, hidden_channels)
  
      self.lin0 = Linear(hidden_channels, hidden_channels)
      self.lin1 = Linear(hidden_channels, hidden_channels)
      self.lin2 = Linear(hidden_channels, hidden_channels)
  
      self.lins_cat = torch.nn.ModuleList()
      self.lins_cat.append(Linear(3 * hidden_channels, hidden_channels))
      for _ in range(num_layers - 1):
          self.lins_cat.append(Linear(hidden_channels, hidden_channels))
  
      self.lins = torch.nn.ModuleList()
      for _ in range(num_layers - 1):
          self.lins.append(Linear(hidden_channels, hidden_channels))
      self.final = Linear(hidden_channels, output_channels)
  
      self.reset_parameters()
  
imports: from torch_geometric.nn import inits, MessagePassing
  from torch_geometric.nn import radius_graph
  from .features import d_angle_emb, d_theta_phi_emb
  from torch_scatter import scatter
  from torch_sparse import matmul
  import torch
  from torch import nn
  from torch.nn import Embedding
  import torch.nn.functional
  import numpy
label_desc: Use image node_id 1 to create a new InteractionBlock object from inherited base classes: torch.nn with example: obj = InteractionBlock(hidden_channels, output_channels, num_radial, num_spherical, num_layers, mid_emb, act, num_pos_emb, dropout, level)