code: def __init__(
      self,
      dim,
      dropout=0.5,
      activation=F.relu,
      virtual_node=False,
      virtual_node_agg=True,
      k=4,
      last_layer=False,
      conv_type="gin",
      edge_embedding=None,
  ):
      super().__init__()
      self.edge_embed = edge_embedding
      self.conv_type = conv_type
      if conv_type == "gin+":
          self.conv = GINEPLUS(MLP(dim, dim), dim, k=k)
      elif conv_type == "gcn":
          self.conv = gnn.GCNConv(dim, dim)
      self.norm = nn.BatchNorm1D(dim)
      self.act = activation or None
      self.last_layer = last_layer
  
      self.dropout_ratio = dropout
  
      self.virtual_node = virtual_node
      self.virtual_node_agg = virtual_node_agg
      if self.virtual_node and self.virtual_node_agg:
          self.vn_aggregator = VNAgg(dim, conv_type=conv_type)
  
imports: import paddle
  import paddle.nn
  import paddle.nn.functional
  import pgl
  import pgl.nn
  from pgl.nn import functional
  from mol_encoder import AtomEncoder, BondEncoder
label_desc: Use image node_id 1 to create a new ConvBlock object from inherited base classes: nn with example: obj = ConvBlock(dim, dropout, activation, virtual_node, virtual_node_agg, k, last_layer, conv_type, edge_embedding)