Goals and General Strategy of the PSAGE Project
Architecture
The architecture of PSAGE will be:
- A very stable subset of Sage itself, with a few patches
- Several new Python/Cython modules (mainly aimed at number theory),
of varying levels of stability and quality, which do not get installed
under the sage namespace
People
- Keep the mailing list closed initially and the people involved
carefully selected. Operate the project in "stealth mode" to avoid having
too many cooks spoil the soup, and also to keep from giving too much away.
Decrease Bloat
Sage is bloated by the pexpect interfaces, which adversely impact performance,
servely limit parallelization of code, and frustrate portability and robustness
(e.g., "zombie processes"). Sage is also bloated by all the numerical and scientific
code, which is useless for number theory, which is very easy to install, and
whose main users don't use Sage anyways (they use Cython, Linux packaging).
- Eliminate all pexpect interfaces.
- GAP -- finish libgap, and only keep code that can be made to work with it
- Singular -- pexpect not really needed anymore
- PARI/GP -- get rid of all code that uses gp interface instead of pari library calls
- Maxima -- just get rid of it (already done)
This will make a native MSVC port to Microsoft Windows easier.
- Eliminate anything that involves Fortran:
- Scipy
- R
- LAPACK, ATLAS -- make ATLAS a dependency
With this, the only languages used in the implementation of Sage are C/C++/Python/Cython, along
with some scripts in the Singular and GAP languages.
- Eliminate numerical/scientific libraries that hardly any Sage users use, and which are easy
to install anyways:
- Eliminate specialized packages that are too specialized for Sage, and not number theory:
- Eliminate code that is in Sage for no good reason:
- gd, gdmodule, all that GNUtls stuff
Change the development model
The ever increasingly
bureaucratic model used for Sage -- in which code must be 100% tested,
everything gets vote on, things can't change for 12 months, etc. -- is
great for stability and some form of quality. It is
unfortunately terrible for supporting code for research mathematics.
The rate of development of code for supporting my research in number
theory in Sage has slowed far too much, despite far more people being
involved and working harder.
I remember clearly where the 100% doctest, 100% code referee, and
1-year deprecation policies came from. They were designed and
pushed through by (good) software engineers who frankly did not have a
good understanding of the unique needs of mathematical research.
And indeed this makes sense because the aim of Sage is to be a viable
alternative to Maple, Mathematica, and Matlab (in addition to Magma).
Of these systems, only Magma has been really successful at
addressing serious research mathematics in arithmetic geometry
(the other systems have all been abject failures there).
What to Do (no particular order)
- Get test suite to pass by making a patch that marks all tests that
require the rest of sage "# optional - sage". Each time the psage and sage
core libraries are merged, this patch will have to be rebased and extended.
- Get the Cygwin port working
- Finish and switch to libGap
- Get rid of all pexpect code for working with Singular
- Get rid of all pexpect code for working with PARI
- Implement Dembele's Hilbert modular forms algorithm in the case of class number 1: put this in a new python module called "psage".
- Incorporate the Siegel modular forms code of Ryan et al. into PSAGE, also in "psage".
- Incorporate the Maass forms code of Strombergsson into PSAGE
- Reimplement number field arithmetic to be fast, possibly by writing code in a new module
under psage, which replaces the sage number field code on import.
- Implement function fields
- Implement Hesse's algorithm
- Trim more fat (spkg's) from PSAGE, which aren't relevant to
number theory, by making them optional: cliquer, glpk, pexpect,
pycrypto (easy to install), sqlite (just used by the graph database,
which we don't need or can make optional), sympy (we have pynac), ZODB
(redo all databases to use mongodb instead)
- Include pymongo (trivial), which will give very easy read-only access to all databases on sage.math
(or a network of slaves). Make a local install of mongodb a dependency for users who want to have
a local copy of any given database. Possibly make a builds-from-source mongodb optional package, maybe.