Updated ChangeLog and added some backwards compatibility stuff
authorJoris Mooij <joris.mooij@tuebingen.mpg.de>
Mon, 16 Nov 2009 13:46:31 +0000 (14:46 +0100)
committerJoris Mooij <joris.mooij@tuebingen.mpg.de>
Mon, 16 Nov 2009 13:46:31 +0000 (14:46 +0100)
ChangeLog
OBSOLETE
README
TODO
include/dai/factor.h
include/dai/prob.h
src/matlab/dai.cpp

index 83486bd..d73d95e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-* Replaced VarSet::calcState() by non-member calcLinearState()
-* Replaced VarSet::calcStates() by non-member calcState()
-* README is now created automatically from doxygen documentation
-* Makefile macros DAI_VERSION and DAI_DATE have been introduced,
-  in order to store this information in a central place
-* Renamed "ConditionalProbEstimation" into "CondProbEstimation"
-* Variable labels are now nonnegative (of type size_t)
-* Tiny change to .tab file format (added empty line after header)
-* Renamed Treewidth(const FactorGraph &) into boundTreewidth(const FactorGraph &)
-* Added ExactInf::calcMarginal(const VarSet &)
-* Replaced UEdgeVec by Graph
-* Replaced DEdgeVec by new RootedTree class
-* Moved functionality of GrowRootedTree() into constructor of RootedTree
-* Extended InfAlg interface with setProperties(), getProperties() and printProperties()
-* Declared class Diffs as obsolete
-* Declared calcPairBeliefsNew() as obsolete (its functionality is now part
-  of calcPairBeliefs())
-* Declared calcMarginal2ndO() as obsolete
-* Removed DAI_ACCMUT macro because it didn't yield satisfactory doxygen documentation
-* Replaced constructor
-    TFactor<T>::TFactor( const VarSet& vars, TIterator begin )
-  by two constructors
-    TFactor<T>::TFactor( const VarSet& vars, const T* p )
-    TFactor<T>::TFactor( const VarSet& vars, const std::vector<S> &x )
-* Fixed bugs (min and max were reversed) in
-  TFactor<T> min( const TFactor<T> &, const TFactor<T> & )
-  TFactor<T> max( const TFactor<T> &, const TFactor<T> & )
-* Renamed RegionGraph::Check_Counting_Numbers into
-  RegionGraph::checkCountingNumbers
-  (and provided an alias for backwards compatibility)
-* Renamed RegionGraph::Calc_Counting_Numbers into
-  RegionGraph::calcCountingNumbers
-  (and provided an alias for backwards compatibility)
-* Renamed Permute::convert_linear_index into Permute::convertLinearIndex
-  (and provided an alias for backwards compatibility)
-* Added examples/example_permute.cpp
-* Added TProb<T>::divided_by(const TProb<T>&) const
-* Fixed bug in BipartiteGraph::eraseEdge()
-* Added python and octave ports for examples/example_sprinkler.cpp
-* [Patrick Pletscher] Added SWIG wrapper code for python and octave
-* Added init parameter to HAK/GBP to allow for random initialization
-* Replaced the standard assert() macro by DAI_ASSERT, which throws a
-  dai::Exception and is even active if NDEBUG is defined
-* Added a constructor TProb<T>::TProb<T>( const std::vector<S> &v )
-* Introduced CCNODEBUGFLAGS in Makefile
+New features:
+* Complete doxygen documentation (although more detailed documentation still
+  has to be written)
+* [Charles Vaske] Added parameter learning for conditional probabilities by 
+  Expectation Maximization
+* [Patrick Pletscher] Added SWIG wrapper code for experimental python and 
+  octave interfaces
+* Added Max-Product functionality to JTree
+* [Frederik Eaton] Added Back-Belief-Propagation
+* [Frederik Eaton] Added approximate inference method "Clamped Belief Propagation"
+* [Frederik Eaton] Added approximate inference method "Gibbs sampling"
+
+Code cleanup:
 * Updated copyright headers
