## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(flexstanr)

## ----eval = FALSE-------------------------------------------------------------
# flexstanr::use_flexstanr()

## ----eval = requireNamespace("rstan", quietly = TRUE)-------------------------
opts <- stan_options(chains = 2, iter = 500, seed = 1)
str(opts)

## ----eval = requireNamespace("rstan", quietly = TRUE)-------------------------
# `parallel_chains` is a cmdstanr word; the rstan backend rejects it.
try(stan_options(backend = "rstan", parallel_chains = 4))

## ----eval = FALSE-------------------------------------------------------------
# # `"coverage"` is resolved from your package's stanmodels (rstan) or
# # inst/stan/coverage.stan (cmdstanr).
# fit <- fit_model(
#   "coverage",
#   dat_stan  = data_list,
#   init      = init_list,
#   stan_opts = opts
# )

## ----eval = FALSE-------------------------------------------------------------
# # posterior draws as an iterations x chains x parameters array
# draws <- backend_draws_array(fit)
# 
# # named parameters, matching rstan::extract()'s shape
# post <- backend_extract(fit, pars = c("beta", "sigma"))
# 
# # omit `pars` to take every parameter
# all_post <- backend_extract(fit)
# 
# # guard against the degenerate "no draws" case before using a fit
# stopifnot(backend_has_draws(fit))

## ----eval = FALSE-------------------------------------------------------------
# # "list" (the default): rstan::extract()'s shape -- one entry per parameter,
# # draws first, a scalar as a 1-D array of length S, a vector[2] as S x 2
# post$beta
# 
# # "draws": a posterior draws array, chains kept, flat Stan variable names
# draws_arr <- backend_extract(fit, format = "draws")
# 
# # "matrix": one row per draw, one column per flat variable -- what
# # backend_generate_quantities() takes as `draws_mat`
# mat <- backend_extract(fit, format = "matrix")
# gen <- backend_generate_quantities(fit, data = dat, draws_mat = mat, pars = "y_rep")

## -----------------------------------------------------------------------------
backend_has_draws(list())

## ----eval = FALSE-------------------------------------------------------------
# opts <- stan_options(backend = "cmdstanr", parallel_chains = 4, iter_warmup = 500)

