simple.js

import * as scran from "scran.js";

export function load_dense_array(handle) {
    let dhandle = handle.open("data", { load: true });
    let arr = dhandle.values;
    let shape = dhandle.shape;

    // By default, fastest changing dimension (i.e. rows) is last in HDF5.
    // TODO: handle the native case with row-major storage.
    let mat = scran.initializeDenseMatrixFromDenseArray(shape[1], shape[0], arr);

    return mat;
}

var create_layered = true;

/**
 * Should sparse matrices be loaded in layered format?
 * This sacrifices some access speed for improved memory efficiency - see [here](https://github.com/tatami-inc/tatami_layered) for details.
 *
 * @param {?boolean} [layered=null] - Whether to load a sparse matrix in layered format.
 * If `null`, the existing value of this flag is returned without any change.
 *
 * @return If `layered = null`, the existing value of this flag is directly returned.
 *
 * Otherwise, the flag is set to `layered` and the previous value of the flag is returned.
 */
export function sparseLayered(layered = null) {
    if (layered == null) {
        return create_layered;
    } else {
        let old = create_layered;
        create_layered = layered;
        return old;
    }
}

export function load_csparse_matrix(handle) {
    return scran.initializeSparseMatrixFromHdf5(handle.file, handle.name, { layered: sparseLayered() });
}