-* Added max-product functionality to JTree
-* [Charles Vaske] EM bugfix (was using abs() instead of fabs() in 
-  determining EM termination, which caused a loss of precision).
-* [Charles Vaske] New constructor in Permute for canonical variable ordering
-* [Charles Vaske] New constructor in Factor that reorders variables to canonical ordering
-* [Charles Vaske] New accessor in Properties for getting all keys
-* [Charles Vaske] New function for getting inferred parameters
 * Cleaned up error handling by introducing the DAI_THROWE macro
 * Introduced DAI_DEBASSERT macro to abbreviate a common pattern
-* Changed FactorGraph::clamp and DAIAlg::clamp interfaces (the variable to be
-  clamped is now indicated by its index, not as a Var) and marked the old
-  interface as obsolete
-* [Patrick Pletscher] Fixed performance issue in FactorGraph::clamp
-* [Sebastian Nowozin] MEX file dai now also optionally returns the MAP state
-  (only for BP)
-* [Sebastian Nowozin] Fixed memory leak in MEX file dai
+* Replaced the standard assert() macro by DAI_ASSERT, which throws a
+  dai::Exception and is even active if NDEBUG is defined
+* Removed all the virtual default constructors *::create(), as they are not used
+* [Frederik Eaton] Removed unnecessary copy constructors and assignment operators
+* [Frederik Eaton] Change cout to cerr in warnings and error messages
 
-git ae0fc30e10be6683cbfc209dcee56f34234a6cb8
---------------------------------------------
-* Added work-around for bug in Boost Graph Library
-* Improvements of TFactor<T>:
+Miscellaneous improvements:
+* BipartiteGraph:
+  - Added eraseEdge( size_t n1, size_t n2 )
+  - [Frederik Eaton] Improved documentation of Neighbor
+* TProb<T>:
+  - Added divided_by(const TProb<T>&) const
+  - Added constructor TProb<T>( const std::vector<S> &v )
+  - Added size_t draw(), which draws a random index
+  - [Frederik Eaton] Added setUniform()
+  - [Frederik Eaton] Added sumAbs()
+  - [Frederik Eaton] Added argmax()
+  - [Giuseppe Passino] Added begin(), end()
+* TFactor<T>:
+  - [Giuseppe Passino] Added begin(), end()
+  - [Charles Vaske] Added TFactor( const std::vector<Var> &vars, const std::vector<T> &p ),
+    which reorders variables to canonical ordering before storing the table
+  - Added constructor TFactor<T>( const VarSet &vars, const std::vector<S> &v )
   - Extended functionality of TFactor<T>::operators +,-,+=,-= to handle different VarSets
   - Added TFactor<T>::maxMarginal (similar to marginal but with max instead of sum)
-* Added BipartiteGraph::eraseEdge
-* Removed all the virtual default constructors *::create(), as they are not used.
-* Fixed bug in MaxSpanningTree (it wrongly assumed that the tree was not empty).
-* [Charles Vaske] Added Expectation Maximization code.
-* Added MatLab QuickStart to README.
-* MEX file dai now also returns variable and factor beliefs.
-* Cleanups and extra documentation of the code contributed by Frederik Eaton
-* Removed erroneous 'inline' directives in gibbs.cpp
+* State:
+  - [Giuseppe Passino] Added prefix ++ operator
+* Permute:
+  - [Charles Vaske] Added constructor in Permute for canonical variable ordering
+* FactorGraph:
+  - [Frederik Eaton] Added clampVar()
+  - [Frederik Eaton] Added clampFactor()
+  - [Giuseppe Passino] Added begin(), end()
+* PropertySet:
+  - Added keys(), for getting all keys
+  - [Frederik Eaton] Added default constructor
+  - [Frederik Eaton] Added constructor from string
+* InfAlg:
+  - Added setProperties(), getProperties() and printProperties()
+  - [Frederik Eaton] Added beliefV(), beliefF()
+* ExactInf:
+  - Added calcMarginal(const VarSet &)
+* HAK:
+  - Added "init" parameter to allow for random initialization
+* BP:
+  - [Giuseppe Passino] Added findMaximum(), which can be used after running
+    max-product BP to construct a global state with maximum probability
+* JTree:
+  - Added findMaximum(), which can be used after running
+    max-product JTree to construct a global state with maximum probability
+* MatLab interface:
+  - MEX file dai now also returns variable and factor beliefs
+  - [Sebastian Nowozin] MEX file dai now also optionally returns the MAP state
+    (only for BP and JTree)
+* README is now created automatically from doxygen documentation
 * [Frederik Eaton] Added script for automatically generating properties code (used by CBP and BBP)
