-
Notifications
You must be signed in to change notification settings - Fork 0
GSoC 2011 Report Tom Bachmann: Definite Integration
This page is a report on my work on SymPy as part of the "Google Summer of Code" program.
My name is Tom Bachmann, and I study mathematics at the University of Cambridge, England. I will enter part II of the Mathematical Tripos in october 2011, which obviously will be my third year of study ;). My primary interests are arithmetic, analytic and algebraic geometry, which is why I applied to implement a heuristic symbolic definite integration algorithm ;).
I know it is advantageous to do (lots of) internships or similar. However, I had to sort of settle on the conclusion that there are just no internships in pure maths. I have known about the existence of GSoC for a long time, and sort of by accident one day I found myself browsing through the accepted organisations and proposed projects for 2011. As it turns out, there indeed seemed to be one organisation offering projects that I was vaguely interested in: mathematical computations not involving floating point numbers. Indeed there was a proposed project in symbolic integration, and even though I know nothing about how to implement this it had always seemed intriguing.
I am not going to describe my application process in great lenght. Needless to say, I looked at the literature, read up on the theory involved, and thought hard about what I believed I would be able to do. Then I wrote a draft proposal and kept bugging people on IRC to tell me what else they wanted to know; special thanks go to Ronan and Aaron (the latter also my mentor) for comments at this stage. During this time and the ensuing waiting period I familiarised myself with SymPy by fixing bugs. I started with random stuff tagged EasyToFix. Eventually I hit an EasyToFix issue that turned out to involve rewriting half of the gruntz algorithm (for computing limits)...
Eventually my proposal was accepted and I spent the summer coding.
Looking back, I'm surprised to say that I implemented pretty much what I proposed (although the proposal was admittedly vague about the second half). My contributions can be split into four categories:
-
- Miscellaneous improvements.
-
- Addition of new special functions.
-
- The hyperexpand() function.
-
- The meijerint family of functions.
GSoC started well before the end of my academic term. For this reason, I of course began coding even before the official GSoC start ;). In all seriousness, in cambridge you actually get about six weeks of preparation time for exams with no lectures at all! So while it was clear that I could not be working full time during term time, indeed not at all during examination period, it was also clear to me that I would have significant amounts of free time during the preparation period to work on SymPy. (I'm the first the admit that tripos exams are extremely challenging, but how exactly are you supposed to prepare full time for six weeks?)
I began by adding bessel functions (2) and then I started the hyperexpand() function (3). Then I had exams. I also submitted my first pull request (creatively named "gsoc"). After that I started meijerint (4). This was of course the bulk of my project, so I spent a long time on it. I did lots of minor and not-so-minor improvements across many parts of sympy (1), and I also kept improving hyperexpand (3) until I felt my code produced halfway-satisfactory results. I submitted a pull request ("gsoc-2") and started further polishing. I added lerch transcendent (2, 3), improved the meijerint heuristics and performance (4) and added exponential integrals (2). As I suppose happens to everyone, I kept doing minor improvements "all over the place" (1).
With this rough outline of my actual working in place, in the next subsections I will describe each of the four categories mentioned in the introduction separately. This seems more advantageous than fleshing out the actual order of implementation sketched above, which as can be easily seen was a mess :-).