MDP-2.4:

2008-10-16: added interface to BLAS's "gemm" matrix multiplication
            function.
2008-10-15: removed obsolete helper functions.
2008-10-15: added new feature. Now:
            output = XXXNode(output_dim=10)(x)
            trains and executes the node. This makes helper_functions obsolete!
            It even works for multiple training phases (only if the training 
            phase has not started yet).
2008-10-15: removed use of deprecated features with python2.6 -3.
2008-10-14: removed dangerous list default argument in rotate and permute 
            functions. A tuple is now used.
2008-10-13: PEP8 code restyling (pylint).
2008-10-07: Removed workarounds for pickle bug in numpy < 1.1.x (see 
            numpy ticket 551).
2008-09-24: Implemeted metaclass trick for automatic inheritance of 
            documentation for private methods. Node's subclass authors 
            can now directly document "_execute", and let users see those 
            docs as documenting "execute":
             
            class MyNode(Node):
                 def _execute(self):
                     """blah"""

            >>> print MyNode.execute.__doc__
            blah.
            
            Just defined set of methods allow overwriting of the docstring.
            the current list is:
            ['_train', '_stop_training', '_execute', '_inverse']
2008-09-22: Added new functionality to nodes and flows.
            Node1+Node2 now returns a flow and Flow1+Node1 appends 
            Node1 to Flow1.
2008-09-07: New node for Locally Linear Embedding
2008-08-28: The docstring of Flow.train now mentions that instead of x the 
            iterators can also return a tuple of x and additional args.
2008-08-28: Fixed bug in PCANode:
            when setting output_dim to a float number after instantiation 
            but before stop_training, i.e:
            pca = PCANode()
            pca.train(x)
            pca.output_dim = 0.9
            pca.stop_training()
            an exception was thrown: Output dim are set already (0) (1 given)
2008-08-28: Fixed bug in PCANode:
            when setting output_dim to float number, after stop_training
            pca.output_dim was a float number instead of integer.
2008-08-21: Added inverse for Switchboard, including unittests.
2008-08-19: Added parallel package.
2008-08-19: Added new NormalNoiseNode (with small unittest), 
            which can be safely pickled.
2008-08-07: fixed bug in rbm_nodes (TrainingFinishedException). 
            Thanks to Mathias Franzius!
2008-07-03: Node.__call__ method now takes *args and **kwargs to call
            the execute method. Thanks to Jake VanderPlas!
2008-06-30: Fix debian bug 487939:
            Modifed the fix for the debian bug so that white_parm defaults to 
            None instead of {}. With default {} a sublcass updating the 
            dictionary would have updated it for all instances... 
            http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=487939
            Applied patch from Michael Hanke. Thank you!

-------------------------------------------------------------------------------
MDP-2.3:
2008-05-08: fixed bug in the raising of the switchboard exception.
2008-05-02: added exception for hinet.Rectangular2dSwitchboard 
            and corresponding unittest.
2008-04-25: added new TDSEPNode, updated ISFANode.
2008-04-16: added an HTML visualisation tool for hinet flows to the hinet
            package. Added a hinet section in the tutorial.
2008-03-22: released MDP 2.2, this release is intended for internal use only
2008-03-21: added hinet package
2008-03-19: added RBM nodes 
2008-03-18: fixed bug in PCANode when output_dim was specified as float.
2008-03-16: HitParadeNode now supports integer dtypes.
2008-03-13: created contrib subpackage and test_contrib test suites.
            JADENode moved to contrib. Tests are now sorted by test_suite.
	    Added the NIPALSNode for iterative PCA.
2008-03-11: added JADENode with tests
2008-03-10: added test for dimensions settings (nodes should have 
            output_dim and input_dim set after training)
2008-01-22: removed utils.comb scipy code and obsolete SciPy copyright
            notice from utils/routines.py
2008-01-03: fixed bug in SFA2Node when input_dim was set on instantiation,
	    fixed bug in SFA2Node._stop_training when output_dim was set and
            larger than input_dim,
            fixed bug in QuadraticForm when H was indefinite.
2007-09-14: FastICANode has been completely rewritten. It is now up-to-date
            with the original Matlab version (2.5) published on 19.10.2005.
	    Highlights: 
	    - fine tuning is implemented
	    - the stabilized version of the algorithm is implemented
	    - the new 'skew' non linearity for skewed input data is implemented
	    - bug fix in 'tanh' non linearity
	    - bug fix in 'gaus' non linearity in 'symm' approach
	    - all combinations of input parameters are being tested
2007-09-12: Added new funcionality for PCA and Whitening. The nodes can now
            be instantiated with svd=True, to use SVD instead of the standard
            eigenvalue problem solver. Setting reduce=True and var_abs and 
            var_rel it is possible to automatically discard irrelevant 
            principal components. See the nodes documentation for more info
2007-09-11: added check for positive eigenvalues in symeg and symeig_fake
2007-08-17: added pre_inversion_checks, inversion equivalent to 
            pre_execution_checks
2007-07-20: enable iteration on items and time completion estimation method in 
            progress_bar
2007-07-09: fixed bug in SFA2Node: when instantiated with 
            input_dim==output_dim, the range in symeig was not set and 
	    output_dim was wrong
