# Persistence
A topological data analysis library for Haskell.

This library is motivated by flexibility when it comes to the type of data being analyzed. If your data comes with a meaningful binary function into into an ordered set, you can use Persistence to analyze your data. The library also provides functions for analyzing directed\/undirected, weighted\/unweighted graphs.

Visit https://hackage.haskell.org/package/Persistence to see the documentation for the stable version. There is also documentation in each module.

GitHub: https://github.com/Ebanflo42/Persistence

If you have the Haskell `stack` tool installed, compile and run tests with `stack test` (you may have to expose the modules `Util` and `Matrix` in the file `Persistence.cabal` to get it to work).

# Learning about Topological Data Analysis

Computing simplicial homology:

https://jeremykun.com/2013/04/10/computing-homology/

Constructing the Vietoris-Rips complex:

https://pdfs.semanticscholar.org/e503/c24dcc7a8110a001ae653913ccd064c1044b.pdf

Constructing the Cech complex:

https://www.academia.edu/15228439/Efficient_construction_of_the_%C4%8Cech_complex

Computing persistent homology:

http://geometry.stanford.edu/papers/zc-cph-05/zc-cph-05.pdf

The algorithm for finding the directed clique complex is inspired by the pseudocode in the supplementary materials of this paper:

https://www.frontiersin.org/articles/10.3389/fncom.2017.00048/full

Computing and working with persistence landscapes:

https://academic.csuohio.edu/bubenik_p/papers/persistenceLandscapes.pdf

# Major TODOs:

`Testing.hs`:

1) More tests for Persistence landscape functions.

2) Make some filtrations whose vertices don't all have index 0 and test persistent homology on them.

`SimplicialComplex.hs`:

1) Fix simplicial homology over the integers.

2) 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).

3) Implement construction of the alpha-complex (sub-complex of the Delaunay triangulation where the vertices of every simplex are within a certain distance).

General:

1) Update documentation for `Filtration.hs` once more changes have been finalized.

2) 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.