*************************************************************************
*                       Changes in version 0.5.06                       *
*************************************************************************

BUG FIX

    o fix unwanted dependency to the parallel package.

*************************************************************************
*                       Changes in version 0.5.1                        *
*************************************************************************

BUG FIX

    o fix a small bug in method 'rss' to allow argument 'target' to be a 
    'data.frame'. This was generating errors when computing the summary 
    measures and especially when the function 'nmfEstimateRank' was called 
    on a 'data.frame'. Thanks to Pavel Goldstein for reporting this.


*************************************************************************
*                       Changes in version 0.5                          *
*************************************************************************
NEW FEATURES

    o Method 'fcnnls' provides a user-friendly interface for the internal 
    function '.fcnnls' to solve non-nengative linear least square problems, 
    using the fast combinatorial approach from Benthem and Keenan (2004).
    See '?fcnnls' for more details.
    
    o New argument 'callback' in method 'nmf' allows to provide a callback 
    function when running multiple runs in default mode, that only keeps the 
    best result. The callback function is applied to the result of each run 
    before it possibly gets discarding. The results are stored in the 
    miscellaneous slot '.callback' accessible via the '$' operator (e.g. res$.callback).
    See '?nmf' for more details.
    
    o New method 'niter' to retrieve the number of iterations performed to fit 
    a NMF model. It is defined on objects of class 'NMFfit'.
    
    o New function 'isNMFfit' to check if an object is a result from NMF fitting.
    
    o New function 'rmatrix' to easily generate random matrices, and allow to specify the 
    distribution from which the entries are drawn. For example:
    
        * 'rmatrix(100, 10)' generates a 100x10 matrix whose entries are drawn 
        from the uniform distribution
         
        * 'rmatrix(100, 10, rnorm)' generates a 100x10 matrix whose entries are drawn 
        from the standard Normal distribution.
                
    o New methods 'basisnames' and 'basisnames<-' to retrieve and set the basis vector 
    names. See '?basisnames'. 
     

