Ok. My first week with the my second iteration of Google Summer of Code. Things have been different this time right from the word go. Mainly to do with software design, or rather the approach to it. Jason and I have had lengthy discussions about this, and we have been trying to work out a good plan to get things done in a structured way this summer. I am hoping that this will avoid the problems Prasoon and I encountered oh-so-frequently last summer. They were mainly because we had too many TODOs and objectives all at the same time, instead of doing things step-by-step, in an incremental manner.
What I have been doing this week, is thinking and talking to people regarding what the use-cases of the new module will be. I had started out trying to design an overly generalized system, but talking to Jason and Stefan has made me realise that its better to get the set of objectives straight.
Basically, I have been listing out as many micro-use-cases as I can. Something like – “I, as a SymPy developer, would like to use the new vector module to prove the integral forms of Maxwell’s equations.” This is where the talking to many people came into the picture. Things like these, though they may seem a lot to process, admittedly do help you focus on whats high-priority.
Broadly, I have divided my objectives for the module into the following incremental development ‘steps’-
i)Implementation of a basic Vector framework
ii)Implementation of the Del operator
iii)Conversion to and from coordinate systems other than Cartesian.
iv) Having an API for doing vector math in different coordinate systems.
v)Implementation of Coordinate System class, along with a Point class
vi)Implementation of time-dependent functionality
vii)Implementation of LaTeX functionality
viii) Implementation of vector-integral functionality
Each of these, as you can probably see, can be done one-at-a-time (ofcourse many of them have prerequisites, like vi requiring i and v). In any case, the incremental model of software design does seem to fit well to developing the new vector module – with something like the waterfall model being used for each of these objectives individually.
On the coding front, I have pretty much done with objective i. I have a stable (with a few mods necessary) system of basic vector math in place on my gsocvect branch on github. I have avoided usage of coordinate systems, to ensure that the Vector class fits well with the SymPy core. Some things still need to be ironed out, like usage of functions like trigsimp on a given Vector instance – I’ll probably try my hand a little more, or ask the mailing list.
Anyways, thats all for now :-). Hope to have a great summer coding a new SymPy module. *excited*