MDP-3.3:
2012-09-19: FIX: fix error in automatic testing for MultinomialNB.
2012-09-19: ERF: make sklearn nodes automatic testing more robust The previous
            solution was actually ignoring the special definitions in NODES.

2012-09-19: FIX: disable pp support if server can not start Being able to
            import pp is not enough to be sure that pp works. For example in a
            low memory situation, the following can happen:

            >>> import pp
            >>> server = pp.Server()
            [...] OSError: [Errno 12] Cannot allocate memory

            This fix just disables pp support if the server can not be
            started.

2012-06-18: FIX: Fix wrapping of sklearn 0.11 classifiers
2012-04-17: FIX: make test_SFA2Node even more robust
2012-04-16: FIX: make FastICANode test more robust
2012-04-16: FIX: make test_SFA2Node more robust
2012-04-05: FIX: fix pp_tests when run multiple times. pp tests were failing
            when run twice in a row. hugly work-around, but it seems to
            work...

2012-04-05: FIX: fixed broken test_reload. test_reload was failing when called
            twice in a row.

2012-04-05: FIX: fix random seed tests. The tests were failing when called
            twice in a row:
            >>> import mdp
            >>> mdp.test()
            >>> mdp.test() the first call was working, the second one was
            giving failures.

2012-04-01: ERF: added tests for learning of bias parameters
2012-03-26: FIX: replace third remaing test for pp_monkeypatch_dirname 
            Hopefully this will fix test suite failures.

2012-03-22: FIX: Decrease the noise level in the DiscreteHopfieldClassifier.
2012-03-22: FIX: honor MDP_DISABLE_SHOGUN env variable
2012-03-19: FIX: fix left-over directories from testing pp. I do not know why,
            but this simple change fixes the leftover directories problem when
            testig with python-pp and pp monkey-patching. It should have
            worked even as it was before, but apparently some race condition 
            happens.

2012-03-06: FIX: fix determinant of random rotation matrix determinant sign
            was wrong if dimensions of rotation matrix were odd. Thanks to
            Philip DeBoer. Actual Fix.

2012-03-06: FIX: fix determinant of random rotation matrix determinant sign
            was wrong if dimensions of rotation matrix were odd. Thanks to
            Philip DeBoer. Failing Test.

2012-02-13: ENH: remove duplicated and overly verbose code
2012-02-13: FIX: remove FastICA stabilization from tests
2012-02-13: FIX: remove unused parameter stabilization in FastICA.
2012-01-19: NEW: added new sklearn algorithms wrapping We now wrap 93 sklearn
            algorithms!

2012-01-19: FIX: fix another imcompatibility with sklearn 0.10 Although
            EllipticEnvelop is derived from sklearn.base.ClassifierMixin, it
            is not a classifier. It is actually a "predictor". Added a check 
            in the sklearn wrappers.

2012-01-19: FIX: fix sklearn wrappers for version 0.10 New sklearn version
            introduces classifiers and predictors mixin classes that do not
            have a 'fit' method. Typical error:

            AttributeError: type object 'OutlierDetectionMixin' has no
            attribute 'fit'

            Just added a check that the method is really present before
            wrapping.

2012-01-12: FIX: fix failing test for no eigenvalues left problem Check that
            PCANode now raises the right exception.

2012-01-12: FIX: add useful exception in case of no eigenvalues left. Check
            for the condition explained in
            b0810d72ce11925e1db6204c3a20bdfc77741a82 and raise a nicely
            formatted exception:

            Traceback:
            [...] File ".../mdp/nodes/pca_nodes.py", line 223, in
            _stop_training
               ' var_abs=%e!'%self.var_abs) NodeException: No eigenvalues
            larger than var_abs=1.000000e-15!

2012-01-12: OTH: added failing test for no eigenvalues left problem. When
            PCANode is set to use SVD and automatic dimensionality reduction 
            it may happen that after removing directions corresponding to 
            eigenvalues smaller than var_abs (1e-12 default), nothing is left. 
            This happens for example if the data is a matrix of (almost)
            zeros. The error looks like this: Traceback (most recent call
            last):
            [...] File ".../mdp/nodes/pca_nodes.py", line 220, in
            _stop_training
               d = d[ d / d.max() > self.var_rel ] ValueError: zero-size array
            to ufunc.reduce without identity

2012-01-03: FIX: old joblib breaks imports from sklearn.decomposition
            >>> import sklearn.decomposition Traceback (most recent call
            last):
             File "<stdin>", line 1, in <module>
             File
            "/usr/lib/pymodules/python2.6/sklearn/decomposition/__init__.py",
            line 8, in <module>
               from .sparse_pca import SparsePCA, MiniBatchSparsePCA
             File
            "/usr/lib/pymodules/python2.6/sklearn/decomposition/sparse_pca.py",
            line 10, in <module>
               from .dict_learning import dict_learning, dict_learning_online
             File
            "/usr/lib/pymodules/python2.6/sklearn/decomposition/dict_learning.py",
            line 17, in <module>
               from ..externals.joblib import Parallel, delayed, cpu_count 
            ImportError: cannot import name cpu_count
            >>> joblib.__version__
            '0.4.3'

2012-01-02: FIX: py3k compatibility for reload reload() is moved to
            imp.reload().

            It also seems that Python 3 behaves slightly differently wrt.
            reloads. For some reason, mdp.configuration is not imported
            properly on reload. Let's just not remove the name from the
            namespace, as this is the easiest fix.

2011-12-23: ERF: added a failing test for reload MDP does not work with
            reload. See https://github.com/mdp-toolkit/mdp-toolkit/issues/1
            for details.

            Thanks to Yaroslav Halchenko for reporting it.

2011-12-18: FIX: Removed the leftover _global_message_emitter attribute (as
            reported by Tiziano and Hannah).
2011-12-09: FIX: fix wrong sorting of eigenvectors in degenerate case for SVD. 
            Thanks to Yaroslav Halchenko for reporting and fixing!

2011-12-09: NEW: added failing test for wrong sorting of SVDs
2011-10-24: FIX: updated sklearn wrappers to silence warnings for version >=
            0.9

-------------------------------------------------------------------------------
MDP-3.2:
2011-10-24: FIX: do not complain when failing to remove temporary directory. 
            The error warning breaks doctests. On top of that, I do not think
            the error message is really useful.

2011-10-22: FIX: fix previous commit (options can not be None)
2011-10-22: FIX: fix bug with pytest when MDP is installed on user
            non-writable directory.
2011-10-22: ENH: make NeuralGasNode automatic tests faster
2011-10-22: ENH: call scklearn with its name whenever possible without too
            much disruption
2011-10-22: FIX: workaround for debian patch to pp that disables pp's default
            password.
2011-10-22: FIX: could not find submodules and classes in old versions of
            sklearn the problem was that we build names of sub-modules from
            strings, and we need to take into account two possible prefixes
            "sklearn" or "scikits.learn"

2011-10-22: FIX: accomodate new name for scikits.learn 0.9 aka sklearn
2011-10-22: RF: extract two methods and simplify logic of metaclass wrapping
2011-10-22: OTH: one more metaclass test also cleand up whitespaces

2011-10-21: FIX/python2.5: forgotten __future__ imports
2011-10-21: ERF: rewrite one format string to make is clearer
2011-10-21: FIX: extend infodict with **kwargs name, to avoid guessing later
2011-10-19: ENH: metaclass: use dict to replace two lists and avoid infodict 
            No functional changes.

2011-10-21: FIX: finally fig bug in metaclass signature overwriting
2011-10-21: OTH: make test_metaclass more stringent
2011-10-21: OTH: added self contained test for metaclass and extensions
            issues.
2011-10-19: OTH: added more detailed failing test for metaclass
2011-10-19: OTH: another bug in signature overwriting. commited a failing
            test. Thanks to Alberto Escalante!

2011-10-16: ENH: make tests for NeuralGasNode shorter
2011-10-15: FIX: chmod -x mdp/test/test_NeuralGasNode.py
2011-10-15: DOC: tiny changes in comments
2011-10-15: FIX: tests for neural gas node
2011-10-15: FIX: when start positions for the nodes was set, the number of
            nodes default is discarded
2011-10-14: DOC+RF: slight improvements to documentation, comments, and
            spacing
2011-10-14: FIX: NeuralGas fixes by Michael Schmucker
2011-08-03: ENH: remove tuple unpacking init: it took twice as much lines
2011-08-03: FIX: NeuralGas fixed by Michael Schmuker
2011-08-03: FIX: remove \ line breaks
2011-07-25: FIX: remove \ line breaks
2011-07-25: NEW, FIX: tests for NeuralGasNode and two fixes
2011-07-25: FIX: _remove_old_edges makes use of its argument
2011-07-25: DOC, FIX: Typos in docstrings and whitespaces
2011-07-25: NEW: NeuralGasNode by Michael Schmuker
2011-10-14: FIX: remove unused variable
2011-10-14: FIX: py3k bytes/str issue in subprocess input
2011-10-14: FIX: remove unused variable
2011-10-14: ENH: use a context manager for sys.stdout stealing
2011-10-14: FIX: add pytest ini file to manifest
2011-10-14: NEW: really check if pp needs monkey-patching
2011-10-14: NEW: be compatible with shogun 1.0. Drop support for older
            releases.
2011-10-14: FIX: fix handling of MDP_DISABLE_SHOGUN variable
2011-10-14: Fix KeyError with NSDEBUG=1 Commit 7345d4a changed old-style
            formatting to new-style formatting, or at least the format string,
            but .format was not replaced with %!

2011-10-13: DOC: make it a bit easier to see that you can use pp on debian too
2011-10-13: FIX: remove (now) useless duplicated test in bimdp
2011-10-13: FIX: windows does not allow me to remove a file
2011-10-13: FIX: no with statement in tests {flow,node}.save Apparently
            windows does not allow one process to open a file multiple times.
            As {flow,node}.save use internally the with statement to open the
            dump file, we can not use the with statement in the test of these 
            methods: nesting with statement means opening the same file
            multiple times.

2011-10-12: NEW: allow for pretty printing of mdp.config. now config.info() is
            printed on stdout when you type

            >>> print mdp.config

            or

            >>> mdp.config

            don't think about the fact that this is only achievable by a
            metaclass ;-)

2011-10-12: ERF: also add mdp.__version__ in config.info
            __revision__ is not enough, when mdp is installed and does not 
            load from a git repository that string is empty (by the way: we
            should fix it!)

2011-10-11: FIX: remove forgotten print statement
2011-10-11: NEW: add tempfile test to help diagnose win7 problems
2011-10-11: FIX: make py.test.__version__ check more robust
2011-10-11: Add mdp.__revision__ to mdp.config.info() output This changes the
            order of initialization a bit: first mdp.configuration is fully
            imported, then mdp.utils. Because of this change, 
            mdp.utils.repo_revision was renamed to mdp.repo_revision. It is
            imported only in mdp.configuration and then deleted from the
            visible namespace. get_git_revision was available as
            utils.get_git_revision, and now it's gone, but mdp.__revision__
            contains the same value, so there little need to export the
            function. I hope nobody used it.

            >>> print mdp.config.info()
                     python: 2.7.2.final.0
                        mdp: MDP-3.1-74-gbaca2a8+
            parallel python: 1.6.0
                     shogun: NOT AVAILABLE: No module named shogun
                     libsvm: libsvm.so.3
                     joblib: 0.4.6
                    scikits: 0.8.1
                       numx: scipy 0.9.0
                     symeig: scipy.linalg.eigh

2011-10-11: NEW: append + to mdp.__revision__ in modified repo
2011-10-11: FIX: half of an assert message was lost
2011-10-11: ERF: use py.test 2 ini-file configuration. we can now check for
            py.test version, and get finally rid of the redundant conftest.py
            files. we now have only one conftest.py file for bimdp and mdp.

2011-10-11: FIX: check if we have ENOENT in TemporaryDir.__del__
2011-10-11: FIX: stop complaining if dir is gone already in TemporaryDirectory
2011-10-11: ERF: get rid of the pp monkey patch dirs the hard way. 
            TemporaryDirectory does not manage to delete itself when created
            in a subprocess

2011-10-11: ERF: make the pp monkeypatch dir prefix more explicit
2011-10-11: ERF: change the interpretation of MDP_MONKEYPATCH_PP now you can
            specify a container directory for the patching.  it defaults to
            tempfile.gettempdir(), i.e. /tmp on unix and something else on  
            windows
