Merged regiongraph.* and daialg.* from SVN head,
[libdai.git] / include / dai / jtree.h
index 9fd1637..20c9dd5 100644 (file)
@@ -49,7 +49,7 @@ class JTree : public DAIAlgRG {
     public:
         struct Properties {
             size_t verbose;
     public:
         struct Properties {
             size_t verbose;
-            ENUM2(UpdateType,HUGIN,SHSH)
+            DAI_ENUM(UpdateType,HUGIN,SHSH)
             UpdateType updates;
         } props;
 
             UpdateType updates;
         } props;
 
@@ -57,6 +57,8 @@ class JTree : public DAIAlgRG {
         JTree() : DAIAlgRG(), _RTree(), _Qa(), _Qb(), _mes(), _logZ(), props() {}
         JTree( const JTree& x ) : DAIAlgRG(x), _RTree(x._RTree), _Qa(x._Qa), _Qb(x._Qb), _mes(x._mes), _logZ(x._logZ), props(x.props) {}
         JTree* clone() const { return new JTree(*this); }
         JTree() : DAIAlgRG(), _RTree(), _Qa(), _Qb(), _mes(), _logZ(), props() {}
         JTree( const JTree& x ) : DAIAlgRG(x), _RTree(x._RTree), _Qa(x._Qa), _Qb(x._Qb), _mes(x._mes), _logZ(x._logZ), props(x.props) {}
         JTree* clone() const { return new JTree(*this); }
+        /// Create (virtual constructor)
+        virtual JTree* create() const { return new JTree(); }
         JTree & operator=( const JTree& x ) {
             if( this != &x ) {
                 DAIAlgRG::operator=(x);
         JTree & operator=( const JTree& x ) {
             if( this != &x ) {
                 DAIAlgRG::operator=(x);
@@ -78,6 +80,8 @@ class JTree : public DAIAlgRG {
         static const char *Name;
         std::string identify() const;
         void init() {}
         static const char *Name;
         std::string identify() const;
         void init() {}
+        /// Clear messages and beliefs corresponding to the nodes in ns
+        virtual void init( const VarSet &/*ns*/ ) {}
         void runHUGIN();
         void runShaferShenoy();
         double run();
         void runHUGIN();
         void runShaferShenoy();
         double run();
@@ -86,13 +90,13 @@ class JTree : public DAIAlgRG {
         std::vector<Factor> beliefs() const;
         Real logZ() const;
 
         std::vector<Factor> beliefs() const;
         Real logZ() const;
 
-        void init( const VarSet &/*ns*/ ) {}
-        void undoProbs( const VarSet &ns ) { RegionGraph::undoProbs( ns ); init( ns ); }
+        void restoreFactors( const VarSet &ns ) { RegionGraph::restoreFactors( ns ); init( ns ); }
 
         size_t findEfficientTree( const VarSet& ns, DEdgeVec &Tree, size_t PreviousRoot=(size_t)-1 ) const;
         Factor calcMarginal( const VarSet& ns );
         void setProperties( const PropertySet &opts );
         PropertySet getProperties() const;
 
         size_t findEfficientTree( const VarSet& ns, DEdgeVec &Tree, size_t PreviousRoot=(size_t)-1 ) const;
         Factor calcMarginal( const VarSet& ns );
         void setProperties( const PropertySet &opts );
         PropertySet getProperties() const;
+        std::string printProperties() const;
         double maxDiff() const { return 0.0; }
 };
 
         double maxDiff() const { return 0.0; }
 };