New git HEAD version
[libdai.git] / ChangeLog
index 9fbb776..62789e7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-git master HEAD
----------------
+git HEAD
+--------
 
 
+
+libDAI-0.3.2 (2015-07-17)
+-------------------------
+
+Miscellaneous improvements:
+* [Charles Vaske] Various improvements to EM code, including interface changes
+* Added 'inclusive' argument to DAG::ancestors() and DAG::descendants()
+* [Julien Rebetez] added FactorGraph::printDot() to SWIG interface
+* Extended SWIG python interface (inspired by Kyle Ellrott): inference is possible in Python now!
+* Added toString() formatting functions to the classes that had an output streaming operator<<
+* Merged Generalized Loop Correction code kindly provided by Siamak Ravanbakhsh
+
+Build system improvements:
+* Build system: optional compilation targets are now set in include/dai/dai_config.h instead of Makefile.ALL
+
+Bug fixes:
+* Disabled debugging output in src/cobwebgraph.cpp to fix compilation issue under OSX
+* [Lee C Baker] patch in include/dai/enum.h to fix compilation issues on OSX related to std::wistream and std::wostream (another workaround would be to specify -std=c++11)
+* Fixed regression in SWIG interface caused by new build system (thanks to Benjamin Mumm for reporting this)
+* Workaround for bug in Boost Graph Library version 1.54 ("The graph may not contain an edge with negative weight") by not using Prim's minimum spanning tree algorithm anymore
+* Removed conversion script FastInf->libDAI because it is buggy (uses wrong permutation of factor entries)
+* Replaced all occurrences of std::size_t by size_t to avoid SWIG problems
+* Fixed division-by-zero issue in pow() which caused problems for GLC+ with sparse factors
+* Fixed bugs in unit test prob_test.cpp: replaced all occurences of
+  BOOST_CHECK_CLOSE(...,(Real)0.0,tol) with BOOST_CHECK_SMALL(...,tol)
+
+
+libDAI-0.3.1 (2012-09-17)
+-------------------------
+
+Miscellaneous improvements:
+* Full 64-bit support on all supported platforms (Linux, OSX, Windows)
+* Added special MatLab interface for junction tree algorithm (dai_jtree)
+* Optimized ClusterGraph( const FactorGraph&, bool) constructor
+
+Build system improvements:
+* Added Makefile.WINDOWS64, kindly provided by Lin Ming
+* [Arman Aksoy] Added Makefile.MACOSX64
+* Added VC10 build files, kindly provided by Sameh Khamis
+
+Bug fixes:
+* Fixed bug (found by Sameh Khamis): define NAN (Windows)
+* Fixed bug (found by Sameh Khamis): add some necessary casts of size_t to BigInt (Windows)
+* Fixed bug (found by Yan): replaced GNU extension __PRETTY_FUNCTION__ by __FUNCTION__ (Visual Studio) or __func__ (other compilers)
+* Fixed bug (found by Andy Mueller): added GMP library invocations to swig Makefile
+* Fixed bug (found by cax): when building MatLab MEX files, GMP/MPIR libraries were not linked
+* Fixed bug in findMaximum (it only considered a single connected component of the factor graph)
+* [Benjamin Piwowarski] Renamed "foreach" macro into "bforeach" to avoid conflicts with newer Boost library versions
+* Fixed "typename" bug in src/alldai.cpp which resulted in FTBFS with older g++ compilers
+* Fixed memory leak in alldai.cpp and removed the function builtinInfAlgs()
+* Fixed memory leak in CBP::run()
+* Fixed typo in Priya's name
+
+
+libDAI-0.3.0 (2011-07-12)
+-------------------------
+
+New license:
+* Changed license from GPL v2+ to FreeBSD (BSD 2-clause)
+
+Miscellaneous improvements:
+* Improved Exception class 
+  (it now stores more information and doesn't print to stderr by default)
+* Added builtinInfAlgs() and builtinInfAlgNames()
+
+Bug fixes:
+* [Laurens van der Maaten] src/matlab/dai.cpp now correctly handles missing logZ() 
+  and maxDiff() implementations
+* Now uses GMP big integer type to represent linear states and the number of
+  states of VarSets (in some cases). This fixes a bug Jerome Maye and Priya 
+  found in the State class. Unfortunately, the supplied Makefile.WINDOWS now 
+  no longer works out-of-the-box.
+* Fixed numerical issues in MF, FBP and TRWBP (discovered in sparse branch)
+* Fixed bug in findMaximum(): inconsistent max-beliefs are now detected,
+  instead of returning a MAP state with zero joint probability
+  (reported by Hynek Urban)
+* Fixed a Boost-related bug in src/util.cpp (reported by Avneesh Saluja)
+  (the random seed needs to be an unsigned int on some platforms)
+* Fixed two bugs in examples/example_sprinkler_gibbs (reported by Priya)
+* Fixed bug in tokenizeString() and Evidence::addEvidenceTabFile()
+  (a tab character at the end of a line was incorrectly discarded - bug reported by Priya)
+* Replaced all Name members by name() virtual functions and removed global variable DAINames
+  (this fixes a bug in matlab/dai.cpp reported by Thomas Mensink)
+
+
+libDAI-0.2.7 (2010-08-19)
+-------------------------
+
+* Removed interfaces deprecated in 0.2.6.
+* Fixed a bug in JTree::findMaximum() (reported by zhengyun84 and Dhruv Batra):
+  if one or more variables had a MAP belief with more than one maximum, an 
+  incorrect MAP state could result.
+
+
+libDAI-0.2.6 (2010-08-05)
+-------------------------
+
+New features:
+* Added decimation algorithm DecMAP for MAP inference (decmap.h/cpp).
+* Added source code for one of the winning solvers of the 
+  UAI 2010 Approximate Inference Challenge (examples/uai2010-aie-solver.cpp).
+* Added support for reading files in the UAI Approximate Inference Challenge
+  format, supporting both the 2006/2008 evidence file format and the 2010
+  evidence file format (io.h/cpp).
+
+Miscellaneous improvements:
+* 'maxtime' property added to various algorithms (BP, Gibbs, HAK, TreeEP)
+  for setting an upper limit on execution time.
+* 'maxmem' property added to JTree for setting an upper limit on memory usage.
+* SmallSet:
+  - Added SmallSet::erase( const T& t ).
+* VarSet:
+  - nrStates() now returns a long double instead of a size_t.
+* Permute:
+  - Added ranges() accessor.
+  - Added inverse() method.
+  - Added optional reverse argument to Permute( const std::vector<Var>& ) constructor.
+* Factor:
+  - Added createFactorDelta( const VarSet& vs, size_t state ).
+* ClusterGraph:
+  - Added ClusterGraph(const FactorGraph& fg, bool onlyMaximal) constructor.
+  - Added findCluster( const VarSet& cl ).
+  - Added elimVar( size_t i ).
+  - Added 'maxStates' argument to VarElim( EliminationChoice f, size_t maxStates=0 ).
+* FactorGraph:
+  - Added isMaximal(size_t).
+  - Added maximalFactor(size_t).
+  - Added FactorGraph::logScore( const std::vector<size_t>& statevec ).
+* Gibbs:
+  - Added 'restart' property.
+  - Added Gibbs::findMaximum() for MAP inference.
+* HAK:
+  - Optimized region graph construction for HAK/GBP with clusters=BETHE.
+* examples/examples_imagesegmentation.cpp:
+  - [Peter Rockett] Improved Makefiles for image segmentation example.
+  - Added build flag to specify the CImg version.
+* util.h/cpp:
+  - Added fromString<>( const std::string& x ).
+
+Interface changes (the old interface is marked obsolete and will be removed in the next release):
+* Added InfAlg::setMaxIter(size_t) for setting the maximum number of iterations.
+* Deprecated Graph::Neighbor, BipartiteGraph::Neighbor and DAG::Neighbor
+  and replaced them by a globally defined Neighbor structure
+* Deprecated Graph::Neighbors, BipartiteGraph::Neighbors and DAG::Neighbors
+  and replaced them by a globally defined Neighbors type
+* Deprecated Graph::Edge, BipartiteGraph::Edge and DAG::Edge
+  and replaced them by a globally defined Edge type
+* Renamed 'iters' property of Gibbs algorithm into 'maxiter'.
+* ClusterGraph::findVar( const Var& n ) no longer throws an exception if the
+  variable is not found.
+* Deprecated 'void tokenizeString( const string&, vector<string>&, const string& )'
+  and replaced it with an improved version
+  'vector<string> tokenizeString( const string&, bool, const string& )'
+* Removed interfaces deprecated in 0.2.5.
+
+Bug fixes:
+* Fixed a problem with isnan() on FreeBSD; it is now in the dai namespace.
+* Workaround for older g++ compilers (e.g. version 4.0.0 on Darwin 9.8.0)
+  which have problems when comparing const_reverse_iterator with
+  reverse_iterator.
+* [Matt Dunham] Fixed a bug in Factors2mx in src/matlab/matlab.cpp
+  (segfault if factors depending on 0 variables were passed to MatLab)
+
+
+libDAI-0.2.5 (2010-05-09)
+-------------------------
+
+New features:
+* Added unit tests for var, smallset, varset, graph, dag, bipgraph,
+  weightedgraph, enum, util, exceptions, properties, index, prob, 
+  factor, factorgraph, clustergraph, regiongraph, daialg, alldai
+* [Ofer Meshi] Added a script for converting from FastInf to libDAI format
+* Added utils/uai2fg, a utility to convert the UAI inference competition file
+  formats to the libDAI factor graph file format
+* Added dag.h/cpp, an implementation of Directed Acyclic Graphs
+* Added examples/example_imagesegmentation
+
+Miscellaneous improvements:
+* TRWBP:
+  - Added initialization of TRWBP weights by sampling spanning trees
+* MF:
+  - Added an "init" option that allows to initialize randomly
+  - Added an "updates" option that allows to choose between standard
+    mean field and "hard-spin" mean field
+* MR:
+  - rewrote response propagation implementation with help of BBP
+  - now uses GraphAL to represent the Markov graph
+  - miscellaneous smaller cleanups
+* TreeEP:
+  - Now also supports disconnected factor graphs
+* JTree:
+  - Now also supports disconnected factor graphs
+* ExactInf:
+  - Added findMaximum()
+* RegionGraph:
+  - Added error checking code
+  - Changed the way a RegionGraph is streamed to an std::ostream.
+* ClusterGraph:
+  - Added nrVars() method
+  - Added var( size_t ) method
+  - Added cluster( size_t ) method
+* FactorGraph:
+  - clamped() now contains a delta factor for the clamped variable
+  - Added MarkovGraph()
+* TFactor:
+  - Added takeAbs()
+  - Added takeExp()
+  - Added takeLog( bool )
+  - Added operator-() const
+  - Added sumAbs() const
+  - Added operator==( const TFactor<T> &y )
+  - Added get(size_t), set(size_t,T)
+* TProb:
+  - Added operator==( const TProb<T> &q )
+  - accumulate() now also applies op2 to init
+  - operator/= (T x) now yields 0 when dividing by 0
+  - Added resize(size_t)
+  - Added get(size_t) and set(size_t,T) 
+  - Changed format of TProb<T> when streamed to an ostream
+* multifor:
+  - Added reset()
+* PropertySet:
+  - Added size()
+  - Added clear()
+  - Added erase()
+* util.h/cpp:
+  - Added std::string toString( const T& x )
+* weightedgraph.h/cpp:
+  - Added option to MaxSpanningTree and MinSpanningTree for
+    choosing between Prim's algorithm and Kruskal's algorithm
+  - Better error checking in RootedTree constructor
+  - Added GraphEL::GraphEL( const GraphAL& G ) constructor
+* BipartiteGraph:
+  - Added hasEdge()
+  - Added findNb1()
+  - Added findNb2()
+  - Added nb1Set()
+  - Added nb2Set()
+  - Added operator==( const BipartiteGraph& )
+  - Added BipartiteGraph( size_t nr1, size_t nr2 ) constructor
+  - Added operator<<( std::ostream&, const BipartiteGraph& )
+* GraphAL:
+  - Added hasEdge(size_t,size_t)
+  - Added nbSet(size_t)
+  - Added operator==( const GraphAL& )
+  - Added operator<<( std::ostream&, const GraphAL& )
+* SmallSet:
+  - Added insert( const T& t ) method
+* Improved regression test
 * Made all "verbose" properties optional
 * Made all "verbose" properties optional
-* Unit tests should now also work on WINDOWS
-* [Stefano Pellegrini] Fixed bug in JTree::findMaximum()
-* Fixed some bugs in the MatLab interface build system
-* Fixed a bug in utils/fginfo.cpp
 * utils/createfg now has a new factor type ('ISINGUNIFORM') and the old
   'ISING' factor type has been renamed to 'ISINGGAUSS'
 * tests/testdai option "marginals" now has five possible values: NONE
   outputs no marginals, VAR only variable marginals, FAC only factor
   marginals, VARFAC both types of marginals, and ALL outputs all
   marginals calculated by the algorithm.
 * utils/createfg now has a new factor type ('ISINGUNIFORM') and the old
   'ISING' factor type has been renamed to 'ISINGGAUSS'
 * tests/testdai option "marginals" now has five possible values: NONE
   outputs no marginals, VAR only variable marginals, FAC only factor
   marginals, VARFAC both types of marginals, and ALL outputs all
   marginals calculated by the algorithm.
-* Improved treeep.h/cpp:
-  - changed TreeEP::construct( const RootedTree& ) into
-    TreeEP::construct( const FactorGraph&, const RootedTree& )
-  - Now also supports disconnected factor graphs
-* Improved jtree.h/cpp:
-  - changed JTree::construct( const std::vector<VarSet>&, bool ) into
-    JTree::construct( const FactorGraph&, const std::vector<VarSet>&, bool )
-  - changed JTree::GenerateJT( const std::vector<VarSet> & )
-    into JTree::GenerateJT( const FactorGraph &, const std::vector<VarSet> & )
-  - Now also supports disconnected factor graphs
-* Improved regiongraph.h/cpp:
-  - Made (previously public) members RegionGraph::G, RegionGraph::ORs,
-    RegionGraph::IRs and RegionGraph::fac2OR protected.
-  - Removed partial constructor RegionGraph::RegionGraph( const FactorGraph& fg )
-  - Added some error checking code
-  - Renamed RegionGraph::calcCountingNumbers() into
-    RegionGraph::calcCVMCountingNumbers() and made it protected, because
-    exposing it to the world serves no purpose.
-  - Added RegionGraph::DAG() accessor which returns a reference to the 
-    region graph DAG structure (currently implemented as a BipartiteGraph)
-  - Made RegionGraph::RecomputeORs(), RegionGraph::RecomputeORs( const VarSet& )
-    and RegionGraph::RecomputeOR( size_t ) protected and renamed them by changing
-    the "Recompute" into "recompute", because exposing them to the world serves no 
-    purpose.
-  - RegionGraph::WriteToFile( const char* ), RegionGraph::ReadFromFile( const char * )
-    and RegionGraph::printDot( std::ostream& ) incorrectly called their respective
-    FactorGraph ancestor methods; this has been corrected by letting them throw a
-    NOT_IMPLEMENTED exception.
-  - Changed the way a RegionGraph is streamed to an std::ostream.
-* Improved clustergraph.h/cpp:
-  - Made (previously public) members ClusterGraph::G, ClusterGraph::vars and 
-    ClusterGraph::clusters private and added ClusterGraph::bipGraph(), 
-    ClusterGraph::vars() and ClusterGraph::clusters() methods which offer 
-    read-only access to these members.
-  - Deprecated ClusterGraph::toVector()
-  - Added ClusterGraph::nrVars() method
-  - Renamed ClusterGraph::size() method into ClusterGraph::nrClusters()
-  - Added ClusterGraph::var( size_t ) method
-  - Added ClusterGraph::cluster( size_t ) method
-* Improved factorgraph.h/cpp:
-  - FactorGraph::clamped() now contains a delta factor for the clamped variable
-  - Renamed FactorGraph::Cliques() into FactorGraph::maximalFactorDomains()
-  - Added FactorGraph::MarkovGraph()
-  - Fixed bug in FactorGraph::clone()
-  - FactorGraph::findVars( const VarSet& ) now returns a SmallSet<size_t>
+* Compressed Makefile
+
+Interface changes (the old interface is marked obsolete and will be removed in the next release):
+* Removed RandomDRegularGraph(), please use createGraphRegular() instead
+* TreeEP:
+  - Changed construct( const RootedTree& ) into
+    construct( const FactorGraph&, const RootedTree& )
+* JTree:
+  - Changed construct( const std::vector<VarSet>&, bool ) into
+    construct( const FactorGraph&, const std::vector<VarSet>&, bool )
+  - Changed GenerateJT( const std::vector<VarSet> & )
+    into GenerateJT( const FactorGraph &, const std::vector<VarSet> & )
+* RegionGraph: 
+  - Made (previously public) members G, ORs, IRs and fac2OR protected and
+    added DAG() accessor which returns a reference to the region graph DAG 
+    structure (currently implemented as a BipartiteGraph).
+  - Renamed calcCountingNumbers() into calcCVMCountingNumbers() and made it 
+    protected, because exposing it to the world serves no purpose.
+  - Removed partial constructor RegionGraph( const FactorGraph& fg )
+  - Made RecomputeORs(), RecomputeORs( const VarSet& ) and RecomputeOR( size_t ) 
+    protected and renamed them by changing the "Recompute" into "recompute", 
+    because exposing them to the world serves no purpose.
+* ClusterGraph:
+  - Made (previously public) members G, vars and clusters private and added 
+    bipGraph(), vars() and clusters() methods which offer read-only access 
+    to these members.
+  - Deprecated toVector()
+  - Renamed size() into nrClusters()
+* FactorGraph:
+  - Renamed Cliques() into maximalFactorDomains() and made it faster
+  - findVars( const VarSet& ) now returns a SmallSet<size_t>
     and its argument now has a const-qualifier (which fixes a small bug).
     and its argument now has a const-qualifier (which fixes a small bug).
-  - Made (previously public) member FactorGraph::G private and added the 
-    FactorGraph::bipGraph() method, which offers read-only access to it.
+  - Made (previously public) member G private and added the 
+    bipGraph() method, which offers read-only access to it.
   - Deprecated the iterator interface:
     o FactorGraph::iterator typedef
     o FactorGraph::const_iterator typedef
     o FactorGraph::begin() members
     o FactorGraph::end() members
   - Deprecated the iterator interface:
     o FactorGraph::iterator typedef
     o FactorGraph::const_iterator typedef
     o FactorGraph::begin() members
     o FactorGraph::end() members
-  - Deprecated FactorGraph::factor(size_t) which offered write access to a factor
+  - Deprecated factor(size_t) which offered write access to a factor
     because using this functionality in the descendant RegionGraph is dangerous,
     as the outer regions are not automatically recomputed.
     because using this functionality in the descendant RegionGraph is dangerous,
     as the outer regions are not automatically recomputed.
-* Improved factor.h/cpp:
-  - Fixed bug in min( const TFactor<T> &, const TFactor<T> & )
-  - Fixed bug in max( const TFactor<T> &, const TFactor<T> & )
-  - Added TFactor<T>::takeAbs()
-  - Added TFactor<T>::takeExp()
-  - Added TFactor<T>::takeLog( bool )
-  - Added TFactor<T>::operator-() const
-  - Added TFactor<T>::sumAbs() const
-  - Added TFactor<T>::operator==( const TFactor<T> &y )
-  - Renamed TFactor<T>::states() into TFactor<T>::nrStates()
-  - Added TFactor<T>::get(size_t) and TFactor<T>::set(size_t,T) operators; 
+* TFactor:
+  - Renamed states() into nrStates()
+  - Added get(size_t) and set(size_t,T) operators; 
     get() is equivalent to "operator[](size_t) const" and set() should
     be used instead of the non-const operator[], which has been deprecated
     get() is equivalent to "operator[](size_t) const" and set() should
     be used instead of the non-const operator[], which has been deprecated
-* Improved prob.h/cpp:
-  - Deprecated TProb::TProb( TIterator begin, TIterator end, size_t sizeHint=0 )
+* TProb:
+  - Deprecated TProb( TIterator begin, TIterator end, size_t sizeHint=0 )
     constructor: the sizeHint argument no longer defaults to 0
     constructor: the sizeHint argument no longer defaults to 0
-  - Deprecated TProb::accumulate( T init, binOp op1, unOp op2 );
-    instead, TProb::accumulateSum( T init, unOp op ) and
-    TProb::accumulateMax( T init, unOp op, bool minimize ) should be used.
+  - Deprecated accumulate( T init, binOp op1, unOp op2 );
+    instead, accumulateSum( T init, unOp op ) and
+    accumulateMax( T init, unOp op, bool minimize ) should be used.
   - Deprecated TProb::NormType and TProb::DistType;
     ProbNormType and ProbDistType should be used instead.
   - Deprecated TProb::NormType and TProb::DistType;
     ProbNormType and ProbDistType should be used instead.
-  - Added TProb<T>::operator==( const TProb<T> &q )
-  - TProb<T>::accumulate() now also applies op2 to init
-  - Fixed bug by renaming TProb<T>::operator<=() to TProb<T>::operator<()
-  - TProb<T>& operator/= (T x) now yields 0 when dividing by 0
-  - Changed format of TProb<T> when streamed to an ostream
-  - Added TProb<T>::get(size_t) and TProb<T>::set(size_t,T) operators; 
+  - Fixed bug by renaming operator<=() to operator<()
+  - Added get(size_t) and set(size_t,T) operators; 
     get() is equivalent to "operator[](size_t) const" and set() should
     be used instead of the non-const operator[], which has been deprecated
     get() is equivalent to "operator[](size_t) const" and set() should
     be used instead of the non-const operator[], which has been deprecated
-  - Added TProb<T>::resize(size_t)
-* Improved index.h/cpp:
-  - Added multifor::reset()
-* Improved properties.h/cpp:
-  - Renamed PropertySet::Set() -> PropertySet::set()
-  - Renamed PropertySet::Get() -> PropertySet::get()
-  - Renamed PropertySet::GetAs<T>() -> PropertySet::getAs<T>()
-  - Renamed PropertySet::ConvertTo<T>() -> PropertySet::convertTo<T>()
-  - Added PropertySet::size()
-  - Added PropertySet::clear()
-  - Added PropertySet::erase()
-  - Fixed bug in PropertySet::setAsString<T>()
-* Improved util.h/cpp:
-  - Fixed a bug in rnd_seed()
+* PropertySet:
+  - Renamed Set() -> set()
+  - Renamed Get() -> get()
+  - Renamed GetAs<T>() -> getAs<T>()
+  - Renamed ConvertTo<T>() -> convertTo<T>()
+* util.h/cpp:
   - Removed max( const std::vector<Real> &v )
   - Removed max( const std::vector<Real> &v )
-* Improved weightedgraph.h/cpp:
+* weightedgraph.h/cpp:
   - Renamed MaxSpanningTreePrims into MaxSpanningTree
   - Renamed MinSpanningTreePrims into MinSpanningTree
   - Renamed MaxSpanningTreePrims into MaxSpanningTree
   - Renamed MinSpanningTreePrims into MinSpanningTree
-  - Added option to MaxSpanningTree and MinSpanningTree for
-    choosing between Prim's algorithm and Kruskal's algorithm
-  - Better error checking in RootedTree constructor
   - The vertices in DEdge and UEdge are now named "first" and "second"
     for compatibility with a std::pair<size_t,size_t>
   - The vertices in DEdge and UEdge are now named "first" and "second"
     for compatibility with a std::pair<size_t,size_t>
-  - Added GraphEL::GraphEL( const GraphAL& G ) constructor
-* Improved bipgraph.h/cpp:
-  - Fixed bug in BipartiteGraph::eraseNode1()
-  - Fixed bug in BipartiteGraph::eraseNode2()
-  - Fixed bug in BipartiteGraph::isTree()
-  - Added BipartiteGraph::hasEdge()
-  - Added BipartiteGraph::findNb1()
-  - Added BipartiteGraph::findNb2()
-  - BipartiteGraph::delta1() and BipartiteGraph::delta2() now 
-    return a SmallSet<size_t> instead of a vector<size_t>
-  - Added BipartiteGraph::operator==( const BipartiteGraph& )
-  - Added BipartiteGraph( size_t nr1, size_t nr2 ) constructor
-  - Added operator<<( std::ostream&, const BipartiteGraph& )
-* Improved graph.h/cpp:
-  - Fixed bug in GraphAL::nrEdges()
-  - Fixed bug in GraphAL::addEdge()
-  - Fixed bug in GraphAL::isTree()
-  - Fixed bug in GraphAL::eraseNode()
-  - Fixed bug in GraphAL::printDot()
-  - Fixed bug in createGraphGrid3D()
-  - Fixed bug in createGraphRegular()
-  - Added GraphAL::hasEdge(size_t,size_t)
-  - Added GraphAL::operator==( const GraphAL& )
-  - Added operator<<( std::ostream&, const GraphAL& )
-* Improved smallset.h/cpp:
+* BipartiteGraph:
+  - delta1() and delta2() now return a SmallSet<size_t> instead of a vector<size_t>
+* SmallSet:
   - The sizeHint argument of the iterator constructor
      SmallSet::SmallSet( TIterator begin, TIterator end, size_t sizeHint=0 )
     no longer has a default value in order to avoid confusion with the
      SmallSet::SmallSet( const T &t1, const T &t2 )
     constructor.
   - The sizeHint argument of the iterator constructor
      SmallSet::SmallSet( TIterator begin, TIterator end, size_t sizeHint=0 )
     no longer has a default value in order to avoid confusion with the
      SmallSet::SmallSet( const T &t1, const T &t2 )
     constructor.
-  - Added SmallSet::insert( const T& t ) method
-* Removed RandomDRegularGraph(), please use createGraphRegular() instead
-* Compressed Makefile
-* Added unit tests for var, smallset, varset, graph, bipgraph,
-  weightedgraph, enum, util, exceptions, properties, index, prob, 
-  factor, factorgraph, clustergraph, regiongraph, daialg, alldai
-* Added unit testing framework
-* Added initialization of TRWBP weights by sampling spanning trees
-* Cleaned up MR code:
-  - rewrote response propagation implementation with help of BBP
-  - now uses GraphAL to represent the Markov graph
-  - miscellaneous smaller cleanups
+
+Bug fixes:
+* [Stefano Pellegrini] Fixed bug in JTree::findMaximum()
+* [Stefano Pellegrini] Fixed bug in BP[logdomain=1,inference=MAXPROD]
+* Fixed some bugs in the MatLab interface build system
+* Fixed a bug in utils/fginfo.cpp
+* Fixed a bug in JTree::findMaximum() and simplified the code
 * Fixed bug in BBPCostFunction::operator=() which prevented the desired 
   assignment from happening
 * Fixed bug in BBPCostFunction::operator=() which prevented the desired 
   assignment from happening
-* [Stefano Pellegrini] Fixed bug in BP[logdomain=1,inference=MAXPROD]
-* Removed deprecated functionality
-* Updated ChangeLog for libDAI-0.2.4 (forgot a few entries)
+* RegionGraph::WriteToFile( const char* ), RegionGraph::ReadFromFile( const char * )
+  and RegionGraph::printDot( std::ostream& ) incorrectly called their respective
+  FactorGraph ancestor methods; this has been corrected by letting them throw a
+  NOT_IMPLEMENTED exception.
+* Fixed bug in FactorGraph::clone()
+* Fixed bug in min( const TFactor<T> &, const TFactor<T> & )
+* Fixed bug in max( const TFactor<T> &, const TFactor<T> & )
+* Fixed bug by renaming TProb<T>::operator<=() to TProb<T>::operator<()
+* Fixed bug in PropertySet::setAsString<T>()
+* Fixed a bug in rnd_seed()
+* BipartiteGraph:
+  - Fixed bug in eraseNode1()
+  - Fixed bug in eraseNode2()
+  - Fixed bug in isTree()
+* GraphAL:
+  - Fixed bug in nrEdges()
+  - Fixed bug in addEdge()
+  - Fixed bug in isTree()
+  - Fixed bug in eraseNode()
+  - Fixed bug in printDot()
+* Fixed bug in createGraphGrid3D()
+* Fixed bug in createGraphRegular()
 
 
 libDAI-0.2.4 (2010-02-11)
 
 
 libDAI-0.2.4 (2010-02-11)
@@ -457,9 +657,9 @@ Code cleanup:
 
 Miscellaneous improvements:
 * Now compiles also with MS Visual C++ (thanks to Jiuxiang Hu) and with
 
 Miscellaneous improvements:
 * Now compiles also with MS Visual C++ (thanks to Jiuxiang Hu) and with
-  GCC under cygwin.
+  GCC under Cygwin.
 * Contributions by Peter Gober:
 * Contributions by Peter Gober:
-  - Renamed variable _N in mr.* for compatibility with g++ under cygwin.
+  - Renamed variable _N in mr.* for compatibility with g++ under Cygwin.
 * Misc contributions by Giuseppe Passino:
   - removed "using namespace std;" from header files - bad practice;
   - moved header files in include/dai and sources in src;
 * Misc contributions by Giuseppe Passino:
   - removed "using namespace std;" from header files - bad practice;
   - moved header files in include/dai and sources in src;