-* [Frederik Eaton] Updated doxygen.conf to version 1.5.9
 * [Frederik Eaton] Added newInfAlgFromString to alldai.h/cpp
-* [Frederik Eaton] Added FactorGraph::clampVar and FactorGraph::clampFactor
-* [Frederik Eaton] Changed BP to be able to record order in which messages are sent (for use by BBP)
-* [Frederik Eaton] Improved documentation of BipartiteGraph::Neighbor
-* [Frederik Eaton]: Extended InfAlg interface with beliefV() and beliefF() methods;
-* [Frederik Eaton]: Improved PropertySet class:
-  - Added default constructor
-  - Allow construction from string
-  - Added method allKeys() to produce list of keys
-  - In getStringAs(), check for typeid(ValueType) before typeid(std::string)
-    (this fixes a strange bug for empty string property)
-* [Frederik Eaton]: Added some utility macros (DAI_PV, DAI_DMSG, DAI_ACCMUT, DAI_IFVERB)
-  and functions (concat(),rnd()) to include/dai/util.h
-* [Frederik Eaton] Added backwards compatibility layer for edge interface to
-  BipartiteGraph and FactorGraph (which will be obsoleted soon)
-* [Frederik Eaton] Added BP_dual, BBP and CBP algorithms
-* [Frederik Eaton] Added Gibbs::state() accessors/mutators
-* [Frederik Eaton] Fixed Gibbs::getVarDist(size_t) to return uniform
-  distribution if no state is allowed
+* [Frederik Eaton] Added some utility macros (DAI_PV, DAI_DMSG, DAI_IFVERB)
+  and functions (concat(),rnd()) to util.h
+* Changed output stream operator<< for Var and VarSet
 * [Frederik Eaton] Improved parsing code in tests/testdai to allow recursive
   alias substitutions
-* Interface changes:
-    TProb<T>::minVal()     -> TProb<T>::min()
-    TFactor<T>::minVal()   -> TFactor<T>::min()
-    TProb<T>::maxVal()     -> TProb<T>::max()
-    TFactor<T>::maxVal()   -> TFactor<T>::max()
-    TProb<T>::totalSum()   -> TProb<T>sum()
-    TFactor<T>::totalSum() -> TFactor<T>::sum()
-* [Frederik Eaton] Added methods setUniform (), sumAbs(), argmax() to TProb<T>
-* [Frederik Eaton] Added TAGS, lib targets to Makefile
-* [Frederik Eaton] Add useful aliases to aliases.conf
-* [Frederik Eaton] Removed unnecessary copy constructors and assignment
-  operators
-* [Frederik Eaton] Change cout to cerr in warnings and error messages
+* [Frederik Eaton] Added useful aliases to aliases.conf
 * [Giuseppe Passino] Optimised maximum-residual BP by using a reversed ordered
   set instead of the linear search (which can yield enormous speedups - a
   factor 500 has been measured on a binary Ising grid with 128x128 variables!)
 * Added debug assertions to Var which check for inconsistent dimensions of
   variables with the same labels
-* [Giuseppe Passino] Added prefix ++ operator to State (State::operator++())
-* [Giuseppe Passino] Added iterators to FactorGraph (FactorGraph::begin,
-  FactorGraph::end)
-* [Giuseppe Passino] Added iterators to TFactor (TFactor::begin, TFactor::end)
-* [Giuseppe Passino] Added iterators to TProb (TProb::begin, TProb::end)
-* [Giuseppe Passino] Added BP::findMaximum(), which can be used after running
-  max-product BP to construct a global state with maximum probability
-* Improved Makefile (libDAI now also builds out-of-the-box on MacOSX,
-  thanks to Dan Preston; merged Makefile.win and Makefile.shared into Makefile)
-* Fixed bug in calcMarginal, calcPairBeliefs, calcPairBeliefsNew where
-  states with zero probability mass were clamped, leading to NaNs or assertion
-  errors (thanks to Dan Preston for reporting this)
 * toc() now returns POSIX system time with maximum accuracy of microseconds
 * Exception objects now remember their error code
