diff --git a/.gitignore b/.gitignore index 2c21d50..2a20ae3 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,4 @@ vignettes/*.pdf **/.DS_Store # Symlink to inst/include for devtools::load_all() -nimbleModel/include \ No newline at end of file +nimbleModel/include diff --git a/nimbleModel/.DS_Store b/nimbleModel/.DS_Store deleted file mode 100644 index 59c8ece..0000000 Binary files a/nimbleModel/.DS_Store and /dev/null differ diff --git a/nimbleModel/NAMESPACE b/nimbleModel/NAMESPACE index bcd0d97..bc086ab 100644 --- a/nimbleModel/NAMESPACE +++ b/nimbleModel/NAMESPACE @@ -3,6 +3,11 @@ import(R6) import(nCompiler) ## Some exports are for testing convenience and may not need to be exported. +importFrom(nCompiler, nC) +export(nC) +importFrom(nCompiler, nMul) +export(nMul) + ## Classes: R6 classes are exported as regular objects export(copier_nClass) export(multiCopier_nClass) diff --git a/nimbleModel/R/all_utils.R b/nimbleModel/R/all_utils.R index fd3e369..a4af1fd 100644 --- a/nimbleModel/R/all_utils.R +++ b/nimbleModel/R/all_utils.R @@ -163,11 +163,12 @@ messageIfVerbose <- function(...) { # Temporarily here as need for initial testing of processing. +# Mis-named now as it also allows for nFunctions. is.rcf <- function(x, inputIsName = FALSE, where = -1) { if (inputIsName) { x <- get(x, pos = where) } - if (inherits(x, "nfMethodRC")) { + if (inherits(x, "nfMethodRC") || inherits(x, "nFunction")) { return(TRUE) } if (is.function(x)) { @@ -184,12 +185,6 @@ is.rcf <- function(x, inputIsName = FALSE, where = -1) { nimbleUniqueID <- labelFunctionCreator("UID") nimbleModelID <- labelFunctionCreator("MID") - -# temporary, as we have some tests of use of `c()` in indexing -nimC <- function(...) { - c(...) -} - evalNumeric <- function(expr) { if (length(expr) == 1) { return(expr) @@ -202,3 +197,11 @@ evalNumeric <- function(expr) { } return(expr) } + +#' @importFrom nCompiler nC +#' @export +nCompiler::nC + +#' @importFrom nCompiler nMul +#' @export +nCompiler::nMul diff --git a/nimbleModel/R/context.R b/nimbleModel/R/context.R index b4d50bd..bce2887 100644 --- a/nimbleModel/R/context.R +++ b/nimbleModel/R/context.R @@ -206,8 +206,8 @@ expandContextAndReplacements <- function(allReplacements, allReplacementNameExpr innerLoopCode <- as.call(c(list(quote(`{`)), replacementRecordingCode, indexRecordingCode, quote(iAns <- iAns + 1))) innerLoopCode <- context$embedCodeInForLoop(innerLoopCode, useContext) - # This is a hacky way to deal with `nimC`, which is not in `constantsCopy`. - if (length(innerLoopCode[[3]]) > 1 && innerLoopCode[[3]][[1]] == "nimC") { + # This is a hacky way to deal with `nC`, which is not in `constantsCopy`. + if (length(innerLoopCode[[3]]) > 1 && innerLoopCode[[3]][[1]] == "nC") { innerLoopCode[[3]][[1]] <- quote(c) } @@ -265,8 +265,8 @@ determineContextSize <- function(context, useContext = rep(TRUE, length(context$ innerLoopCode <- quote(iAns <- iAns + 1) innerLoopCode <- context$embedCodeInForLoop(innerLoopCode, useContext) - # This is a hacky way to deal with `nimC`, which is not in `evalEnv`. - if (length(innerLoopCode[[3]]) > 1 && innerLoopCode[[3]][[1]] == "nimC") { + # This is a hacky way to deal with `nC`, which is not in `evalEnv`. + if (length(innerLoopCode[[3]]) > 1 && innerLoopCode[[3]][[1]] == "nC") { innerLoopCode[[3]][[1]] <- quote(c) } diff --git a/nimbleModel/R/copier.R b/nimbleModel/R/copier.R index 52d57df..4fa9639 100644 --- a/nimbleModel/R/copier.R +++ b/nimbleModel/R/copier.R @@ -29,7 +29,9 @@ copier_nClass <- nCompiler::nClass( exportName = "copier_nClass_new", needed_units = list("nCompiler:::nList(integerVector())"), packageNames = c(uncompiled = "copier_nClass_R", compiled = "copier_nClass"), - nClass_inherit = list("copier_nC_base") + nClass_inherit = list("copier_nC_base"), + depends = "nimbleModel", + Hincludes = "" ) ) @@ -92,6 +94,8 @@ multiCopier_nClass <- nCompiler::nClass( needed_units = list("nCompiler:::nList(copier_nClass())", "modelBase_nClass()"), packageNames = c(uncompiled = "multiCopier_nClass_R", compiled = "multiCopier_nClass"), nClass_inherit = list("multiCopier_model_nC_base"), + depends = "nimbleModel", + Hincludes = "", opDefs = list( getOrSetValues = list( labelAbstractTypes = list( @@ -179,7 +183,9 @@ multiCopierMV_nClass <- nCompiler::nClass( exportName = "multiCopierMV_nClass_new", needed_units = list("nCompiler:::nList(copier_nClass())", "modelValuesBase_nClass()"), packageNames = c(uncompiled = "multiCopierMV_nClass_R", compiled = "multiCopierMV_nClass"), - nClass_inherit = list("multiCopier_modelValues_nC_base") + nClass_inherit = list("multiCopier_modelValues_nC_base"), + depends = "nimbleModel", + Hincludes = "" ) ) diff --git a/nimbleModel/R/declFunBaseClass.R b/nimbleModel/R/declFunBaseClass.R index cf2478a..0a7ec3a 100644 --- a/nimbleModel/R/declFunBaseClass.R +++ b/nimbleModel/R/declFunBaseClass.R @@ -999,6 +999,8 @@ declFunBase_nClass <- nClass( exportName = "declFunBase_nClass_new", interfaceExclude = "getParam_cpp", needed_units = list("instr_nClass"), - packageNames = c(uncompiled = "declFunBase_nClass_R", compiled = "declFunBase_nClass") + packageNames = c(uncompiled = "declFunBase_nClass_R", compiled = "declFunBase_nClass"), + depends = "nimbleModel", + HpostCode = "#include " ) ) diff --git a/nimbleModel/R/distributions_inputList.R b/nimbleModel/R/distributions_inputList.R index 021617b..e5d7587 100644 --- a/nimbleModel/R/distributions_inputList.R +++ b/nimbleModel/R/distributions_inputList.R @@ -101,8 +101,15 @@ distributionsInputList <- list( ), dexp = list( BUGSdist = "dexp(rate, scale)", - Rdist = "dexp_nimble(rate = 1/scale)", - altParams = "scale = 1/rate", + Rdist = c("dexp_nComp(scale = 1/rate)"), + altParams = "rate = 1/scale", + range = c(0, Inf), + pqAvail = TRUE + ), + dexp_nComp = list( + BUGSdist = "dexp_nComp(rate, scale)", + Rdist = c("dexp_nComp(scale = 1/rate)"), + altParams = "rate = 1/scale", range = c(0, Inf), pqAvail = TRUE ), diff --git a/nimbleModel/R/getSymbolicParentNodes.R b/nimbleModel/R/getSymbolicParentNodes.R index b3ed2f7..26cd726 100644 --- a/nimbleModel/R/getSymbolicParentNodes.R +++ b/nimbleModel/R/getSymbolicParentNodes.R @@ -89,7 +89,7 @@ nimblePreevaluationFunctionNames <- c( # distribution functions paste0(c("d", "q", "p"), "t"), paste0(c("d", "q", "p"), "exp"), - "nimC", "nimRep", "nimSeq", "diag", + "nC", "nimRep", "nimSeq", "diag", "nMul", "nimNumeric", "nimMatrix", "nimArray", "length" ) @@ -143,7 +143,7 @@ nimbleOrRfunctionNames <- c( # distribution functions paste0(c("d", "r", "q", "p"), "t"), paste0(c("d", "r", "q", "p"), "exp"), - "nimC", "nimRep", "nimSeq", + "nimC", "nimRep", "nimSeq", "nC", "nMul", "diag", "length" ) diff --git a/nimbleModel/R/indexConstraint.R b/nimbleModel/R/indexConstraint.R index 58f6e7b..278269b 100644 --- a/nimbleModel/R/indexConstraint.R +++ b/nimbleModel/R/indexConstraint.R @@ -149,7 +149,7 @@ newIndexConstraint_fromSimple <- function(expr, slot, constants) { slot )) } else { # various other cases such as `x[2]`, `x[k+1]`, `x[c(2,3,5)]`, `x[c(2,3,k)]`. - if (expr[[1]] == "nimC") { + if (expr[[1]] == "nC") { expr[[1]] <- quote(c) } result <- eval(expr, envir = constants) diff --git a/nimbleModel/R/indexRuleConstant.R b/nimbleModel/R/indexRuleConstant.R index 440e4d4..891b6f0 100644 --- a/nimbleModel/R/indexRuleConstant.R +++ b/nimbleModel/R/indexRuleConstant.R @@ -56,8 +56,8 @@ indexRuleConstant_setup <- function(toIndexExprList, eval(toIndexExpr[[2]], envir = constants), eval(toIndexExpr[[3]], envir = constants) ) - } else if (length(toIndexExpr) > 1 && toIndexExpr[[1]] == "nimC") { - toIndexExpr[[1]] <- quote(c) # `nimC` not readily available in series of environments. + } else if (length(toIndexExpr) > 1 && toIndexExpr[[1]] == "nC") { # TODO: revisit handling of c(). + toIndexExpr[[1]] <- quote(c) # `nC` not readily available in series of environments. toConstant <- indexRangeMatrixClass$new(as.matrix(eval(toIndexExpr, envir = constants))) } else { stop("input error in `", safeDeparse(toIndexExprList), "`.") diff --git a/nimbleModel/R/miscFunctions.R b/nimbleModel/R/miscFunctions.R index d019d01..1c4333e 100644 --- a/nimbleModel/R/miscFunctions.R +++ b/nimbleModel/R/miscFunctions.R @@ -1,7 +1,7 @@ # This needs to be sourced after `nimbleFunction` is defined, so can't be done in `distributions_inputList.R`. -calc_dmnormAltParams <- nimble::nimbleFunction( +calc_dmnormAltParams <- nCompiler::nFunction( name = "calc_dmnormAltParams", - run = function(cholesky = double(2), prec_param = double(), return_prec = double()) { + fun = function(cholesky = double(2), prec_param = double(), return_prec = double()) { if (prec_param == return_prec) { ans <- t(cholesky) %*% cholesky } else { @@ -16,9 +16,9 @@ calc_dmnormAltParams <- nimble::nimbleFunction( } ) -calc_dwishAltParams <- nimble::nimbleFunction( +calc_dwishAltParams <- nCompiler::nFunction( name = "calc_dwishAltParams", - run = function(cholesky = double(2), scale_param = double(), return_scale = double()) { + fun = function(cholesky = double(2), scale_param = double(), return_scale = double()) { if (scale_param == return_scale) { ans <- t(cholesky) %*% cholesky } else { @@ -31,4 +31,5 @@ calc_dwishAltParams <- nimble::nimbleFunction( returnType(double(2)) return(ans) } -) \ No newline at end of file +) + diff --git a/nimbleModel/R/modelBaseClass.R b/nimbleModel/R/modelBaseClass.R index 782a272..9acda39 100644 --- a/nimbleModel/R/modelBaseClass.R +++ b/nimbleModel/R/modelBaseClass.R @@ -395,7 +395,7 @@ modelBase_nClass <- nClass( getDependencies = function(nodes, omit = NULL, self = TRUE, determOnly = FALSE, stochOnly = FALSE, includeData = TRUE, dataOnly = FALSE, - includePredictive = nimble::getNimbleOption('getDependenciesIncludesPredictiveNodes'), + includePredictive = getNimbleModelOption('getDependenciesIncludesPredictiveNodes'), predictiveOnly = FALSE, includeRHSonly = FALSE, downstream = FALSE, immediateOnly = FALSE, nodesAsChars = getNimbleModelOption("nodesAsChars"), @@ -743,7 +743,9 @@ modelBase_nClass <- nClass( Hincludes = c('"declFunBase_nClass_c_.h"', '"instr_nClass_c_.h"'), needed_units = list("declFunBase_nClass", "instr_nClass", "nList(instr_nClass)"), exportName = "modelBase_nClass_new", - packageNames = c(uncompiled = "modelBase_nClass_R", compiled = "modelBase_nClass") + packageNames = c(uncompiled = "modelBase_nClass_R", compiled = "modelBase_nClass"), + depends = "nimbleModel", + HpostCode = "#include " ) ) diff --git a/nimbleModel/R/modelDecl.R b/nimbleModel/R/modelDecl.R index eff0854..d3fb7a3 100644 --- a/nimbleModel/R/modelDecl.R +++ b/nimbleModel/R/modelDecl.R @@ -102,7 +102,7 @@ modelDeclClass <- R6Class( if (!stoch) { return(NULL) } - types <- nimble:::distributions[[distributionName]]$types + types <- nimbleModel:::distributions[[distributionName]]$types if (is.null(types)) { return(NULL) } @@ -352,7 +352,7 @@ modelDeclClass <- R6Class( } } if (is.c(origIndex)) { # Handles new cases like `y[c(2,3,5)] ~ dmnorm(...)`. - if (origIndex[[1]] == "nimC") { + if (origIndex[[1]] == "nC") { logProbExpr[[i]] <- origIndex[[2]] } else { stop("unexpected input in `", safeDeparse(origIndex), "`.") diff --git a/nimbleModel/R/modelDef.R b/nimbleModel/R/modelDef.R index 590893c..15ecffd 100644 --- a/nimbleModel/R/modelDef.R +++ b/nimbleModel/R/modelDef.R @@ -34,7 +34,11 @@ modelDefClass <- R6Class( checkAndAssignConstants(constants, code) modelCode <<- codeProcessIfThenElse(code, constants, userEnv) - modelCode <<- nimble:::nf_changeNimKeywords(modelCode) # Formerly in `assignBUGScode`. + + # Switch keyword name transformations as a test while we determine what happens here vs in nimble2. + # We need to not use nimble anymore. + # + modelCode <<- nCompiler:::nf_changeKeywords(modelCode, nmKeywords) # Formerly in `assignBUGScode`. # TODO: add this later. # setModelValuesClassName() @@ -575,7 +579,7 @@ modelDefClass <- R6Class( if (decl$stoch) { params <- as.list(valueExpr[-1]) # Extract the original distribution parameters. paramNames <- names(valueExpr)[-1] - types <- nimble:::distributions[[decl$distributionName]]$types + types <- nimbleModel:::distributions[[decl$distributionName]]$types # `types` may be NULL if all are scalar. for (iParam in seq_along(params)) { diff --git a/nimbleModel/R/modelFunctions.R b/nimbleModel/R/modelFunctions.R index 2558b78..863b55c 100644 --- a/nimbleModel/R/modelFunctions.R +++ b/nimbleModel/R/modelFunctions.R @@ -219,7 +219,7 @@ taggedClass <- R6Class( getDependencies <- function(model, nodes, omit = NULL, self = TRUE, determOnly = FALSE, stochOnly = FALSE, includeData = TRUE, dataOnly = FALSE, - includePredictive = nimble::getNimbleOption('getDependenciesIncludesPredictiveNodes'), + includePredictive = getNimbleModelOption('getDependenciesIncludesPredictiveNodes'), predictiveOnly = FALSE, includeRHSonly = FALSE, downstream = FALSE, immediateOnly = FALSE, nodesAsChars = getNimbleModelOption("nodesAsChars"), @@ -722,7 +722,7 @@ setupMargNodes <- function(model, paramNodes, randomEffectsNodes, calcNodes, if (length(reCheck)) { errorNodes <- head(reCheck, n = 4) if (length(reCheck) > 4) moreText <- ", .." else moreText <- "" - extraMsg <- if (isTRUE(nimble::getNimbleOption("includeUnneededLatents"))) "" else " They will be omitted, but one can force inclusion with\n `nimbleOptions(includeUnneededLatents=TRUE)`.\n" + extraMsg <- if (isTRUE(getNimbleModelOption("includeUnneededLatents"))) "" else " They will be omitted, but one can force inclusion with\n `nimbleOptions(includeUnneededLatents=TRUE)`.\n" messageIfVerbose( " [Warning] There are some `randomEffectsNodes` provided that look like\n", " they are not needed for the provided (or default) `paramNodes`:\n", @@ -731,7 +731,7 @@ setupMargNodes <- function(model, paramNodes, randomEffectsNodes, calcNodes, " (potentially in the control list) for the algorithm or as\n", " an argument to `setupMargNodes`." ) - if (!isTRUE(nimble::getNimbleOption("includeUnneededLatents"))) { + if (!isTRUE(getNimbleModelOption("includeUnneededLatents"))) { randomEffectsNodes <- setdiff_nodes(randomEffectsNodes, reCheck) } } diff --git a/nimbleModel/R/modelValues.R b/nimbleModel/R/modelValues.R index 181cb75..356bf42 100644 --- a/nimbleModel/R/modelValues.R +++ b/nimbleModel/R/modelValues.R @@ -89,6 +89,8 @@ modelValuesBase_nClass <- nCompiler::nClass( createFromR = FALSE, exportName = "modelValuesBase_nClass_new", packageNames = c(uncompiled = "modeValuesBase_nClass_R", compiled = "modelValuesBase_nClass"), + depends = "nimbleModel", + HpostCode = "#include ", overloadDefs = list( resize = list( labelAbstractTypes = list( diff --git a/nimbleModel/R/model_utils.R b/nimbleModel/R/model_utils.R index fe39f1c..18e7905 100644 --- a/nimbleModel/R/model_utils.R +++ b/nimbleModel/R/model_utils.R @@ -31,9 +31,9 @@ is.vectorized <- function(node) { is.c <- function(node) { if (is.character(node)) { - return(grepl("^nimC", node)) + return(grepl("^nC", node)) } else { - return("nimC" %in% all.names(node)) + return("nC" %in% all.names(node)) } } diff --git a/nimbleModel/R/nimbleModel.R b/nimbleModel/R/nimbleModel.R index 4f03920..38607ab 100644 --- a/nimbleModel/R/nimbleModel.R +++ b/nimbleModel/R/nimbleModel.R @@ -1,3 +1,6 @@ +nmKeywords <- list(copy = "nmCopy" + ) + # It's unclear what this should return since in nimble one gets a model object # but with nCompiler, we need a modelClass to compile and then we can create an instance. # If we create an instance as the output here, one can't then compile that with an algorithm via `nCompile`. diff --git a/nimbleModel/R/options.R b/nimbleModel/R/options.R index 55e2c7d..aaaaa62 100644 --- a/nimbleModel/R/options.R +++ b/nimbleModel/R/options.R @@ -10,7 +10,9 @@ disallowMultivariateArgumentExpressions = TRUE, legacy_nimble = FALSE, # TRUE means stricter use of original nimble behavior in some cases. nodesAsChars = FALSE, - verbose = TRUE + verbose = TRUE, + getDependenciesIncludesPredictiveNodes = TRUE, ## may be toggled off during MCMC sampler building + includeUnneededLatents = FALSE ) ) diff --git a/nimbleModel/inst/generate_predefined.R b/nimbleModel/inst/generate_predefined.R index a128af6..cfd161d 100644 --- a/nimbleModel/inst/generate_predefined.R +++ b/nimbleModel/inst/generate_predefined.R @@ -1,50 +1,43 @@ ## # To update the set of predefined nClasses: ## -## # generate new predef/instr_nC. Move that directly to package code inst/nimbleModel/predef/instr_nC +## # generate new predef/instr_nC. Move that directly to package code inst/nimbleModel/predef/instr_nC (i.e. move to package) nCompiler::nCompile(instr_nClass = nimbleModel:::instr_nClass, control=list(generate_predefined=TRUE)) test <- nCompiler::nCompile(instr_nClass = nimbleModel:::instr_nClass) ## # -## # generate new predef/declFunBase_nC. Move to package and add -## # "#include " in the hContent -## # And add "// [[Rcpp::depends(nimbleModel)]]" to the cppContent +## # generate new predef/declFunBase_nC. Move to package. +## # You should see "#include " in the hContent ## # after declaration of declFunBase_nClass +## # and "// [[Rcpp::depends(nimbleModel)]]" in the cppContent nCompiler::nCompile(nimbleModel:::declFunBase_nClass, control=list(generate_predefined=TRUE)) test <- nCompiler::nCompile(nimbleModel:::declFunBase_nClass) ## # -## # generate new predef/modelBase_nC. Move to package and add -## # "#include " to the hContent -## # And add "// [[Rcpp::depends(nimbleModel)]]" to the cppContent +## # generate new predef/modelBase_nC. Move to package. +## # You should see "#include " in the hContent ## # after the declaration of modelBase_nClass. +## # and "// [[Rcpp::depends(nimbleModel)]]" in the cppContent nCompiler::nCompile(modelBase_nClass = nimbleModel:::modelBase_nClass, control=list(generate_predefined=TRUE)) test <- nCompiler::nCompile(nimbleModel:::modelBase_nClass) -## # generate new predef/copier_nC. Move to package and add -## # "#include " to the hContent BEFORE the class declaration -## # And add "// [[Rcpp::depends(nimbleModel)]]" to the cppContent -## # after the declaration of copier_nClass. -## # Note there will be an EXPECTED SET OF ERRORS when re-generating before the #include has been added. +## # generate new predef/copier_nClass. Move to package. +## # You should see "#include " in the hContent BEFORE the class declaration +## # and "// [[Rcpp::depends(nimbleModel)]]" in the cppContent nCompiler::nCompile(copier_nClass = nimbleModel:::copier_nClass, control=list(generate_predefined=TRUE)) test <- nCompiler::nCompile(nimbleModel:::copier_nClass) -## # generate new predef/multiCopier_nClass. Move to package and add -## # "#include " to the hContent BEFORE the class declaration -## # And add "// [[Rcpp::depends(nimbleModel)]]" to the cppContent -## # after the declaration of copier_nClass. -## # Note there will be an EXPECTED SET OF ERRORS when re-generating before the #include has been added. +## # generate new predef/mCopy_nC Move to package. +## # You should see "#include " in the hContent BEFORE the class declaration +## # and "// [[Rcpp::depends(nimbleModel)]]" in the cppContent nCompiler::nCompile(multiCopier_nClass = nimbleModel:::multiCopier_nClass, control=list(generate_predefined=TRUE)) test <- nCompiler::nCompile(nimbleModel:::multiCopier_nClass) -## # generate new predef/multiCopierMV_nC. Move to package and add -## # "#include " to the hContent BEFORE the class declaration -## # And add "// [[Rcpp::depends(nimbleModel)]]" to the cppContent -## # after the declaration of copier_nClass. -## # Note there will be an EXPECTED SET OF ERRORS when re-generating before the #include has been added. +## # generate new predef/mCopyMV_nC. Move to package. +## # You should see "#include " in the hContent BEFORE the class declaration +## # and "// [[Rcpp::depends(nimbleModel)]]" in the cppContent nCompiler::nCompile(multiCopierMV_nClass = nimbleModel:::multiCopierMV_nClass, control=list(generate_predefined=TRUE)) test <- nCompiler::nCompile(nimbleModel:::multiCopierMV_nClass) -## # generate new predef/modelValuesBase_nC. Move to package and add -## # "#include " to the hContent -## # And add "// [[Rcpp::depends(nimbleModel)]]" to the cppContent -## # after the declaration of modelValuesBase_nClass. +## # generate new predef/MVBase_nC Move to package. +## # You should see "#include " in the hContent +## # and "// [[Rcpp::depends(nimbleModel)]]" in the cppContent nCompiler::nCompile(modelValuesBase_nClass = nimbleModel:::modelValuesBase_nClass, control=list(generate_predefined=TRUE)) test <- nCompiler::nCompile(nimbleModel:::modelValuesBase_nClass) diff --git a/nimbleModel/inst/include/nimbleModel/.DS_Store b/nimbleModel/inst/include/nimbleModel/.DS_Store deleted file mode 100644 index 252a5b5..0000000 Binary files a/nimbleModel/inst/include/nimbleModel/.DS_Store and /dev/null differ diff --git a/nimbleModel/inst/include/nimbleModel/predef/.DS_Store b/nimbleModel/inst/include/nimbleModel/predef/.DS_Store deleted file mode 100644 index 4a1e686..0000000 Binary files a/nimbleModel/inst/include/nimbleModel/predef/.DS_Store and /dev/null differ diff --git a/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_depends.txt b/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_depends.txt new file mode 100644 index 0000000..cc355ef --- /dev/null +++ b/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_depends.txt @@ -0,0 +1 @@ +nimbleModel diff --git a/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_hContent.h b/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_hContent.h index e1327be..e30ce82 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_hContent.h +++ b/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_hContent.h @@ -26,6 +26,6 @@ class MVBase_nC : public interface_resolver< genericInterfaceC >, pub Rcpp::Environment get_CnClass_env_MVBase_nC ( ) ; -#include +#include #endif diff --git a/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_manifest.txt b/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_manifest.txt index 84d71fa..74bfa0a 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_manifest.txt +++ b/nimbleModel/inst/include/nimbleModel/predef/MVBase_nC/MVBase_nC_manifest.txt @@ -1,6 +1,7 @@ -list(saved_at = structure(1791834500.24101, class = c("POSIXct", +list(saved_at = structure(1792534431.59537, class = c("POSIXct", "POSIXt")), packet_name = "MVBase_nC", elements = c("preamble", -"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles" -), files = list(preamble = "MVBase_nC_preamble.cpp", cppContent = "MVBase_nC_cppContent.cpp", - hContent = "MVBase_nC_hContent.h", filebase = "MVBase_nC_filebase.txt", - post_cpp_compiler = "MVBase_nC_post_cpp_compiler.txt", copyFiles = "MVBase_nC_copyFiles.txt")) +"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles", +"depends"), files = list(preamble = "MVBase_nC_preamble.cpp", + cppContent = "MVBase_nC_cppContent.cpp", hContent = "MVBase_nC_hContent.h", + filebase = "MVBase_nC_filebase.txt", post_cpp_compiler = "MVBase_nC_post_cpp_compiler.txt", + copyFiles = "MVBase_nC_copyFiles.txt", depends = "MVBase_nC_depends.txt")) diff --git a/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_depends.txt b/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_depends.txt new file mode 100644 index 0000000..cc355ef --- /dev/null +++ b/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_depends.txt @@ -0,0 +1 @@ +nimbleModel diff --git a/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_manifest.txt b/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_manifest.txt index b354d20..59e11d6 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_manifest.txt +++ b/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_manifest.txt @@ -1,7 +1,7 @@ -list(saved_at = structure(1791315464.60865, class = c("POSIXct", +list(saved_at = structure(1792534392.88472, class = c("POSIXct", "POSIXt")), packet_name = "copier_nClass", elements = c("preamble", -"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles" -), files = list(preamble = "copier_nClass_preamble.cpp", cppContent = "copier_nClass_cppContent.cpp", - hContent = "copier_nClass_hContent.h", filebase = "copier_nClass_filebase.txt", - post_cpp_compiler = "copier_nClass_post_cpp_compiler.txt", - copyFiles = "copier_nClass_copyFiles.txt")) +"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles", +"depends"), files = list(preamble = "copier_nClass_preamble.cpp", + cppContent = "copier_nClass_cppContent.cpp", hContent = "copier_nClass_hContent.h", + filebase = "copier_nClass_filebase.txt", post_cpp_compiler = "copier_nClass_post_cpp_compiler.txt", + copyFiles = "copier_nClass_copyFiles.txt", depends = "copier_nClass_depends.txt")) diff --git a/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_preamble.cpp b/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_preamble.cpp index 1a92ce3..0c6b4c1 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_preamble.cpp +++ b/nimbleModel/inst/include/nimbleModel/predef/copier_nClass/copier_nClass_preamble.cpp @@ -1,5 +1,6 @@ #define NCOMPILER_HANDLE_EIGEN_ERRORS #define NCOMPILER_USES_EIGEN #define NCOMPILER_USES_NCPPVEC +#define NCOMPILER_USES_MVDISTS #define USES_NCOMPILER #define NCOMPILER_USES_NCLASS_INTERFACE diff --git a/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_depends.txt b/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_depends.txt new file mode 100644 index 0000000..cc355ef --- /dev/null +++ b/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_depends.txt @@ -0,0 +1 @@ +nimbleModel diff --git a/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_hContent.h b/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_hContent.h index 04453b5..4f80a92 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_hContent.h +++ b/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_hContent.h @@ -28,6 +28,6 @@ class declFunBase_nClass : public interface_resolver< genericInterfaceC +#include #endif diff --git a/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_manifest.txt b/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_manifest.txt index ee61ded..a1c1d52 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_manifest.txt +++ b/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_manifest.txt @@ -1,7 +1,7 @@ -list(saved_at = structure(1791315294.77355, class = c("POSIXct", +list(saved_at = structure(1792534340.26498, class = c("POSIXct", "POSIXt")), packet_name = "declFunBase_nClass", elements = c("preamble", -"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles" -), files = list(preamble = "declFunBase_nClass_preamble.cpp", +"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles", +"depends"), files = list(preamble = "declFunBase_nClass_preamble.cpp", cppContent = "declFunBase_nClass_cppContent.cpp", hContent = "declFunBase_nClass_hContent.h", filebase = "declFunBase_nClass_filebase.txt", post_cpp_compiler = "declFunBase_nClass_post_cpp_compiler.txt", - copyFiles = "declFunBase_nClass_copyFiles.txt")) + copyFiles = "declFunBase_nClass_copyFiles.txt", depends = "declFunBase_nClass_depends.txt")) diff --git a/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_preamble.cpp b/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_preamble.cpp index 1a92ce3..0c6b4c1 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_preamble.cpp +++ b/nimbleModel/inst/include/nimbleModel/predef/declFunBase_nC/declFunBase_nClass_preamble.cpp @@ -1,5 +1,6 @@ #define NCOMPILER_HANDLE_EIGEN_ERRORS #define NCOMPILER_USES_EIGEN #define NCOMPILER_USES_NCPPVEC +#define NCOMPILER_USES_MVDISTS #define USES_NCOMPILER #define NCOMPILER_USES_NCLASS_INTERFACE diff --git a/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_depends.txt b/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_manifest.txt b/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_manifest.txt index f1d4612..f4599c0 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_manifest.txt +++ b/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_manifest.txt @@ -1,7 +1,7 @@ -list(saved_at = structure(1791315229.65914, class = c("POSIXct", +list(saved_at = structure(1792534327.40934, class = c("POSIXct", "POSIXt")), packet_name = "instr_nClass", elements = c("preamble", -"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles" -), files = list(preamble = "instr_nClass_preamble.cpp", cppContent = "instr_nClass_cppContent.cpp", - hContent = "instr_nClass_hContent.h", filebase = "instr_nClass_filebase.txt", - post_cpp_compiler = "instr_nClass_post_cpp_compiler.txt", - copyFiles = "instr_nClass_copyFiles.txt")) +"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles", +"depends"), files = list(preamble = "instr_nClass_preamble.cpp", + cppContent = "instr_nClass_cppContent.cpp", hContent = "instr_nClass_hContent.h", + filebase = "instr_nClass_filebase.txt", post_cpp_compiler = "instr_nClass_post_cpp_compiler.txt", + copyFiles = "instr_nClass_copyFiles.txt", depends = "instr_nClass_depends.txt")) diff --git a/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_preamble.cpp b/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_preamble.cpp index 1a92ce3..0c6b4c1 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_preamble.cpp +++ b/nimbleModel/inst/include/nimbleModel/predef/instr_nClass/instr_nClass_preamble.cpp @@ -1,5 +1,6 @@ #define NCOMPILER_HANDLE_EIGEN_ERRORS #define NCOMPILER_USES_EIGEN #define NCOMPILER_USES_NCPPVEC +#define NCOMPILER_USES_MVDISTS #define USES_NCOMPILER #define NCOMPILER_USES_NCLASS_INTERFACE diff --git a/nimbleModel/inst/include/nimbleModel/predef/mCopyMV_nC/multiCopierMV_nClass_depends.txt b/nimbleModel/inst/include/nimbleModel/predef/mCopyMV_nC/multiCopierMV_nClass_depends.txt new file mode 100644 index 0000000..cc355ef --- /dev/null +++ b/nimbleModel/inst/include/nimbleModel/predef/mCopyMV_nC/multiCopierMV_nClass_depends.txt @@ -0,0 +1 @@ +nimbleModel diff --git a/nimbleModel/inst/include/nimbleModel/predef/mCopyMV_nC/multiCopierMV_nClass_manifest.txt b/nimbleModel/inst/include/nimbleModel/predef/mCopyMV_nC/multiCopierMV_nClass_manifest.txt index 7fe14fd..95b96dd 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/mCopyMV_nC/multiCopierMV_nClass_manifest.txt +++ b/nimbleModel/inst/include/nimbleModel/predef/mCopyMV_nC/multiCopierMV_nClass_manifest.txt @@ -1,7 +1,7 @@ -list(saved_at = structure(1791834920.56051, class = c("POSIXct", +list(saved_at = structure(1792534418.86996, class = c("POSIXct", "POSIXt")), packet_name = "multiCopierMV_nClass", elements = c("preamble", -"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles" -), files = list(preamble = "multiCopierMV_nClass_preamble.cpp", +"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles", +"depends"), files = list(preamble = "multiCopierMV_nClass_preamble.cpp", cppContent = "multiCopierMV_nClass_cppContent.cpp", hContent = "multiCopierMV_nClass_hContent.h", filebase = "multiCopierMV_nClass_filebase.txt", post_cpp_compiler = "multiCopierMV_nClass_post_cpp_compiler.txt", - copyFiles = "multiCopierMV_nClass_copyFiles.txt")) + copyFiles = "multiCopierMV_nClass_copyFiles.txt", depends = "multiCopierMV_nClass_depends.txt")) diff --git a/nimbleModel/inst/include/nimbleModel/predef/mCopy_nC/mCopy_nC_depends.txt b/nimbleModel/inst/include/nimbleModel/predef/mCopy_nC/mCopy_nC_depends.txt new file mode 100644 index 0000000..cc355ef --- /dev/null +++ b/nimbleModel/inst/include/nimbleModel/predef/mCopy_nC/mCopy_nC_depends.txt @@ -0,0 +1 @@ +nimbleModel diff --git a/nimbleModel/inst/include/nimbleModel/predef/mCopy_nC/mCopy_nC_manifest.txt b/nimbleModel/inst/include/nimbleModel/predef/mCopy_nC/mCopy_nC_manifest.txt index 964bd95..bd8d233 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/mCopy_nC/mCopy_nC_manifest.txt +++ b/nimbleModel/inst/include/nimbleModel/predef/mCopy_nC/mCopy_nC_manifest.txt @@ -1,6 +1,7 @@ -list(saved_at = structure(1791834659.55193, class = c("POSIXct", +list(saved_at = structure(1792534403.251, class = c("POSIXct", "POSIXt")), packet_name = "mCopy_nC", elements = c("preamble", -"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles" -), files = list(preamble = "mCopy_nC_preamble.cpp", cppContent = "mCopy_nC_cppContent.cpp", - hContent = "mCopy_nC_hContent.h", filebase = "mCopy_nC_filebase.txt", - post_cpp_compiler = "mCopy_nC_post_cpp_compiler.txt", copyFiles = "mCopy_nC_copyFiles.txt")) +"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles", +"depends"), files = list(preamble = "mCopy_nC_preamble.cpp", + cppContent = "mCopy_nC_cppContent.cpp", hContent = "mCopy_nC_hContent.h", + filebase = "mCopy_nC_filebase.txt", post_cpp_compiler = "mCopy_nC_post_cpp_compiler.txt", + copyFiles = "mCopy_nC_copyFiles.txt", depends = "mCopy_nC_depends.txt")) diff --git a/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_depends.txt b/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_depends.txt new file mode 100644 index 0000000..cc355ef --- /dev/null +++ b/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_depends.txt @@ -0,0 +1 @@ +nimbleModel diff --git a/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_hContent.h b/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_hContent.h index 11f4c09..d1cefef 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_hContent.h +++ b/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_hContent.h @@ -7,9 +7,9 @@ #endif #include #include "modelBase_nClass_c_.h" -#include "declFunBase_nClass_c_.h" -#include "instr_nClass_c_.h" #include "nList_instr_nClass_c_.h" +#include "instr_nClass_c_.h" +#include "declFunBase_nClass_c_.h" class modelBase_nClass : public interface_resolver< genericInterfaceC >, public loadedObjectHookC { public: @@ -32,6 +32,6 @@ class modelBase_nClass : public interface_resolver< genericInterfaceC +#include #endif diff --git a/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_manifest.txt b/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_manifest.txt index 9433d30..501e012 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_manifest.txt +++ b/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_manifest.txt @@ -1,7 +1,7 @@ -list(saved_at = structure(1791315387.89179, class = c("POSIXct", +list(saved_at = structure(1792534353.3121, class = c("POSIXct", "POSIXt")), packet_name = "modelBase_nClass", elements = c("preamble", -"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles" -), files = list(preamble = "modelBase_nClass_preamble.cpp", cppContent = "modelBase_nClass_cppContent.cpp", - hContent = "modelBase_nClass_hContent.h", filebase = "modelBase_nClass_filebase.txt", - post_cpp_compiler = "modelBase_nClass_post_cpp_compiler.txt", - copyFiles = "modelBase_nClass_copyFiles.txt")) +"cppContent", "hContent", "filebase", "post_cpp_compiler", "copyFiles", +"depends"), files = list(preamble = "modelBase_nClass_preamble.cpp", + cppContent = "modelBase_nClass_cppContent.cpp", hContent = "modelBase_nClass_hContent.h", + filebase = "modelBase_nClass_filebase.txt", post_cpp_compiler = "modelBase_nClass_post_cpp_compiler.txt", + copyFiles = "modelBase_nClass_copyFiles.txt", depends = "modelBase_nClass_depends.txt")) diff --git a/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_preamble.cpp b/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_preamble.cpp index 1a92ce3..0c6b4c1 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_preamble.cpp +++ b/nimbleModel/inst/include/nimbleModel/predef/modelBase_nC/modelBase_nClass_preamble.cpp @@ -1,5 +1,6 @@ #define NCOMPILER_HANDLE_EIGEN_ERRORS #define NCOMPILER_USES_EIGEN #define NCOMPILER_USES_NCPPVEC +#define NCOMPILER_USES_MVDISTS #define USES_NCOMPILER #define NCOMPILER_USES_NCLASS_INTERFACE diff --git a/nimbleModel/inst/include/nimbleModel/predef/modelValuesClass_/modelValuesClass_.h b/nimbleModel/inst/include/nimbleModel/predef/modelValuesClass_/modelValuesClass_.h index 5ea3e9c..0417835 100644 --- a/nimbleModel/inst/include/nimbleModel/predef/modelValuesClass_/modelValuesClass_.h +++ b/nimbleModel/inst/include/nimbleModel/predef/modelValuesClass_/modelValuesClass_.h @@ -21,6 +21,7 @@ class modelValuesClass_ : public MVBase_nC { if(m > old_m) { for(int i = old_m; i < m; i++) { (*NL)[i].resize(dims); + (*NL)[i].setZero(); // resize leaves new elements uninitialized } } } diff --git a/nimbleModel/tests/testthat/test-graphRules.R b/nimbleModel/tests/testthat/test-graphRules.R index aea01e6..e996582 100644 --- a/nimbleModel/tests/testthat/test-graphRules.R +++ b/nimbleModel/tests/testthat/test-graphRules.R @@ -2058,7 +2058,7 @@ test_that("non-sequential indexing in for loop or indexRule", { NULL ) - rule <- graphRuleClass$new(toExpr = quote(y[nimC(2,3,5)]), + rule <- graphRuleClass$new(toExpr = quote(y[nC(2,3,5)]), fromExpr = quote(x[1:3]), context = context_0) diff --git a/nimbleModel/tests/testthat/test-setupMargNodes.R b/nimbleModel/tests/testthat/test-setupMargNodes.R index 198db5b..abda3a4 100644 --- a/nimbleModel/tests/testthat/test-setupMargNodes.R +++ b/nimbleModel/tests/testthat/test-setupMargNodes.R @@ -496,13 +496,12 @@ test_that("`setupMargNodes` handling of missing/extra latents", { expect_identical(result$randomEffectsNodes[[1]]$toNodeChars(), c("b[1]", "b[2]")) expect_identical(result$paramNodes[[1]]$toNodeChars(), c("mu")) - # TODO: presumably rework how this option is handled in nimble 2. - nimble::nimbleOptions(includeUnneededLatents = TRUE) + setNimbleModelOption('includeUnneededLatents', TRUE) expect_message(result <- setupMargNodes(m, randomEffectsNodes = 'b'), "they are not needed for the provided") expect_identical(result$randomEffectsNodes[[1]]$toNodeChars(), c("b[1]", "b[2]", "b[3]")) expect_identical(result$paramNodes[[1]]$toNodeChars(), c("mu")) ## Note `b[3]` is not in `calcNodes` because `predictiveNodes` are excluded. - nimble::nimbleOptions(includeUnneededLatents = FALSE) + setNimbleModelOption('includeUnneededLatents', FALSE) }) test_that("getConditionallyIndependentSets works with grouped data", {