def METHOD_NAME(self, mesh):
    """
    Notes
    -----
        给定一个封闭曲面三角形网格， 得到这个网格的割图基本元。
        1. 考虑把边长当做权重，看结果如何？
        2. 单元树中应该加入什么样的权重？
        3. 什么的生成树是最优的生成树？应该设定什么样的标准？
    Authors
    -----
        Huayi Wei
        Chunyu Chen
    """
    # HalfEdgeMesh2d 可以存储表示非常丰富的二维网格类型
    # 
    # NV == 3， 说明网格是三角形网格
    assert mesh.ds.NV == 3
    # 检查网格的封闭性 
    # 该程序只处理定向封闭曲面
    # HalfEdgeMesh2d 存储的网格单元编号从 cellstart 开始， 0:cellstart 编号
    # 的意义是网格中的洞或者外界区域
    # cellstart == 0, 表示网格是封闭的
    assert mesh.ds.cellstart == 0 
    # 获取单元实体的个数
    NN = mesh.number_of_nodes()
    NE = mesh.number_of_edges()
    NC = mesh.number_of_cells()
    edge = mesh.entity('edge')
    edge2cell = mesh.ds.edge_to_cell()
    cell2cell = mesh.ds.cell_to_cell(return_sparse=True)
    celltree = minimum_spanning_tree(cell2cell)
    celltree = celltree + celltree.T # 对称化
    flag = np.asarray(celltree[edge2cell[:, 0], edge2cell[:, 1]]).reshape(-1)
    index, = np.nonzero(flag == 0) # 不在 celltree 中的边编号，形成初始的割图 
    cutEdge = edge[index]
    nc = len(cutEdge)
    val = np.ones(nc, dtype=np.bool_)
    n2n = csr_matrix((val, (cutEdge[:, 0], cutEdge[:, 1])), shape=(NN, NN))
    n2n += csr_matrix((val, (cutEdge[:, 1], cutEdge[:, 0])), shape=(NN, NN))
    ctree = minimum_spanning_tree(n2n) # 初始割图的最小生成树
    ctree = ctree + ctree.T # 对称化
    flag = np.asarray(ctree[cutEdge[:, 0], cutEdge[:, 1]]).reshape(-1)
    flag = (flag == 0)
    index0 = index[flag] # 没有在生成树中的边的编号
    index1 = index[~flag]# 在生成树中的边的编号
    # 这里可以多线程并行处理
    gamma = []
    count = np.zeros(NN, dtype=np.int8)
    for i in index0:
        isKeepEdge = np.ones(len(index1), dtype=np.bool_)
        while True:
            np.add.at(count, edge[i], 1)
            np.add.at(count, edge[index1[isKeepEdge]], 1)
            isDelEdge = (count[edge[index1, 0]] == 1) | (count[edge[index1, 1]] == 1)
            count[:] = 0
            if np.any(isDelEdge):
                isKeepEdge = isKeepEdge & (~isDelEdge)
            else:
                break
        loop = np.r_['0', i, index1[isKeepEdge]]
        gamma.append(loop)
    return gamma