-* Added examples/example_sprinkler.cpp
-* [Peter Gober] Made libDAI build out-of-the-box on Cygwin.
-* [Frederik Eaton] Added Gibbs sampler to algorithms
-* Improved documentation of include/dai/{bipgraph.h, prob.h, smallset.h,
-  var.h, varset.h, factor.h, enum.h} and of examples/example.cpp
-  Merged TODO and FILEFORMAT into doxygen documentation
-* examples/
+* Examples:
   - Moved example.cpp to examples/
   - Added examples/example_bipgraph.cpp
   - Added examples/example_varset.cpp
-* Interface changes:
-  - Replaced TProb<T>::log0() by TProb<T>::log(true)
-  - Replaced TProb<T>::takeLog0() by TProb<T>::takeLog(true)
-  - Replaced TFactor<T>::log0() by TFactor<T>::log(true)
-  - Removed TProb<T>::hasNonPositives()
-  - Renamed smallSet<T> to SmallSet<T>
-  - Removed TFactor<T>::divided_by, use operator/ instead
-  - Removed TFactor<T>::divide, use operator/= instead
-  - Removed TFactor<T>::partSum(const VarSet&), use marginal(const VarSet&,true) instead
-  - Improved constructors of TProb and TFactor to use iterators instead of pointers
-* Miscellaneous small changes and cleanups:
-  - Changed regression test so that it also works under Windows
-  - Changed output stream operator<< for Var and VarSet
-  - Added TProb::draw() function, which draws a random index
-  - Cleanup of matlab interface code
-  - Small improvement of utils/fginfo
-  - Small cleanup of BP code
+  - Added examples/example_sprinkler.cpp
+  - Added examples/example_permute.cpp
+  - Added python and octave ports for examples/example_sprinkler.cpp
+
+Build system:
+* Improved Makefile:
+  - Merged Makefile.win and Makefile.shared into Makefile
+  - Macros DAI_VERSION and DAI_DATE have been introduced,
+    in order to store this information in a central place
+  - Introduced CCNODEBUGFLAGS in Makefile
   - Switched Makefile.win to GNU Make syntax
