@@ -2206,15 +2206,17 @@ makeModelDerivsInfo_impl <- function(model,
22062206
22072207 wrtNodes <- model $ expandNodeNames(wrtNodeComps )
22082208 allWrtComps <- model $ expandNodeNames(wrtNodes , returnScalarComponents = TRUE )
2209- if (identical(wrtNodeComps , allWrtComps ) && ! exists( ' paciorek ' ) ) {
2209+ if (identical(wrtNodeComps , allWrtComps )) {
22102210 # # wrt consists of full nodes for computational efficiency.
22112211 # # If original wrtNodeComps has components, then this `setdiff` could incorrectly
22122212 # # exclude the components of the `wrtNodes` not in `wrtNodeComps` from `parentNodes`,
22132213 # # so we need the other branch here.
2214+ usingNodes <- TRUE
22142215 neededParentNodes <- setdiff(parentNodes , c(wrtNodes , nonWrtCalcNodes ))
22152216 extraInputNodes <- c(neededParentNodes , nonWrtStochCalcNodes )
22162217 } else {
22172218 # # `expandNodeNames` can be costly, so only use this branch if necessary.
2219+ usingNodes <- FALSE
22182220 parentNodeComps <- model $ expandNodeNames(parentNodes , returnScalarComponents = TRUE )
22192221 neededParentNodeComps <- setdiff(parentNodeComps , c(wrtNodeComps , nonWrtCalcNodeComps ))
22202222 extraInputNodes <- model $ expandNodeNames(c(neededParentNodeComps , nonWrtStochCalcNodes ))
@@ -2223,16 +2225,24 @@ makeModelDerivsInfo_impl <- function(model,
22232225 constantNodes <- character ()
22242226 if (dataAsConstantNodes ) {
22252227 boolData <- model $ isData(extraInputNodes )
2226- constantNodes <- model $ expandNodeNames(extraInputNodes [boolData ], returnScalarComponents = TRUE , sort = TRUE )
2227- extraInputNodes <- model $ expandNodeNames(extraInputNodes [! boolData ], returnScalarComponents = TRUE , sort = TRUE )
22282228 # # "wrt" components could have crept in when initializing `extraInputNodes` based on nodes.
2229- extraInputNodes <- setdiff(extraInputNodes , wrtNodeComps )
2230- constantNodes <- setdiff(constantNodes , wrtNodeComps )
2229+ if (usingNodes ) { # Screen using nodes for efficiency, then get components.
2230+ constantNodes <- setdiff(extraInputNodes [boolData ], wrtNodes )
2231+ extraInputNodes <- setdiff(extraInputNodes [! boolData ], wrtNodes )
2232+ extraInputNodeComps <- model $ expandNodeNames(extraInputNodes , returnScalarComponents = TRUE , sort = TRUE )
2233+ constantNodeComps <- model $ expandNodeNames(constantNodes , returnScalarComponents = TRUE , sort = TRUE )
2234+ } else { # Screen using components.
2235+ constantNodeComps <- model $ expandNodeNames(extraInputNodes [boolData ], returnScalarComponents = TRUE , sort = TRUE )
2236+ extraInputNodeComps <- model $ expandNodeNames(extraInputNodes [! boolData ], returnScalarComponents = TRUE , sort = TRUE )
2237+ extraInputNodeComps <- setdiff(extraInputNodeComps , wrtNodeComps )
2238+ constantNodeComps <- setdiff(constantNodeComps , wrtNodeComps )
2239+ }
22312240 } else {
2232- extraInputNodes <- setdiff(model $ expandNodeNames(extraInputNodes ,returnScalarComponents = TRUE , sort = TRUE ), wrtNodeComps )
2241+ extraInputNodeComps <- setdiff(model $ expandNodeNames(extraInputNodes ,returnScalarComponents = TRUE , sort = TRUE ), wrtNodeComps )
2242+ constantNodeComps <- character ()
22332243 }
2234- list (updateNodes = extraInputNodes ,
2235- constantNodes = constantNodes )
2244+ list (updateNodes = extraInputNodeComps ,
2245+ constantNodes = constantNodeComps )
22362246}
22372247
22382248nimDerivsInfoClass_update_init_impl <- function (.self ,
0 commit comments