/** * @file BayesNet-inl.h * @brief Bayes net template definitions * @author Frank Dellaert */ #pragma once #include #include #include #include #include // for += using namespace boost::assign; #include "Ordering.h" #include "BayesNet.h" //#include "FactorGraph-inl.h" //#include "Conditional.h" using namespace std; namespace gtsam { /* ************************************************************************* */ template void BayesNet::print(const string& s) const { cout << s << ":\n"; Symbol key; BOOST_REVERSE_FOREACH(sharedConditional conditional,conditionals_) conditional->print("Node[" + (string)(conditional->key()) + "]"); } /* ************************************************************************* */ template bool BayesNet::equals(const BayesNet& cbn, double tol) const { if(size() != cbn.size()) return false; return equal(conditionals_.begin(),conditionals_.end(),cbn.conditionals_.begin(),equals_star(tol)); } /* ************************************************************************* */ template void BayesNet::push_back(const BayesNet bn) { BOOST_FOREACH(sharedConditional conditional,bn.conditionals_) push_back(conditional); } /* ************************************************************************* */ template void BayesNet::push_front(const BayesNet bn) { BOOST_FOREACH(sharedConditional conditional,bn.conditionals_) push_front(conditional); } /* ************************************************************************* */ template Ordering BayesNet::ordering() const { Ordering ord; BOOST_FOREACH(sharedConditional conditional,conditionals_) ord.push_back(conditional->key()); return ord; } /* ************************************************************************* */ template void BayesNet::saveGraph(const std::string &s) const { ofstream of(s.c_str()); of<< "digraph G{\n"; BOOST_FOREACH(sharedConditional conditional,conditionals_) { Symbol child = conditional->key(); BOOST_FOREACH(const Symbol& parent,conditional->parents()) { of << (string)parent << "->" << (string)child << endl; } } of<<"}"; of.close(); } /* ************************************************************************* */ template typename BayesNet::sharedConditional BayesNet::operator[](const Symbol& key) const { const_iterator it = find_if(conditionals_.begin(),conditionals_.end(),onKey(key)); if (it == conditionals_.end()) throw(invalid_argument( "BayesNet::operator['"+(std::string)key+"']: not found")); return *it; } /* ************************************************************************* */ } // namespace gtsam