def METHOD_NAME(self, mol_graph, mol_line_graph):
    n_nodes = mol_graph.num_nodes()
    mol_graph.apply_edges(
        func=lambda edges: {"src_x": edges.src["x"]},
    )
    mol_line_graph.ndata.update(mol_graph.edata)
    e_repr = mol_line_graph.ndata
    bond_features = e_repr["x"]
    source_features = e_repr["src_x"]
    features = torch.cat([source_features, bond_features], 1)
    msg_input = self.W_i(features)
    mol_line_graph.ndata.update(
        {
            "msg_input": msg_input,
            "msg": F.relu(msg_input),
            "accum_msg": torch.zeros_like(msg_input),
        }
    )
    mol_graph.ndata.update(
        {
            "m": bond_features.new(n_nodes, self.hidden_size).zero_(),
            "h": bond_features.new(n_nodes, self.hidden_size).zero_(),
        }
    )
    for i in range(self.depth - 1):
        mol_line_graph.update_all(
            DGLF.copy_u("msg", "msg"), DGLF.sum("msg", "accum_msg")
        )
        mol_line_graph.apply_nodes(self.loopy_bp_updater)
    mol_graph.edata.update(mol_line_graph.ndata)
    mol_graph.update_all(DGLF.copy_e("msg", "msg"), DGLF.sum("msg", "m"))
    mol_graph.apply_nodes(self.gather_updater)
    return mol_graph