Interests and Philosophy
I am interested in developing and implementing efficient number theoretic algorithms, especially those with a visual component. I do a majority of my work in C with the PARI library for several reasons:
- PARI/GP is free an open-source language, with an active and very supportive development community;
- Code written directly in C (using the PARI library) is extremely fast, many orders of magnitude faster than equivalent code written in (the typical alternative) Python/Sage;
- The gp interpreter allows for easy access to compiled C methods, eliminating the downside of always having to compile programs.
Papers with code
The use of software in research is ever increasing, and unfortunately there are few standards on how to treat it. If a paper uses code/data in an essential way, then I believe that
- The author(s) of the code should make every effort to make the code (or at least the raw data) public, ideally through a repository site like GitHub;
- Basic explanations on how to download and use the code should be provided;
- There should be some level of internal documentation (commenting, etc.) for anyone who wants to dive deeper.
This creates extra burden on the author(s), but the alternative is papers that are potentially incorrect and essentially uncheckable.
Selected projects
- Apollonian - C, PARI/GP, LaTeX
Computations for Apollonian circle packings, including basic operations, generating pictures in LaTeX, and a very efficient implementation for finding all missing curvatures up to a bound. - Fundamental domains for Shimura curves - PARI/GP, Python, LaTeX
Computation of fundamental domains for arithmetic Fuchsian groups. Improves on the algorithms of Voight and Page, and is significantly more efficient than the live Magma implementation (from 100 to millions of times as fast, depending on the example). Also allows for any group between the norm 1 and the totally positive normalizer group. There are plans to incorporate this project into the source code for PARI/GP. - Isogeny - PARI/GP, Sage
Computation of supersingular l and L isogeny graphs, significantly more efficient than the live Sage implementation. Includes code to seamlessly use it inside of Sage. - Semigroup-Reciprocity - C, PARI/GP
Computation of orbits of semigroups, including efficient implementation of missing numbers in an orbit. This package accompanies the paper "Reciprocity obstructions in semigroup orbits in SL(2, Z)", and includes methods to check various results. - Q-Quadratic - PARI/GP
Computations with integral binary quadratic forms and (indefinite) quaternion algebras over Q. Includes algorithms to compute optimal embeddings and intersection numbers of modular geodesics, as described in my thesis. - PARI on Windows - PARI/GP
A guide on how to install and use PARI/GP on Windows computers. A Windows binary distribution is offered on their website, but this does not work as well as using Windows Subsystem for Linux, and you cannot easily run programs written in PARI (or use gp2c for that matter).