In the literature, it is claimed that you have examined three candidate node-edge message communication modules, including Inner Product, GRU and MLP.
While in your codes, it seems that you haven't designed options to choose the kernels used in the MPNEncoder.

It seems that you just used a simple "add" to update the node hidden state in the code.
Is that right? Have I missed something? Have you implemented the three kernels?