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.
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:
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.
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.