I'm pleased to introduce abelfunctions , a Python library for computing Abelian functions in Python and Sage. The primary goal of the project is to make computing with Abelian functions as ubiquitous as computing with, say, trigonometric functions. This framework is applied toward solving integrable systems of partial differential equations. Abelfunctions encompasses most, if not all, of the computational aspects of my research and will serve as a repository for my Ph.D. work. All of my code is hosted on GitHub and can be freely browsed, downloaded, and commented on.

Why I Ported My Code

I decided to create abelfunctions when I realized that 99% of the code that I had implemented or was planning to implement in Sage could be done using the Numpy/Scipy, Sympy, and NetworkX packages; all of which are included in Sage anyway. These packages are also included in the Enthought Python Distribution (EPD): a popular scientific Python suite amongst applied mathematicians. The primary benefits of this transition from "pure Sage" implementation to Python are:

  1. All of my work is packaged together in a single repository, making clear my contributions to the scientific programming community.
  2. My code can reach a wider audience.
  3. People can use my code while I work on it and without having to wait for Sage's patch acceptance process.

To be clear, I have absolutely nothing against the Sage development environment. I just noticed that most of my computations are either numerical, which is Numpy/Scipy's strength, or symbolic, which is Sympy's strength. Unfortunately, these don't seem to be the focus of the majority of the Sage development team. With this setup, both the Sage and general scientific Python communities can take advantage of my work.

Current Functionality

Right now, in abelfunctions, you can compute Puiseux series expansions of plane algebraic curves as well as the Riemann theta function. Below is some example usage with EPD. We compute the first four non-zero terms of the three Puiseux series expansions $p_1(x),p_2(x),p_3(x)$ of the plane curve $f(x,y) = y^3 + 2x^3y - x^7$ above the $x$-point $x=0$. That is, locally at $x=0$ the curve $f(x,y)=0$ looks like $p_i(x)$ on the $i$th sheet of the corresponding Riemann surface.

I'm in the process of including all of the functionality necessary to compute period matrices of plane complex algebraic curves. I've made this a "GitHub Milestone" of the abelfunctions project.

There are installation instructions and more examples on the abelfunctions wiki. And if you'd like the contribute then please feel free to do so! (I need to write a lot of tests, documentation, and docstrings!) Finally, if you encounter a bug or have suggestions on how to improve the library then don't hesitate to file an "issue" in the Issues section of the repository. I'll be posting major updates on my code as I progress.