Much of my research involves the computational algebra system GAP, which has a long history at St Andrews.

I am a co-author of the GAP package Digraphs, and I am a contributor to another, Semigroups.


Written in GAP and C++.

Semigroups is a GAP package whose purpose is to allow for the efficient computation and manipulation of many types of semigroup. This is achieved through sophisticated programming techniques, and more importantly, by developing new mathematical theory which directs the design of algorithms.

My supervisor, James D. Mitchell, is the author of this package, and I am a contributor. I have made improvements and contributed bugfixes to many different parts of the package. My most significant contributions include methods involving, and related to,


Written in GAP and C.

Digraphs is a general-purpose GAP package to allow for the easy creation of digraphs and multidigraphs, and for the efficient computation of these objects.

Although it contains few novel ideas, the package is designed to be robust, fast, and useful, and was created to handle the various types of digraphs which can be created from semigroups in the Semigroups package.

GAP Profile

GAP Profile, unreleased:
Written in GAP, Python, and Bash.

GAP Profile is an in-development tool which was created to measure differences in performance between versions of the Semigroups package, and also between different versions of the Digraphs package. The tool runs the test files of these packages, and can highlight (line by line) any significant differences in the duration each test requires. This can be useful to quantify the impact of a new algorithm or a restructuring of the code.

In the future, I may generalise the tool to allow it to work for other GAP packages, and release it. Please feel free to contact me if you have any questions or ideas about GAP Profile.