Sheafhom 2.0
Sheafhom 2.0 is a freeware package for large sparse linear algebra
computations over the integers and other exact number types. It
provides efficient algorithms for the Smith normal form of sparse
matrices, and dense algorithms for LLL and Hermite normal form.
Graphs and windows are provided to show the progress of the
computation in real time, which helps in tuning the algorithms for
specific applications. The package is motivated by algebraic
topology, and provides partial support for items from category theory
as firstclass objects: vector spaces, morphisms of vector spaces, and
cochain complexes.
Download
Download the Java source code and documentation.
Download shh.jar
, which contains the runtime Java classes.
Here are three ways to learn more about the package.

Download
shh.jar
and run the
demo with
java jar shh.jar
On Windows and some other operating systems, you can simply
doubleclick on the shh.jar
icon.
 By default,
the demo sets up a 1000 × 2000 matrix in which
only 0.3% of the entries are nonzero. About half the nonzeros
are 1; the other half are 2. These defaults can be changed
with the GUI that's provided.
 The demo computes the
Smith normal form (the elementary divisors) of the matrix, with
a window showing how the sparsity changes in real time. The
top bar gives the pivot location, the sparsity (percentage of nonzeros),
and the percentage of nonzeros represented by the arbitraryprecision
integer data type.
 The biggest time constraint is not the computation, but
painting the window. If you minimize (hide) the window, the
computation will go much faster. If you close (kill) the
window, the whole process stops.

Open the documentation at
doc/index.html
in a browser.
Start with the articles on CSparse, MPDQ, and ExactCategoryMorphism.

If you prefer to read source code, start with the
main
methods in the following files.

csparse/Test1.java
runs a barebones Smith normal form computation
on a small matrix.

util/Demo.java
runs Smith normal form on a large matrix.

csparse/DenseMatrixZ.java
illustrates LLL.

csparse/TestHNF.java
illustrates Hermite normal form.

homolalg/QvspMorphism.java
works with
objects and arrows in
the category of vector spaces over Q.