Nothing
library(RcppPlanc)
library(testthat)
library(Matrix)
local_edition(3)
source("helper-nmf.R")
ctrl.h5ds <- H5Mat(filename = system.file("extdata", "ctrl_dense.h5",
package = "RcppPlanc", mustWork = TRUE),
dataPath = "scaleData")
stim.h5ds <- H5Mat(filename = system.file("extdata", "stim_dense.h5",
package = "RcppPlanc", mustWork = TRUE),
dataPath = "scaleData")
ctrl.h5sp <- H5SpMat(filename = system.file("extdata", "ctrl_sparse.h5",
package = "RcppPlanc", mustWork = TRUE),
valuePath = "scaleDataSparse/data",
rowindPath = "scaleDataSparse/indices",
colptrPath = "scaleDataSparse/indptr",
nrow = nrow(ctrl.sparse),
ncol = ncol(ctrl.sparse))
stim.h5sp <- H5SpMat(filename = system.file("extdata", "stim_sparse.h5",
package = "RcppPlanc", mustWork = TRUE),
valuePath = "scaleDataSparse/data",
rowindPath = "scaleDataSparse/indices",
colptrPath = "scaleDataSparse/indptr",
nrow = nrow(stim.sparse),
ncol = ncol(stim.sparse))
ctrl.dense <- as.matrix(ctrl.sparse)
stim.dense <- as.matrix(stim.sparse)
m <- nrow(ctrl.dense)
ni <- c(ncol(ctrl.dense), ncol(stim.dense))
k <- 20
test_that("inmf, w/o init", {
skip_on_winbuilder()
# Dense cases
set.seed(1)
res1 <- inmf(list(ctrl.dense, stim.dense), k = k, nCores = 2)
expect_length(res1, 4)
expect_length(res1$H, 2)
expect_length(res1$V, 2)
expect_true(all.equal(dim(res1$W), c(m, k)))
expect_lte(res1$objErr, 3.8e4)
# Error tests
expect_error(inmf(list(ctrl.dense, stim.sparse)),
"All datasets should be of the same class")
expect_error(inmf(list(ctrl.dense, ctrl.dense), k = 300),
"k must be <= m")
# Sparse cases
set.seed(1)
res2 <- inmf(list(ctrl.sparse, stim.sparse), k = k, nCores = 2)
expect_true(all.equal(res1, res2))
# dense h5 cases
set.seed(1)
res3 <- inmf(list(ctrl.h5ds, stim.h5ds), k = k)
expect_true(all.equal(res1, res3))
# sparse h5 cases
set.seed(1)
res4 <- inmf(objectList = list(ctrl.h5sp, stim.h5sp), k = k, nCores = 2)
expect_true(all.equal(res1, res4, tolerance = 1e-6))
})
test_that("inmf, w/ init", {
skip_on_winbuilder()
set.seed(1)
res0 <- inmf(list(ctrl.sparse, stim.sparse), k = k, nCores = 2)
res1 <- inmf(list(ctrl.sparse, stim.sparse), k = k, Hinit = res0$H, Vinit = res0$V, Winit = res0$W, nCores = 2)
res2 <- inmf(list(ctrl.dense, stim.dense), k = k, Hinit = res0$H, Vinit = res0$V, Winit = res0$W,, nCores = 2)
expect_true(all.equal(res1, res2))
expect_error(inmf(list(ctrl.sparse, stim.sparse), k = k,
Hinit = lapply(res0$H, t), Vinit = res0$V, Winit = res0$W),
"Each given H must be of size")
expect_error(inmf(list(ctrl.sparse, stim.sparse), k = k,
Hinit = res0$H, Vinit = lapply(res0$V, t), Winit = res0$W),
"All given Vs must be of size")
expect_error(inmf(list(ctrl.sparse, stim.sparse), k = k,
Hinit = res0$H, Vinit = res0$V, Winit = t(res0$W)),
"Given W must be of size")
})
test_that("onlineINMF, scenario 1", {
skip_on_winbuilder()
set.seed(1)
res1 <- onlineINMF(list(ctrl.sparse, stim.sparse), k = k, minibatchSize = 50, nCores = 2)
expect_length(res1, 6)
expect_length(res1$H, 2)
expect_length(res1$V, 2)
expect_length(res1$A, 2)
expect_length(res1$B, 2)
expect_true(all.equal(dim(res1$W), c(m, k)))
expect_lte(res1$objErr, 3.8e4)
expect_error(onlineINMF(list(ctrl.sparse, stim.sparse), k = k),
"Please set a smaller")
expect_error(onlineINMF(list(ctrl.sparse, stim.dense), k = k),
"All datasets should be of the same class")
# TODO could be more error cases
set.seed(1)
res2 <- onlineINMF(list(ctrl.dense, stim.dense), k = k, minibatchSize = 50, nCores = 2)
expect_true(all.equal(res1, res2))
# dense h5 cases
set.seed(1)
res3 <- onlineINMF(list(ctrl.h5ds, stim.h5ds), k = k, minibatchSize = 50, nCores = 2)
expect_true(all.equal(res1, res3))
# sparse h5 cases
set.seed(1)
res4 <- onlineINMF(list(ctrl.h5sp, stim.h5sp), k = k, minibatchSize = 50, nCores = 2)
expect_true(all.equal(res1, res4, tolerance = 1e-6))
})
set.seed(233)
new.data <- ctrl.sparse
new.data@x <- new.data@x + runif(length(new.data@x))
new.data.dense <- as.matrix(new.data)
new.h5sp <- as.H5SpMat(new.data, "temp_new_sparse.h5", overwrite = TRUE)
new.h5m <- as.H5Mat(new.data.dense, "temp_new_dense.h5", overwrite = TRUE)
set.seed(42)
res0 <- onlineINMF(list(ctrl.sparse, stim.sparse), k = k, minibatchSize = 50)
# TODO create temp h5 file for new.data
test_that("onlineINMF, scenario 2", {
skip_on_winbuilder()
set.seed(1)
res1 <- onlineINMF(list(ctrl.sparse, stim.sparse), newDatasets = list(new.data),
k = k, minibatchSize = 50, permuteChunkSize = 32,
Hinit = res0$H, Vinit = res0$V, Winit = res0$W,
Ainit = res0$A, Binit = res0$B, nCores = 2)
set.seed(1)
res2 <- onlineINMF(list(ctrl.dense, stim.dense), newDatasets = list(new.data.dense),
k = k, minibatchSize = 50, permuteChunkSize = 32,
Hinit = res0$H, Vinit = res0$V, Winit = res0$W,
Ainit = res0$A, Binit = res0$B, nCores = 2)
expect_true(all.equal(res1, res2))
expect_error(onlineINMF(list(ctrl.dense, stim.dense), newDatasets = list(new.data),
k = k, minibatchSize = 50, Hinit = res0$H,
Vinit = res0$V, Winit = res0$W,
Ainit = res0$A, Binit = res0$B),
"newDatasets should be of the same class as original datasets")
expect_error(onlineINMF(list(ctrl.sparse, stim.sparse), newDatasets = list(new.data),
k = k, minibatchSize = 50, Hinit = res0$H,
Vinit = lapply(res0$V, t), Winit = res0$W,
Ainit = res0$A, Binit = res0$B),
"All given Vs must be of size 173 x 20")
expect_error(onlineINMF(list(ctrl.sparse, stim.sparse), newDatasets = list(new.data),
k = k, minibatchSize = 50, Hinit = res0$H,
Vinit = res0$V, Winit = t(res0$W),
Ainit = res0$A, Binit = res0$B),
"Given W must be of size 173 x 20 but is 20 x 173")
expect_error(onlineINMF(list(ctrl.sparse, stim.sparse), newDatasets = list(new.data),
k = k, minibatchSize = 50, Hinit = res0$H,
Vinit = res0$V, Winit = res0$W,
Ainit = res0$A, Binit = lapply(res0$B, t)),
"Given Bs must all be of size 173 x 20")
# A's are square, and nearly symmetric (but not exactly), don't have a smart check here yet
expect_error(onlineINMF(list(ctrl.sparse, stim.sparse), newDatasets = list(new.data),
k = k, minibatchSize = 50, Hinit = res0$H,
Winit = res0$W,
Ainit = res0$A, Binit = res0$B),
"Must provide 2 V matrices")
expect_error(onlineINMF(list(ctrl.sparse, stim.sparse), newDatasets = list(new.data),
k = k, minibatchSize = 50, Hinit = res0$H,
Vinit = res0$V, Winit = res0$W,
Binit = res0$B),
"Must provide 2 A matrices")
expect_error(onlineINMF(list(ctrl.sparse, stim.sparse), newDatasets = list(new.data),
k = k, minibatchSize = 50, Hinit = res0$H,
Vinit = res0$V, Winit = res0$W,
Ainit = res0$A),
"Must provide 2 B matrices")
set.seed(1)
res3 <- onlineINMF(list(ctrl.h5sp, stim.h5sp), newDatasets = list(new.h5sp),
k = k, minibatchSize = 50, permuteChunkSize = 32,
Hinit = res0$H, Vinit = res0$V, Winit = res0$W,
Ainit = res0$A, Binit = res0$B, nCores = 2)
expect_true(all.equal(res1, res3))
set.seed(1)
res4 <- onlineINMF(list(ctrl.h5ds, stim.h5ds), newDatasets = list(new.h5m),
k = k, minibatchSize = 50, Hinit = res0$H,
Vinit = res0$V, Winit = res0$W,
Ainit = res0$A, Binit = res0$B, nCores = 2)
expect_true(all.equal(res1, res4))
})
test_that("onlineINMF, scenario 3", {
skip_on_winbuilder()
expect_no_error(onlineINMF(list(ctrl.sparse, stim.sparse),
newDatasets = list(new.data), project = TRUE,
k = k, minibatchSize = 50, Winit = res0$W, nCores = 2))
})
p1 <- ctrl.sparse[1:10,]
p2 <- stim.sparse[11:30,]
p1.dense <- as.matrix(p1)
p2.dense <- as.matrix(p2)
test_that("uinmf", {
skip_on_winbuilder()
set.seed(1)
res1 <- uinmf(list(ctrl.sparse, stim.sparse), list(p1, p2), nCores = 2)
expect_length(res1, 5)
expect_length(res1$H, 2)
expect_length(res1$V, 2)
expect_length(res1$U, 2)
expect_true(all.equal(dim(res1$W), c(173, 20)))
expect_true(all.equal(dim(res1$U[[1]]), c(10, 20)))
expect_true(all.equal(dim(res1$U[[2]]), c(20, 20)))
expect_lte(res1$objErr, 4.5e4)
set.seed(1)
res2 <- uinmf(list(ctrl.dense, stim.dense), list(p1.dense, p2.dense), nCores = 2)
expect_true(all.equal(res1, res2))
expect_error(uinmf(list(ctrl.sparse, stim.sparse), list(p1, p2), lambda = 1:3),
"Must specify 1 lambda for all or each.")
expect_error(uinmf(list(ctrl.sparse, stim.sparse), list(p1)),
"Number of matrix in unshared feature list does not match")
expect_error(uinmf(list(ctrl.sparse, stim.sparse), list(p1.dense, p2.dense)),
"Data of unshared feature should be of the same class as")
expect_error(uinmf(list(ctrl.sparse, stim.sparse), list(p1, p2[,1:100])),
"Number of columns in each matrix from")
set.seed(1)
res3 <- uinmf(list(a = ctrl.sparse, b = stim.sparse), list(a = p1), nCores = 2)
set.seed(1)
res4 <- uinmf(list(a = ctrl.dense, b = stim.dense), list(a = p1.dense), nCores = 2)
expect_true(all.equal(res3, res4))
expect_equal(length(res4$U), 1)
})
test_that("auxiliary", {
skip_on_winbuilder()
expect_error(H5Mat("thisFilenameShouldNotExist", "something"),
"File not found")
expect_error(as.H5Mat(ctrl.dense, "temp_new_dense.h5", overwrite = FALSE),
"File already exists at the given path")
# Test if `as.H5Mat.dgCMatrix` S3 method convert sparse to h5 dense correctly
ctrl.h5ds_2 <- as.H5Mat(ctrl.sparse, "temp_ctrl_dense.h5", overwrite = TRUE, chunk_size = c(173, 300))
set.seed(1)
res1 <- onlineINMF(list(ctrl.sparse, stim.sparse), k = k, minibatchSize = 50, permuteChunkSize = 300)
set.seed(1)
res2 <- onlineINMF(list(ctrl.h5ds_2, stim.h5ds), k = k, minibatchSize = 50)
expect_true(all.equal(res1, res2))
expect_no_error(print.H5Mat(ctrl.h5ds))
expect_error(H5SpMat("thisFilenameShouldNotExist", "something", "a", "b", 1, 2),
"File not found")
expect_error(as.H5SpMat(ctrl.dense, "temp_new_sparse.h5", overwrite = FALSE),
"File already exists at the given path")
# Test if `as.H5SpMat.matrix` S3 method convert dense to h5 sparse correctly
ctrl.h5sp_2 <- as.H5SpMat(ctrl.dense, filename = "temp_ctrl_sparse.h5")
set.seed(1)
res1 <- onlineINMF(list(ctrl.sparse, stim.sparse), k = k, minibatchSize = 50)
set.seed(1)
res2 <- onlineINMF(list(ctrl.h5sp_2, stim.h5sp), k = k, minibatchSize = 50)
expect_true(all.equal(res1, res2, tolerance = 1e-6))
expect_no_error(print.H5SpMat(ctrl.h5sp))
})
unlink("temp_ctrl_dense.h5")
unlink("temp_ctrl_sparse.h5")
unlink("temp_new_sparse.h5")
unlink("temp_new_dense.h5")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.