2007-07-04: - fixed bug in mdp.utils.__init__.py about SymeigException not 
              caught
            - fixed bug in ISFANode when perturbing eps_contrast was not 
	      respected (it was perturing indefinitely)
	    - added a 'debug' kwarg to stop_training in PCANode, WhiteningNode,
              and SFANode. When stop_training fails because of singular 
	      matrices, the matrices itselves are not deleted (as before) but
	      kept in self.cov_mtx and self.dcov_mtx for later inspection
2007-07-03: fixed bug in ISFANode when lags was array.
2007-06-25: Added get_{proj,rec}matrix method to the ICANodes. 
            'get_recmatrix' returns an estimate of the mixing matrix.

-------------------------------------------------------------------------------
MDP-2.1:

2007-03-23: Updated tutorial and web site.
2007-03-23: Use get_limits.finfo to set precision limits
2007-03-23: Use symeig if found
2007-03-23: Use scipy instead of numpy when possible
2007-03-23: Numpy functions substituted with array method where possible
2007-03-22: Implemented invariances in Quadraticforms
2007-03-21: MDP now fully compatible with numpy 1.0
2007-03-15: Added ISFANode
2007-03-13: Added MultipleCovarianceMatrices utility class
2006-11-04: Added 'save' method to Node and Flow
2006-11-04: Node's train and stop_training methods now accept *args and **kwargs

-------------------------------------------------------------------------------
MDP-2.0RC:

29.06.2006: Updated tutorial and web site.
28.06.2006: New random_rot. Added SFA2Node, QuadraticForm, moved graph into the mdp tree.
27.06.2006: Converted typecode handling to numpy.dtype style; supported_typecodes
	    is now a property. Added bias in covariance.
26.06.2006: Converted to numpy. Scipy, Numeric, and numarray are not supported
	    anymore
06.12.2005: pca_nodes: added get_explained_variance public method.
02.12.2005: New introspection utils in mdp.utils.
01.11.2005: New nodes: FANode, FDANode, GaussianClassifierNode
31.10.2005: Non back-compatible changes. Node has got three new 'properties':
            output_dim, input_dim, typecode. They are accessible through their
	        getters (get_PROPERTY). They can be set using the default setters
	        (set_PROPERTY). Subclasses can customize the setters, overriding
	        the _set_PROEPRTY private methods. All nodes had to be changed to 
	        conform with the new structure. All tests pass.
26.10.2005: To force MDP to use a particular numerical extension, you
            can now set the enviroment variable MDPNUMX. Supported
            values are 'symeig', 'scipy', 'Numeric', 'numarray'.
            Mainly useful for testing purposes. 
06.10.2005: The SfaNode, CuBICA, and FastICA aliases have been deleted.
06.10.2005: Node supports multiple and even an infinite number of training
            phases. FiniteNode makes the implementation of a class with
            a finite number of phases easy and one with just one phase
            trivial.
06.10.2005: Flow supports the new nodes and even nodes requiring a
            supervision signal during training.
06.10.2005: SignalNode, SignalNodeException, and SimpleFlow are now
            deprecated aliases. Use Node, NodeException and Flow instead.
06.10.2005: some bug fixes.
05.10.2005: fixed failing 'import mdp' in test_symeig when mdp is not installed
12.07.2005: bug in utils.symrand (global name "mult" is not defined) 
06.07.2005: changed round off error checking in FastICANode (it was 1e-15 and
            it is now 1e-5). it failed on a MacOSX machine.
23.06.2005: _check_roundoff in lcov.py issues a MDPWarning using warnings.warn.
            it was using 'raise' before, and it was caught as a FlowException.
21.06.2005: node consistency is assured at flow instantiation.
-------------------------------------------------------------------------------
MDP-1.1.0:

13.06.2005: MDP 1.1.0 released.
01.06.2005: Crash_recovery is now off by default.
            To switch it on do: flow.set_crash_recovery(1)
30.05.2005: New NoiseNode.
30.05.2005: SimpleFlow and SignalNode now have a 'copy' method.
30.05.2005: SimpleFlow is now a mutable sequence type and implements
            many of the 'list' methods.
30.05.2005: removed scipy dependency. Now mdp runs with either Numeric, 
            numarray or scipy.
24.05.2005: symeig removed from mdp.
23.05.2005: all classes are now new-style.
-------------------------------------------------------------------------------
MDP-1.0.0:

15.11.2004: MDP 1.0.0 released
09.11.2004: Added crash recovery capabilities to SimpleFlow (on by default).
05.11.2004: New GrowingNeuralGasNode. New graph module.
04.11.2004: New IdentityNode subclass added. All analysis nodes are
            now subclasses of IdentityNode.
	    	Use of input_dim and output_dim in the nodes' constructor
	    	is now consistent.
02.11.2004: Now symeig works reliably also for complex matrices.
            symeig now can be distributed as an independent package
            It is still contained in mdp.utils for convenience.
	    	Default value for option overwrite changed from 1 to 0.
14.10.2004: With the release of Scypy 0.3.2, the installation of MDP got much
            simpler.
06.10.2004: Fixed a bug in symeig (when B=None and overwrite=0,
	    	symeig raised an exception)
04.09.2004: Fixed Windows-xspecific problems.
-------------------------------------------------------------------------------
MDP-0.9.0:

24.08.2004: MDP 0.9.0 released. First public release. 
16.08.2004: MDP project registered at SourceForge.
-------------------------------------------------------------------------------
