Skip to content

Commit c190c5d

Browse files
committed
Fix handling of single-length inits for containers
1 parent 17678d5 commit c190c5d

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

R/args.R

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,13 @@ process_init_list <- function(init, num_procs, model_variables = NULL) {
826826
if (!all(is_parameter_value_supplied)) {
827827
missing_parameter_values[[i]] <- parameter_names[!is_parameter_value_supplied]
828828
}
829+
for (par_name in parameter_names[is_parameter_value_supplied]) {
830+
# Make sure that initial values for single-element containers don't get
831+
# unboxed when writing to JSON
832+
if (model_variables$parameters[[par_name]]$dimensions == 1 && is.null(attr(init[[i]][[par_name]], "dim"))) {
833+
init[[i]][[par_name]] <- array(init[[i]][[par_name]], dim = 1)
834+
}
835+
}
829836
}
830837
if (length(missing_parameter_values) > 0) {
831838
warning_message <- c(

tests/testthat/test-model-init.R

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,25 @@ test_that("print message if not all parameters are initialized", {
262262
fixed = TRUE
263263
)
264264
})
265+
266+
test_that("Initial values for single-element containers treated correctly", {
267+
modcode <- "
268+
data {
269+
real y_mean;
270+
}
271+
parameters {
272+
vector[1] y;
273+
}
274+
model {
275+
y_mean ~ normal(y[1], 1);
276+
}
277+
"
278+
mod <- cmdstan_model(write_stan_file(modcode), force_recompile = TRUE)
279+
expect_no_error(
280+
fit <- mod$sample(
281+
data = list(y_mean = 0),
282+
init = list(list(y = c(0))),
283+
chains = 1
284+
)
285+
)
286+
})

0 commit comments

Comments
 (0)