CHANGES

    o Add a CITATION file that provides the bibtex entries for citing the 
    BMC Bioinformatics paper for the package 
    (http://www.biomedcentral.com/1471-2105/11/367), the vignette and manual.
    See 'citation('NMF')' for complete references.
    
    o New argument 'ncol' in method 'nmfModel' to specify the target dimensions more 
    easily by calls like 'nmfModel(r, n, p)' to create a r-rank NMF model that fits a 
    n x p target matrix.
    
    o The subset method '[]' of objects of class 'NMF' has been changed to be more convenient.
    See  

BUG FIX

    o Method 'dimnames' for objects of class 'NMF' now correctly sets the 
    names of each dimension.
        
REMOVED CLASSES, METHODS, FUNCTIONS, DATA SETS

    o Method 'extra' has completely been removed.  

*************************************************************************
*                       Changes in version 0.4.8                        *
*************************************************************************
BUG FIX

    o When computing NMF with the SNMF/R(L) algorithms, an error could 
    occur if a restart (recomputation of the initial value) for the H 
    matrix (resp. W matrix) occured at the first iteration.
    Thanks to Joe Maisog for reporting this.     

*************************************************************************
*                       Changes in version 0.4.7                        *
*************************************************************************
BUG FIX

    o When computing the cophenetic correlation coefficient of a diagonal 
    matrix, the 'cophcor' method was returning 'NA' with a warning from 
    the 'cor' function. It now correctly returns 1.
    Thanks to Joe Maisog for reporting this.


*************************************************************************
*                       Changes in version 0.4.4                        *
*************************************************************************

CHANGES

    o The major change is the explicit addition of the synchronicity package into 
    the suggested package dependencies. Since the publication of versions 4.x 
    of the bigmemory package, it is used by the NMF package to provide the mutex 
    functionality required by multicore computations.
    Note This is relevant only for Linux/Mac-like platforms as the multicore 
    package is not yet supported on MS Windows.
    Users using a recent version of the bigmemory package (i.e. >=4.x) 
    DO NEED to install the synchronicity package to be able to run multicore NMF 
    computations.
    Versions of bigmemory prior to 4.x include the mutex functionality.
    
    o Minor enhancement in error messages
    
    o Method 'nmfModel' can now be called with arguments 'rank' and 'target' 
    swapped. This is for convenience and ease of use.
    
BUG FIX

    o Argument 'RowSideColors' of the 'metaHeatmap' function is now correctly 
    subset according to the value of argument 'filter'. However the argument 
    must be named with its complete name 'RowSideColors', not assuming 
    partial match. See KNOWN ISSUES. 
    
KNOWN ISSUES

    o In the 'metaHeatmap' function, when argument 'filter' is not 'FALSE': 
    arguments 'RowSideColors', 'labRow', 'Rowv' that are intended to the 
    'heatmap.plus'-like function (and are used to label the rows) should be 
    named using their complete name (i.e. not assuming partial match), 
    otherwise the filtering is not applied to these argument and an error 
    is generated. 
    This issue will be fixed in a future release.

*************************************************************************
*                       Changes in version 0.4.3                        *
*************************************************************************

CHANGES

    o function 'nmfEstimateRank' has been enhanced: 
       -run options can be passed to each internal call to the 'nmf' function. 
       See ?nmfEstiamteRank and ?nmf for details on the supported options.
       
       - a new argument 'stop' allows to run the estimation with fault tolerance,
       skipping runs that throw an error. Summary measures for these runs are set 
       to NAs and a warning is thrown with details about the errors.
       
    o in function  'plot.NMF.rank': a new argument 'na.rm' allows to remove from 
    the plots the ranks for which the measures are NAs (due to errors during the 
    estimation process with 'nmfEstimateRank').
    
BUG FIX
    
    o Method 'consensus' is now exported in the NAMESPACE file.
    Thanks to Gang Su for reporting this.
    
    o Warnings and messages about loading packages are now suppressed.
    This was particularly confusing for users that do not have the packages 
    and/or platform required for parallel computation: warnings were printed 
    whereas the computation was -- sequentially -- performed without 
    problem.
    Thanks to Joe Maisog for reporting this.

*************************************************************************
*                       Changes in version 0.4.1                        *
*************************************************************************

BUG FIX

    o The 'metaHeatmap' function was not correctly handling row labels 
    when argument filter was not FALSE. All usual row formating in heatmaps 
    (label and ordering) are now working as expected.
    Thanks to Andreas Schlicker, from The Netherlands Cancer Institute for 
    reporting this. 
    
    o An error was thrown on some environments/platforms (e.g. Solaris) 
    where not all the packages required for parallel computation were not 
    available -- even when using option 'p' ('p' in lower case), which 
    should have switched the computation to sequential. 
    This is solved and the error is only thrown when running NMF with 
    option 'P' (capital 'P').
    
    o Not all the options were passed (e.g. 't' for tracking) in sequential 
    mode (option '-p').
    
    o verbose/debug global nmf.options were not restored if a numerical random 
    seed were used.
    
CHANGES    
    
    o The 'metaHeatmap' function nows support passing the name of a filtering 
    method in argument 'filter', which is passed to method 'extractFeatures'.
    See ?metaHeatmap.

    o Verbose and debug messages are better handled. When running a parallel 
    computation of multiple runs, verbose messages from each run are shown only
    in debug mode.
    
*************************************************************************
*                       Changes in version 0.4                          *
*************************************************************************

NEW FEATURES

    o Part of the code has been optimised in C++ for speed and memory efficiency:
        
        - the multiplicative updates for reducing the KL divergence and the euclidean 
        distance have been optimised in C++. This significantly reduces the 
        computation time of the methods that make use of them: 'lee', 'brunet', 
        'offset', 'nsNMF' and 'lnmf'.
        Old R version of the algorithm are still accessible with the suffix '.R#'. 
        
        - the computation of euclidean distance and KL divergence are implemented 
        in C++, and do not require the duplication of the original matrices as done 
        in R.

    o Generic 'dimnames' is now defined for objects of class 'NMF' and returns
	a list with 3 elements: the row names of the basis matrix, the column names 
    of the mixture coefficient matrix , and the column names of the basis matrix. 
	This implies that methods 'rownames' and 'columnames' are also available for 
	'NMF' objects.
	
    o A new class structure has been developed to handle the results of multiple 
	NMF runs in a cleaner and more structured way:
	
        - Class 'NMFfitX' defines a common interface for multiple NMF runs of a 
	      single algorithm.

        - Class 'NMFfitX1' handles the sub-case where only the best fit is returned.
	      In particular, this class allows to handle such results as if coming 
	      from a single run.

        - Class 'NMFfitXn' handles the sub-case where the list of all the fits 
	      is returned. 

        - Class 'NMFList' handles the case of heterogeneous NMF runs (different 
	      algorithms, different factorization rank, different dimension, etc...)
	      
    o The vignette contains more examples and details about the use of package.

    o The package is compatible with both versions 3.x and 4.x of the bigmemory
    package. This package is used when running multicore parallel computations. 
    With version 4.x of bigmemory, the synchronicity package is also required as 
    it provides the mutex functionality that used to be provided by bigmemory 3.x.

BUG FIX
    
    o Running in multicore mode from the GUI on MacOS X is not allowed anymore as 
    it is not safe and were throwing an error ['The process has forked and ...'].
    Thanks to Stephen Henderson from the UCL Cancer Institute (UK) for reporting this.
    
    o Function 'nmf' now restores the random seed to its original value as before its call 
    with a numeric seed. This behaviour can be disabled with option 'restore.seed=FALSE' or '-r'

NEWLY DEPRECATED CLASSES, METHODS, FUNCTIONS, DATA SETS

    o Deprecated Generics/Methods
       1) 'errorPlot' - S4 generic/methods remains with .Deprecated message.
       It is replaced by a definition of the 'plot' method for signatures 
       'NMFfit,missing' and 'NMFList,missing'
       It will be completely removed from the package in the next version.
       
    o Deprecated Class
       1) 'NMFSet' - S4 class remains for backward compatibility, but is not 
       used anymore. It is replaced by the classes 'NMFfitX1', 'NMFfitXn', 
       'NMFList'.

