Package: lophat
LoPHATLockfreePersistentHomologyAlgorithmToolboxTry in:Your Browser•Google ColabOverviewLoPHAT is a Rust library implementing the lockfree algorithm for computing persistent homology (PH), introduced in[1].
Python bindings are provided via PyO3, with an interface familiar to those who have used PHAT[2].The primary goal of this library is to make the algorithm accessible to those wishing to compute PH ofarbitrary filtered chain complexes.
In particular, LoPHAT isnotspecialised to compute PH of common filtrations or even filtered simplicial complexes.
As such, you should expect LoPHAT to under-perform as compared togiotto-ph [3]oroineus  [4], both of which use the algorithm of[1].The only changes from the algorithm described in[1]are:We use thepinboardlibrary for epoch-based memory management of the matrices.We store the $j^{th}$ column of $R$ and $V$ alongside each other in memory, allowing a full $R=DV$ decomposition (rather than just computing pairings).We additionally employ the clearing optimisation[5]and provide methods for anti-transpotion (so as to compute persistent cohomology).We distribute chunks via work-stealing, using therayonlibrary.WarningLoPHAT is currently in beta.
The implementation is not optimised, the API is not fixed and tests are limited.Usage in RustInstall withcargoaddlophatFor usage, please consultthe Rust docs.Usage in PythonThe Python bindings can be installed viapipinstalllophatIf this fails, it is probablypiptrying to install from source without acargotoolchain present.
To force installing from binary runpipinstall--only-binarylophatlophatThis provides you with one function,compute_pairings, which returns the diagram as a set of paired columns and a set of unpaired columns.
By default, this uses all available threads and the lockfree algorithm of[1].
To use serial algorithm or limit number of threads, additionally provide aLoPhatOptionsobject.For more details, please consultthe Python docs.
For example usage, see the fileexample.pyorthis Google colab notebook.TODOChange options struct for each algorithmDecide on new Python bindingsIncrease property testingWrite unit testsWrite integration tests (testing V)BenchmarkAbstract out matrix trait?Reduce memory usage when V not maintainedReferences[1]Morozov, Dmitriy, and Arnur Nigmetov.
"Towards lockfree persistent homology."
Proceedings of the 32nd ACM Symposium on Parallelism in Algorithms and Architectures. 2020.[2]Bauer, Ulrich, et al.
"Phat–persistent homology algorithms toolbox." Journal of symbolic computation 78 (2017): 76-90.Bitbucket[3]Pérez, Julián Burella, et al.
"giotto-ph: A python library for high-performance computation of persistent homology of Vietoris-Rips filtrations."
arXiv preprintarXiv:2107.05412(2021).GitHub[4]Nigmetov, Arnur, Morozov, Dmitriy, and USDOE.
Oineus v1.0. Computer software.https://www.osti.gov//servlets/purl/1774764. USDOE. 1 Apr. 2021.
Web.doi:10.11578/dc.20210407.1.GitHub[5]Bauer, Ulrich, Michael Kerber, and Jan Reininghaus.
"Clear and compress: Computing persistent homology in chunks."
Topological Methods in Data Analysis and Visualization III: Theory, Algorithms, and Applications.
Springer International Publishing, 2014.