A topological data analysis library for Haskell.
The objective of the library is to provide users with the ability to deduce the topological features of metric spaces and graphs. If you have a function (a metric, for example) that takes two points in your data to an element of an ordered set, you can use Persistence to analyze the topology of your data.
Visit https://hackage.haskell.org/package/Persistence to see the documentation for the stable version. There is also documentation in each module.
Relevant files for development: Util.hs, Matrix.hs, SimplicialComplex.hs, HasseDiagram.hs, Persistence.hs, Testing.hs
Compile Testing.hs with
ghc --make Testing.hs -threaded -rtsopts and run with
./Testing +RTS -s -N<number of threads>
Learning about Topological Data Analysis
Computing simplicial homology:
Constructing the Vietoris-Rips complex:
Constructing the Cech complex:
Computing persistent homology:
The algorithm for finding the directed clique complex is inspired by the pseudocode in the supplementary materials of this paper:
Computing and working with persistence landscapes:
- Fix Gauss-Jordan elimnation over the integers.
Implement construction of the Cech complex (n points form an (n-1)-simplex if balls of a certain radius centered at each of the points intersect).
Implement construction of the alpha-complex (sub-complex of the Delaunay triangulation where the vertices of every simplex are within a certain distance).
Fix simplicial homology over the integers (this is almost certainly being caused by a malfunction of Gauss-Jordan elimnation in
Many of these are breaking API changes and so will be included in Persistence-2.0.
Implement persistence landscape functions.
Investigate the possibility of making persistent homology functions which identify the vertices where features occur.
Test the bottleneck distance.
Test the persistent homology function that returns barcodes in terms of scales.
Make some filtrations whose vertices don't all have index 0 and test persistent homology on them.
Update documentation for
Filtration.hsonce more changes have been finalized.
Revise the way modules are organized in the release.
A more consistent, well-motivated, and concise philosophy for parallelism needs to be implemented.
See each of the files for an overview of its inner-workings.