GSoC 2008 Report Fredrik Johansson: Numerical Evaluation - sympy/sympy GitHub Wiki

GSoC 2008 Numerical Evaluation Report

My name is Fredrik Johansson, and I participated in Google Summer of Code 2008 as a SymPy developer. The project consisted of implementing "robust high-precision numerical evaluation" for SymPy (you can read the abstract of my application.

I had an advantage of already having worked on SymPy for a while when the project started. In fact, I was a SymPy developer long before I started writing my application. Being familiar with the codebase early on was very useful. I would therefore recommend future students to try to get involved as early as possible. (A good entry point is to try to write patches for some of the simpler-looking open issues, or just to try out some computations in SymPy and discuss your impressions of how they worked out on the mailing list.) Discussing your project idea with other SymPy developers before writing the application is very strongly recommended. In any case, SymPy is a great project to work on, and the other developers (hopefully also myself) are very friendly and helpful.

One problem I had to face (and this is probably true of many other projects), was that there was more than one way to approach the problem, and I knew that not all possible solutions would be equally good. I therefore spent roughly the first half of the summer just working out the basics of the significance arithmetic implementation. It was only during the latter half that I got to work on more fun features, like numerical summation, that required all the basic code in the background to work. At this point, my work became much more fun (and I was able to work more efficiently).

Fortunately, my project application was written with the potentially slow initial progress in mind. Having realistic expectations from the start certainly helped; it is way too easy to overestimate the amount of work that can be accomplished in a limited amount of time. My advice to future students (for SymPy or elsewhere) is to choose a relatively small problem to solve, such that there is a good chance of being able to solve it well.

Much more detail about how my project progressed can be found in my blog updates (listed here in reverse chronological order):