void omxCompleteExpectation(omxExpectation *ox) { if(ox->isComplete) return; ox->isComplete = TRUE; ox->loadFromR(); ox->init(); if (OMX_DEBUG) { omxData *od = ox->data; omxState *state = ox->currentState; std::string msg = string_snprintf("Expectation '%s' of type '%s' has" " %d definition variables:\n", ox->name, ox->expType, int(od->defVars.size())); for (int dx=0; dx < int(od->defVars.size()); ++dx) { omxDefinitionVar &dv = od->defVars[dx]; msg += string_snprintf("[%d] column '%s' ->", dx, omxDataColumnName(od, dv.column)); msg += string_snprintf(" %s[%d,%d]", state->matrixToName(~dv.matrix), dv.row, dv.col); msg += "\n dirty:"; for (int mx=0; mx < dv.numDeps; ++mx) { msg += string_snprintf(" %s", state->matrixToName(dv.deps[mx])); } msg += "\n"; } mxLogBig(msg); } }
void pia(const int *ar, int rows, int cols) { if (rows == 0 || cols == 0) return; std::string buf; for (int rx=0; rx < rows; rx++) { // column major order for (int cx=0; cx < cols; cx++) { buf += string_snprintf("%d, ", ar[cx * rows + rx]); } buf += "\n"; } mxLogBig(buf); }
void FreeVarGroup::log(omxState *os) { size_t numMats = os->matrixList.size(); size_t numAlgs = os->algebraList.size(); std::string str; str += string_snprintf("FreeVarGroup(id=%d", id[0]); for (size_t ix=1; ix < id.size(); ++ix) { str += string_snprintf(",%d", id[ix]); } str += string_snprintf(") with %d variables:", (int) vars.size()); for (size_t vx=0; vx < vars.size(); ++vx) { str += " "; str += vars[vx]->name; } if (vars.size()) str += "\nwill dirty:"; for(size_t i = 0; i < numMats; i++) { if (dependencies[i]) { int offset = ~(i - numMats); str += " "; str += os->matrixList[offset]->name(); } } for(size_t i = 0; i < numAlgs; i++) { if (dependencies[i + numMats]) { str += " "; str += os->algebraList[i]->name(); } } str += "\n"; mxLogBig(str); }
void omxCompleteExpectation(omxExpectation *ox) { if(ox->isComplete) return; if (ox->rObj) { omxState *os = ox->currentState; SEXP rObj = ox->rObj; SEXP slot; {ScopedProtect(slot, R_do_slot(rObj, Rf_install("container"))); if (Rf_length(slot) == 1) { int ex = INTEGER(slot)[0]; ox->container = os->expectationList.at(ex); } } {ScopedProtect(slot, R_do_slot(rObj, Rf_install("submodels"))); if (Rf_length(slot)) { int numSubmodels = Rf_length(slot); int *submodel = INTEGER(slot); for (int ex=0; ex < numSubmodels; ex++) { int sx = submodel[ex]; ox->submodels.push_back(omxExpectationFromIndex(sx, os)); } } } } omxExpectationProcessDataStructures(ox, ox->rObj); int numSubmodels = (int) ox->submodels.size(); for (int ex=0; ex < numSubmodels; ex++) { omxCompleteExpectation(ox->submodels[ex]); } ox->initFun(ox); if(ox->computeFun == NULL) { if (isErrorRaised()) { Rf_error("Failed to initialize '%s' of type %s: %s", ox->name, ox->expType, Global->getBads()); } else { Rf_error("Failed to initialize '%s' of type %s", ox->name, ox->expType); } } if (OMX_DEBUG) { omxData *od = ox->data; omxState *state = ox->currentState; std::string msg = string_snprintf("Expectation '%s' of type '%s' has" " %d definition variables:\n", ox->name, ox->expType, int(od->defVars.size())); for (int dx=0; dx < int(od->defVars.size()); ++dx) { omxDefinitionVar &dv = od->defVars[dx]; msg += string_snprintf("[%d] column '%s' ->", dx, omxDataColumnName(od, dv.column)); for (int lx=0; lx < dv.numLocations; ++lx) { msg += string_snprintf(" %s[%d,%d]", state->matrixToName(~dv.matrices[lx]), dv.rows[lx], dv.cols[lx]); } msg += "\n dirty:"; for (int mx=0; mx < dv.numDeps; ++mx) { msg += string_snprintf(" %s", state->matrixToName(dv.deps[mx])); } msg += "\n"; } mxLogBig(msg); } ox->isComplete = TRUE; }