def METHOD_NAME(self, bipartites):
    if isinstance(bipartites, dgl.DGLGraph):
        bipartites = [bipartites] * len(self.conv)
        if self.use_cluster_feat:
            neighbor_x = torch.cat(
                [
                    bipartites[0].ndata["features"],
                    bipartites[0].ndata["cluster_features"],
                ],
                axis=1,
            )
        else:
            neighbor_x = bipartites[0].ndata["features"]
        for i in range(len(self.conv)):
            neighbor_x = self.conv[i](bipartites[i], neighbor_x)
        output_bipartite = bipartites[-1]
        output_bipartite.ndata["conv_features"] = neighbor_x
    else:
        if self.use_cluster_feat:
            neighbor_x_src = torch.cat(
                [
                    bipartites[0].srcdata["features"],
                    bipartites[0].srcdata["cluster_features"],
                ],
                axis=1,
            )
            center_x_src = torch.cat(
                [
                    bipartites[1].srcdata["features"],
                    bipartites[1].srcdata["cluster_features"],
                ],
                axis=1,
            )
        else:
            neighbor_x_src = bipartites[0].srcdata["features"]
            center_x_src = bipartites[1].srcdata["features"]
        for i in range(len(self.conv)):
            neighbor_x_dst = neighbor_x_src[: bipartites[i].num_dst_nodes()]
            neighbor_x_src = self.conv[i](
                bipartites[i], (neighbor_x_src, neighbor_x_dst)
            )
            center_x_dst = center_x_src[: bipartites[i + 1].num_dst_nodes()]
            center_x_src = self.conv[i](
                bipartites[i + 1], (center_x_src, center_x_dst)
            )
        output_bipartite = bipartites[-1]
        output_bipartite.srcdata["conv_features"] = neighbor_x_src
        output_bipartite.dstdata["conv_features"] = center_x_src
    output_bipartite.apply_edges(self.pred_conn)
    output_bipartite.edata["prob_conn"] = F.softmax(
        output_bipartite.edata["pred_conn"], dim=1
    )
    output_bipartite.update_all(
        self.pred_den_msg, fn.mean("pred_den_msg", "pred_den")
    )
    return output_bipartite