Andrew Bartholomew's Mathematics Page

Last updated 9th November, 2021

This page holds links to pieces of my mathematical software development. It was designed primarily to publish my work on virtual braids but also contains a few other bits and pieces. This is a spare time activity for me which I do solely for pleasure, for my day job I work as a computer network engineer. My mathematical background is algebraic and topological (I was a postgraduate student of Martin Dunwoody's at Sussex) and these remain my main areas of interest.

If you plan to use any of these programmes, please read the disclaimer and general comments

If you find any bugs or errors, please email me at


My braid programme was developed for some work done with Roger Fenn at the University of Sussex. See his homepage here.

The programme calculates a number of properties of virtual and classical braids. In particular it calculates Alexander polynomials and quaternionic invariants from classical and virtual braids and implements Vogel's algorithm for classical, virtual and flat link diagrams.

Follow the links below to:

Drawing knots

My draw programme produces Metapost code for drawing classical and virtual knots or (multi-)knotoids. It is also capable of drawing smoothed state diagrams for a classical or virtual knot or (multi-)knotoid.

Realizable Link Immersions

By enumerating labelled peer codes, complete lists of distinct link immersions have been determined for immersions up to eleven crossings, and up to four components for crossings with nine crossings or less.

Finite Biquandles and Welded Knots

A list of distinct welded knots has been produced with Roger Fenn using invariants developed from lists of finite biquandles found by a computer search. This page contains links to various lists related to finite switches of small size:

Lists are also provided for:


Lists of both minimal planar doodles and virtual doodles are presented on the virtual doodles page:


A list of distinct knotoids, as described by Vladimir Turaev, has been produced using a computer search and his extended bracket polynomial invariant.


My postgraduate studies were focussed on tracks, which are generalizations of simple closed curves on a 2-dimensional CW-complex. From a finitely presented group G it is possible to construct a 2-dimensional CW-complex K, with fundamental group G, where the tracks on K give information about a splitting of G as a free product or as an HNN extension. As part of my studies, I wrote two programmes that calculated a finite set of generating tracks for K and that could calculate the splitting of G determined by any given track.

Later work by Martin Dunwoody prompted me to update the code for these programmes so they can be compiled using a modern C++ compiler. Originally they were written in ALGOL68 and subsequently converted to a very early version of C++. These latest versions have been using the GNU gcc compiler on Fedora, they can be found on the tracks page.

C++ Classes

During the development of the braid programme I produced a number of C++ classes, in particular a set of scalar classes that provide for limited run-time selection of type. Since these may be of more general interest and use, the are described on the scalars page.