Hello, I am having a hard time understanding a little bit the notations of DGL. Initially, the edges information are in a form of (node index, node linked to). For instance, we have ‘h’ as the embeddings gotten in the model. Initial H is equal to the node features. Then in normal syntax we have a propagation step through the Adjacency matrix = > 'Z = (Ahat H \theta) with A_hat following a symmetric normalization. In general notations we first multiply H by weights and then adding features from neighboring nodes v_j \in N(i) and updating features of node v_i. So, the **gcn_msg** function gathers the info from features from all neighboring nodes by selecting the node index and getting all the connected nodes data. And then **gcn_Reduces** does the Aggregation to finally self.nodes update in the memory the new “data” for all nodes?

def message_func(edges):

return {‘m’: edges.src[‘h’]}

def forward(self, h):

if self.dropout:

h = self.dropout(h)

self.g.ndata[‘h’] = torch.mm(h, self.weight)

self.g.update_all(gcn_msg, gcn_reduce, self.node_update)

h = self.g.ndata.pop(‘h’)

return h

Thank you in advance for all your time and willingness to help.