Most of the software that I have written can be found on Github. Some older projects can also be found on BitBucket. Here is some additional information about some of my larger projects.


Twister is a program by myself, Tracy Hall and Saul Schleimer for constructing triangulations of surface bundles and Heegaard splittings from a description of a mapping class of a surface. These mapping classes are given as a composition of Dehn twists on annuli and half twists on pairs of pants. Twister is included in SnapPy 1.3.10+ and this is how we recommend you use it. Alternatively, you can download Twister’s source code, which you can compile as a Python 2 module, Python 3 module or standalone program and whose documentation now includes a users guide. Twister is freely available under the GNU general public license.

I like to use Twister to build censuses of surface bundles, for example knot complements. A complete list of censuses I’ve generated can be found on BitBucket and I am happy to discuss generating new censuses that people are interested in.













One use for these censuses was to search for fibred knot complement monodromies. This was done by using Twister to produce censuses of hyperbolic surface bundles over the circle for the surfaces S_{g,1} with \(1 \leq g \leq 5\) to depths shown in the table. Knot complements were then identified and compared to each of the fibred knot complement listed on knotinfo using SnapPy.

As of March 2013, monodromies were found for approximately 63% of the knots listed and as shown in this summary. This monodromy data is now also part of knotinfo. Note that, as the list of fibred knot complements built was a complete census, if a monodromy was not found for a particular knot then it cannot have a monodromy consisting of 2 / 10 / 14 / 14 /14 or fewer characters (depending on its three genus).


Flipper is a program for computing the action of mapping classes on laminations on punctured surfaces using ideal triangulation coordinates. It can decide the Nielsen–Thurston type of a given mapping class and, for pseudo-Anosov mapping classes, construct a layered, veering triangulation of their mapping torus, as described by Agol. It can now also determine the conjugacy class of pseudo-Anosov mapping classes.


The stable lamination of a Penner like pseudo-Anosov.

Flipper is currently under development but you can install flipper from PyPI or from flippers source code.


Curver is a program for performing calculations in the curve complex. It implements the Bell–Webb algorithm to determine the Nielsen–Thurston type of a mapping class. This algorithm runs in polynomial time but the constants involved currently make this implementation impractical. It can now also determine the conjugacy class of periodic mapping classes.

Curver is currently under development but can you can install curver from PyPI or from curvers source code.


Bigger is a program for creating and manipulating big mapping classes. It can create mapping classes on infinite-type surfaces and apply these to laminations with infinite support through lazy evaluation.

Bigger is currently under development but can you can install bigger from PyPI or from biggers source code.