2011-10-11: FIX: only allow py.test version >= 2.1.2 py.test version > 2 are
            subtly incompatible with versions < 2. just settle on the new
            ones. problem: debian still does not package a reasonably recent
            version of py.test. in this case, just use the standalone script.
            thanks to 8a5b2e272de4230f15d09f85b7d35b0aeee3078e it's as 
            flexible as py.test itself.
2011-10-11: ERF: pass options to py.test in mdp.test. this way using the
            standalone script run_tests.py is as flexible as using py.test
            directly

2011-10-11: ERF: updated standalone py.test script to version 2.1.2
2011-10-11: DOC: added pointer to win64 binaries distributor
2011-10-10: ENH: use with statement for better readability in a couple of
            tests No functional changes.

2011-10-10: ENH: make pyflakes happy by not defining unused names No
            functional changes.

2011-10-10: FIX: make monkeypatch_pp compatible with both pp 1.6 and 1.6.1
            >>> import pp
            >>> pp.version
            '1.6.0'
            >>> pp._Worker.command
            '"/usr/bin/python" -u "/usr/lib/pymodules/python2.6/ppworker.py" >
            2>/dev/null'

            >>> import pp
            >>> pp.version
            '1.6.1'
            >>> pp._Worker.command
            ['/usr/bin/python2.6', '-u',
            '/usr/lib/pymodules/python2.6/ppworker.py', '2>/dev/null']

2011-10-10: FIX: temporary directory for tests was not managed properly sed
            's/mdp_toolkit_reporting_configured/mdp_configured/g' because the 
            existence of this variable guards not only reporting
            configuration, but also the temporary directory stuff (and also
            the name was kind of long).

            sed 's/tempdirname/mdp_tempdirname/' because it goes in the
            py.test namespace and should have a prefix like the other
            variable.

            sed -r 's+bimdp/+TMP\/+g; s+mdp/+bimdp/+g; s+TMP\/+mdp/+g'
            <mdp/test/conftest.py >bimdp/test/conftest.py because bimdp should
            be kept in sync. In my installation bimdp is actually configured
            first, so tests in the temporary directory were failing with 
            AttributeError on py.test.tempdirname.

2011-10-10: FIX: tempdirs in cacheing tests were shortlived A temporary
            directory created with TemporaryDirectory can go at any time, so a
            construct like
             dirname = TemporaryDirectory().name is broken.

            Since the directories are created in the master temporary
            directory anyway, they don't have to be deleted separately.

2011-10-10: FIX: do not set the cachedir by default on import mdp.caching 
            setting it by default was creating a lot of bogus temporary
            directories when parallel processes where started using
            process_scheduler. I see no side effects for not setting it

2011-10-10: FIX: better name for global temp dir
2011-10-10: FIX: fix pp monkey patching. pp._Worker.command.replace(ppworker,
            ppworker3) did not work, as pp._Worker.command is a list and not a
            string!

2011-10-10: FIX: put joblib caching stuff in the new global test tempdir
2011-10-10: ERF: added a container directory for temporary test files. the
            directory gets deleted (no matter its contents) at the end of the
            test run. This should fix stale temp files.

2011-10-05: FIX: partially revert 569cbe7 Changing 'except Exception:' clauses
            to bare 'except:' would catch and swallow ^C and the like.

2011-10-02: ENH: revert the condition for pp monkeypatching It's better to
            only enable it when explicitely requested. The warning is also
            removed, because it doesn't make sense to warn about something
            that was explicitely requested. If the option to monkey patch is
            not given, check if pp is likely to be broken, and if so, disable
            it at configuration time.

2011-10-02: FIX: remove some unused imports and one allocation
2011-10-02: ENH: make temporary directory names more readable tmpxayPZEpp4mdp/
            => pp4mdp.tmpxayPZE/

2011-09-08: FIX: new module structure in scikits.learn 0.8
2011-09-07: BF: Exclude float16 dtypes in numpy.linalg.eigh.
2011-08-24: Fixes to FastICA node Fine tuning and stabilisation are now used
            correctly, and the result closely resembles the original matlab
            version for the deflation/gaussian case with prewhitened data. The
            results are not numerically identical because there are still some
            differences in stopping criteria, but it's close. To verify, see 
            original Matlab implementation.

2011-08-10: DOC: added documentation item to TODO list
2011-06-30: ERF: PEP8 fix (da pignolo)
2011-06-30: ERF: simplify metaclass wrapping code
2011-06-30: FIX: Fixed the node metaclass to correctly handle signatures and
            docstrings for  inheritance chains.
2011-06-30: ERF: Some small pylint-motivated updates.
2011-06-30: ERF: wrap private methods in meteclass even if no docstring is
            defined.
2011-06-30: ERF: Made the _get_required_train_args method more robust.
2011-06-30: OTH: refactored metaclass tests, again.
2011-06-30: OTH: refactored metaclass tests
2011-06-16: DOC: added proper git format for changelog
2011-06-16: OTH: commit failing test for docstring overwriting Thanks to
            Alberto Escalante to point this bug out.

2011-04-07: FIX: verbose argument in set_cachedir was ignored.
2011-06-12: FIX: Fixed a regression that broke the DBN example.
2011-06-11: ERF: Major refactoring of the binet inspection code. This follows
            the refactoring of the flow-to-HTML conversion. Smaller
            refactorings in realted parts (slideshow) were also done.
2011-06-11: ERF: Prepare large refactoring by renaming the files first.
2011-05-31: ERF: Refactored the flow-to-HTML conversion. Threw out useless
            code, fixed style issues and now use the proper vocabulary
            (visitor pattern). The bimdp inspection has not yet been updated
            and is therefore broken in this commit.
2011-04-18: FIX: monkeypatch_pp was broken I made some changes without
            actually testing if stuff works...

2011-04-15: FIX: delete main joblib cache directory at mdp exit The directory
            is of course only deleted if we created it ourselves, i.e. if it
            is a temporary directory.

2011-04-15: FIX: delete joblib cache directory after tests
2011-04-15: DOC: describe MDPNUMX and MDPNSDEBUG env. vars.
2011-04-15: FIX: bump supported scikits-learn version number Setting >=0.6 is
            pretty conservative, but Debian's 0.5-1 is bad for sure.

2011-04-14: DOC: document MDP_DISABLE_MONKEYPATCH_PP
2011-04-14: DOC: document MDP_DISABLE_* variables
2011-01-12: DOC: improve rst in mdp/extension.py
2011-03-21: FIX: drop some unused variables & imports Wanted to test pyflakes
            on something. This is the result.

2011-04-14: FIX: apply a temporary workaround to the pp import problem For
            details see
            http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=620551.

            ppworker.py must be run from some safe place. A temporary dir
            seems a good option. Unfortunately a temporary file is not enough,
            because parent directory should be empty. TemporaryDirectory is so
            complicated, because the code is run during Python shutdown
            procedure and some modules are not available.

2011-04-05: FIX: make short description fit within 200 char limit Tiziano
            proposed the text, nobody protested... I guess that this signifies
            a consensus. :)

            Some small formatting fixes in source code and output were
            applied.

2011-04-01: OTH: remove unnecessary parentheses around assert
2011-04-04: FIX: restore python2.4, 2.5 support in setup.py Module ast is not
            available in python < 2.6.

            The format of docstrings is slightly changed: removed empty lines
            at the top.

            Tested with python 2.4, 2.5, 2.6, 2.7, 3.1, 3.2. Output looks 
            identical.

2011-04-01: FIX: [pp] Result container was shared between invocations
2011-04-01: ERF: improved scikits.learn detection code.
2011-03-31: ERF: Some small code  improvements, no functional changes.
2011-03-31: FIX: Fixed source path handling.

-------------------------------------------------------------------------------
MDP-3.1:

2011-03-29: FIX: fixed shogun version detection code. As I expected, explicit
            version checking is bound to fail. I would prefer to just remove
            it and rely on functional checks, i.e. is the feature we depend on
            present or not?
2011-03-24: ERF: CovarianceMatrix has the option of not centering the data;
            SFANode modified accordingly
2011-03-22: FIX: fix wrong normalization in SFANode SFANode was using the
            covariance matrix of the derivatives, while the SFA algorithm
            requires the non-centered second moment matrix of the derivatives.
            This bug is probably irrelevant in most cases, but in some corner
            cases the error scales with 1/sqrt(N) where N is the number of
            samples. Many thanks to Sven Dähne for fishing this out ;-)
2011-03-22: ERF: added new tests for SFANode Those tests are currently
            failing.
2011-03-22: ERF: really use the debug flag in SFANode.stop_training
2011-03-02: FIX: old svm versions would break the import process Bug reported
            by Philipp Meier.
2011-03-03: DOC: updated TODO
2011-03-03: DOC: updated TODO
2011-02-23: DOC: updated CHECKLIST and TODO
2011-02-23: ERF: performance and memory improvements for KNNClassifier. 
            Transform array of  n_samples^2 * n_features array into
            n_samples^2. Thanks to Fabian Pedregosa!
2011-02-17: FIX: Small cosmetic fix in flow inspection for the case when
            stop_training doesn't receive any argument.
2011-02-17: FIX: Do not wrap abstract scikits.learn transformers
2011-02-17: Robustify wrap_scikits_transformer. Fix for the case that a
            transform does not implement some of the methods.
2011-01-31: ERF: running self-contained test script is now blocking the prompt
2011-01-27: FIX: Made the target checks more permissive when execution ends or
            is aborted.
2011-01-27: ERF: Added additional checks for copy flag in BiLayer.
2011-01-27: FIX: Fixed regression in inspection method output.
2011-01-27: FIX: BiLayer was not compatible with all return value options.
2011-01-27: FIX: Fixed some leftover inconsistencies from BiMDP stop_training
            interface changes.
2011-01-26: DOC: with_extension doesn't work for coroutines, tell epydoc about
            extension
2011-01-25: ERF: remove unittest-style wrapper class from test_extension.py.
2011-01-25: OTH: use context managers to open/close file for pickling
2011-01-25: ERF: Check for empty slides in execution as well.
2011-01-25: ERF: Improved the behavior of show_training if an already trained
            flow is given (a special expection is now raised).
2011-01-17: FIX: add trove classifiers for Python 2 and 3.
2011-01-14: ERF: Updated the Parallel Python support, especially the
            NetworkPPScheduler. It now works with pp 1.6, and there are some
            refactoring and robustnes improvements as well.
2011-01-13: FIX: really update CHECKLIST
2011-01-13: NEW: mdp descriptions now defined in the module. They new
            descriptions are used in the setup.py script and in generating the
            web site.
2011-01-13: ERF: get version and description in a robust way.

-------------------------------------------------------------------------------
MDP-3.0:

2011-01-12: FIX: import NormalizeNode in mdp.nodes
2011-01-12: FIX: no return in IdentityNode method
2011-01-12: FIX: test_scikits should be run only if scipy is available
2011-01-12: FIX: tell epydoc that nodes are documented in rst
2011-01-11: NEW: convert scikits docstrings to rst This way I'm only getting
            missing target warnings and the text is parse as rst. No monospace
            font :)

2011-01-11: FIX: fix some epydoc warnings, add some links and a forgotten
            export
2011-01-07: MISC: duplicate some useful code among the three wrappers last
            merge from scikits branch.

2011-01-11: ERF: make scikits default docs rst-compatible
2011-01-10: Merge branch 'namespace_fixup' Conflicts:
            mdp/__init__.py
            mdp/nodes/__init__.py
            mdp/utils/__init__.py

            Add missing comma in __all__ in mdp/__init__.py.

2011-01-10: OTH: shorten test name
            (Looked awkward in py.test output.)

2011-01-10: NEW: introduce MDPNSDEBUG environment variable This variable
            controls namespace fixup debugging messages.

            Also remove 'advanced string formatting' in favour of printf-style 
            statements (for python 2.5 compatibility).

2011-01-10: FIX: made the one scikits test a bit more useful
2011-01-10: FIX: there is no problem with output_dim in scikits classifiers 
            because they are identity nodes

2011-01-10: DOC: documentation of output_dim problem in scikits.learn wrappers
2011-01-10: FIX: check for existence of im_func in classifier wrapper
2011-01-10: FIX: fail meaningfully when trying to set output_dim
2011-01-10: FIX: added docstrings to scikits wrappers
2011-01-10: FIX: Cache mechanism called pre_execution_check with too much
            information
