def _compute_normalized_laplacian(H,
                                  nodes_to_indices,
                                  hyperedge_ids_to_indices):
    """Computes the normalized Laplacian as described in the paper:
    Zhou, Dengyong, Jiayuan Huang, and Bernhard Scholkopf.
    "Learning with hypergraphs: Clustering, classification, and embedding."
    Advances in neural information processing systems. 2006.
    (http://machinelearning.wustl.edu/mlpapers/paper_files/NIPS2006_630.pdf)

    :param H: the hypergraph to compute the normalized Laplacian
                    matrix for.
    :param nodes_to_indices: for each node, maps the node to its
                            corresponding integer index.
    :param hyperedge_ids_to_indices: for each hyperedge ID, maps the hyperedge
                                    ID to its corresponding integer index.
    :returns: sparse.csc_matrix -- the normalized Laplacian matrix as a sparse
            matrix.

    """
    M = umat.get_incidence_matrix(H,
                                  nodes_to_indices, hyperedge_ids_to_indices)
    W = umat.get_hyperedge_weight_matrix(H, hyperedge_ids_to_indices)
    D_v = umat.get_vertex_degree_matrix(M, W)
    D_e = umat.get_hyperedge_degree_matrix(M)

    D_v_sqrt = D_v.sqrt()
    D_v_sqrt_inv = np.real(umat.fast_inverse(D_v_sqrt).todense())
    D_v_sqrt_inv = sparse.csc_matrix(D_v_sqrt_inv)
    D_e_inv = umat.fast_inverse(D_e)
    M_trans = M.transpose()

    theta = D_v_sqrt_inv * M * W * D_e_inv * M_trans * D_v_sqrt_inv

    node_count = len(H.get_node_set())
    I = sparse.eye(node_count)

    delta = I - theta
    return delta
Computes the normalized Laplacian as described in the paper:
    Zhou, Dengyong, Jiayuan Huang, and Bernhard Scholkopf.
    "Learning with hypergraphs: Clustering, classification, and embedding."
    Advances in neural information processing systems. 2006.
    (http://machinelearning.wustl.edu/mlpapers/paper_files/NIPS2006_630.pdf)

    :param H: the hypergraph to compute the normalized Laplacian
                    matrix for.
    :param nodes_to_indices: for each node, maps the node to its
                            corresponding integer index.
    :param hyperedge_ids_to_indices: for each hyperedge ID, maps the hyperedge
                                    ID to its corresponding integer index.
    :returns: sparse.csc_matrix -- the normalized Laplacian matrix as a sparse
            matrix.