+  - [Frederik Eaton] Added TAGS, lib targets to Makefile
+* Compatibility:
+  - [Peter Gober] libDAI can now be built on Cygwin
+  - [Dan Preston] libDAI can now be built on Mac OS X
+  - Changed regression test so that it also works under Windows
+
+Interface changes (the old interface is marked obsolete and will be removed in the next release):
+* Replaced VarSet::calcState() by non-member calcLinearState()
+* Replaced VarSet::calcStates() by non-member calcState()
+* Variable labels are now nonnegative (of type size_t)
+* Renamed Treewidth(const FactorGraph &) into boundTreewidth(const FactorGraph &)
+* Replaced UEdgeVec by Graph
+* Replaced DEdgeVec by new RootedTree class
+* Moved functionality of GrowRootedTree() into constructor of RootedTree
+* Merged calcPairBeliefsNew() into calcPairBeliefs()
+* Removed calcMarginal2ndO()
+* Renamed RegionGraph::Check_Counting_Numbers into RegionGraph::checkCountingNumbers
+* Renamed RegionGraph::Calc_Counting_Numbers into RegionGraph::calcCountingNumbers
+* Renamed Permute::convert_linear_index into Permute::convertLinearIndex
+* Changed FactorGraph::clamp and DAIAlg::clamp interfaces (the variable to be
+  clamped is now indicated by its index, not as a Var)
+* Replaced TProb<T>::log0() by TProb<T>::log(true)
+* Replaced TProb<T>::takeLog0() by TProb<T>::takeLog(true)
+* Removed TProb<T>::hasNonPositives()
+* Replaced TFactor<T>::log0() by TFactor<T>::log(true)
+* Removed TFactor<T>::divided_by, use operator/ instead
+* Removed TFactor<T>::divide, use operator/= instead
+* Removed TFactor<T>::partSum(const VarSet&), use marginal(const VarSet&,false) instead
+* Renamed smallSet<T> to SmallSet<T>
+* Renamed TProb<T>::minVal() to TProb<T>::min()
+* Renamed TProb<T>::maxVal() to TProb<T>::max()
+* Renamed TProb<T>::totalSum() to TProb<T>sum()
+* Renamed TFactor<T>::minVal() to TFactor<T>::min()
+* Renamed TFactor<T>::maxVal() to TFactor<T>::max()
+* Renamed TFactor<T>::totalSum() to TFactor<T>::sum()
+* Removed class Diffs
+* [Frederik Eaton] Added backwards compatibility layer for edge interface to
+  BipartiteGraph and FactorGraph (which will be obsoleted soon)
+
+Bug fixes:
+* Fixed reversal of min and max in 
+  TFactor<T> min( const TFactor<T> &, const TFactor<T> & )
+  TFactor<T> max( const TFactor<T> &, const TFactor<T> & )
+* [Sebastian Nowozin] Fixed memory leak in MEX file dai
+* [Frederik Eaton] In PropertySet::getStringAs(), check for typeid(ValueType) 
+  before typeid(std::string) (this fixes a strange bug for empty string property)
+* Added work-around for bug in Boost Graph Library
+* Fixed bug in MaxSpanningTree (it wrongly assumed that the tree was not empty).
+* Fixed bug in calcMarginal and calcPairBeliefs where states with zero probability 
+  mass were clamped, leading to NaNs or assertion errors (thanks to Dan Preston 
+  for reporting this)
 
 
 libDAI-0.2.2 (2008-09-30)
index 4cf4603..3f337f3 100644 (file)
--- a/OBSOLETE
+++ b/OBSOLETE
@@ -35,3 +35,16 @@ DEdgeVec GrowRootedTree( const Graph &T, size_t Root );
 const Factor& LC::belief(size_t);
 size_t VarSet::calcState( const std::map<Var, size_t> &state ) const;
 std::map<Var, size_t> VarSet::calcStates( size_t linearState ) const;
+TProb<T> TProb<T>::log0() const;
+const TProb<T>& takeLog0();
+bool hasNonPositives() const;
+TFactor<T> log0() const;
+TFactor<T>& divide (const TFactor<T>& g);
+TFactor<T> divided_by (const TFactor<T>& g) const;
+TFactor<T> partSum(const VarSet &vars) const;
+T TProb<T>::minVal() const;
+T TProb<T>::maxVal() const;
+T TProb<T>::totalSum() const;
+T TFactor<T>::minVal() const;
+T TFactor<T>::maxVal() const;
+T TFactor<T>::totalSum() const;
diff --git a/README b/README
index 70c3154..bc0c9d2 100644 (file)
--- a/README
+++ b/README
@@ -2,8 +2,8 @@ libDAI  -  A free/open source C++ library for Discrete Approximate Inference
 
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 
-Version:  git commit 44d777200a6977fd8d8e40b0356cfe29bf830ae5
-Date:     Mon Nov 16 12:42:06 2009 +0100
+Version:  git commit fc04cce2b5027d58acfe965cee7ed01ec1dbb9a7
+Date:     Mon Nov 16 13:14:56 2009 +0100
 See also: http://www.libdai.org
 
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
diff --git a/TODO b/TODO
index 062ee73..5efc1ef 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,9 +1,9 @@
 To do for the next release (0.2.3):
 
-- Update ChangeLog
-
-Finally:
-
+- Test under Windows
+- Test under Cygwin
+- Test under Ubuntu
+- Update ChangeLog head
 - Set DAI_VERSION and DAI_DATE correctly (all occurences)
 - Build documentation and make a copy
 - Find out how to tag the git commit
