void Structure::assert_valid() { POMAGMA_INFO("Validating solver::Structure"); // Check atoms. POMAGMA_ASSERT(term_arity(TermAtom::TOP) == TermArity::TOP, "Missing TOP"); POMAGMA_ASSERT(term_arity(TermAtom::BOT) == TermArity::BOT, "Missing BOT"); POMAGMA_ASSERT(term_arity(TermAtom::I) == TermArity::I, "Missing I"); POMAGMA_ASSERT(term_arity(TermAtom::K) == TermArity::K, "Missing K"); POMAGMA_ASSERT(term_arity(TermAtom::B) == TermArity::B, "Missing B"); POMAGMA_ASSERT(term_arity(TermAtom::C) == TermArity::C, "Missing C"); POMAGMA_ASSERT(term_arity(TermAtom::S) == TermArity::S, "Missing S"); // Check terms. const Term max_term = term_arity_.size() - 1; for (Term term = 1; term <= max_term; ++term) { const TermArity arity = term_arity(term); switch (arity) { case TermArity::IVAR: { const unsigned rank = ivar_arg(term); POMAGMA_ASSERT_EQ(term, ivar(rank)); break; } case TermArity::NVAR: { const std::string& name = nvar_arg(term); POMAGMA_ASSERT_EQ(term, nvar(name)); break; } case TermArity::APP: { Term lhs; Term rhs; std::tie(lhs, rhs) = app_arg(term); POMAGMA_ASSERT_EQ(term, app(lhs, rhs)); break; } case TermArity::JOIN: { Term lhs; Term rhs; std::tie(lhs, rhs) = join_arg(term); POMAGMA_ASSERT_EQ(term, join(lhs, rhs)); break; } default: break; } } // Check literals. const Literal max_lit = less_arg_.size() - 1; for (Literal lit = 1; lit <= max_lit; ++lit) { Term lhs; Term rhs; std::tie(lhs, rhs) = literal_arg(lit); POMAGMA_ASSERT_EQ(lit, less(lhs, rhs)); std::tie(lhs, rhs) = literal_arg(-lit); POMAGMA_ASSERT_EQ(-lit, nless(lhs, rhs)); } }
void BinomialLogitSamplerRwm::draw(){ const std::vector<Ptr<BinomialRegressionData> > &data(m_->dat()); SpdMatrix ivar(pri_->siginv()); Vector beta(m_->Beta()); for(int i = 0; i < data.size(); ++i){ Ptr<BinomialRegressionData> dp = data[i]; double eta = beta.dot(dp->x()); double prob = plogis(eta); ivar.add_outer(dp->x(), dp->n() * prob * (1-prob)); } proposal_->set_ivar(ivar); beta = sam_.draw(beta); m_->set_Beta(beta); }
void PrettyPrinter::printScope(Scope *scope) { std::string indentation(m_indent, ' '); //why constructor doesn't get const pointer? Scope::VarIterator ivar(scope); //Java-style iterators in C++? while (ivar.hasNext()) { AstVar *var = ivar.next(); m_out << indentation << typeToName(var->type()) << " " << var->name() << ";" << std::endl; } Scope::FunctionIterator ifun(scope); while (ifun.hasNext()) ifun.next()->node()->visit(this); }
void MGXS::set_ivar()const{ if(current_) return; SpdMatrix ivar(mod_->xtx()); double w = diagonal_weight_; if(w>= 1.0) ivar.set_diag(ivar.diag()); else if(w>0.0){ ivar *= (1-w); ivar.diag()/=(1-w); } ivar.diag()+= Lambda_; double sigsq = mod_->sigsq(); ivar/=sigsq; ivar_->set_ivar(ivar); current_ = true; }
void ZGS::find_posterior_mode(double){ double a = ivar()->alpha() + .5 * mod->suf()->n(); double b = ivar()->beta() + .5 * mod->suf()->sumsq(); mod->set_sigsq(b/(1+a)); // with respect to sigsq }