class_docstr: An implementation of the Efficient Graph Convolution (EGC-S) layer of
  
  @misc{tailor2021adaptive,
    title={Adaptive Filters and Aggregator Fusion for Efficient Graph Convolutions},
    author={Shyam A. Tailor and Felix L. Opolka and Pietro Liò and Nicholas D. Lane},
    year={2021},
    eprint={2104.01481},
    note={GNNSys Workshop, MLSys '21 and HAET Workshop, ICLR '21}
  }
  
  Differences compared to the paper:
  * Allow using a single but different aggregator similar to EGC-M.
  * Different bases per edge-type
code: def __init__(
      self,
      input_state_dimension: int,
      output_state_dimension: int,
      num_edge_types: int,
      message_aggregation_function: str,
      num_bases: int = 4,
      num_heads: int = 8,
      dropout_rate: float = 0.0,
  ):
      super().__init__()
      self.__input_state_dim = input_state_dimension
      assert output_state_dimension % num_heads == 0
      self.__aggregation_fn = message_aggregation_function
  
      self.__num_bases = num_bases
      self.__num_heads = num_heads
      self.__output_state_dim = output_state_dimension
  
      self.__dropout = nn.Dropout(p=dropout_rate)
  
      self.__bases = nn.ModuleList(
          [
              nn.Linear(
                  input_state_dimension,
                  num_bases * output_state_dimension,
                  bias=False,
              )
              for _ in range(num_edge_types)
          ]
      )
      self.__weight_coeffs = nn.Linear(
          input_state_dimension, num_heads * num_bases
      )
  
file_path: ptgnn/ptgnn/neuralmodels/gnn/messagepassing/egcmessagepassing.py
imports: import torch
  from torch import nn
  from typing import Dict, List, Tuple
  from ptgnn.neuralmodels.gnn.messagepassing.abstractmessagepassing import AbstractMessagePassingLayer
label_desc: Use image node_id 1 to create a new EGCMessagePassingLayer object from inherited base classes: AbstractMessagePassingLayer with example: obj = EGCMessagePassingLayer(input_state_dimension, output_state_dimension, num_edge_types, message_aggregation_function, num_bases, num_heads, dropout_rate)