class_docstr:  The ProNet from the "Learning Protein Representations via Complete 3D Graph Networks" paper.
  
  Args:
      level: (str, optional): The level of protein representations. It could be :obj:`aminoacid`, obj:`backbone`, and :obj:`allatom`. (default: :obj:`aminoacid`)
      num_blocks (int, optional): Number of building blocks. (default: :obj:`4`)
      hidden_channels (int, optional): Hidden embedding size. (default: :obj:`128`)
      out_channels (int, optional): Size of each output sample. (default: :obj:`1`)
      mid_emb (int, optional): Embedding size used for geometric features. (default: :obj:`64`)
      num_radial (int, optional): Number of radial basis functions. (default: :obj:`6`)
      num_spherical (int, optional): Number of spherical harmonics. (default: :obj:`2`)
      cutoff (float, optional): Cutoff distance for interatomic interactions. (default: :obj:`10.0`)
      max_num_neighbors (int, optional): Max number of neighbors during graph construction. (default: :obj:`32`)
      int_emb_layers (int, optional): Number of embedding layers in the interaction block. (default: :obj:`3`)
      out_layers (int, optional): Number of layers for features after interaction blocks. (default: :obj:`2`)
      num_pos_emb (int, optional): Number of positional embeddings. (default: :obj:`16`)
      dropout (float, optional): Dropout. (default: :obj:`0`)
      data_augment_eachlayer (bool, optional): Data augmentation tricks. If set to :obj:`True`, will add noise to the node features before each interaction block. (default: :obj:`False`)
      euler_noise (bool, optional): Data augmentation tricks. If set to :obj:`True`, will add noise to Euler angles. (default: :obj:`False`)
      
class_docstr_tok: ["The","ProNet","from","the","``","Learning","Protein","Representations","via","Complete","3D","Graph","Networks","''","paper",".","Args",":","level",":","(","str",",","optional",")",":","The","level","of","protein","representations",".","It","could","be",":","obj",":","`","aminoacid","`",",","obj",":","`","backbone","`",",","and",":","obj",":","`","allatom","`",".","(","default",":",":","obj",":","`","aminoacid","`",")","num_blocks","(","int",",","optional",")",":","Number","of","building","blocks",".","(","default",":",":","obj",":","`","4","`",")","hidden_channels","(","int",",","optional",")",":","Hidden","embedding","size",".","(","default",":",":","obj",":","`","128","`",")","out_channels","(","int",",","optional",")",":","Size","of","each","output","sample",".","(","default",":",":","obj",":","`","1","`",")","mid_emb","(","int",",","optional",")",":","Embedding","size","used","for","geometric","features",".","(","default",":",":","obj",":","`","64","`",")","num_radial","(","int",",","optional",")",":","Number","of","radial","basis","functions",".","(","default",":",":","obj",":","`","6","`",")","num_spherical","(","int",",","optional",")",":","Number","of","spherical","harmonics",".","(","default",":",":","obj",":","`","2","`",")","cutoff","(","float",",","optional",")",":","Cutoff","distance","for","interatomic","interactions",".","(","default",":",":","obj",":","`","10.0","`",")","max_num_neighbors","(","int",",","optional",")",":","Max","number","of","neighbors","during","graph","construction",".","(","default",":",":","obj",":","`","32","`",")","int_emb_layers","(","int",",","optional",")",":","Number","of","embedding","layers","in","the","interaction","block",".","(","default",":",":","obj",":","`","3","`",")","out_layers","(","int",",","optional",")",":","Number","of","layers","for","features","after","interaction","blocks",".","(","default",":",":","obj",":","`","2","`",")","num_pos_emb","(","int",",","optional",")",":","Number","of","positional","embeddings",".","(","default",":",":","obj",":","`","16","`",")","dropout","(","float",",","optional",")",":","Dropout",".","(","default",":",":","obj",":","`","0","`",")","data_augment_eachlayer","(","bool",",","optional",")",":","Data","augmentation","tricks",".","If","set","to",":","obj",":","`","True","`",",","will","add","noise","to","the","node","features","before","each","interaction","block",".","(","default",":",":","obj",":","`","False","`",")","euler_noise","(","bool",",","optional",")",":","Data","augmentation","tricks",".","If","set","to",":","obj",":","`","True","`",",","will","add","noise","to","Euler","angles",".","(","default",":",":","obj",":","`","False","`",")"]
code: def __init__(
      self,
      level="aminoacid",
      num_blocks=4,
      hidden_channels=128,
      out_channels=1,
      mid_emb=64,
      num_radial=6,
      num_spherical=2,
      cutoff=10.0,
      max_num_neighbors=32,
      int_emb_layers=3,
      out_layers=2,
      num_pos_emb=16,
      dropout=0,
      data_augment_eachlayer=False,
      euler_noise=False,
  ):
      super(ProNet, self).__init__()
      self.cutoff = cutoff
      self.max_num_neighbors = max_num_neighbors
      self.num_pos_emb = num_pos_emb
      self.data_augment_eachlayer = data_augment_eachlayer
      self.euler_noise = euler_noise
      self.level = level
      self.act = swish
  
      self.feature0 = d_theta_phi_emb(
          num_radial=num_radial,
          num_spherical=num_spherical,
          cutoff=cutoff,
      )
      self.feature1 = d_angle_emb(
          num_radial=num_radial,
          num_spherical=num_spherical,
          cutoff=cutoff,
      )
  
      if level == "aminoacid":
          self.embedding = Embedding(num_aa_type, hidden_channels)
      elif level == "backbone":
          self.embedding = torch.nn.Linear(
              num_aa_type + num_bb_embs, hidden_channels
          )
      elif level == "allatom":
          self.embedding = torch.nn.Linear(
              num_aa_type + num_bb_embs + num_side_chain_embs,
              hidden_channels,
          )
      else:
          print("No supported model!")
  
      self.interaction_blocks = torch.nn.ModuleList(
          [
              InteractionBlock(
                  hidden_channels=hidden_channels,
                  output_channels=hidden_channels,
                  num_radial=num_radial,
                  num_spherical=num_spherical,
                  num_layers=int_emb_layers,
                  mid_emb=mid_emb,
                  act=self.act,
                  num_pos_emb=num_pos_emb,
                  dropout=dropout,
                  level=level,
              )
              for _ in range(num_blocks)
          ]
      )
  
      self.lins_out = torch.nn.ModuleList()
      for _ in range(out_layers - 1):
          self.lins_out.append(Linear(hidden_channels, hidden_channels))
      self.lin_out = Linear(hidden_channels, out_channels)
  
      self.relu = nn.ReLU()
      self.dropout = nn.Dropout(dropout)
  
      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 ProNet object from inherited base classes: nn with example: obj = ProNet(level, num_blocks, hidden_channels, out_channels, mid_emb, num_radial, num_spherical, cutoff, max_num_neighbors, int_emb_layers, out_layers, num_pos_emb, dropout, data_augment_eachlayer, euler_noise)