Overview: Simplicial Complexes

A simplicial complex S = (V, \Sigma) is a collection of simplices s \in \Sigma satisfying:

  1. Each v \in V is in S
  2. If \tau \subset \sigma and \sigma \in S, then \tau \in S

Mathematically, one can think of a simplicial complex as a natural generalization of a graph: indeed, the 1-skeleton of S is a graph, and thus any graph can also be represented by a simplicial complex (though the converse is not true!).

As an abstract data type, graph data structures are highly varied—common choices include incidence matrices, adjacency matrices, edge lists, adjacency lists, pointer-based representations, or even dictionary representations. It is often the case that choosing the ‘right’ data structure for a computational task depends on the intended use-case: (TODO: show usages). To make matters more complicated, this use-case often changes throughout the development cycle of a software project—for example, dictionary-based graph representations might be great for interactive construction and manipulation, but when it faced with a compute-heavy task (e.g. any linear algebra task), one must often switch to a matrix-representations before proceeding.

Towards interoperability

splex promotes a common, pythonic interface for interacting with simplicial complexes that is independent of their internal representation.

To simplify usage, this interface incorporates the use of generics (inspired from R) and Protocol classes (to support duck-typing and structural subtyping).

See the design philosophy (todo) for more details.

Data structures

Out-of-the-box, splex comes with three distinct data structures for representing simplicial complexes: as sets of simplices, as (structured) arrays of integers, and as integer-valued tries. See the complexes overview page for more details.