NormalForms.jl is a package which provides the Smith and Hermite normal forms, integer matrix decompositions that are useful in my domain (chemistry - I developed it as a dependency of Electrum.jl because the Smith normal form is required for building a crystal supercells). This package combines the functionality of HermiteNormalForm.jl (which much of the code was based on) and SmithNormalForm.jl into a single package which integrates with the
LinearAlgebra.Factorization type and supports types provided by
StaticArrays. Internally, I’ve also organized a lot of the code for clarity, in the hopes that others who want to understand the algorithm can do so easily (and for simplifying debugging!).
I am a chemist, and I don’t have a strong background in linear algebra, so I’m probably not the best person to maintain the package. I’d love someone with a bit more knowledge on that front to join in and assist with maintenance. Building this package has been a fun journey, but since others are starting to depend on it, I’d like to ensure others don’t have to deal with too many outstanding issues.