Dec 12, 2006, v2.0.7

    * minor MATLAB cleanup

Dec 6, 2006, v2.0.6

    * Update to UFget.  Now relies on the MATLAB urlwrite function instead of
	my own Java code.

Nov 2006, v2.0.5

    * Added UFgrep to UFget toolbox.

    * No changes to C Source code, except for version number and date.

    * Added two test matrices: ibm32a and ibm32b.  ibm32ais the Harwell/
	Boeing matrix ibm32, but with the last column removed.  ibm32b
	is the transpose of ibm32a.  With optimization enabled (-O),
	2 lines in cs_maxtrans.c are not tested; these matrices correct
	that problem.

    * Fixed UFget.  Earlier version could not download matrices larger than
	32MB.

    * Modified UFget/UFweb, to reflect changes in the UF Sparse Matrix
	Collection.

    * Added ccspy.m and cs_scc2.m MATLAB functions

    * Added examples to help info in each *.m MATLAB file

    * modified cs_dmspy to speed up the plotting of large matrices with many	
	singletons

    * minor change to cspy: now draws a box around the matrix.

    * minor changes to MATLAB demos and tests.

Oct 13, 2006, v2.0.4

    * minor modification to cs_updown.c.  "n" was incorrectly declared "double".
	It should be "int".  This was safe, just a little confusing (n was only
	used in an argument to cs_malloc, and is thus typecast).

Sept 28, 2006, v2.0.3

    * minor modifications to MATLAB interface, to allow CSparse to be used
	in MATLAB 6.5.

    * added examples to m-files, other minor m-file cleanup.

    * bug fix to cspy, to handle NaN's properly.

