test_that("check_future_plan() works when only one core available", {
# temporarily set the envvar to have only 1 core available
withr::local_envvar("R_PARALLELLY_AVAILABLE_CORES" = "1")
op <- future::plan()
# put the future plan back as we found it
withr::defer(future::plan(op))
future::plan(future::multisession)
# one chain
expect_snapshot_output(
check_future_plan()
)
})
test_that("check_future_plan() works", {
op <- future::plan()
# put the future plan back as we found it
withr::defer(future::plan(op))
future::plan(future::multisession)
# one chain
expect_snapshot_output(
check_future_plan()
)
})
test_that("mcmc errors for invalid parallel plans", {
op <- future::plan()
# put the future plan back as we found it
withr::defer(future::plan(op))
# temporarily silence future's warning about multicore support
withr::local_envvar("R_FUTURE_SUPPORTSMULTICORE_UNSTABLE" = "quiet")
# handle forks, so only accept multisession, or multi session clusters
future::plan(future::multisession)
expect_snapshot_output(
check_future_plan()
)
future::plan(future::multicore)
expect_snapshot(error = TRUE,
check_future_plan()
)
# skip on windows
if (.Platform$OS.type != "windows"){
cl <- parallel::makeCluster(2L, type = "FORK")
future::plan(future::cluster, workers = cl)
expect_snapshot(error = TRUE,
check_future_plan()
)
}
})
test_that("parallel reporting works", {
skip_if_not(check_tf_version())
m <- model(normal(0, 1))
op <- future::plan()
# put the future plan back as we found it
withr::defer(future::plan(op))
future::plan(future::multisession)
# should report each sampler's progress with a fraction
#out <- get_output(. <- mcmc(m, warmup = 50, n_samples = 50, chains = 2))
expect_match(get_output(. <- mcmc(m, warmup = 50, n_samples = 50, chains = 2)), "2 samplers in parallel")
expect_match(get_output(. <- mcmc(m, warmup = 50, n_samples = 50, chains = 2)), "50/50")
})
test_that("mcmc errors for invalid parallel plans", {
skip_if_not(check_tf_version())
skip_on_os(os = "windows")
m <- model(normal(0, 1))
op <- future::plan()
# silence future's warning about multicore support
# put the future plan back as we found it
withr::local_envvar("R_FUTURE_SUPPORTSMULTICORE_UNSTABLE" = "quiet")
# reset warning setting
withr::defer(future::plan(op))
future::plan(future::multicore)
expect_snapshot(error = TRUE,
mcmc(m, verbose = FALSE)
)
cl <- parallel::makeForkCluster(2L)
future::plan(future::cluster, workers = cl)
expect_snapshot(error = TRUE,
mcmc(m, verbose = FALSE)
)
})
# this is the test that says: 'Loaded Tensorflow version 1.14.0'
test_that("mcmc works in parallel", {
skip_if_not(check_tf_version())
m <- model(normal(0, 1))
op <- future::plan()
# put the future plan back as we found it
withr::defer(future::plan(op))
future::plan(future::multisession)
# one chain
expect_ok(draws <- mcmc(m,
warmup = 10, n_samples = 10,
chains = 1,
verbose = FALSE
))
expect_true(inherits(draws, "greta_mcmc_list"))
expect_true(coda::niter(draws) == 10)
rm(draws)
# multiple chains
expect_ok(draws <- mcmc(m,
warmup = 10, n_samples = 10,
chains = 2,
verbose = FALSE
))
expect_true(inherits(draws, "greta_mcmc_list"))
expect_true(coda::niter(draws) == 10)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.