2011-01-10: FIX: broken variable for disabling scikits.learn
2011-01-10: FIX: fix wrapper string in scikits nodes
2011-01-10: FIX: fixed hard-coded scikits test.
2011-01-10: FIX: fixed a bit pp_remote support. I commented out the test.
            There's no point in having a test that requires a working ssh
            setup. we should move that code in the examples. TODO: I still did
            not manage to test the remote support properly: it does not work
            if ssh spits some session information on startup :-(

2011-01-10: FIX: fix namespace issues with scikits nodes.
2011-01-10: FIX: Made the straight forward fixes for pp 1.6 support, not sure
            if this is working now.
2011-01-10: Merge remote branch 'origin/master'
2011-01-10: Merge a branch with some scikits work I'm doing this as a merge
            instead of rebasing, because the work was really done in parallel,
            and e.g. Tiziano removed the file, which I moved and updated.

2011-01-10: FIX: make scikits support depend on version 0.5 Version 0.4
            breaks... Version 0.5 at least does learn & execute.

2011-01-10: FIX: move scikits test into mdp/tests/
2011-01-10: Merge remote branch 'origin/master' Conflicts:
            mdp/test/test_pp_local.py

2011-01-10: FIX: Updated local scheduler to work with latest pp version 1.6.
2011-01-10: FIX: fix name leaking in nodes/__init__.py
2011-01-10: FIX: add scikits to list of dependencies in testall.py
2011-01-10: FIX: Fixed local Parallel Python tests.
2011-01-10: FIX: make test_ISFANode more robust.
2011-01-10: FIX: remove stale test_scikits.py file
2011-01-10: NEW: merged constant_expansion_node branch. Adds new
            GeneralExpansionNode thanks to Alberto Escalante.

            Tests and node had to be adjusted to merge cleanly and to follow
            new conventions. TODO: pseudo_inverse method is quite fragile,
            why?

2011-01-10: ERF: Added native traceback flag to IDE test run template.
2011-01-09: FIX: remove bitrot in test_pp_*.py. This makes the local tests
            pass with parallel python 1.5.4. Remote tests still fail because 
            amongst other things the server list must be passed explicitely.

            The tests fail horribly with newer pp version.

2011-01-09: FIX: kill epydoc warnings
2011-01-09: Revert "DOC: migrated class.__doc__ to rst for nerual_gas_nodes" 
            This reverts commit 2c2a4cd72ecd7d2dbb2032dd7db4f0754b3ba846.

2011-01-07: FIX: make joblib version checking more robust e.g.
            joblib.__version__='1.0.0-gitABCEDFG' should pass.

2011-01-07: FIX: be more tolerant against missing modules in scikits.learn. 
            depending on the installation procedure, user may or may not have
            some of the scikits.learn modules. we just wrap the modules we
            find.

2011-01-07: FIX: add wrongly removed 'scikits' namespace from mdp.nodes.
2011-01-07: FIX: wrong version in scikits.learn info item.
2011-01-07: ERF: Merged "scikits" branch into "master". Conflicts:
            mdp/__init__.py. Fixed new config syntax and generic_tests.

2011-01-06: FIX: fixed testall script. now it works. the script should be
            ported to use subprocess, so that it runs OS agnostic.

2011-01-05: ERF: improved testall.py
2011-01-05: DOC: updated CHECKLIST for release.
2011-01-05: FIX: Slightly changed the include_last_sample argument to fix the
            problem with the standard parallel fork implementation.
2011-01-05: FIX: fix test broken due to new keyword in SFANode.
2011-01-05: FIX: added include_last_sample to SFA2Node too.
2011-01-05: ERF: added include_last_sample switch to SFANode. Motivation and
            discussion can be found in this thread: 
            http://sourceforge.net/mailarchive/forum.php?thread_name=20100826183424.GF26995%40tulpenbaum.cognition.tu-berlin.de&forum_name=mdp-toolkit-users

2011-01-05: FIX: clean up __all__ in mdp/__init__.py numx* should not be in
            all. Quoting Tiziano:

            > numx was not in __all__, and therefore was not documented by
            epydoc.
            > Once it is added to __all__, indeed things break heavily. well,
            I think even it was by mistake, it is a good thing that numx is
            not in __all__. mdp.numx is an *internal* thing. people doing from
            mdp import * should not get numx. so, leave it like this and we 
            don't even need a workaround for epydoc.

            While at it, remove whitening which was already gone and make the
            list alphabetical.

2011-01-04: Merge branch 'cache' Conflicts:
            mdp/__init__.py

2011-01-04: FIX: make setup.py run on also on python3 The code must run on all
            supported python versions.

            try: ... except Type, v: ...

            file()

            cannot be used.

            While at it, I'm changing exec() to re.match. It's simpler.

2011-01-04: FIX: python2.5 has no itertools.product
2011-01-04: ERf: added script to test all python versions and dependencies.
2011-01-04: FIX: fix name error in configuration.py
2011-01-04: ERF: added way of disabling optional dependencies optional
            dependencies can be disabled setting the env variable
            MDP_DISABLE_DEPNAME

2011-01-04: ERF: remove long deprecated helper functions. pca and fastica
            survive because we use them as ad in the the site and because most
            probably they are the only one in real use out there.

2011-01-04: FIX: fix test failures due to previous commit.
2011-01-04: ERF: cleaned up mdp/__init__.py. configuration is now a separate
            file. the logic of numx loading has been changed (again!).
            numpt/scipy can not be treated as an external dependency.

2011-01-04: FIX: fix generic node test failures for
            TimeFrameSlidingWindowNode.
2011-01-04: ERF: support iterables in generic node tests.
2011-01-03: FIX: MDP depends on joblib >= 0.4.3
2011-01-03: FIX; fixed git log format in CHECKLIST
2011-01-03: DOC: add __homepage__ variable in __init__.py
2011-01-03: FIX: removed useless file.
2011-01-03: ERF: updated author and maintainers, put version in one single
            place.
2011-01-03: DOC: changed reference to installation instructions
2011-01-03: ERF: removed our names from COPYRIGHT. It makes little sense to
            keep up-to-date the list of maintainers in this file. we have one
            authoritative source: the development.rst page.

2010-12-31: FIX: fixed TimeDelayNode docstring rst formatting
2010-12-31: NEW: new TimeDelay and TimeDelaySlidingWindow nodes. Thanks to
            Sebastian Höfer!

2010-12-31: DOC: specify dependency in svm nodes.
2010-12-31: FIX: change order of nodes in nodes/__init__.py __all__ order is
            somehow arbitrary, but better than before. it is needed for the
            automatic node list generation in the web site.

2010-12-31: DOC: migrated class.__doc__ to rst for svm family
2010-12-31: FIX: logic and wording of the symeig dependency test were wrong. I
            don't have a 64bit machine to test that the function in 
            mdp/utils/routines.py still does the right thing. if it does not, 
            just change mdp.config.has_symeig == '...' to 
            mdp.config.has_symeig != '...'
            ;-)

2010-12-31: DOC: migrated class.__doc__ to rst for misc_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for classifier_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for expansion_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for nerual_gas_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for regression_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for rbm_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for lle_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for em_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for fda_nodes
2010-12-31: DOC: migrated class.__doc__ to rst for sfa family
2010-12-31: DOC: migrated class.__doc__ to rst for ica family
2010-12-31: DOC: migrated class.__doc__ to rst for nipals
2010-12-31: DOC: migrated class.__doc__ to rst for pca_nodes
2010-12-31: DOC: migrate convolution nodes to rst docstring
2010-12-31: DOC: fixed migration to rst docstrings for xsfa_nodes.
2010-12-30: Merge branch 'feature/libsvm_291_support' Conflicts:
            mdp/__init__.py
            mdp/test/test_contrib.py

2010-12-30: FIX: failing dtype_consistency_tests with numpy as backend The
            config.has_symeig logic was that config.has_symeig is False when
            using the _fake_symeig compatibility wrapper. Dtypes were selected
            based on that.

2010-12-30: FIX: make sure mdp.config.has_{numpy,scipy} are always set, really
2010-12-30: FIX: make sure mdp.config.has_{numpy,scipy} are always set
2010-12-30: FIX: Don’t try to fetch version of numx_version twice.
2010-12-29: ERF: Put SVM tests into a separate file. Also: Fix
            skip_on_condition on class.
2010-12-27: DOC: rename ExternalDepFail to -Failed and document stuff
2010-12-27: FIX: test_seed failured when testing running bimdp.test() after
            mdp.test() The reason was that when the test functions were
            imported from mdp.test into bimdp.test, they still referenced
            mdp.test._SEED global variable. But the --seed option in bimdp is
            independent, so it was set to a different random seed. By
            duplicating test_seed.py, a second independent global is created.

2010-12-27: Add a test for separable data.
2010-12-27: NEW: check if joblib is >= 0.4.6
2010-12-27: ERF: Restructured the libsvm tests.
2010-12-27: OTH: make COPYRIGHT valid rst This makes is easier to include in
            the webpage.

2010-12-27: Merge branch 'config_simplification' Conflicts:
            mdp/__init__.py

            This merge commit contains an adaptation of caching to the new 
            framework.

2010-12-27: NEW: convert caching_extention.py to rst
2010-12-27: Merge branch 'rst_docstrings' Conflicts:
            mdp/signal_node.py

2010-12-27: Merge branch 'cache' Conflicts:
            mdp/caching/caching_extension.py

2010-12-27: Merge commit '06007d3e8987a6c8574fd63c7608b37e9e657e66'
2010-12-27: ERF: Added test for execute_method in classifiers.
2010-12-27: ERF: Add validation for libsvm parameters.
2010-12-27: ERF: Get rid of superfluous parameter handling. Use svm_parameter
            directly.
2010-12-27: FIX: Get the libsvm tests running for versions >=2.91. TODO: * The
            new interface still needs some polishing.
            * We need to test the RBF classifier. It won’t work right now.
2010-12-24: FIX: fix test of PCANode for degenerate case, it was failing
            occasionally.
2010-12-24: removed now useless copy method overwriting in NoiseNode
2010-12-24: Merge branches 'deepcopy' and 'master'
2010-12-24: ERF: added additional tests for node and flow deepcopy This tests
            fail in master branch righ now, because lambdas can not be
            pickled!

2010-12-24: ERF: added additional tests for node and flow deepcopy
2010-12-24: Merge branch 'master' of
            ssh+git://mdp-toolkit.git.sourceforge.net/gitroot/mdp-toolkit/mdp-toolkit
2010-12-24: FIX: fixex bimdp.test() under windows. The FIX introduced with
            dfa8ec5a0d367941e4c297325a43361d579f8bbd was not working on
            windows, because git does not support symlinks there. It has been
            fixed differently now, and it should work reliably under any
            system, I hope.

2010-12-22: ERF: Improved the exception handling for failing training argument
            check (user now gets a better error message).
2010-12-22: changed my email address in copyright and setup
2010-12-21: Merge remote branch 'new_guidelines'
2010-12-21: FIX: now bimdp.test() really works as advertised!
2010-12-21: FIX: regenerate run_tests.py script for running tests without
            py.test
2010-12-03: OTH: remove uses of deprecated dict.has_key()
2010-12-03: OTH: use with_statement in signal_node
2010-12-18: DOC: improved docs of caching mechanism
2010-12-18: FIX: possible to switch caching path while extension active
2010-12-18: FIX: caching started at second execution because of automatic
            setting of dtype, input_dim
2010-12-18: NEW: caching extension can now cache individual classes or
            instances
2010-12-18: DOC: a few fixes to the cache extension docs
2010-12-09: NEW: Added parallelization for NearestMean and KNN classifier.
            Also updated NearestMeanClassifier attribute names to avoid
            confusion.
2010-12-09: DOC: Added explanation in _default_fork docstring.
2010-12-09: DOC: Improved code documentation.
2010-12-03: FIX: copy with deepcopy everywhere, raise DeprecationWarning on
            old API Since Node.copy() is a public function, changing the
            allowed parameters might be bad. So just ignore the parameter and 
            raise a DeprecationWarning if the parameter has a non-None value.

            >>> import mdp
            >>> node = mdp.Node()
            >>> node2 = node.copy(protocol=1)
            __main__:1: MDPDeprecationWarning: protocol parameter to copy() is
            ignored

2010-12-03: FIX: Patch for using deepcopy instead of pickle for Node and Flow 
            Hi all,

            here is a patch and test script for replacing the pickle with
            deepcopy in Node.copy() and Flow.copy(). The signature of the copy
            function changes (the protocol keyword is no longer necessary), I
            don't know what the proper way to handle this is (deprecation
            error?), so I'll leave it up to you guys.

            Thanks for all the efforts, we get very positive feedback from all 
            users of mdp and Oger!

            David

2010-12-02: OTH: remove redundant shogun version checking
2010-12-02: NEW: add tests for the new config architecture
2010-12-01: OTH: Convert config.has* to an attribute I have suspicions that
            using a lambda function was causing problems with the process
            scheduler.

            git grep -l -E 'config.has_'|xargs sed -r -i
            's/(config.has_[a-z_]+)\(\)/\1/g'

