class_docstr: The internal module of a supervertex, which is composed of an internal feature layer and multiple internal
  aggregation layers.
  
  Args:
      in_channels (int): the dimension of node features on this supervertex.
      num_edge_type (int): the number of edge types on this supervertex.
      start_supervertex (bool): whether this supervertex is a start supervertex on the supergraph.
      setting (SuperVertexParaSetting): supervertex parameter settings.
class_docstr_tok: ["The","internal","module","of","a","supervertex",",","which","is","composed","of","an","internal","feature","layer","and","multiple","internal","aggregation","layers",".","Args",":","in_channels","(","int",")",":","the","dimension","of","node","features","on","this","supervertex",".","num_edge_type","(","int",")",":","the","number","of","edge","types","on","this","supervertex",".","start_supervertex","(","bool",")",":","whether","this","supervertex","is","a","start","supervertex","on","the","supergraph",".","setting","(","SuperVertexParaSetting",")",":","supervertex","parameter","settings","."]
docstr: internal aggregation layers
docstr_tok: ["internal","aggregation","layers"]
code: def __init_inter_agg_layer__(self):
      """internal aggregation layers"""
  
      # compute the dim of input of the first internal aggregation layer
      self.in_agg_channels = self.setting.inter_feat_channels
      if not self.start_supervertex:
          if self.setting.mode == "cat":
              if not self.setting.exter_agg_channels_dict:
                  error_msg = "`exter_agg_channels_dict` is not set."
                  logging.error(error_msg)
                  raise ValueError(error_msg)
              self.in_agg_channels += sum(
                  self.setting.exter_agg_channels_dict.values()
              )
          elif self.setting.mode == "add":
              tmp = set(
                  [self.in_agg_channels]
                  + list(self.setting.exter_agg_channels_dict.values())
              )
              if len(tmp) != 1:
                  error_msg = "`in_agg_channels` should be the same as any element in `exter_agg_channels_dict`."
                  logging.error(error_msg)
                  raise ValueError(error_msg)
          else:
              error_msg = "`mode` value is invalid. Use 'cat' or 'add'."
              logging.error(error_msg)
              raise ValueError(error_msg)
  
      # create and initialize the internal aggregation layers
      self.num_inter_agg_layer = len(
          self.setting.inter_agg_channels_list
      )
      tmp_dim = [
          self.in_agg_channels
      ] + self.setting.inter_agg_channels_list
  
      if self.setting.concat_output:
          self.out_channels = sum(tmp_dim)
  
      if self.multirelational:
          # using RGCN if there are multiple edge types
          after_relu = [
              False if i == 0 else True
              for i in range(self.num_inter_agg_layer)
          ]
          self.inter_agg_layers = torch.nn.ModuleList(
              [
                  RGCNEncoderLayer(
                      tmp_dim[i],
                      tmp_dim[i + 1],
                      self.num_edge_type,
                      self.setting.num_bases,
                      after_relu[i],
                  )
                  for i in range(self.num_inter_agg_layer)
              ]
          )
      else:
          # using GCN if there is only one edge type
          self.inter_agg_layers = torch.nn.ModuleList(
              [
                  GCNEncoderLayer(
                      tmp_dim[i], tmp_dim[i + 1], cached=True
                  )
                  for i in range(self.num_inter_agg_layer)
              ]
          )
  
imports: import logging
  from typing import Dict
  import torch
  import torch.nn.functional
  from torch.nn import Module
  from kale.embed.gcn import GCNEncoderLayer, RGCNEncoderLayer
  from kale.prepdata.supergraph_construct import SuperGraph, SuperVertex, SuperVertexParaSetting
label_desc: Use image node_id 3 for calling the GripNetInternalModule obj's underlying member method code with example usage: obj.__init_inter_agg_layer__() without return types