*************************************************************************
*                       Changes in version 0.3                          *
*************************************************************************

NEW FEATURES

    o Now requires R 2.10
	
    o New list slot 'misc' in class 'NMF' to be able to define new NMF models, 
	without having to extend the S4 class. Access is done by methods '$' and '$<-'.
	
    o More robust and convenient interface 'nmf'
	
    o New built-in algorithm : PE-NMF [Zhang (2008)]
	
    o The vignette and documentation have been enriched with more examples and 
	details on the functionalities.
	
    o When possible the computation is run in parallel on all the available cores.
	See option 'p' or 'parallel=TRUE' in argument '.options' of function 'nmf'.
	
    o Algorithms have been optimized and run faster
	
    o Plot for rank estimation: quality measure curves can be plotted together 
	with a set of reference measures.
	The reference measures could for example come from the rank estimation of 
	randomized data, to investigate overfitting.
	
    o New methods '$' and '$<-' to access slot 'extra' in class 'NMFfit'
	These methods replace method 'extra' that is now defunct.
	
    o Function 'randomize' allows to randomise a target matrix or 
	'ExpressionSet' by permuting the entries within each columns using a
	different permutation for each column. It is useful when checking for
    over-fitting. 
		
CHANGES

    o The 'random' method of class 'NMF' is renamed 'rnmf', but is still 
	accessible through name 'random' via the 'seed' argument in the 
	interface method 'nmf'. 
	
NEWLY DEFUNCT CLASSES, METHODS, FUNCTIONS, DATA SETS

    o Defunct Generics/Methods
       1) 'extra' - S4 generic/methods remains with .Defunct message.
       It will be completely removed from the package in the next version.

*************************************************************************
*                       Changes in version 0.2.4                        *
*************************************************************************

CHANGES
	
    o Class 'NMFStrategy' has a new slot 'mixed', that specify if the algorithm 
	can handle mixed signed input matrices.
	
    o Method 'nmf-matrix,numeric,function' accepts a new parameter 'mixed' to 
	specify if the custom algorithm can handle mixed signed input matrices.

*************************************************************************
*                       Changes in version 0.2.3                        *
*************************************************************************

NEW FEATURES

    o Package 'Biobase' is not required anymore, and only suggested.
    The definition and export of the NMF-BioConductor layer is done at 
    loading.

    o 'nmfApply' S4 generic/method: a 'apply'-like method for objects of 
    class 'NMF'.
    
    o 'predict' S4 method for objects of class 'NMF': the method replace the now
    deprecated 'clusters' method.
    
    o 'featureNames' and 'sampleNames' S4 method for objects of class 'NMFSet'.
    
    o sub-setting S4 method '[' for objects of class 'NMF': row subsets are 
    applied to the rows of the basis matrix, column subsets are applied to 
    the columns of the mixture coefficient matrix.

CHANGES
	
    o method 'featureScore' has a new argument 'method' to allow choosing between 
	different scoring schema.
	
    o method 'extractFeatures' has two new arguments: 'method' allows choosing 
	between different scoring and selection methods; 'format' allows to specify 
	the output format.
	NOTE: the default output format has changed. The default result is now a 
	list whose elements are integer vectors (one per basis component) that 
	contain the indices of the basis-specific features. It is in practice what 
    one is usually interested in.  

BUG FIXES

    o Methods 'basis<-' and 'coef<-' were not exported by file NAMESPACE.
    
    o Method 'featureNames' was returning the column names of the mixture 
    coefficient matrix, instead of the row names of the basis matrix.
    
    o 'metaHeatmap' with argument 'class' set would throw an error.

NEWLY DEPRECATED CLASSES, METHODS, FUNCTIONS, DATA SETS

    o Deprecated Generics/Methods
       1) clusters - S4 generic/methods remain with .Deprecated message
