Skip to content
Topcat - a library for multiparameter persistence
Jupyter Notebook Java Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Topcat is Java library for computing and analyzing multiparameter persistence modules. It comes with a python interface and a jupyter notebook with examples of how to use it.

Input to Topcat can be given as either:

  • a list of distance matrices and a list of filtration values for each parameter
  • a multifiltered simplicial complex

The current implementation of Topcat has been inspired by Ulrich Bauers work on Ripser (, where he uses the following optimizations (among others):

  • computes the cohomology instead of homology,
  • uses the combinatorial number system to index simplices,
  • performs an implicit matrix reduction of the coboundary matrix .

We make heavy use of these techniques in Topcat to be able to handle millions of simplices.

A detailed description of the algorithms implemented in Topcat to compute the multiparameter persistence modules can be found in my master's thesis. A description of the theory of persistence contours, noise systems and the stable rank can be found in the following papers:

  • "Multidimensional Persistence and Noise" by Scolamiero et al. (arXiv:1505.06929)
  • "Stable Invariants for Multidimensional Persistence" by G and Chachólski (arXiv:1703.03632)

Future work:

  • Make use of the Chunk reduction described in the paper ''Chunk Reduction for Multi-Parameter Persistent Homology'' by Fugacci and Kerber (arXiv:1812.08580),
  • Implement multiparameter persistence landscapes as described in the paper ''Multiparameter Persistence Landscapes'' by Oliver Vipond (arXiv:1812.09935).


  • Maven 2/3
  • Java 7 or higher
  • Python 2.7/3 (optional)
  • py4j (optional)


In the project root folder, compile the java code with Maven using the following:

mvn clean install


The library can be accessed either within java or via the Python-interface.

You can’t perform that action at this time.