2010-12-01: OTH: simplify mdp config discovery Create
            ExternalDepFound/ExternalDepFail objects immediately after 
            attempting import. This way there's no need to reverse engineer 
            where the symeig implementation comes from.

            TODO: test_process_schedule fails!

2010-12-01: OTH: simplify numpy/scipy imports
2010-12-01: OTH: make ExternalDep objects have boolean value
2010-12-02: OTH: replace 'map()' with 'for:' following 2to3's advice
2010-12-02: OTH: remove redundant OrderedDict implementation I'm also moving
            the OrderedDict recipe to a separate file, because it's kind of
            logically separate and will not be used in newer versions of
            Python anyway.

2010-12-01: OTH: mdp.test() should not cause SystemExit Function
            py.cmdline.pytest calls py.test.cmdline.main, but also raises
            SystemExit. Just call the latter one, so the interactive session
            can continue.

2010-12-01: Change __license__ to 'Modified BSD' in source code The license
            text was already changed in the documentation, but not in the
            source code.

2010-11-30: NEW: Added the execute_method argument and attribute to the
            Classifier class. This makes it possible to get the classification
            results from a normal flow without resorting to monkey patching
            (which makes nodes unpickelable).
2010-11-30: ERF: Improved code readibility.
2010-11-30: NEW: Added iadd method to Flow. Also fixed the error strings.
2010-11-29: NEW: Added parallel version of Gaussian classifier.
2010-11-29: ERF: Added helper function to combine CovarianceMatrix instances.
2010-11-24: NEW: Added KNN classifier.
2010-11-24: FIX: Fixed wrongly created classifier BiNodes.
2010-11-24: NEW: Added nearest-mean classifier node.
2010-11-24: FIX: Updated test name.
2010-11-24: ERF: Some cleanup in the GaussianClassifier. Added an exception if
            any class covariance matrix is singular.
2010-11-23: BRK: Renamed GaussianClassifierNode to GaussianClassifier to
            follow the general classifier convention (otherwise a special case
            would be needed in the BiMDP autogenerated code).
2010-11-23: FIX: Updated BiMDP test for the new siganture of FDANode.
2010-11-23: BRK: Updated FDANode siganture to follow the newer conventions
            from ClassifierNode (labels instead of cl) and the PCA/SFANode (n
            instead of range).
2010-11-09: OTH: move PROJECT_GUIDELINES and NEW_DEVELOPER_INFO to
            development.rst in docs
2010-11-01: NEW: convert neural_gas_nodes.py and rbm_nodes.py docstrings to
            rst
2010-11-01: NEW: add reference to JoMLR article
2010-11-01: NEW: convert mdp/nodes/xsfa_nodes.py docstrings to rst
2010-11-01: NEW: convert mdp/__init__.py and mdp/nodes/signal_node.py
            docstrings to rst
2010-11-01: Merge commit 'c3bdc14c092b92c214f8bd76002be565706f07ca'
2010-11-01: FIX: Fixed bug in node join, leading to inconsistent state under
            certain conditions with FlowNode.
2010-10-31: ERF: Added copy_callable option for thread scheduler.
2010-10-16: FIX: Updated failing unittest.
2010-10-16: FIX: Fixed the parameter names in the switchboard factory.
2010-10-15: BRK: Updated the remaining switchboards.
2010-10-15: BRK: Started to replace the x_ and y_ arguments in 2d switchboards
            with a single _xy argument. So far only the
            Rectangular2dSwitchboard is done.
2010-09-26: FIX: Correctly distinguish Flow and BiFlow in trace inspection
            execute.
2010-09-25: FIX: Fixed bug in ParallelFlowNode and added unittest.
2010-09-14: DOC: Fixed wrong docstring.
2010-09-14: BRK: Improved extension context manager and decorator to only
            deactivate extensions that were activated by it. This prevents
            unintended side effects. Corresponsing tests were added.
2010-09-14: FIX: Fixed outdated import.
2010-09-14: Merge commit '4671fc2511b3446e57afcc1974d46f15ac92cb5f'
2010-09-14: BRK: Improved the dimension consistency handling in FlowNode, also
            making the dimension setting stricter. This is to prevent really
            strange errors in some corner cases (e.g. when the output_dim is
            automatically set in execute). One generic test had to be dropped,
            but explicit test for the dimension setting were added.
2010-09-14: ERF: Streamlined the parallel fork template method.
2010-09-14: FIX: Fixed the test node in the test_execute_fork unittest.
2010-09-14: ERF: Removed the ParallelBiNode, since it is no longer needed.
2010-09-14: Revert "FIX: Fixed small bug in dimension consistency check." This
            reverts commit 0b37100894f08faf3653bab09bc4b5fb21705d72.

2010-09-13: ERF: Added more unittests for parallel. One still fails because an
            improvement in FlowNode is needed.
2010-09-13: DOC: Added comment on necessary extension context improvement.
2010-09-13: FIX: Fixed small bug in dimension consistency check.
2010-09-13: ERF: Improved the threaded scheduler (better exception handling).
2010-09-13: FIX: Fixed parallel bug, missing argument in callable.
2010-09-13: ERF: Turned the use_execute_fork property into a normal method.
2010-09-12: FIX: Added the missing property decorators (this was dangerous,
            since a function attribute is cast as True)..
2010-09-12: FIX: Fixed bug in ParallelNode.
2010-09-12: FIX: Updated ParallelFlow to use correct execution result
            container.
2010-09-12: FIX: Updated __all__ list.
2010-09-10: OTH: python2.5: remove PEP 3101 formatting
2010-07-30: OTH: python2.5: 'with' and 'as'
2010-09-09: Remove next-to-last import numpy from mdp codebase numx rules!

2010-09-09: ERF: Changed the node purging mechanism in parallel to no longer
            use a special extension method in FlowNode. Also some smaller
            comment updates.
2010-09-09: NEW: MDP migrates to BSD license!
2010-09-09: BRK: Clarfied some subtle aspects of the parallel API and updated
            the code to improve consistency.
2010-09-09: Make git display python diffs better
2010-09-08: FIX: Some smaller fixes in the updated parallel code.
2010-09-08: FIX: The parallel BiMDP tests are running again. Also some more
            cleanup in MDP parallel.
2010-09-08: FIX: The standard MDP tests now all run again after the changes in
            parallel.
2010-09-07: BRK: Continued work on the parallelization update, not working
            yet.
2010-09-06: BRK: Started to modify the parallel node forking. The
            is_bi_training in BiNode is replaced with a use_execute_fork in
            the ParallelExtensionNode base class. This is more logical, less
            complicated and a first step towards enabling more parallelization
            patterns.
2010-09-02: OTH: the caching mechanism could be simplified with the latest
            joblib
2010-08-31: DOC: Improve docs of caching mechanism, keywork argument for
            verbosity of cache
2010-08-26: FIX: SFANode.train fails with a meaningful error if trained with
            x.shape = (1, n)
2010-08-26: Fix --seed option for py.test >= 1.3 Py.test in version 1.3 added
            a feature to skip conftest.py files when they are exactly the
            same. This helps when a directory is copied to a subdirectory of
            itself and the config files are not idempotent. Unfortunately,
            this runs afoul of our logic to add the --seed option everywhere,
            irrespective of wheter py.test is run implicitely for the whole
            mdp-toolkit or for mdp or for bimdp or for both. The solution is 
            to modify one of the conftest.py files to be unidentical.

            Tested with with py.test 1.2.1 and 1.3.3.

2010-08-18: OTH: Simplify docstring formatting.
2010-08-25: NEW: FANode detects singluar matrices
2010-08-24: ERF: fftpack does not support float >64; those types are removed
            from the supported list for ConvolutionNode
2010-08-24: FIX: Remove forgotten print statements
2010-08-24: ERF: ISFA supports float>64
2010-08-23: ERF: added python version to mdp.config
2010-08-19: ERF: Add complex256 to list of unsafe dtypes
2010-08-19: FIX: Generic tests failed for MDPNUMX='numpy' When symeig and
            scipy.linalg.eigh are not present, MDP falls back into using
            numpy.linalg.eig . This does not support large floating point
            types, for some reasons, which caused the tests to fail.

2010-08-17: ERF: Updated the classifier nodes that were overlooked in the big
            PreserveDimNode cleanup.
2010-08-17: Merge branch 'supporteddtypes' Conflicts:
            mdp/nodes/misc_nodes.py

2010-08-17: ERF: Clarify questions about support for float64 only
2010-08-17: FIX: Fixed generic tests, now check that PreserveDimNode raises
            right exceptions.
2010-08-17: ERF: Added tests for PreserveDimNode.
2010-08-17: ERF: Wrapped up the PreserveDimNode changes. Unable to fix the
            generic unittests, somebody has to fix those.
2010-08-16: ERF: Refined the choice of supported dtypes
2010-08-16: ERF: Redefine default supported dtypes to be 'Floats', and modify
            all nodes accordingly
2010-08-16: ERF: Further simplified Cumulator mechanism; added test After
            digging into numpy's C code, we decided that at present 
            numpy.concatenate does the right thing, i.e. it creates a buffer
            large enough and uses memcpy to copy the data in each array.

2010-08-16: FIX: py.test failed with an error reporting a duplicated 'seed'
            option In py.test 1.3.3 they changed the sequence in which the
            conftest.py
               files are loaded. In our case, the /mdp/test/conftest.py file
            was
               laoded before the /conftest.py file, which tried to redefine
            the
               optione 'seed', causing an error.

2010-08-14: ERF: Simplified concatenation mechanism in Cumulator The new
            solution is much faster and still avoids direct calls to 
            numpy.concatenate, that performs pairwise concatenations and
            wastes a lot of memory.

2010-08-14: FIX: Cumulator had no docstring
2010-08-10: FIX: Added missing exit target check in BiFlow. Changed the
            unittest to better test this case.
2010-08-10: ERF: Changed BiFlow.execute to always return a tuple (x,msg), even
            if the msg is empty. The previous changing return signature was
            too likely to cause errors.
2010-08-10: DOC: Small fix in docstring.
2010-08-10: DOC: Small fix in comment.
2010-08-09: ERF: Added check for case when both x and msg are None to produce
            better error message.
2010-08-09: ERF: Removed duplicate verbose print.
2010-08-08: FIX: Fixed the missing import for PreserveDimNode and fixed the
            broken generic tests for these nodes by excluding them. This is
            only a provisional fix.
2010-08-08: ERF: Rewrote the creation of the autogenerated BiNode classes.
            Went back to dynamically creating the classes at runtime. Now use
            a node blacklist instead of the previous whitelist. These two
            changes allow the import of nodes with dependencies, like the SVM
            nodes.
2010-08-08: NEW: Added new PreserveDimNode base class for input_dim ==
            output_dim. This should avoid duplication of the set_dim methods.
2010-08-05: ERF: Tweaked the hinet CSS.
2010-08-05: DOC: Improved the ParallelFlow docstrings.
2010-07-30: DOC: Small improvements to the corutine decorator docs.
2010-07-30: FIX: Removed some left over stop_message references.
2010-07-29: NEW: extend namespace_fixup to bimdp
2010-07-29: ERF: rework fixup_namespace function and add tests
2010-07-27: FIX: NodeMetaclass and ExtensionException where imported but not
            in __all__
2010-07-27: FIX: remove helper_funcs module from mdp namespace, they are
            imported into mdp
2010-07-27: NEW: Added a simple run script to run the tests from a .py file
            (e.g. to use the Eclipse debugger).
2010-07-27: ERF: Optimized the switchboard gradient implementation (about 10x
            faster).
2010-07-27: ERF: Changed one more unittest to use scheduler context manager.
2010-07-27: ERF: Added context manager interface to Scheduler class and added
            unittests.
2010-07-27: ERF: Renamed callable_ to task_callable and made some small
            docstring updates.
2010-07-27: ERF: Removed unused imprts and updated docs.
2010-07-27: FIX: Fix double delete
2010-07-26: NEW: use sphinx links in mdp.parallel docstring
2010-07-25: FIX: remove del's of nonexistent symbols
2010-07-25: NEW: use fixup_namespace to clean up __import__
2010-07-25: FIX: missing comma in __all__ was concatentating names
2010-07-25: OTH: add import of fixup_namespace without actually using it This
            is seperate to check if there are no circular imports

