Implement Group Equivariant Convolutions
Created by: chrisrothUT
I plan to implement group equivariant convolutions as described in: http://proceedings.mlr.press/v48/cohenc16.pdf
This requires access to the algebra of the lattice symmetry group in order to map from convolution filters of shape [out_filters, in_filters, n_group] to a linear map [out_filtersn_group, in_filtersn_group].
My current plan is to add a property to Graph called group_algebra which is a tensor [n_group, n_group, n_group] that maps from absolute to relative poses. It will return None aside from a few graphs where I will manually implement it for.
We also need to modify DenseSymm (which would be the first layer) so that it can output the graph isomorphisms in a particular order; right now it just uses the order NetworkX generates them in.
As an aside, isomorphisms_iter() may have some bugs. See the following code:
g = nk.graph.Hypercube(length=4, n_dim=2, pbc=True) print(len(g.automorphisms()))
I get 384 when it should be 128.