def METHOD_NAME(self, g, l_g):
    g.apply_edges(self.edge_transfer)
    # nodes correspond to edges and edges correspond to nodes in the original graphs
    # node: d, rbf, o, rbf_env, x_kj, x_ji
    for k, v in g.edata.items():
        l_g.ndata[k] = v
    l_g_reverse = dgl.reverse(l_g, copy_edata=True)
    l_g_reverse.update_all(self.msg_func, fn.sum("x_kj", "m_update"))
    g.edata["m_update"] = self.up_projection(l_g_reverse.ndata["m_update"])
    if self.activation is not None:
        g.edata["m_update"] = self.activation(g.edata["m_update"])
    # Transformations before skip connection
    g.edata["m_update"] = g.edata["m_update"] + g.edata["x_ji"]
    for layer in self.layers_before_skip:
        g.edata["m_update"] = layer(g.edata["m_update"])
    g.edata["m_update"] = self.final_before_skip(g.edata["m_update"])
    if self.activation is not None:
        g.edata["m_update"] = self.activation(g.edata["m_update"])
    # Skip connection
    g.edata["m"] = g.edata["m"] + g.edata["m_update"]
    # Transformations after skip connection
    for layer in self.layers_after_skip:
        g.edata["m"] = layer(g.edata["m"])
    return g