Dear all,

I would like to begin by apolgoizing for my long absence. I still think sympy is a great project, but amidst my masters studies and phd applicatios I simply had no time to make meaningful contributions. I am now in the revision / exam preparation phase, and additionally have secured a phd place, whence I have some small amount of free time (which I have been trying to use to clear out the PR queue). In particular my exams finish on 7 june and then have the whole summer ahead of me, probably for the last time almost ever (since being a phd is essentially a "real job").

So I'd like to code for sympy again! GSOC seems idea, since it will allow me to do a substantial amount of work, without having to worry about the financial situation.

The main point of this email is to gauge interest in projects I would like to work on. I present here three: the first one is something I would like to advance for personal reasons. The other two are more of the "badly needed refactoring" kind. I figured that having a (relatively) seasoned developer work on core sympy for three months would probably be a good opportunity to clean up some cruft.

Anyway, these are sketches of my proposals:

-----------------------------------------------------------------------

(1) Extend the commutative algebra module.

I started the commutative algebra module ("agca") (and am currently the sole contributor) to integrate the groebner basis code in polys/ in a pythonic fashion into sympy. Specifically, the agca module focusses on commutative algebra computations involving modules over polynomial rings.

In its current state, the module is very incomplete, and in any case far behind the obvious competitors (macaulay2 and singular). Also, it is somewhat removed from the sympy core focus (although we had some interesting success regarding trigsimp).

My basic suggestion then would be to extend the agca module, not focussing on polynomial rings, but on fields (and perhaps PIDs). Specifically (for starters, more details to come in an actual proposal):

(a) get all the basic stuff (kernels, intersections, ...) working over PIDs [you can currently work over fields, written as k[x]/(x), but that is rather suboptimal]
(b) same for finitely generated algebras (over PIDs)
(c) implement a framework for functors (in particular Hom and tensor) and derived functors (so in particular Ext and Tor)

Part (a) has the desirable effect of connecting agca to the matrices module. This means that the agca module can do (much) more efficient computations over fields, and, perhaps more importantly, it provides an "abstract wrapper" for matrix operations. In particular this will give sympy the ability to express linear algebra in a coordinate-free fashion (i.e. this yields first-class representations of vector spaces, subspaces, quotient spaces, etc).

Part (b) leverages part (a), because all computations for finitely-generated algebras reduce to computations for modules.

Part (c) is where the interesting stuff starts. I have some chain complexes code lying around, which can compute free resolutions for modules over polynomial rings (in principle, though this code is very inefficient). For PIDs, this is not particularly interesting. But for finite-dimensional algebras over fields, we can implement the standard (or "Bar") resolution. Provided the matrices module is sufficiently optimized, this is actually reasonably efficient.

Once part (c) is implemented, we immediately get:

- hochschild homology and cohomology of finite-dimensional algebras
- group homology and cohomology of finite groups

I'll stop here, but I think it is clear that there is basically no limit to the possibilities ;).




(2) Get rid of the old assumptions.

Well, what am I to say. The old assumptions system is inflexible and arcane at its best, and inconsistent on slightly worse days (bounded implies nonzero anyone?). We have a shiny new system (well, not so new anymore), but we couldn't switch for a variety of practical reasons (mainly performance and compatibility).

This is a nasty can of worms, and I am sure everyone would like to see it fixed. But it also seems clear that this is going to be a major effort.



(3) Refactor/rewrite the series module.

This brings me back to my earliest work on sympy. The series module, in its current form, has a number of interrelated problems:

(a) series expansions are slow
(b) series expansions are stored as sums of core objects
(c) the core has to deal with order terms
(d) limits are slow
(e) various kinds of series expansions are lumped under one heading
(f) various clients with different requirements call "series" and hope for the best
(g) limits are buggy

[Actually I just recently hit (a) when for my masters thesis, I wanted to do some computations with theta functions.]

It seems clear to me that the way to go is

(*) give series expansions a first class representation

in the series/ module. This (essentially) immediately (modulo a good design) solves (b) and should go a long way for improving (a). We can get rid of (or at least drastically simplify) (c). Fixing (a) is going to go a long way to fix (d). Moreover, now that we have first-class representations, there is no reason not to have different representations for different kinds of series, so we can fix (e) and hence (f), thus likely improving (g).

I would also see it as part of my project to investigate the limit() heuristics, and to get rid of them as much as possible.

There have been previous attempts at doing (*), in particular by mario (pernici). As far as I can tell these essentially proved the effectiveness of this method, but did not make it mainstream because of the difficulty of incorporating them into the rest of sympy.

Again it seems likely that with three months time at my hands and a (reasonably) good understanding of sympy as a whole, this project should be both attainable and very beneficial for the community.


-----------------------------------------------------------------------

I would like to ask for all sorts of opinions. In particular:

- which of (2) and (3) seems more important / useful to you?
- who would be interested in mentoring either of these projects?

If there is interest, I will work out (1) and one of (2) and (3) into fully-fledged project proposals.

Best,
Tom

--
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to