2010-07-24: FIX: remove nonexistent name from __all__
2010-07-23: FIX: remove unused import of hotshot.log
2010-07-23: FIX: fix broken name delete
2010-07-23: FIX: fixed setup.py (remove refs to demo & contrib)
2010-07-23: FIX: convolution nodes are conditional on scipy.signal
2010-07-23: FIX: remove del of nonexistent symbol
2010-07-23: FIX: move pp_simple_slave_test.py to examples
2010-07-23: FIX: regenerate bimdp wrappers for classifiers
2010-07-23: ERF: convert parallel python tests to py.test and disable them
2010-07-23: FIX: TODO had the wrond line ending. Sorry everybody :-(
2010-07-23: FIX: Fix tests in test_nodes_generic with svm classifier nodes. 
            Add arguments to ShogunSVMClassifier and LibSVMClassifier to
            automatically set kernel and classifier on __init__. Add
            parameters to test_nodes_generic to use these arguments.

2010-07-23: DOC: updated TODO list
2010-07-23: NEW: Added new tests for Convolution2DNode
2010-07-23: FIX: removed contrib directory
2010-07-23: FIX: duplicate conftest.py twice, so py.test can be run without
            options, try 3 Previous version worked only under cygwin when on
            windows.

2010-07-23: ERF: PEP8
2010-07-23: DOC: The reason of the strange transformations in CumulatorNode
2010-07-23: FIX: Automatic test now cover everything, fixed a lot of stuff in
            the meanwhile!
2010-07-23: FIX: NormalNoise did not function properly
2010-07-23: FIX: KMeansNode failed on some special cases
2010-07-23: FIX: duplicate conftest.py twice, so py.test can be run without
            options, try 2 Previous version worked only when PYTHONPATH
            included mdp-toolkit/.

2010-07-23: ERF: Migrated the demos to the examples. Removed the tutorial
            demo.
2010-07-23: FIX: duplicate conftest.py twice, so py.test can be run without
            options Note: bimdp/test/conftest.py is a symbolic link to
            bindmp/test/conftest.py.
                 OTOH, conftest.py in the top directory is a little different.

2010-07-23: ERF: remove old run_coverage script The new way is:
             py.test --figleaf and the result go into html/.

2010-07-23: OTH: Renamed NEW_DEVELOPER_INFO.txt → NEW_DEVELOPER_INFO.
2010-07-23: ERF: Made tests for SVM classifiers, Convolution2D conditional on
            presence of nodes
2010-07-23: Merge branch 'test_cleanup' Conflicts:
            mdp/test/_tools.py

2010-07-23: FIX: fix broken conditional test for caching
2010-07-23: ERF: simplify testing by providing commonly used imports in
            test/_tools All testing files can just say
             from _tools import * and the get numx, numx_rand, mult, ...

            Py.test is not imported into _tools, so that it is easier to
            possible to import files which don't actually depend on py.test
            when it is not available.

            Also includes some tiny naming and space corrections.

2010-07-23: NEW: Conditional tests decorator; decorated test_caching tests
2010-07-23: FIX: use the right TESTDECIMALS in test_utils_generic
2010-07-23: ERF: convert utils tests to py.test
2010-07-23: NEW: add QuadraticFormException for QuadraticForm errors
2010-07-23: ERF: Caching now imported conditional on joblib
2010-07-23: Merge branch 'master' of
            ssh+git://mdp-toolkit.git.sourceforge.net/gitroot/mdp-toolkit/mdp-toolkit
2010-07-23: Merge branch 'master' into HEAD Conflicts:
            mdp/__init__.py

2010-07-23: ERF: Added *Cumulator and ClassifierNode to __all__
2010-07-23: OTH: Trying to push changes
2010-07-23: ERF: Caching tests moved to own file, updated to py.test style
2010-07-23: ERF: de-obfuscated code in config object
2010-07-23: Merge branch 'sprint_cache' Conflicts:
            mdp/__init__.py
            mdp/extension.py
            mdp/nodes/__init__.py
            mdp/nodes/convolution_nodes.py
            mdp/test/test_extension.py
            mdp/test/test_nodes.py
            mdp/utils/__init__.py
            mdp/utils/routines.py

2010-07-23: FIX: Windows specific fix.
2010-07-23: OTH: whitespaces
2010-07-23: ERF: make generic_test_factory a public function It is now even
            documented.

2010-07-23: OTH: Fixed whitespaces in convolution nodes
2010-07-23: DOC: describe the complicated big_nodes argument of
            _generic_test_factory
2010-07-23: NEW: tests can be run within python shell. You can run the tests
            with import mdp mdp.test()

            you don't need py.test installed!

2010-07-23: Merge branch 'sprint_conv2'
2010-07-23: ERF: Made import of Convolution2DNode conditional on presence of
            scipy
2010-07-23: ERF: Added method in config object to check for existence of
            arbitrary module by name
2010-07-22: FIX: remove nonexistent import from __all__
2010-07-22: ERF: Adding numpy and scipy to config.
2010-07-22: Merge branch 'sprint_variadic_cumulator'
2010-07-22: FIX: fix broken test_gradient. It was not useing the numx,
            numx_rand convention!!!
            >:-(

2010-07-22: FIX: Fixing an error in contrib tests.
2010-07-22: ERF: migrated bimdp tests to py.test
2010-07-22: FIX: remove unexistent test name
2010-07-22: NEW: Added convolution class and tests
2010-07-22: ERF: Merged master to convolution branch and removed vestigial
            file
2010-07-22: DOC: Update docs
2010-07-22: ERF: Cache extension migrated to own directory, tests updated
2010-07-22: NEW: Init for caching module
2010-07-22: OTH: Attempted refactoring cache extension in own directory, got
            metaclass conflict
2010-07-22: ERF: update gitignore for py.test gnerated files
2010-07-22: Merge branch 'test_framework' Conflicts:
            bimdp/test/test_binode.py
            mdp/nodes/misc_nodes.py

2010-07-22: NEW: Context manager for caching extension
2010-07-22: FIX: Fixed documentation and call with wrong argument
2010-07-22: DOC: Fixed error in documentation of context manager
2010-07-22: ERF: Deleted forgotten print statement
2010-07-22: NEW: activate_caching, deactivate_caching
2010-07-22: ERF: Simplified extension context manager
2010-07-22: ERF: port contrib and hinet to py.test
2010-07-22: ERF: Cache directory can be changed or picked at random (default)
2010-07-22: Merge branch 'sprint_info_refactoring'
2010-07-22: ERF: Renamed ‘Requirements’ → ‘MDPConfiguration’. Changed the API
            style a little. Needs more love with version checking.
2010-07-22: ERF: Caching extension moved to own file
2010-07-22: ERF: Tests for cache extension
2010-07-22: DOC: add note about where the links must be changed in sphinx rst
2010-07-22: FIX: Exception missing mdp module.
2010-07-22: ERF: ClassifyCumulator also inherits from VariadicCumulator. A
            little bit useless atm, since many methods are overwritten.
2010-07-22: FIX: UTF-8 problem. I want to have Python 3 only…
2010-07-22: FIX: broken linear regression test Use non-random input value, so
            that it doesn't fail randomly.

2010-07-22: NEW: added hooks and a command-line option in py.test Use --seed
            to set the random seed.

            Added report of extended configuration infos before and after
            testing reports.  Added unit test for random seed [should only
            fail in case of a bug in py.test and/or numpy].

2010-07-22: FIX: make generated hinet tests pass
2010-07-22: ERF: Cache extension now based on joblib
2010-07-22: NEW: Added VariadicCumulator with mdp.Cumulator being a special
            case of it. VariadicCumulator adds as many automatic fields as are
            specified in the initialisation function.
2010-07-22: ERF: use py.test.raises for exception testing
2010-07-22: FIX: correct PCANode generation
2010-07-22: ERF: extract PCANode generation to a helper function
2010-07-22: ERF: migrate tests for hinet to py.test
2010-07-22: FIX: Switchboard.is_invertible() cannot be a staticmethod
2010-07-22: ERF: remove previously converted tests from test_nodes.py
2010-07-22: ERF: migrate tests for CuBICA- and TDSEPNodes to py.test
2010-07-22: ERF: migrate tests for HistParade- and TimeFrameNodes to py.test
2010-07-22: ERF: migrate tests for EtaComputerNode to py.test
2010-07-22: ERF: migrate tests for GrowingNeuralGasNode to py.test
2010-07-22: ERF: migrate tests for NoiseNode to py.test
2010-07-22: ERF: migrate tests for FDANode to py.test
2010-07-22: ERF: migrate tests for GaussianClassifier to py.test
2010-07-22: ERF: migrate tests for FANode to py.test
2010-07-22: ERF: migrate tests for ISFANode to py.test
2010-07-22: ERF: migrate tests for RMB*Node to py.test
2010-07-22: ERF: move spinner to _tools
2010-07-22: ERF: migrate tests for LinearRegressionNode to py.test
2010-07-22: ERF: migrate tests for CutoffNode to py.test
2010-07-22: ERF: migrate tests for HistogramNode to py.test
2010-07-22: ERF: migrate tests for RBFExpansionNode to py.test
2010-07-22: ERF: migrate tests for AdaptiveCutoffNode to py.test
2010-07-22: ERF: migrate tests for SFA2Node to py.test
2010-07-22: ERF: migrate tests for SFANode to py.test
2010-07-22: ERF: migrate tests for WhiteningNode to py.test
2010-07-22: ERF: migrate tests for PCANode to py.test
2010-07-22: ERF: migrate tests for PolynomialExpansionNode to py.test
2010-07-22: ERF: migrate covariance Node tests to py.test
2010-07-22: ERF: add node copying, saving and training tests
2010-07-22: ERF: move BogusNode* to _tools
2010-07-22: FIX: fix python2.5 compatibility
2010-07-21: FIX: Don’t include utils until it is needed.
2010-07-21: ERF: Drop Python 2.4, use built-in all().
2010-07-21: ERF: Fix some of the issues with contrib.__all__ and dependencies.
2010-07-21: FIX: Fixing bugs with scheduling. Avoid printing while mdp is
            imported.

            Rename _info() to req.info() in MDPVersionCallable. req.info() is
            a different object but it’s exact layout is not important for
            scheduling.
2010-07-21: ERF: add tests for RBFExpansionNode
2010-07-21: FIX: don't use self in staticmethod
2010-07-21: ERF: add generated tests for FastICA
2010-07-21: ERF: generate tests for reversing
2010-07-21: ERF: use any and all to check conditions
2010-07-21: BRK: make is_trainable staticmethod where possible
2010-07-21: BRK: make is_invertible staticmethod where possible
2010-07-21: ERF: Everybody loves nicer output
2010-07-21: OTH: implemented obvious thing of decorating the execute method
            with joblib, it does not work; breaks the caching extension
2010-07-21: ERF: Remove all the cool logic and decorators because __dict__ is
            not ordered and all the methods are executed in arbitrary order.
2010-07-21: Merge commit '38664d80675ea7304ee28b460ba88c547b55629e'
2010-07-20: NEW: Added a new Requirements object which checks for available
            features. Current version needs some discussion/rework because
            class methods are not initialised in order...

2010-07-21: ERF: generate dimdtypeset consistency tests
2010-07-21: FIX: Fixed the remaining broken unittests.
2010-07-21: ERF: generate outputdim_consistency tests
2010-07-21: NEW: Adding the ‘official’ backport for OrderedDict to our
            routines.py.
2010-07-21: FIX: Updated the bimdp.hinet package to work with the new
            stop_training.
2010-07-21: ERF: world's first automatic test generation
2010-07-21: OTH: Merged cache branch with convolution branch
2010-07-21: FIX: Updated the BiFlowNode to work with new stop_training.
2010-07-21: DOC: Improved documentation for Convolution2DNode
2010-07-21: FIX: Fixed the failing BiFlow unittest.
2010-07-21: ERF: Convolution2DNode now supports FFT convolution, checks for
            the validity of all of its argments; the new tests are in a file
            outside the repository, waiting for the new test framework
2010-07-21: FIX: Fixed the inspection by removing the stop_message reference.
2010-07-21: BRK: Simplified the coroutine decorator according the stop_message
            removal.
2010-07-21: BRK: Updated and simplified BiFlow for the new stop_training
            specification. Not tested yet.
2010-07-21: ERF: Added output dimension check to IdentityNode.
2010-07-21: ERF: ported test_flows to py.test
2010-07-21: ERf: ported test_graph.py to py.test
2010-07-21: ERF: ported test_parallelflows to py.test
2010-07-21: ERF: ported test_parallelhinet.py to py.test
2010-07-21: ERF: ported test_parallelnodes.py to py.test
2010-07-21: ERF: ported test_process_schedule to py.test
2010-07-21: ERF: ported test_extension to py.test
2010-07-21: FIX: caching extension now works with non-contiguous arrays
2010-07-21: OTH: Updated bimdp todo list.
2010-07-21: BRK: Started with change of the stop_training signature in bimdp
            and removed stop_message. The binode file is basically done.
2010-07-21: NEW: New utility function to generate Gabor wavelets
2010-07-21: ERF: ported test_classifier to py.test
2010-07-21: ERF: added new testing tools file.
2010-07-21: ERF: ported test_schedule to py.test
2010-07-20: FIX: globally remove trailing whitespace Used
            http://svn.python.org/projects/python/trunk/Tools/scripts/reindent.py
            .

2010-07-20: FIX: broken import
2010-07-20: Merge branch 'py3k', remote branch 'origin/sprint_gradient' into
            master Conflicts:
            bimdp/inspection/trace_inspection.py

2010-07-20: FIX: Removed use of new.instancemethod from inspection.
2010-07-20: FIX: typo in Flow.__setitem__
2010-07-20: ERF: use context manager for file access
2010-07-20: FIX: don't create a list that is ignored RefactoringTool:
            Warnings/messages while refactoring: RefactoringTool: ### In file
            /home/zbyszek/mdp/mdp-toolkit/build/py3k/mdp/linear_flows.py ### 
            RefactoringTool: Line 481: You should use a for loop here

2010-07-20: FIX: Fixed the integer division in bimdp.
2010-07-20: FIX: remove bogus import in test/__init__.py
2010-07-20: FIX: get rid of the "callable" variable and fix the scheduler
            shutdown An explicit flush was needed.

2010-07-20: NEW convolution2d node
2010-07-20: ERF: esthetic change: activate heart beat spinner
2010-07-20: FIX: another integer division problem
2010-07-20: FIX: don't use None in comparisons
2010-07-20: FIX: integer division again
2010-07-20: FIX: fixed handling of binary mode for stdin and stdout for pickle
2010-07-20: FIX: remove unused import
2010-07-20: FIX: don't compare float with NoneType In Python2.6 None is
            smaller than any float, but in Python3 the comparison fails with
            TypeError.

2010-07-20: FIX: whitespace
2010-07-20: FIX: correct relative imports in process_schedule.py
2010-07-20: FIX: another integer division problem
2010-07-20: FIX: whitespace
2010-07-20: FIX: add x before range git grep -l 'for.*[^x]range'
            mdp/test/|xargs sed -i -r 's/for(.*[^x])in range/for\1in xrange/g'

2010-07-20: FIX: matlab→python and py3k cleanups a = a + 1 becomes a += 1
            / becomes // range() becomes xrange() useless cast removed 
            exception variable doesn't leak out after the catch block anymore

2010-07-19: FIX: whitespace
2010-07-20: FIX: zip returns a generator in py3k, we need a list
2010-07-19: FIX: fixed integer division
2010-07-19: FIX: fixed calling unbound class methods in extensions. unbound
            methods have been removed in python3.
2010-07-19: ERF: refactored py3tool
2010-07-19: FIX: use sets not lists in testing GraphNode
2010-07-19: FIX: open files in binary mode when loading a pickle
2010-07-19: MISC: gitignore build stuff
2010-07-19: ERF: use 'open' function instead of the deprecated 'file' in
            mdp/demo
2010-07-19: FIX: missing import in setup.py [2]
2010-07-19: FIX: missing import in setup.py
2010-07-19: NEW: python3 setup logic (from numpy)
2010-07-19: ERF: use 'open' function instead of the deprecated 'file'.
2010-07-20: ERF: Restricted the gradient default implementation to the
            IdentityNode, now raise an exception as the default.
2010-07-20: ERF: Removed the explicitly defined IdentityBiNode, use the
            autogenerated one instead.
2010-07-20: NEW context manager for extensions
2010-07-20: NEW basic implementation of the cache execute extension
2010-07-19: ERF: Added a gradient unittest with a small network.
2010-07-19: ERF: Improved one  layer gradient unittest into a functional test.
            Insignificant cleanup in gradient module.
2010-07-19: FIX: Fixed the switchboard gradient and added unittest.
2010-07-19: NEW: Added the switchboard gradient implementation with a test
            (more unittests are needed).
2010-07-19: NEW: Added gradient implementation for layer with some unittests
            (more are needed). Added check in gradient base node that node has
            finished training.
2010-07-19: DOC: Added the new project guidelines.
2010-07-19: ERF: use integer division
2010-07-19: NEW: Added gradient extension with some implementations for simple
            nodes (no hinet yet).
2010-07-02: Added kwargs to SenderBiNode init to enable multiple Inheritance.
2010-07-02: Fixed bug in inspection: If nodes were added in later training
            phases the clickability broke for all nodes. Again this affected
            XSFA. Changed text in inspection from layer to node.
2010-07-02: Updated the inspection example (more training phases for better
            illustration). Tiny doc update in SenderBiNode.
2010-07-02: Fixed bug for normal node in BiFlowNode (this broke the XSFA
            inspection example).
2010-07-01: Simplified the inspection msg printing.
2010-07-01: Improved the inspection message printing (alphabetic sorting and
            highlighted keywords).
2010-06-29: Improved the key order in the inspection msg HTML view.
2010-06-29: Improved the array HTML display in the inspection.
2010-06-29: Fixed one corner case bug in coroutine decorator and added more
            unittests. Updated bimdp todo list. Small docstring update in
            switchboard.
2010-06-16: Merged the coroutine mixin class into the BiNode base class. Added
            _bi_reset hook method that should be overwritten instead of
            bi_reset. This is more consistent with the standard MDP design.
            The bi_reset template method now clears the coroutine table.
            Dervied BiNode classes should rename their bi_reset to _bi_reset,
            but unless they use the coroutine decorator there is currently no
            negative effect for not doing so. Updated the BiMDP todo list.
2010-06-15: Fixed duplicate classifier nodes in autogenereated code.
2010-06-14: Added check and unittest for corner case of a directly terminating
            coroutine.
2010-06-13: Reverted my misguided fixes to the metaclass wrapping helpers.
2010-06-11: Small comments update.
2010-06-11: Updated the codecorator to work with the updated NodeMetaclass
            wrapping helper functions. Add new feature to specify argument
            default values. Changed the _coroutine_instances to be initially
            None for better efficiency.
2010-06-11: Rewrote the NodeMetaclass wrapping helper functions. The old
            versions contained a bug (default values would prevent user
            defined values from being passed to the function). The new version
            is also arguably more elegant and flexible. A unittest was added
            for parts of the new functionality.
2010-06-11: Fixed the n argument in PCANode inverse.
2010-06-09: Added new coroutine decorator and mixin for BiMDP, allowing easy
            continuations (without boilerplate code or explicit state
            machines).
2010-06-09: Fixed bug in SenderBiNode.
2010-06-09: Fixed typo.
2010-06-09: Fixed broken SFA execute range argument and renamed it to n. Added
            unittests for PCA and SFA n arguments. Added some missing SFANode
            attributes to init.
2010-06-09: Fixed bug in BiFlowNode.
2010-05-31: Added loop check for previous button in slideshow.
2010-05-27: Numpy still uses the deprecated string exceptions, which were
            naturally not caught during inspection. I now changed inspection
            to catch everything.
2010-05-19: Added check for loop setting in slideshow next().
2010-05-17: Very small cosmetic updates.
2010-05-17: fixed other two python2.4 incompatibilities in demos.
2010-05-15: fixed bug with ProcessScheduler when mdp installed by debian
            package. Now it works correctly even when multiple versions of mdp
            are installed, for example a system version via debian and a local
            git version. A unit test has been added to make sure parent and
            child processes are running the very same mdp. Thanks to Yaroslav
            Halchenko for pointing out the problem!

-------------------------------------------------------------------------------
MDP-2.6:

2010-05-14: fix spurious shogun warning.
2010-05-14: applied patch from Rike to re-enable some of the working Shogun
            tests.
2010-05-14: fixed bug when using most recent numpy (1.4.1). utils.get_dtype
            was failing when called with 'All' argument. most of MDP unittests
            were failing!
2010-05-14: added stylesheet files to setup script. only *.py files are
            installed by default.
2010-05-14: modified mechanism to get git revision in order to properly handle
            the case when git fails. added stylesheets to MANIFEST template
2010-05-14: several additions to distribution files
2010-05-14: removed NaiveBayesClassifer from automatically generated nodes in
            bimdp. regenerated node wrappers
2010-05-14: fixed bug in GaussianClassifierNode and FDANode when training with
            a list of labels. Removed obsolete 'uniq' function in utils. we
            can use builtin set instead.
2010-05-14: disabled Shogun tests. they often fail withtou apparent reasons.
            try for example: python2.5 -c 'import mdp;
            mdp.test(seed=257416710)'
2010-05-14: Added a maximum iteration constraint to the k-means classifier.
2010-05-14: Moved the NaiveBayesClassifier to the demo.
2010-05-14: Fixed a bug where the Classifier rank() method returned items in
            the reverse order.
2010-05-13: LLENode was not fixed ;-) disabled 2D test and added reminder to
            TODO
2010-05-13: fixed ever failing LLENode test.
2010-05-13: added info about LibSVM and Shogun in mdp.info()
2010-05-13: first take at disabling SVM tests when libraries are not available
2010-05-12: Updated the todo list to reflect the latest developments.
2010-05-12: Adjusted the BiClassifier node according to the renamings.
2010-05-12: Renamings in the classifier nodes (classify->label, cl->labels).
2010-05-11: removed code duplication from test/__init__.py
2010-05-11: added info function to display infos about MDP and dependencies
2010-04-29: Added ability to exit BiFlow with -1 target value, making it
            easier to use inverse execution.
2010-04-22: Inserted the new sys.path behavior also in the main clause.
2010-04-22: Changed the sys.path behavior in subprocesses to fix problems with
            multiple MDP versions on a system.
2010-04-14: Fall back on default if specified browser is not available.
2010-04-14: Added tracebacks to exception handling during debug inspection.
2010-04-12: Added ability to specify a specific browser for slideshows, also
            changed the argument name.
2010-04-09: Rewrote K-Means training to be aligned with the Cumulator
            training.
2010-04-09: Adapted the SVM Classifiers to use the new ClassifierCumulator
            class.
2010-04-03: Made a Cumulator version for simple Classifiers.
2010-04-06: Made GaussianClassifierNode inherit from ClassifierNode.
2010-04-04: Simplified the inheritance names in classifier nodes’
            declarations.
2010-03-29: Patch from Benjamin Schrauwen to fix the method polution issue.
2010-03-29: Fixed the dysfunctional unittest, it now breaks, currently no
            solution.
2010-03-29: Added test for pp scheduler with real flow.
2010-03-28: Improved the extension verbose printing.
2010-03-28: Fixed one more issue (method polution) and added a test.
2010-03-28: Added new failing test, caused by polution.
2010-03-28: Added unittest for the special behavior when multiple extensions
            extend the same method.
2010-03-28: Patch from Benjamin Schrauwen for extension mechanism.
2010-03-27: Slightly changed the behavior of targeted message keys: They are
            now removed even if they are not args of the method. Updated the
            unittests accordingly.
2010-03-27: Fixed bug for layer containing a single node.
2010-03-26: Added BiClassifier and automatic creation of BiMDP versions for
            MDP classifiers (currently except the SVN based ones).
2010-03-25: Applied patch from Benjamin Schrauwen, the BiMDP tests now all
            pass.
2010-03-25: Changed the BiMDP msg key seperator from "=>" to "->" to allow for
            more consistent convention in the future, when more options might
            be added. Updated the todos accordingly.
2010-03-25: Undid the changes to the extension mechanism, they are now
            available in a seperate branch.
2010-03-25: Enable inheritance in extensions. Patch thanks to Benjamin
            Schrauwen! (cherry picking from commit
            aacbc906be0f79e66124085e1c51c35a0aee731d) Enable inheritance in
            extensions. Test thanks to Benjamin Schrauwen! (cherry picking
            from commit 89b7facb223aff09d4581ce5aa68d07a8ef47b1b)
2010-03-25: Enable inheritance in extensions. Test thanks to Benjamin
            Schrauwen!
2010-03-25: Enable inheritance in extensions. Patch thanks to Benjamin
            Schrauwen!
2010-03-24: Python fixes for compatibility with 2.4.
2010-03-24: Reverted some of the Python 2.6 (and Numpy 1.4) only changes.
2010-03-24: Added verbose argument to mdp.activate_extension.
2010-03-23: Added a section about dealing with testing branches.
2010-03-22: Added unittest for bimdp parallel stuff and updated another.
            Update the todos.
2010-03-22: Improved the CloneBiLayer message data splitting and added
            corresponding unittest.
2010-03-22: Slightly changed the message handing in BiSwitchboard and added
            corresponding unittests. Small rename in BiNode. Small todo
            update.
2010-03-16: Added a simple k-means clustering classifier.
2010-03-14: Added node_id support to BiFlowNode.
2010-03-13: Added utility function izip_stretched.
2010-03-12: Added test for adding node to flow. Moved one BiNode test to
            correct class.
2010-03-11: Fixed bug in flow in-place adding method.
2010-03-11: Added a refcast to classify and prob methods.
2010-03-10: Fixed the remaining failing tests from Tiziano. It was caused by
            an ambiguity of the BiFlow.train docstring, so this is now
            explained in more detail. An additional check was added to BiFlow
            to detect this kind of error.
2010-03-10: Refactored the additional argument check into seperate method, so
            that it can be reused by derived flow classes (especially BiFlow).
2010-03-10: Fixed the test for FDA in a biflow.
2010-03-10: Added other failing tests for BiFlow.
2010-03-10: Added failing tests for BiFlows.
2010-03-10: Added special __add__ method to BiNode, creating a BiFlow. Also
            added corresponding unittest.
2010-03-09: Fixed an assertion bug in Shogun test.
2010-03-09: Added unittests for recent stop_message magic. Also made some
            small improvements and added for documentation for this. Made
            small updates to the general bimdp docstring.
2010-03-09: Added a section on using git with Windows or Eclipse. Added a
            section on following PEP 8.
2010-03-09: Added checks for input_dim.
2010-03-09: We need to have shogun 0.9 for our SVM Classifier.
2010-03-08: Updated NEW_DEVELOPER_INFO to ‘The git situation’.
2010-03-08: Fixed Py2.6 DeprecationWarning in RBMLearning test.
2010-03-08: Fixed a new bug in BiNode. Moved the SVN nodes to the classifier
            part in the autogen module.
2010-03-08: Made a larger set of additions to the SVM tests.
2010-03-08: Updated the docstrings for the SVM classifiers.
2010-03-06: Fix: Forgot to set the classifier_type in libsvm.
2010-03-06: Added simple support for probability estimations in LibSVM through
            our _prob() method.
2010-03-04: Renamed SVM_Node -> SVM_Classifier.
2010-03-02: Supplying arguments to the shogun classifier works now. Improved
            the test suite.
2010-03-01: Lots of updates and refinements to shogun integration.
2010-02-28: Added some recognition for KernelMachines in shogun.
2010-02-27: Applied some fixes and optimisations to the SVM code.
2010-02-26: Added class _LabelNormalizer to ease the handling of label
            mapping.
2010-02-26: ClassifierNode-Migration: Now use ClassifierNode._classify in
            SVMNodes.
2010-02-26: Last commit before migration of SVM nodes to ClassifierNode.
2009-09-16: Made some improvements in SVM testing and overall structure.
2010-03-06: Improved the algorithm for _randomly_filled_hyperball(). Scaling
            is much better now.
2010-03-06: Fixed a bug in ClassifierNode.rank(). It now expects a list of
            feature vectors to function.
2010-03-06: Fixed one potential stop_message issue.
2010-03-06: Added magic in BiNode to call execute or inverse from
            stop_message.
2010-02-27: Made the product helper method take advantage of Python 2.6.
2010-03-04: Moved release files in root of master branch.
2010-03-03: Added automatic detection of number of CPU cores. This is used in
            the ProcessScheduler and the ThreadScheduler as the default value.
2010-03-02: Fixed bug left over from inspection cleanup.
2010-02-27: get_svn_revision --> get_git_revision
2010-02-25: Made a couple of smaller improvements in the inspections stuff.
            Added a nice demo for customized inspections.
2010-02-22: Introducing a node for a simple discrete Hopfield model.
2010-02-22: Stupid bug in bool_to_sign fixed.
2010-02-23: Simplified the improved import precautions.
2010-02-23: Enabled calling bimdp.test(). Removed redundant code from autogen.
2010-02-23: Made the import process in the worker processes more robust, to
            fix the problem with calling bimdp.test() from the command line.
2010-02-23: Small updated in the autogen code.
2010-02-23: Changed the automatic creation of BiNode versions for MDP nodes.
            Now a module file is used that is created by a special script.
            While less elegant than the original dynamic solution this is now
            compatible with code checkers and is more transparent for users.
2010-02-23: Added general purpose routines bool_to_sign and sign_to_bool.
2010-02-22: Fixed mdp import bug in process scheduler (caused by the occurance
            of mdp in the repo name).
2010-02-19: Delete mdp_dist. All future updates should be made in
            release-manager branch.
2010-02-19: Removed remaining binet references. Renamed some inspection
            classes to get the MDP out of the name. Updated the todo list.
2010-02-19: Need to check against numpy.all when comparing array elements.
2010-02-18: Corrected the common assert-statement-with-parentheses mistake.
2010-02-18: Restructured bimdp to follow the mdp structure.
2010-02-17: Renamed binet to bimdp.
2009-08-01: Typo fix in progressbar script and clarification for OS X (the
            automatic size works there as well).
2010-02-17: Added .gitignore file for .pyc files and some generic patterns.
2010-02-14: Added option to automatically handle the source_paths in the
            worker processes.
2010-02-13: Added more unittests for BiFlow. Fixed one bug in inspection.
            Moved the JumpBiNode to the tests.
2010-02-11: Updated the parallel demo.
2010-02-11: Added a new thread based scheduler. Some very tiny updates to
            ProcessScheduler.
2010-02-09: Added more BiNode unittests. Updated BiNode documentation. Updated
            BiFlow unittests (not yet complete).
2010-01-30: Some small fixes in the inspection. Tried to use cgitd to show
            nice HTML tracebacks, but so far this failed (FlowExceptionCR only
            preserves a traceback string).
2010-01-29: Removed the updown module (this should be no longer needed).
2010-01-26: Added check in get_quadratic_form to make it more flexible (e.g.
            when a derived class wants to use it in _stop_training). Also made
            some small PEP8 updates.
2010-01-26: Updated the imports for the parallel package. Fixed some other
            small issues.
2010-01-22: Fixed one issue in rectangular switchboards (the data in each
            patch was transposed). Added corresponding unittests.
2010-01-11: Seriously beefed up the automatic BiNode creation to preserve the
            init signature. This makes it compatible with the introspection in
            the parallel default fork implementation. Also added a special
            ParallelBiNode and made a tiny style improvement in BiNode.
2010-01-11: Added a default implementation for forking nodes.
2010-01-06: Updated the todos. Also one small improvement to the metaclass
            modification.
2010-01-05: Some small fixes and cosmetic correction.
2010-01-05: Fixed one bug from hell in FlowNode (copy was broken for nested
            FlowNodes when the copy happened after training).
2010-01-05: Fixed a bug in BiFlowNode.
2010-01-04: Modified the automatic node creation, now is compatible with
            pickle and should be 100% transparent. Also fixed the switchboard
            factory extension support.
2010-01-04: Put the automatic node creation into a function to avoid namespace
            polution. Added automatic node creation for switchboards. There is
            one remaining issue with pickling.
2010-01-04: Fixed bugs from refactoring.
2010-01-04: Small refactoring in switchboard factory extension (to allow
            easier modification by derived classes).
2010-01-04: Added automatic creation of BiNode versions of all nodes in
            mdp.nodes.
2010-01-04: Removed leftover code.
2010-01-04: Updated todos and docstring in init. Small cosmetic updates
            elsewhere.
2010-01-03: Fixed bug of the new inspection training node highlighting
            feature.
2010-01-03: Fixed one issue with stop messages in ParallelBiFlow, added a
            related convenience check to CloneBiLayer.
2010-01-03: Small improvements and bugfixes with respect to stop_message.
2010-01-03: Added highlighting of the currently training node in the
            inspection.
2010-01-02: Fixed a couple of bugs. The DBN example is now working again.
2010-01-02: Inspection was simplified, parallel did not need any changes. The
            binet simplification should now be complete (but I have not run
            real-world tests yet).
2010-01-02: Updated bilayer and biswitchboard (with some huge simplifications
            in biswitchboard). Now parallel and inspection remain to be
            updated.
2010-01-02: Added a new switchboard.
2010-01-01: Fixed some issues in BiFlow after simplification. Updated
            BiFlowNode, this is hopefully done.
2009-12-30: Finished simplification of BiFlow. bihinet still needs to be
            updated as well.
2009-12-25: Added /usr/share/dict/words to the list of dictionaries.
2009-12-23: Started with the binet simplification. BiNode should be more or
            less finished, most of the rest is not yet done. In principle
            everything should already work, there is just a large amount of
            dead code around.
2009-12-22: Fixed one bug in the trace inspection (added check for msg being
            None).
2009-12-22: Slightly modified the BiLayer data splitting behavior.
2009-12-22: Fixed bug in iterator / argument check for train: default argument
            values were not considered.
2009-12-16: Renamed the 'html_representation' extension to 'html'.
2009-12-15: Added a copy method to FlowNode to enable delegation to internal
            nodes. Added corresponding tests.
2009-12-13: Prettified the argument representations in the slides.
2009-12-12: Small update to SenderBiNode.
2009-12-12: Improved the exception display in the inspection slideshows. Fixed
            missing reset in fascade.
2009-12-12: Fixed bug in BiFlow (same bug that was previously fixed in
            BiFlowNode, just forgot to commit this).
2009-12-12: Fixed bug in BiFlowNode (relative target index was not translated
            to absolute index during training).
2009-12-12: Increased the robustnes of the training inspection in debug mode
            (it can now deal with exceptions before the stop training hook is
            reached).
2009-12-11: clean up a couple of lines in RBM nodes
2009-12-09: Added a small parallelization demo to demonstrate and explore the
            speedup.
2009-12-05: Fixed outdated default value in slideshow (could cause JS error in
            special circumstances).
2009-12-04: added documentation about the convention for the train methods of
            multiple training phase nodes.
2009-12-04: added Node.has_multiple_training_phases method.
2009-12-03: Modified check for missing argument in node training to also check
            for too many arguments. Added a corresponding test.
2009-12-03: Added check for missing training arguments in Flow (which should
            be provided by the iterator). Also edited the corresponding
            unittest.
2009-12-03: Fixed small error in docstring for slideshow.
2009-12-02: well, NoiseNode *can* be pickled if you use pickle instead of
            cPickle. I hope this bug is fixed in python2.6 or python3 ;-)
