1. Introduction

If there is something you would like to implement and make available in SAGE, you have a wide range of options:
  1. Implement it as SAGE scripts,
  2. Implement it as Python scripts that use the SAGE library,
  3. Implement it in C/C++ and make the result accessible to SAGE using Pyrex,
  4. Implement it using Pyrex,
  5. Implement it in GAP,
  6. Implement it in Singular,
  7. Implement it in GP/PARI,
  8. or any combination of the above.

If you have Magma, Maple or Mathematica and don't mind restricting who can use your code, you could also implement parts ofyour program in one of these systems and make it available in SAGE.

GAP, Singular, and PARI are all included with all distriubtions of SAGE. All three programs are very mature, and each has a deep highly nontrivial functionality, though in different domains. GAP addresses group theory well, Singular attacks polynomial computation, and PARI contains sophisticated optimized number theory algorithms. Notably absent from this triad is a good system for exact linear algebra (something MAGMA does extremely well), but this gap is being filled by code being written for SAGE.

SAGE is not just about gathering together functionality (something UNIX already does well), it is about providing a clear, systematic and consistent way to access a large number of algorithms, in a coherent framework that makes sense mathematically. In the design of SAGE, the semantics of objects, the definitions, etc., are informed by how the corresponding objects are used in everyday mathematics.

See About this document... for information on suggesting changes.