Merged tests/*, matlab/*, utils/* from SVN head...
[libdai.git] / src / lc.cpp
index d8da46c..fc63e6b 100644 (file)
@@ -74,6 +74,21 @@ PropertySet LC::getProperties() const {
 }
 
 
+string LC::printProperties() const {
+    stringstream s( stringstream::out );
+    s << "[";
+    s << "tol=" << props.tol << ",";
+    s << "maxiter=" << props.maxiter << ",";
+    s << "verbose=" << props.verbose << ",";
+    s << "cavity=" << props.cavity << ",";
+    s << "updates=" << props.updates << ",";
+    s << "cavainame=" << props.cavainame << ",";
+    s << "cavaiopts=" << props.cavaiopts << ",";
+    s << "reinit=" << props.reinit << "]";
+    return s.str();
+}
+
+
 LC::LC( const FactorGraph & fg, const PropertySet &opts ) : DAIAlgFG(fg), _pancakes(), _cavitydists(), _phis(), _beliefs(), props(), maxdiff(0.0) {
     setProperties( opts );
 
@@ -100,9 +115,7 @@ LC::LC( const FactorGraph & fg, const PropertySet &opts ) : DAIAlgFG(fg), _panca
 
 
 string LC::identify() const { 
-    stringstream result (stringstream::out);
-    result << Name << getProperties();
-    return result.str();
+    return string(Name) + printProperties();
 }
 
 
@@ -132,29 +145,6 @@ double LC::CalcCavityDist (size_t i, const std::string &name, const PropertySet
             vector<Factor> pairbeliefs = calcPairBeliefsNew( *cav, cav->fg().delta(i), props.reinit );
             for( size_t ij = 0; ij < pairbeliefs.size(); ij++ )
                 Bi *= pairbeliefs[ij];
-        } else if( props.cavity == Properties::CavityType::PAIRINT ) {
-            Bi = calcMarginal( *cav, cav->fg().delta(i), props.reinit );
-            
-            // Set interactions of order > 2 to zero
-            size_t N = delta(i).size();
-            Real *p = &(*Bi.p().p().begin());
-            x2x::p2logp (N, p);
-            x2x::logp2w (N, p);
-            x2x::fill (N, p, 2, 0.0);
-            x2x::w2logp (N, p);
-//            x2x::logpnorm (N, p);
-            x2x::logp2p (N, p);
-        } else if( props.cavity == Properties::CavityType::PAIRCUM ) {
-            Bi = calcMarginal( *cav, cav->fg().delta(i), props.reinit );
-            
-            // Set cumulants of order > 2 to zero
-            size_t N = delta(i).size();
-            Real *p = &(*Bi.p().p().begin());
-            x2x::p2m (N, p);
-            x2x::m2c (N, p, N);
-            x2x::fill (N, p, 2, 0.0);
-            x2x::c2m (N, p, N);
-            x2x::m2p (N, p);
         }
         maxdiff = cav->maxDiff();
         delete cav;
@@ -245,10 +235,10 @@ Factor LC::NewPancake (size_t i, size_t _I, bool & hasNaNs) {
     Factor A_I;
     for( VarSet::const_iterator k = Ivars.begin(); k != Ivars.end(); k++ )
         if( var(i) != *k )
-            A_I *= (_pancakes[findVar(*k)] * factor(I).inverse()).part_sum( Ivars / var(i) );
+            A_I *= (_pancakes[findVar(*k)] * factor(I).inverse()).partSum( Ivars / var(i) );
     if( Ivars.size() > 1 )
         A_I ^= (1.0 / (Ivars.size() - 1));
-    Factor A_Ii = (_pancakes[i] * factor(I).inverse() * _phis[i][_I].inverse()).part_sum( Ivars / var(i) );
+    Factor A_Ii = (_pancakes[i] * factor(I).inverse() * _phis[i][_I].inverse()).partSum( Ivars / var(i) );
     Factor quot = A_I.divided_by(A_Ii);
 
     piet *= quot.divided_by( _phis[i][_I] ).normalized( Prob::NORMPROB );