2009-12-02: raise error if trying to copying or saving the NoiseNode error
            (bug in cPickle)
2009-12-02: added failing test for iterables mess in flow.
2009-12-01: Added missing super call.
2009-12-01: Fixed one evil bug: When the last training phase of a node was not
            parallelizable in a ParallelCheckpointFlow then the checkpoint
            function was not called. The fix required the addition of another
            hook method in ParallelFlow, but is overall much cleaner than the
            previous solution. Also improved the status messages for local
            training phases.
2009-12-01: gaussian classifier still had overwritten train just to offer a
            doc-string. putting the doc-string in _train is sufficient.
2009-11-29: Added new version of SenderBiNode (doesn't use branching).
2009-11-26: Fixed one biflow issue when in inverse mode (especially inside a
            BiFlowNode).
2009-11-26: Updated some docstrings for the extension mechanism (they were
            only refering to methods and not attributes).
2009-11-26: Fixed a bug in the inspection facade.
2009-11-22: Improved the extension unittests (now testing class attributes as
            well).
2009-11-21: Improved the slideshow button text hints (they now also contain
            the keyboard shortcuts).
2009-11-21: Fixed one embarrassing mistake in the node metaclasses.
2009-11-21: Added support for kwargs in training and execution inspection.
2009-11-16: Added a SimpleMarkovClassifier node. There is duplicated
            functionality compared to the NaiveBayesClassifier, so the
            NaiveBayesClassifier could be refactored to be based on the
            SimpleMarkovClassifier.
2009-11-15: Fixed the signature overwriting in NodeMetaclass. Also renamed
            some occurances of "kargs" to "kwargs" in the Node class
            (previously both names were used in different methods).
2009-11-15: Fixed a bug in rank().
2009-11-14: Moved ClassifierNode up one directory.
2009-11-14: added file with info for new developers
2009-11-13: Added a ClassifierNode with basic methods classify, rank and prob.
2009-11-13: Fixed one bug in the message container, thanks to Sven Dähne.
2009-11-09: Fixed one small bug in switchboard factory. Added switchboard
            factory extension in binet. Updated todos.
2009-11-07: Added new switchboard factory node extension. This has been
            factored out of the hinet planer and I will now use it in my
            simulation software as well (therefore I wanted to integrate it
            into MDP). Unittests and documentation are currently missing
            (unittests will be somewhat tricky, not sure how deeply this
            should be covered in the tutorial anyway).
2009-11-06: Rewrote some parts of the extension mechanism. It now works for
            arbitrary attributes. One nice things is that this actually
            reduced the number of lines of code. The tutorial has not yet been
            updated. Attribute specific unittests are missing as well.
2009-11-06: Updated the todo list.
2009-11-05: Slightly improved the API for activating multiple extensions.
            Discovered that the extension mechanism does not work for
            classmethods/staticmethods, since they appear as non-callable
            descriptors. I will change the extension mechanism to work for
            arbitrary attributes ASAP.
2009-11-04: Small improvements in extension mechanism, added more comments.
            Added missing Exception import in hinet init.
2009-11-04: Fixed a small slideshow issue.
2009-11-03: Completed the clickable inspection nodes. One can now click on a
            node to jump to the next slide where it is reached. This does not
            work in IE yet (the workaround would be simple, but don't want to
            clutter the code with IE specific garbage). Also removed the AJAX
            storage div (caused trouble due to duplicate ids and is not needed
            anyway).
2009-11-03: Added support for active node ids in binet inspection. This will
            make it possible to click on a node and directly jump to the next
            time it is reached. The JS part of this is not yet implemented.
2009-11-03: Fixed the slideshow image CSS and added IE support.
2009-10-30: Cleaned up the JavaScript code in the binet inspection.
2009-10-27: Added checks in channel switchboard.
2009-10-21: Sorry, forgot to fix the webbrowser.open issue in binet.
2009-10-21: Fixed the webbrowser.open issue on MacOS as suggested by Rike.
2009-10-20: Tweaked hinet css. Extracted slideshow css into speparate file.
2009-10-20: Extracted CSS code into separate file.
2009-10-18: Fixed error in rhombic switchboard, added corresponding unittest.
2009-10-17: Added new features to the ChannelSwitchboard base class to get the
            effective receptive fields in hierarchical networks. Also added
            corresponding tests. Minor cosmetic updates in hinet translator.
2009-10-16: Added hinet translatation adapter for valid XHTML (instead of
            HTML). Also added a corresponding unittest, but this does not test
            the validity of the XHTML.
2009-10-16: Fixed two small issues in the hinet HTML representation.
2009-10-14: fixed bug in TimeFramesNode when input_dim was set explicitly.
            thanks to anonymous sourceforge user [Bug ID: 2865106]
2009-10-14: Some CSS fixes and a fix in the demo.
2009-10-14: Added slideshow CSS for crisp rescaling, in anticipation of the
            Firefox 3.6 beta release.
2009-10-12: Added feature that nicely line wraps the section ids in a
            slideshow.
2009-10-07: Added more checks to DoubleRect2dSwitchboard. Some small
            improvements. Updated the package init file.
2009-10-07: Reverted output_channels renaming in switchboard, to not create
            compatibility issues.
2009-10-07: Many switchboard updates. A new ChannelSwitchbard base class was
            introduced, many code improvements, HTML representations were
            added for the new switchboard types.
2009-10-06: removed spurious print statement in QuadraticForm tests.
2009-10-04: Added a section on the extension mechanism in the tutorial (note
            that this is a first draft). Also added a description of the
            slideshow stuff (plus a minor update in the slideshow code).
2009-10-04: Migrated extension stuff to separate module.
2009-10-01: Fixed some issues in the new DoubleRhomb2dSwitchboard, added more
            tests.
2009-09-29: Added a new switchboard class, DoubleRhomb2dSwitchboard. The tests
            are currently incomplete and there are probably bugs in there.
2009-09-29: Some simplifications in the switchboard classes.
2009-09-29: Added a new switchboard class, DoubleRect2dSwitchboard. This will
            probably be complemented in the future by a Rhomb2d switchboard
            for multilayer networks.
2009-09-24: Fixed support for multiple slideshows in one file. Added multiple
            slideshow demo. Allowed keyboard shortcuts for slideshows to be
            turned off.
2009-09-23: Updated todos.
2009-09-23: Fixed the template indentation handling. Updated the binet
            inspection to work with the new slideshow. Moved the manual tests
            for slideshow and hinet to the demos folder.
2009-09-23: Some more cleanup for the slideshow stuff.
2009-09-23: Small update in binet for moving the hinet basic CSS to utils.
2009-09-23: Cleaned up the slideshow JavaScript code. Most importantly the use
            of global variables is now minimized by using an object oriented
            design with a closure. Some additional cleanup in the slideshow
            classes was done as well. Added one helper function to directly
            create an HTML slideshow. Moved the default CSS from hinet to
            utils, so it can be used by both slideshow and hinet. Moved the
            hinet HTML test/demo to the test folder and added a similar demo
            for slideshow (using the MDP logo animation).
2009-09-19: added script to analyze code coverage during tests and output html
            report; needs figleaf,
            http://darcs.idyll.org/~t/projects/figleaf/doc/; mostly, we don't
            test exception, but there are some more worrying parts, like we
            don't test for for flow inversion...
2009-09-17: Added new utility function orthogonal_permutations. The function
            helps avoiding deeply nested statements when several of several
            arguments need to be tested against each other.
2009-09-14: Many thanks to Christian Hinze for pointing out a bug in
            QuadraticForm.get_invariances. Removed warning about bug in
            linalg.qr in numpy 1.0.1.
2009-09-14: Mainly added basic svm tests and did some cleanup and bug fixes.
            Also, the requested comments have been investigated.
2009-09-10: fixed bug in QuadraticForm.get_invariances: second derivative
            value was wrong when linear term significantly large; second
            derivative directions were ok
2009-08-30: small cleanups of svm_nodes and comments/requests for comments.
            rike?
2009-08-30: changed import order in nodes/__init__.py to clean up import in
            expansion_nodes.py for GrowingNeuralGasExpansionNode.
2009-08-23: Made extension method attributes public. Improved the extension
            unittests.
2009-08-22: Small code improvement in binet inspector. Updated todo for
            extensions.
2009-08-22: Modified the NodeMetaclass wrapping procedure to use super instead
            of direct method references. Hopefully this has no negative side
            effects. The advantage is that it is compatible with runtime
            monkey patching, so it enables more extension stuff.
2009-08-21: Extension decorator now preserves function docstring and
            signature.
2009-08-17: Fixed extension related bug in ParallelBiFlow. Improved the
            related unittests. Added some comments.
2009-08-16: Added little comment.
2009-08-16: Removed use of parallel FlowNodes in parallel flows. Small update
            to extensions.
2009-08-12: Added option to extension decorator to specify the method name.
            Added extension decorator unittest (now we have 400 unittests,
            wheee!).
2009-08-12: Fixed left-over bugs from yesterdays mess, fixed unittests.
2009-08-11: Added more unittests for the extension mechanism. Changes in the
            extension documentation and comments, and one small fix.
2009-08-11: Use set for list of active extensions.
2009-08-11: Added safety mechanisms to extensions, added one corresponding
            unittest.
2009-08-10: Re-enabled Shogun nodes.
2009-08-10: Added Henning Sprekeler to the list of developers and removed him
            from the list of contributors. Updated the various copyright
            statements all over the place, and the home page.
2009-08-10: Corrected the docstring of the GrowingNeuralGasExpansionNode to be
            more precise on the relation between max_nodes and the dimension
            of the expansion.
2009-08-10: added standard tests for GworingNeuralGasExpansionNode and cleaned
            up its setting of output_dim.
2009-08-07: Bug removed in GrowingNeuralGasExpansionNode: scipy -> numx
2009-08-07: missing file added; UpDownNode modified so it can pass down the
            results of computations at he top
2009-08-07: Added GrowingNeuralGasExpansionNode to expansion_nodes. Tests are
            still missing.
2009-08-07: ShogunSVMNode only gets imported when libraries are present.
            Stylistic changes (not all done yet). Some parameter issues and
            docstring clarified. Non-kernel classification.
            self._classification_type added. Parameter mapping for kernels
            introduced.
2009-08-06: remove import of svm_nodes in contrib. the automatic shogun import
            is not ready for prime-time.
2009-08-02: Initial SVM commit. Using only shogun for now. Still needs a lot
            of work and a better API. But it is already working somehow.
2009-08-02: uploaded UpDownBiNode, mother class for DBN, backpropagation;
            corrected small bug in binet; I've got loads of questions about
            binet
2009-07-31: GaussianClassifierNode has now explicit output_dim method (which
            fails).
2009-07-25: Added RBF node, utilities to replicate array on an additional
            dimension (rrep, lrep, irep) -> very useful
2009-07-19: Updated BiNet todo list.
2009-07-16: Fixed bug in rectangular switchboard that was introduced in the
            previous update.
2009-07-15: Added unused channel information to rectangular switchboard, this
            is also shown in the HTML representation. Added comments in
            slideshow.

-------------------------------------------------------------------------------
MDP-2.5:

2009-06-30: Added online detection of numerical backend, parallel
            python support, symeig backend and numerical backend to the output of
            unit tests. Should help in debugging.
2009-06-12: Integration of the cutoff and histogram nodes.
2009-06-12: Fixed bug in parallel flow (exception handling).
2009-06-09: Fixed bug in LLENode when output_dim is a float. Thanks to Konrad 
            Hinsen.
2009-06-05: Fixed bugs in parallel flow for multiple schedulers.
2009-06-05: Fixed a bug in layer inverse, thanks to Alberto Escalante.
2009-04-29: Added a LinearRegressionNode.
2009-03-31: PCANode does not complain anymore when covariance matrix has negative
            eigenvalues iff svd==True or reduce==True. If output_dim has been 
            specified has a desired variance, negative eigenvalues are ignored.
            Improved error message for SFANode in case of negative eigenvalues,
            we now suggest to prepend the node with a PCANode(svd=True) or 
            PCANode(reduce=True).
2009-03-26: Migrated from old thread package to the new threading one. 
            Added flag to disable caching in process scheduler. There are some
            breaking changes for custom schedulers (parallel flow training or 
            execution is not affected).
2009-03-25: Added svn revision tracking support.
2009-03-25: Removed the copy_callable flag for scheduler, this is now completely
            replaced by forking the TaskCallable. This has no effect for the 
            convenient ParallelFlow interface, but custom schedulers get broken.
2009-03-22: Implemented caching in the ProcessScheduler.
2009-02-22: make_parallel now works completely in-place to save memory.
2009-02-12: Added container methods to FlowNode.
2009-03-03: Added CrossCovarianceMatrix with tests.
2009-02-03: Added IdentityNode.
2009-01-30: Added a helper function in hinet to directly display a flow HTML 
            representation.
2009-01-22: Allow output_dim in Layer to be set lazily.
2008-12-23: Added total_variance to the nipals node.
2008-12-23: Always set explained_variance and total_variance after training in 
            PCANode. 
2008-12-12: Modified symrand to really return symmetric matrices (and not only
            positive definite). Adapted GaussianClassifierNode to account for
            that. Adapted symrand to return also complex hermitian matrices.
2008-12-11: Fixed one problem in PCANode (when output_dim was set to input_dim 
            the total variance was treated as unknown).
            Fixed var_part parameter in ParallelPCANode.
2008-12-11: Added var_part feature to PCANode (filter according to variance 
            relative to absoute variance).
2008-12-04: Fixed missing axis arg in amax call in tutorial. 
            Thanks to Samuel John!
2008-12-04: Fixed the empty data iterator handling in ParallelFlow.
            Also added empty iterator checks in the normal Flow (raise an 
            exception if the iterator is empty).
2008-11-19: Modified pca and sfa nodes to check for negative eigenvalues
            in the cov matrices
2008-11-19: symeig integrated in scipy, mdp can use it from there now.
2008-11-18: Added ParallelFDANode.
2008-11-18: Updated the train callable for ParallelFlow to support additional 
            arguments.
2008-11-05: Rewrite of the make parallel code, now supports hinet structures.
2008-11-03: Rewrite of the hinet HTML repesentation creator. Unfortunately this 
            also breaks the public interface, but the changes are pretty simple.
2008-10-29: Shut off warnings coming from remote processes in ProcessScheduler
2008-10-27: Fixed problem with overwriting kwargs in the init method 
            of ParallelFlow.
2008-10-24: Fixed pretrained nodes bug in hinet.FlowNode.
2008-10-20: Fixed critical import bug in parallel package
            when pp (parallel python library) is installed.

-------------------------------------------------------------------------------
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.
-------------------------------------------------------------------------------
