I’m looking at a broad class of graph neural network update operations defined as follows:

```
for each edge `k` connecting vertices `s` and `r`
ē_k = ϕ_e(concat(v_s, v_r, e_k))
for each node `i`
v_{i, e} = Pool({ē_k : k ∈ E(i)})
v̄_i = ϕ_v(concat(v_{i, e}, v_i))
```

where `e_k`

is the embedding of edge `k`

, and `ē_k`

is its update, `v_i`

is the embedding of node `i`

and ` v̄_i`

is its update, `E(i)`

is the set of edges that lead into node `i`

, and `ϕ_e`

and `ϕ_v`

are MLPs. This update is similar to one used for materials modeling here: https://doi.org/10.1021/acs.chemmater.9b01294

Is the functionality needed for an update like this currently available in GraphNeuralNetworks.jl? If not, are there any pointers on what functions would be needed to implement it?

Thanks!