index a3fe3ac..b92a366 100644 (file)
@@ -137,12 +137,30 @@ template <typename T> class TFactor {
         /// Returns maximum of all values
         T max() const { return _p.max(); }
 
+        // OBSOLETE
+        /// Returns maximum of all values
+        /** \deprecated Please use max() instead
+         */
+        T maxVal() const { return max(); }
+
         /// Returns minimum of all values
         T min() const { return _p.min(); }
 
+        // OBSOLETE
+        /// Returns minimum of all values
+        /** \deprecated Please use min() instead
+         */
+        T minVal() const { return min(); }
+
         /// Returns sum of all values
         T sum() const { return _p.sum(); }
 
+        // OBSOLETE
+        /// Returns sum of all values
+        /** \deprecated Please use sum() instead
+         */
+        T totalSum() const { return sum(); }
+
         /// Returns maximum absolute value of all values
         T maxAbs() const { return _p.maxAbs(); }
 
@@ -186,6 +204,12 @@ template <typename T> class TFactor {
             x._p = _p.log(zero);
             return x;
         }
+        
+        // OBSOLETE
+        /// Returns pointwise logarithm (or 0 if argument is 0)
+        /** \deprecated Please use log() instead with \a zero == \c true
+         */
+        TFactor<T> log0() const { return log(true); }
 
         /// Returns pointwise inverse
         /** If \a zero == \c true, uses <tt>1/0==0</tt>; otherwise, <tt>1/0==Inf</tt>.
@@ -351,6 +375,12 @@ template <typename T> class TFactor {
          *  \f[\frac{f}{g} : \prod_{l\in L\cup M} X_l \to [0,\infty) : x \mapsto \frac{f(x_L)}{g(x_M)}.\f]
          */
         TFactor<T>& operator/= (const TFactor<T>& g) { return binaryOp( g, fo_divides0<T>() ); }
+
+        // OBSOLETE
+        /// Divides \c *this by \a g (where division by zero yields zero)
+        /** \deprecated Please use operator/= instead
+          */
+        TFactor<T>& divide (const TFactor<T>& g) { return (*this /= g); }
     //@}
 
     /// \name Transformations with other factors
@@ -417,6 +447,12 @@ template <typename T> class TFactor {
         TFactor<T> operator/ (const TFactor<T>& g) const {
             return binaryTr(g,fo_divides0<T>());
         }
+
+        // OBSOLETE
+        /// Returns quotient of \c *this by \a f (where division by zero yields zero)
+        /** \deprecated Please use operator/ instead
+         */
+        TFactor<T> divided_by (const TFactor<T>& g) const { return (*this / g); }
     //@}
 
     /// \name Miscellaneous operations
@@ -452,6 +488,12 @@ template <typename T> class TFactor {
         /// Returns marginal on \a vars, obtained by summing out all variables except those in \a vars, and normalizing the result if \a normed == \c true
         TFactor<T> marginal(const VarSet &vars, bool normed=true) const;
 
+        // OBSOLETE
+        /// Returns partial sum on \a vars, obtained by summing out all variables except those in \a vars
+        /** \deprecated Please use marginal() instead with \a normed == \c false
+         */
+        TFactor<T> partSum(const VarSet &vars) const { return marginal(vars,false); }
+
         /// Returns max-marginal on \a vars, obtained by maximizing all variables except those in \a vars, and normalizing the result if \a normed == \c true
         TFactor<T> maxMarginal(const VarSet &vars, bool normed=true) const;
     //@}
index 60f5b6d..afbca04 100644 (file)
@@ -307,12 +307,30 @@ template <typename T> class TProb {
         /// Returns maximum value of all entries
         T max() const { return accumulate( (T)(-INFINITY), fo_max<T>(), fo_id<T>() ); }
 
+        // OBSOLETE
+        /// Returns maximum value of all entries
+        /** \deprecated Please use max() instead
+         */
+        T maxVal() const { return max(); }
+
         /// Returns minimum value of all entries
         T min() const { return accumulate( (T)INFINITY, fo_min<T>(), fo_id<T>() ); }
 
+        // OBSOLETE
+        /// Returns minimum value of all entries
+        /** \deprecated Please use min() instead
+         */
+        T minVal() const { return min(); }
+
         /// Returns sum of all entries
         T sum() const { return accumulate( (T)0, std::plus<T>(), fo_id<T>() ); }
 
+        // OBSOLETE
+        /// Returns sum of all entries
+        /** \deprecated Please use sum() instead
+         */
+        T totalSum() const { return sum(); }
+
         /// Return sum of absolute value of all entries
         T sumAbs() const { return accumulate( (T)0, std::plus<T>(), fo_abs<T>() ); }
 
@@ -335,6 +353,20 @@ template <typename T> class TProb {
             return (std::find_if( _p.begin(), _p.end(), std::bind2nd( std::less<T>(), (T)0 ) ) != _p.end());
         }
 
+        // OBSOLETE
+        /// Returns \c true if one or more entries are non-positive
+        /** \deprecated Functionality was not widely used
+         */
+        bool hasNonPositives() const {
+            bool found = false;
+            for( typename std::vector<T>::const_iterator x = _p.begin(); x != _p.end(); x++ )
+                if( *x <= (T)0 ) {
+                    found = true;
+                    break;
+                }
+            return found;
+        }
+
         /// Returns a pair consisting of the index of the maximum value and the maximum value itself
         std::pair<size_t,T> argmax() const {
             T max = _p[0];
@@ -412,6 +444,12 @@ template <typename T> class TProb {
             else
                 return pwUnaryTr( fo_log<T>() );
         }
+        
+        // OBSOLETE
+        /// Returns pointwise logarithm (or zero if argument is zero)
+        /** \deprecated Please use log() instead with \a zero == \c true
+         */
+        TProb<T> log0() const { return log(true); }
 
         /// Returns pointwise inverse
         /** If \a zero == \c true, uses <tt>1/0==0</tt>; otherwise, <tt>1/0==Inf</tt>.
@@ -476,6 +514,12 @@ template <typename T> class TProb {
                 return pwUnaryOp( fo_log<T>() );
         }
 
+        // OBSOLETE
+        /// Applies logarithm pointwise
+        /** \deprecated Please use takeLog() instead, with \a zero == \c true
+         */
+        const TProb<T>& takeLog0() { return takeLog(true); }
+
         /// Normalizes vector using the specified norm
         /** \throw NOT_NORMALIZABLE if the norm is zero
          */
index 766c89e..7c28e42 100644 (file)
@@ -59,7 +59,7 @@ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] ) {
         "        md         = maxdiff (final linf-dist between new and old single node beliefs).\n"
         "        qv         = linear cell array containing all variable beliefs.\n"
         "        qf         = linear cell array containing all factor beliefs.\n"
-        "        qmap       = (V,1) array containing the MAP labeling (only for BP).\n");
+        "        qmap       = (V,1) array containing the MAP labeling (only for BP,JTree).\n");
     }
 
     char *method;
@@ -124,14 +124,20 @@ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] ) {
     }
 
     if( nlhs >= 6 ) {
-        BP* obj_bp = dynamic_cast<BP *>(obj);
-        if (obj_bp == 0) {
-            mexErrMsgTxt("MAP state assignment works only for BP.\n");
+        std::vector<std::size_t> map_state;
+        if( obj->identify() == "BP" ) {
+            BP* obj_bp = dynamic_cast<BP *>(obj);
+            DAI_ASSERT( obj_bp != 0 );
+            map_state = obj_bp->findMaximum();
+        } else if( obj->identify() == "JTREE" ) {
+            JTree* obj_jtree = dynamic_cast<JTree *>(obj);
+            DAI_ASSERT( obj_jtree != 0 );
+            map_state = obj_jtree->findMaximum();
+        } else {
+            mexErrMsgTxt("MAP state assignment works only for BP, JTree.\n");
             delete obj;
-
             return;
         }
-        std::vector<std::size_t> map_state = obj_bp->findMaximum();
         QMAP_OUT = mxCreateNumericMatrix(map_state.size(), 1, mxUINT32_CLASS, mxREAL);
         uint32_T* qmap_p = reinterpret_cast<uint32_T *>(mxGetPr(QMAP_OUT));
         for (size_t n = 0; n < map_state.size(); ++n)