simplicial: Simplicial topology in Python

What is simplicial topology?

Topology is the study of shapes. It is separate from geometry in that it is interested in properties that are preserved under smooth transformations such as stretching, bending, and rotating – but not tearing. Classical point-set topology forms shapes using sets of points and functions between them. The theory is extremely elegant, but often not particularly tractable for computational use.

There are various forms of discrete or cellular topology that are more computation-friendly. Simplicial topology is a discrete topology based around collections of points, lines, triangles, tetrahedra, and their extensions to higher dimensions. It is probably the simplest topological machine there is that’s amenable to computation, since its built from combinatorial, rather than continuous, operations and functions.

You can use simplicial topology to model any number of things: approximations of curved surfaces, point-cloud data, the relationships between elements of a dataset, constraints on solutions to a problem, and so forth. Once you’ve modelled a problem in this way, you can use topological techniques to study it.

What is simplicial?

simplicial is a Python library for creating, manipulating, and exploring simplicial complexes. It aims to provide a useful set of features for programmers and mathematicians while remaining scalable to deal with large complexes. “Large” here means a few-thousands of points and simplices: simplicial isn’t suitable for dealing with large image datasets or extremely high-dimensional spaces, which require more advanced programming techniques.

Current features

  • Compatible with Python 3.7 (and later)

  • Represents finite closed simplicial complexes, with a lot of checking to ensure that that they stay legal as simplices are added and removed (a common source of errors)

  • Allows complexes to be embedded into spaces of arbitrary dimension to allow geometric as well as topological calculations to be performed

  • Computes derived structures such as flag complexes, Vietoris-Rips complexes, and the like

  • Performs homology computations, computes Euler characteristics, does Euler characteristic integration, and other interesting operations

  • Annotated with typing type annotations