1Version 5.0.5, May 17, 2021
2
3    * (26) performance bug fix:  reduce-to-vector where A is hypersparse CSR
4        with a transposed descriptor (or CSC with no transpose), and some cases
5        for GrB_mxm/mxv/vxm when computing C=A*B with A hypersparse CSC and B
6        bitmap/full (or A bitmap/full and B hypersparse CSR), the wrong
7        internal method was being selected via the auto-selection strategy,
8        resulting in a significant slowdown in some cases.
9
10Version 5.0.4, May 13, 2021
11
12    * @GrB MATLAB interface: changed license from Apache-2.0
13        to GNU GPLv3 or later.
14
15Version 5.0.3, May 12, 2021
16
17    * (25) bug fix: disabling ANY_PAIR semirings in Source/GB_control.h would
18        cause a segfault if those disabled semirings were used.
19    * demos: no longer built by default
20    * (24) bug fix: GB_PUBLIC added to the new functions in GraphBLAS.h
21    * GrB_Matrix_reduce_BinaryOp: reinstated from v4.0.3;
22        same limit on built-in ops that correspond to known monoids.
23    * Source/GB_control.h: more semirings disabled by default to reduce
24        compile time and binary library size.  The semirings still work, but
25        are not as fast since they now use the generic methods.
26
27Version 5.0.2, May 5, 2021
28
29    * GrB_Matrix_reduce_BinaryOp: removed.  Use a monoid instead, with
30        GrB_reduce or GrB_Matrix_reduce_Monoid.
31    * (23) bug fix: GrB_Matrix_apply_BinaryOp1st and 2nd were using the
32        wrong descriptors for GrB_INP0 and GrB_INP1. Caught by Erik Welch,
33        Anaconda.
34    * memory pool added for faster memory allocation
35    * calloc no longer used: using malloc+memset(0) instead
36    * realloc option: if not available, uses malloc+memcpy+free
37    * @GrB MATLAB interface ported to MATLAB R2021a.
38    * GxB_Matrix_diag: construct a diagonal matrix from a vector
39    * GxB_Vector_diag: extract a diagonal from a matrix
40    * concat/split: added methods to concatenate and split matrices
41    * import/export: size of arrays now in bytes, not entries.
42        A new parameter, is_uniform, has been added to all import/export
43        methods, which indicates that the matrix values are all the same.
44    * (22) bug fix: SIMD vectorization was missing reduction(+,task_cnvals)
45        in GB_dense_subassign_06d_template.c.  Caught by Jeff Huang, Texas A&M,
46        with his software package for race-condition detection.
47
48Version 4.0.3, Jan 19, 2021
49
50    * faster min/max monoids
51    * MATLAB: G=GrB(G) converts G from v3 object to v4
52
53Version 4.0.2, Jan 11, 2021
54
55    * added ability to load *.mat files saved with GraphBLAS v3.
56    * GrB_wait: added #pragma omp flush after any GrB_wait
57
58Version 4.0.1, Jan 4, 2021
59
60    * substantial performance gains: compared with v3.3.3: up to 5x faster in
61        BFS (with LAGraph_bfs_parent2), 2x faster in Betweeness-Centrality (in
62        LAgraph_bc_bactch5); BC now faster than GAP for kron, urand, and
63        twitter (the 3 largest matrices in the GAP benchmark).
64    * GrB_wait(), with no inputs: removed
65    * GrB_wait(&object): polymorphic function added
66    * GrB_*_nvals: no longer guarantees completion; use GrB_wait for that
67    * GrB_error: now has two parameters: a string (char **) and an object
68        The no-input GrB_error(void) method has been deprecated and removed.
69    * GrB_Matrix_reduce_BinaryOp: limited to certain built-in ops.
70        Support for user-defined operators and binary ops that do not
71        correspond to built-in monoids has been deprecated and removed.
72    * GrB_*_extractTuples: may return indices out of order
73    * removed internal features: GBI iterator, slice and hyperslice matrices
74    * bitmap/full matrices and vectors added: faster and lower memory usage
75        when many entries present in a matrix or vector
76    * GxB_SPARSITY_CONTROL, GxB_SPARSITY_STATUS added: for matrix get/set
77    * positional operators and semirings: GxB_FIRSTI_INT32 and related ops
78    * jumbled matrices: sort left pending, like zombies and pending tuples
79    * GxB_get/set: added GxB_SPARSITY_* (hyper, sparse, bitmap, or full)
80    * GxB_HYPER: enum renamed to GxB_HYPER_SWITCH
81    * GxB_BITMAP_SWITCH added: for matrix/vector get/set and global get/set
82    * GxB*import/export: API modified
83    * GxB_SelectOp: nrows and ncols removed from function signature
84    * OpenMP tasking removed from mergesort: just as fast; now ports to Windows
85    * GxB_BURBLE added: for diagnostic output
86    * (21) bug fix: A({lo,hi})=scalar in MATLAB; A(lo:hi)=scalar was OK
87
88Version 3.3.3, July 14, 2020
89
90    * (20) bug fix: w<mask>=A*u with mask non-empty and u empty (issue #13).
91        affects mxm (A*B when B is a vector), vxm, and mxv.
92
93Version 3.3.2, July 3, 2020
94
95    * minor changes to build system
96    * GraphBLAS v3.3.2 released as part of SuiteSparse v5.8.0
97
98Version 3.3.1, June 30, 2020
99
100    * (19) bug fix: incorrect typecasting when GrB_assign or GxB_subassign
101        is simple: C=A where A is sparse or dense, in GB_dense_subassign_24.
102        Bug introduced in v3.2.0.
103    * revised gbmake: to allow GraphBLAS to be compiled in Octave
104
105Version 3.3.0, June 26, 2020
106
107    * GrB_wait( ): with no input arguments, has been deprecated.  It will
108        be removed in V4.0.
109    * added complex types: GxB_FC32 and GxB_FC64, many unary operators,
110        binary operators, monoids, and semirings
111    * added GrB_*_apply_BinaryOp1st and 2nd: also GxB version with GxB_Scalar
112    * added bitwise operators: and their monoids and semirings
113    * added predefined GrB* monoids and semirings: from the v1.3 spec.
114    * MATLAB interface: added complex matrices and operators, bitwise
115        operators; improved performance
116    * changed typecasting rules: for casting floating point types to integers
117    * added GrB_*_wait: wait for specific object to complete
118    * added GrB_*_resize: same as prior GxB_*_resize functions
119    * added GrB_kronecker: same as prior GxB_kron
120    * added version methods: GrB_getVersion, GRB_VERSION, GRB_SUBVERSION
121    * added GrB_*_removeElement
122    * (18) bug fix: fixed typecasting in GB_dense_subassign_23, generic case
123    * (17) bug fix: non-polymorphic GrB_eWiseAdd and eWiseMult functions
124        were misnamed.
125
126Version 3.2.2, Apr 2, 2020
127
128    * (16) bug fix to MATLAB interface: for matrices with dimension > 2^53.
129        Note that MATLAB will not display the size correctly in 'whos', which
130        rounds the int64 values of m and n for [m,n]=size(A) of a GrB_matrix to
131        a 'flint', which is a double value, that then gets rounded.  This is
132        outside of my control.  size(A) is correct, just the 'whos' is wrong.
133    * port to Microsoft Visual Studio: including GraphBLAS/Demo and
134        GraphBLAS/Test, which had not been ported in v3.1.2.
135    * remove dependency on m4: end-users no longer need m4;  still needed by
136        the Source/codegen*.m scripts but those are for development only.
137
138Version 3.2.1, Mar 10, 2020
139
140    * GAP benchmarks in MATLAB: in GraphBLAS/GraphBLAS/GAP (all but CC).
141    * atomic read/write: faster atomics for icc (see Source/GB_atomics.h)
142    * install name for Mac: in alternative/Makefile and Tcov/Makefile
143    * enable -DGBCOMPACT from CMake: for faster Travis builds
144    * MATLAB interface: better error message in GrB.reduce
145    * MATLAB triangle count: added sorting heuristic in GrB.tricount.
146    * bug fix for GraphBLAS/Demo/simple_timer: better selection of which
147        timer to use; simple_timer.[ch] made consistent.
148    * no bug fixes needed in primary GraphBLAS library: just in Demo, test,
149        and alternative/Makefile.
150
151Version 3.2.0, Feb 20, 2020
152
153    * GxB_*_define for user-defined compile-time objects: removed.  Not
154        compatible with the faster kernels for mxm and dense matrices/vectors.
155        Use the GrB_*_new functions in the GraphBLAS C API Specification
156        instead.
157    * faster saxpy-based matrix multiply (about 5x to 10x for mxv and vxm):
158        removed Sauna workspace.  Heap method removed.  Hash method added.
159    * better performance for dense matrix and vectors: NOTE: see bug (19) above
160    * faster typecast of the mask matrix M: GB_mcast replaces cast_M
161    * added GB_BURBLE: for development diagnostics
162    * changed default chunk size: from 4K to 64K
163    * added the PAIR binary operator: f(x,y)=1
164    * added the ANY binary operator: f(x,y)=x, or f(x,y)=y ; arbitrary choice
165    * added structural mask: from v1.3 C API Specification
166    * added GrB_DESC_*: predefined descriptor, from v1.3 C API Specification
167    * many atomics added: for the faster matrix multiply.  These changes have
168        not been ported to Microsoft Visual Studio, which only supports a
169        subset of "#pragma omp atomic" statements.  This will be resolved in a
170        future version; in the meantime, use v3.1.2 with MS Visual Studio
171        instead of v3.2.0.
172    * no bug fixes
173
174Version 3.1.2, Dec 16, 2019
175
176    * (15) bug fix in parallel matrix-matrix multiply: could occur when # of
177        threads is larger than the # of columns of B, for C=A*B, and when
178        B is a standard matrix with one or more empty vectors.
179    * (14) bug fix for MATLAB interface: A(58) and A(:) were conflated.
180    * compiler port: changes to allow GraphBLAS to be compiled with older
181        compilers (pre ANSI C11), and Microsoft Visual Studio.
182
183Version 3.1.1, Oct 21, 2019
184
185    * minor edits: user guide and comments in code
186
187Version 3.1.0, Oct 2, 2019
188
189    * added MATLAB interface: GraphBLAS/GraphBLAS is new.  In Source/, added
190        global pointer to printf for MATLAB mexPrintf, pointer to
191        mexMakeMemoryPersistent for Sauna workspace.  Changed how GraphBLAS
192        objects are printed with GxB_print.  Changed how duplicate indices are
193        handled in assign and extract, to match the MATLAB stadard.  Added
194        helper functions for MATLAB (GB_matlab_helper.[ch]).
195        Code size: @GrB is 9.7KLOC, test/ is 4.5KLOC).
196    * bug counter added to this ChangeLog: to count # of bugs that appeared
197        in formal releases that affect production code.  The count excludes
198        bug fixes for test code, bugs in the demo codes, bugs introduced
199        in beta versions that were fixed before any formal release, and
200        bugs prior to version 1.0.  Code size of Source/, Include/ excluding
201        Source/Generated, and Config/*.m4, is 42,659 lines (not including the
202        new MATLAB interface).  13 bugs / 42K lines is a bug rate of 0.3 bugs
203        per KLOC, much lower than most commercial software, but higher than
204        UMFPACK, CHOLMOD, etc (with about 0.1 bug per KLOC).  GraphBLAS is a
205        much more complex library, from the external view, than solving Ax=b.
206        If UMFPACK has a bug, then Ax-b is typically large; there is no
207        'residual' to check for GraphBLAS.  Also, in GraphBLAS, the test suite
208        has about the same size as the main library (32K lines in Test/ and
209        Tcov/).  For UMFPACK, etc, the test suite is always about 1/3 the size
210        of the library itself.
211    * 'make dox': for doxygen removed (not really that useful)
212    * (13) bug fix to GB_reduce_to_vector: to avoid integer divide-by-zero for
213        a matrix with n=0 columns.
214    * (12) bug fix to GB_accum_mask: when C+=T if C has no entries except
215        pending tuples
216    * (11) bug fix to GB_resize: when pending tuples exist and vdim is growing
217        from vdim <= 1 to vdim > 1, matrix must be finished first.
218    * (10) bug fix to GB_subref_phase1: "int nI" parameter should be int64_t.
219
220Version 3.0.1, July 26, 2019
221
222    * version number: Three changes to the user-visible API are not
223        backward-compatible with V2.x: the added parameters to GxB_init and
224        GxB_SelectOp_new, and the change in the type of the Thunk argument for
225        GxB_select.  Thus, the SO version of SuiteSparse:GraphBLAS is now 3, no
226        longer 2.  This change only affects SuiteSparse:GraphBLAS GxB_*
227        extenstions, not any GrB_* functions or definitions.
228    * added GxB_Scalar: acts like a GrB_Vector of length 1.
229    * OpenMP parallelism: added nthreads and chunk parameters to GxB_set/get.
230    * added parameter to GxB_init: bool user_malloc_is_thread_safe,
231        for the MATLAB mexFunction interface, or any other malloc library that
232        might not be thread-safe.  mxMalloc is not thread-safe.
233        This change is not backward compatible with Version 2.x.
234    * changed thunk parameter of GxB_select:  was (void *), now GxB_Scalar.
235        This change is not backward compatible with Version 2.x.
236    * added parameter to GxB_SelectOp_new: to specify the type of the Thunk.
237        This change is not backward compatible with Version 2.x.
238    * added options to GxB_get: determine if a matrix is hypersparse or not,
239        global library, API information, nthreads, and chunk.
240    * added options to GxB_set: nthreads, and chunk.
241    * new operators and semirings: RDIV (f(x,y)=y/x) and RMINUS (y-x)
242        binary operators.
243
244Version 2.3.5, Oct 20, 2019
245
246    * minor update: fix for tests in MATLAB R2019b
247
248Version 2.3.4, July 4, 2019
249
250    * Collected Algorithm of the ACM
251    * (9) minor bug fix to GrB_*_extractTuples: nvals was left unchanged
252        if the matrix or vector had no entries (now returned as zero).
253
254Version 2.3.3, May 27, 2019
255
256    * minor changes to the documentation: no change to the code
257
258Version 2.3.2, Mar 18, 2019
259
260    * GxB_Matrix_Option_set: removed spurious check of input matrix
261
262Version 2.3.1, Mar 9, 2019
263
264    * _Generic:  further modifications for 'int' vs 'const int', needed for
265        icc 19.0.0.
266    * (8) bug fix in user_def1.m4: compile-time GxB_Semring_define with
267        terminal monoids
268
269Version 2.3.0, Feb 25, 2019
270
271    * early exit: for integer TIMES monoids (terminal value is 0);
272        cannot use zero for floating-point, to preserve NaN behavior
273    * GrB_assign / GxB_subassign: further exploit of aliased inputs
274    * Test/: MATLAB mexFunctions now link against the dynamic -lgraphblas
275    * bug fix for Demo/mis*: random number generator could create
276        duplicate scores, which leads to a stall
277    * terminal values for user monoids: added GxB_Monoid_terminal_new,
278        GxB_Monoid_terminal_define, and GxB_Monoid_terminal
279    * added GxB_init: GrB_init with malloc/calloc/realloc/free redefinition
280    * _Generic: compilers differ on _Generic(x,int:,const int:). gcc, clang,
281        icc 18.0.0 treat int and const int the same; icc 18.0.3 treats them
282        as different.  This is a result of an ambiguity in the ANSI C11
283        specification.  Minor update so that the use of _Generic(...) is
284        compatible with all compilers.
285    * early exit: for GrB_reduce
286
287Version 2.3.0 (BETA1), Feb 16, 2019
288
289    * simplified GBI_*_iterators
290    * towards OpenMP: PARALLEL comments added to most files (all upper case)
291        where parallelism will be added in the future.
292    * early exit: for monoids: MIN, MAX, AND, OR, based on terminal values
293    * Demo/bfs*: much faster (prior versions had performance bug)
294    * GrB_assign for accum/mask step: faster, zombies and pending tuples
295        exploited by C<M>=accum(C,T) for any GraphBLAS method, when either the
296        mask M or accum are present.
297    * moved persistent thread-workspace from the matrix to a global array
298    * added isequal function to Demos/
299    * added import/export method
300    * added nthreads: to descriptor, the matrix, and a global nthreads
301        setting, and added Context as parameter in many internal
302        functions, to pass in Context->nthreads for future parallelism
303    * defined all enum constants explicitly: no change to their values,
304        this just ensures they remain fixed in future versions
305
306Version 2.2.3, Dec 30, 2018
307
308    * added doxygen documentation: minor changes to the code
309        comments to accomodate doxygen.  Added Doxyfile settings file.
310
311Version 2.2.2, Dec 18, 2018
312
313    * GxB_print: better output for compile-time user objects
314    * (7) bug fix: for GxB_Type_define, for GrB_*_build.
315    * (6) bug fix: for GxB_Semiring_define, which was unable to access
316        the predefined GxB_*_BOOL_MONOIDs.
317
318Version 2.2.0, Nov 29, 2018
319
320    * identical to 2.2.0 (BETA4): date changed, and "BETA4" removed.
321        Demo/choldemo removed (testing artifact, not needed).
322
323Version 2.2.0 (BETA4), Nov 28, 2018
324
325    * minor change to GxB_get, GxB_set (all functions using va_arg):
326        const removed from parameter definitions to silence spurious warnings
327        from clang version 10.0.0, Mac OSX 10.14.
328    * added Doc/CONTRIBUTOR-LICENSE.txt
329    * added Doc/README_Doc.txt: includes instructions for OpenMP on the Mac
330    * minor changes to comments of GB_subref_template: to match the ACM TOMS
331        paper discussion of GrB_extract
332    * included the GraphBLAS Extras: triangle counting, k-truss, and
333        Kronecker matrix generator
334    * minor changes for gcc -Wall -Wpedantic -Wextra, and icc -w3: to fix or
335        silence warnings.  In a few cases, prior versions were relying on
336        extensions to the ANSI C11 standard in gcc, clang, xlc.  The extensions
337        are widely supported but best avoided anway.
338
339Version 2.2.0 (BETA3), Nov 23, 2018
340
341    * removed persistent thread-local O(n) workspace:  the Mark,
342        Flag, and Work arrays in GB_thread_local in prior versions are removed.
343        Replaced with temporary workspace, except for C=A*B using Gustavson's
344        method, which now uses the C->Sauna workspace, held in the output
345        matrix.
346    * better support for user-application threads: GrB_finalize is now fully
347        compliant with the spec.  User applications can use POSIX or OpenMP
348        threads, or no threading, and use GraphBLAS in a thread-safe manner.
349        Added OpenMP and POSIX pthread demos.
350    * bug fix: freeing an object (monoid, matrix, or vector) that is
351        dependent on another user-defined objects (an operator or type) that
352        has already been freed led to the reading of an invalid value: the size
353        of the object.  This only affects the memory usage statistics for
354        testing only, not production use.
355    * beta bug fix: memory leak in pagerank_demo program (bug first appears in
356        2.2.0BETA2, not in any non-BETA final release
357
358Version 2.2.0 (BETA2), Nov 15, 2018
359
360    * added additional pagerank example in Demo/
361    * beta bug fix: GxB_Monoid_define: bug fix for C struct types.  bug first
362        appears in Version 2.2.0 (BETA1), not in any non-BETA final release.
363
364Version 2.2.0 (BETA1), Nov 2, 2018
365
366    * added GxB_*_define: to create user-defined objects at compile-time.
367        All internal macros renamed to add the GB_ prefix, to help avoid
368        name conflict with possible user-defined objects and macros.
369    * changed default format to GxB_BY_ROW
370    * performance improvements to GrB*assign* and GrB*extract
371    * added PageRank demos
372    * added GxB_*print: to display all GraphBLAS objects
373
374Version 2.1.0, Oct 14, 2018
375
376    * identical to V2.1.0 BETA2: except for a minor update to the user guide,
377        and date of release
378
379Version 2.1.0 (BETA2), Sept 17, 2018
380
381    * user function z=f(x,y): passed to GrB_BinaryOp_new, may now be called as
382        z=f(z,y), with x and z aliased.  This is permitted by the API
383        specification, and greatly improves performance of user-defined
384        semirings.
385
386Version 2.1.0 (BETA1), Sept 11, 2018
387
388    * major update: added hypersparse and CSR formats, colon notation, and
389        user selection of the method used by C=A*B.  All changes to the API are
390        backward compatible with Version 2.0, so the SO version does not
391        increase (it is still 2.x).
392    * added GxB_AxB_METHOD: for user selection of C=A*B method
393    * added GxB_RANGE, GxB_STRIDE and GxB_BACKWARDS: for MATLAB-like colon
394        notation: begin:end and begin:inc:end.
395    * added GxB_*Option* functions: to control hypersparsity and CSR/CSC format
396    * added GxB_set and GxB_set: to set/get the descriptor and other options
397    * (5) bug fix: if the accum operator z=f(x,y) was user-defined with
398        different built-in types for x, y, z, the typecasting was wrong
399    * GXB_* macros renamed GxB_*: old ones kept for backward compatibility
400
401Version 2.0.3: July 4, 2018
402
403    * (4) bug fix to GxB_resize
404    * improvements to CMake script: version now defined only in CMakeLists.txt,
405        and then cmake configures Include/GraphBLAS.h, README, and User Guide
406    * bfs5 demo: asymptotically faster using sparse vector v but somewhat
407        slower if entire graph is traversed
408
409Version 2.0.2: June 25, 2018
410
411    * added -lm to library dependency
412    * minor changes to demos and user guide
413    * removed unused code from Generated/* semiring functions
414
415Version 2.0.1: Mar 15, 2018
416
417    * (3) bug fix in GxB_kron: computed C incorrectly when A and B had pending
418        updates on input
419
420Version 2.0.0: Mar 12, 2018
421
422    * moved opaque object definitions from Include/GraphBLAS.h to Source/GB.h
423    * modifications to meet changes in the Nov 14, 2017, API specification:
424        GrB_Monoid_TYPE_new changed to GrB_Monoid_new_TYPE.
425        GrB_Type_new modified: 2nd argument no longer a type, but sizeof(type).
426        This change is not backward compatible with Version 1.x, so this
427        required an increase in the SO version, so the version number increased
428        from 1.x to 2.x.
429    * to allow non-C applications to access all GraphBLAS functions:
430        These were just macros, now defined as both macros and functions:
431        GrB_Type_new, GrB_UnaryOp_new, GrB_BinaryOp_new, and GxB_SelectOp_new.
432    * added GxB_kron, GxB_resize (GxB_Matrix_resize and GxB_Vector_resize)
433    * (2) bug fix to mask:  GrB_anymethod (C, C, ... , r_desc) where r_desc.outp
434        is 'replace', and C is aliased to the Mask, was incorrect.
435
436Version 1.1.2: Dec 28, 2017
437
438    * build issues with cmake
439    * performance improvement of dot product method, C=A'*B and v=u'*A,
440        particularly when A, B and u have dense columns, or nearly dense
441        columns.
442
443Version 1.1.1: Dec 17, 2017
444
445    * (1) bug fix to GrB_assign and GxB_subassign: result was incorrect when
446        output C was the same as the input A or Mask.
447    * performance improvement in C<M>=A*B and GrB_reduce to scalar
448    * split AxB built-in semirings into Source/Generated/* for
449        faster compilation
450    * added memory usage statistics
451
452Version 1.1.0: Dec 1, 2017
453
454    * add new feature: GxB_SelectOp operator and GxB_select operation
455    * to clarify which features of SuiteSparse:GraphBLAS are extensions to
456        the spec, the names of functions and objects not in the spec have
457        changed.  They are now GxB_* (GXB_ for macros).
458    * modified how the global matrix queue is accessed, for thread safety
459        in case the user application is multi-threaded
460
461Version 1.0.0: Nov 25, 2017
462
463    * transition to CMake
464    * tested on many compilers (gcc 4.9 to 7.2 on Linux, clang 8 and gcc 6.2.0
465        on the Mac, xlc 13.01 on IBM Power)
466    * changed printf formats in Demo/ to silence warnings from older compilers
467    * complex.h in gcc-6.2.0 on the Mac doesn't #define CMPLX;
468        added to usercomplex.h
469    * mergesort removed, quicksort performance improved
470    * performance improvement for masked matrix-matrix multiply
471    * bug fix for masked matrix-matrix multiply. In 0.5.0 only the Mask
472        structure was used, not the values.  The spec requires the values of
473        the Mask.  This is a bug but into only affects masked matrix multiply
474        when the Mask has explicit zero entries.
475
476Version 0.5.0: Nov 13, 2017
477
478    * resolved icc -O3 segfault: Intel compiler bug fixed icc version 18.0
479    * added triangle-counting demo in C (Demo/tricount.c) and MATLAB
480        (Test/tricount.m).  See also Test/test69, Test/test70. and Test/test71.
481    * performance enhancements to GrB_eWiseMult, GrB_assign, GrB_subassign,
482        GrB_extract, and GrB_mxm, reducing time and memory.  mxm now exploits
483        the mask during computation, to save memory and often saving time.
484        This is essential for good performance for triangle counting.
485    * reduced Test/testall.m and Tcov/testcov.m testing time from 2 hours to
486        15 minutes, maintained 100% test coverage
487
488Version 0.4.0: Oct 24, 2017
489
490    * SPEC: SuiteSparse:GraphBLAS 0.4.0 fully conforms to 1.1.0 of the spec
491    * GrB_assign functions added; all now conform to the 1.1.0 spec
492    * renamed all prior GrB_*_assign functions to GrB_*_subassign
493
494Version 0.3.0: Oct 14, 2017
495
496    * changes for spec 1.1.0
497    * performance improvement of GrB_mxm, GrB_mxv, transpose, GrB_reduce;
498        added workspace kept internally, reused for subsequent calls to
499        GraphBLAS
500    * performance improvement of bfs in Demo (v held as dense vector)
501    * performance improvement of GrB_assign when A is a scalar
502    * performance improvement of C<M>= ... mask operation
503    * GrB_Column_extract and GrB_Column_assign renamed GrB_Col_*
504        to match changes in the spec
505    * changed GrB_*_setElement and GrB_*_extractTuples to match the spec
506    * added GrB_INSUFFICIENT_SPACE error code for GrB_*_extractTuples
507    * added GrB_INVALID_HANDLE
508    * GrB_assign still does not match the spec (in progress).
509        It differs on how it treats entries outside C(I,J), and it differs
510        in the size and interpretation of the Mask.
511
512Version 0.2.0: Sept 5, 2017
513
514    * No significant change to the code; but preparing for wider release
515    * content of GrB_stddef.h moved into Include/GraphBLAS.h and file removed
516    * User Guide updated (SPEC discussion)
517    * GraphBLAS.h modified (SPEC discussions)
518    * Licensed under Apache 2.0; versions 0.1.x were limited releases
519    * removed wathen_mod.m (to see it do 'type private/wathen' in MATLAB)
520
521Version 0.1.2: Aug 30, 2017
522
523    * added (double) to fpclassify in CAST macro, to silence
524        spurious errors in gcc
525    * minor typos
526    * icc -O3 causes a segfault when compiling GB_AxB_builtin.c, so
527        Lib/GraphBLAS_config.mk now uses -O2 with icc.
528    * some versions of gcc have trouble finding libgraphblas.so.0
529        when compiling the Demo (if GraphBLAS is not installed with
530        'make install').  Instead of requiring a 'make install'
531        static linking is now used for the Demo programs.  This
532        has no effect on the GraphBLAS library itself.
533    * changes for GraphBLAS spec 1.0.2 (Aug 10, 2017 version):
534        * GrB_Vector_reduce_Monoid renamed to GrB_Matrix_reduce_Monoid
535        * GrB_Vector_reduce_BinaryOp renamed to GrB_Matrix_reduce_BinaryOp
536        * GrB_Row_extract was renamed in the spec to GrB_Col_extract, but
537            this version keeps the name GrB_Column_extract since it parallels
538            the name GrB_Column_assign.
539
540Version 0.1.1: Aug 28, 2017
541
542    * minor changes to Makefiles and GraphBLAS_config.mk
543    * port to Linux with gcc 4.9.3, 5.40, and 6.3.0
544    * minor code changes to silence spurious gcc warnings;
545        (&Ax[i]) changed to (Ax +(i)).
546    * bug fix to GB_assign1.c (apply_pending_updates variable)
547
548Version 0.1.0: July 31, 2017
549
550    * first version released; only to GraphBLAS API Committee
551
552