Aug 23, 2006: v2.0.2

    * change to cs_updown mexFunction, to handle multiple rank updates

    * symbolic links removed from Tcov/ directory in the distribution.
	They are now created by Tcov/Makefile as needed.  This makes the
	zip files cleaner.  Tcov/*test.c test files renamed.

July 19, 2006:

    * minor fix to cs_must_compile.m and cs_make.m, to allow CSparse to be
	compiled in MATLAB 6.5 with cs_make.

    * minor fix to cspy for complex matrices (imaginary part was ignored).

    * no change to version number or date, since there are no changes that
	affect the appearance of CSparse in the book ("Direct Methods for
	Sparse Linear Systems", SIAM, 2006).

June 24, 2006:

    * minor typos in comments corrected.  No change in code itself,
	and no change in version number or date.

May 27, 2006, v2.0.1:

    * minor bug fix.  cs_util.c modified, so that cs_sprealloc (T,0) works
	properly for a triplet matrix T (setting T->nzmax equal to T->nz).
	The line in v2.0.0:

	    nzmax = (nzmax <= 0) ? (A->p [A->n]) : nzmax ;

	changes to the following in v2.0.1:

	    if (nzmax <= 0) nzmax = (CS_CSC (A)) ? (A->p [A->n]) : A->nz ;

    * minor typographical changes arising from the editting of the book.

Apr 12, 2006, v2.0.0:

    * random permutation option added to cs_maxtrans and cs_dmperm, to help
	avoid rare cases where the O(|A|n) time complexity is reached in
	practice (GHS_indef/boyd2 in the UF sparse matrix collection, for
	example).  New cs_randperm function added.

Apr 10, 2006:

    * stylistic changes for the book (except for the bug fix):

    * "int order" parameter of cs_amd, cs_lusol, cs_cholsol, cs_qrsol, cs_sqr,
	cs_schol changed.  Now 0 means no ordering, 1 is A+A', 2 is S*S', and
	3 is A*A'.  In v1.2 and earlier, "order" took on a value ranging from
	-1 to 2.  "int n" parameter rearranged for cs_ipvec, cs_pvec, cs_post
	(int n moved to the end).  cs_triplet renamed cs_compress.

	To ensure that these changes are propagated into user code that calls
	CSparse, the "order" parameter has been placed as the first parameter
	in all these routines.  Your compiler will complain (gcc will halt) if
	you upgrade from v1.2 to v2.0 without changing your code.  This is much
	better than a silent error in which you get the wrong ordering by
	mistake (with a huge penalty in run-time performance and no compiler
	warnings).

	New syntax (v2.0 and later):
	----------------------------

	    order = 0: natural ordering
	    order = 1: amd (A+A')
	    order = 2: amd (S'*S), where S=A except dense rows dropped
	    order = 3: amd (A'*A)

	    int cs_cholsol (int order, const cs *A, double *b) ;
	    int cs_lusol (int order, const cs *A, double *b, double tol) ;
	    int cs_qrsol (int order, const cs *A, double *b) ;
	    int *cs_amd (int order, const cs *A) ;
	    css *cs_schol (int order, const cs *A) ;
	    css *cs_sqr (int order, const cs *A, int qr) ;

	    int *cs_post (const int *parent, int n) ;
	    int cs_ipvec (const int *p, const double *b, double *x, int n) ;
	    int cs_pvec (const int *p, const double *b, double *x, int n) ;

	    cs *cs_compress (const cs *T) ;

	Old syntax (v1.2 and earlier):
	------------------------------

	    order = -1: natural ordering
	    order = 0: amd (A+A')
	    order = 1: amd (S'*S), where S=A except dense rows dropped
	    order = 2: amd (A'*A)

	    int cs_cholsol (const cs *A, double *b, int order) ;
	    int cs_lusol (const cs *A, double *b, int order, double tol) ;
	    int cs_qrsol (const cs *A, double *b, int order) ;
	    int *cs_amd (const cs *A, int order) ;
	    css *cs_schol (const cs *A, int order) ;
	    css *cs_sqr (const cs *A, int order, int qr) ;

	    int *cs_post (int n, const int *parent) ;
	    int cs_ipvec (int n, const int *p, const double *b, double *x) ;
	    int cs_pvec (int n, const int *p, const double *b, double *x) ;

	    cs *cs_triplet (const cs *T) ;

    * CS_OVERFLOW macro removed (removed from cs_malloc.c; not needed).

    * S->leftmost added to css (it was tacked onto S->pinv before).

    * P,Q,R,S components of csd struct changed to p,q,r,s.

    * Pinv and Q components of css struct changed to pinv and q.

    * CS_CSC and CS_TRIPLET macros added, to clarify which CSparse functions
	accept cs matrices in compressed column form, triplet form, or both.

    * check for negative row/column indices added to cs_entry.

    * cs_ereach and cs_leaf functions added.

    * call to cs_sprealloc added to cs_fkeep.

    * bug fixes in cs_counts and cs_amd (memory leak under rare out-of-memory
	conditions).

Mar 15, 2006:

    * cs_scc modified so that the row and columns of each component are put in
	their natural order.  cs_dmperm modified so that columns of each block
	(instead of rows) are placed in their natural order.

    * cs_splsolve renamed cs_spsolve, generalized to handle both Lx=b and
	Ux=b, and non-unit diagonal, and placed in its own file (cs_spsolve.c;
	it was a static function in cs_lu.c).  cs_lsolve_mex.c and
	cs_splsolve_mex.c merged (the latter was removed).  cs_spsolve.c file
	added

    * cs_dmspy changed, so that block borders line up better with the matrix.

Mar 6, 2006:

    * Makefile modified so that the Tcov tests (which may not be portable)
	are not compiled and run by the default "make" in the CSparse directory.
	To compile everything, including the Tcov tests, use "make all".
	Trivial change to cs.h.

Feb 27, 2006:

    * cs_reach, cs_dfs, cs_splsolve, cs_lu, and cs_scc changed to remove O(n)
	initialized workspace.
    * cs_reach and cs_splsolve now user-callable (were static in cs_lu.c).

Feb 20, 2006:

    * various changes to simplify the construction of CXSparse

Feb 7, 2006:

    * changed prototypes, adding "const" where appropriate.

