GSoC 2016

Introduction

Google Summer of Code is a highly enjoyable and rewarding way to spend a summer.

SageMath (or Sage for short) is a GPL open-source mathematical software system. It is designed to be not just a computer algebra system, but more like a complete environment for doing mathematics and related calculations. It is based on a vast collection of existing open-source software tools and libraries and ties them together via Python. Python is also the primary interface language for the user and its object-oriented way of expressing concepts is used to express calculations - of course, there are also many “normal” functions :-) Behind the scenes, the Sage library executes the commands and calculations by its own algorithms or by accessing appropriate routines from the included software packages. On top of that, there are various ways how users can interact with Sage, most notably a dynamic web-site called “Notebook”.

Sage works hand-in-hand with other computational mathematics software systems, such as SymPy, GAP, etc, and can serve as an umbrella organization for GSOC projects for those sister projects.

All projects will start with an introduction phase to learn about Sage’s (or sister projects') internal organization and to get used to their established development process.

For Sage, this is documented in the developers' manual and all students will be instructed by the mentors on how to get their hands dirty. Sage uses Git (accessible at http://git.sagemath.org/) for revision control and trac (accessible at http://trac.sagemath.org) for organizing development and code review. Our license is GPLv2+. Feel free to contact Mentors before you send us project proposals.

/!\ We also require you to show us that you are able to execute actual development by submitting a patch via Sage's trac (i.e. see tickets marked for beginners) or a similar development tool of the respective project.

For Sage, feel free to introduce yourself and your project idea in Sage's GSOC mailing list.

For GAP, feel free to introduce yourself to GAP's developer list. Some discussion of possible GAP GSOC projects is happening at the joint GAP Sage days in St Andrews, see the agenda.

To get a better feeling of how Sage works, please check out the developer guide.

There is also a comprehensive list of future feature wishes in our trac issue tracker. They might contain the perfect project idea for you we didn't even think about!

Application Template

Please use this application template, in particular answer the questions thoroughly enough to convince us to pick you!

Personal:

Background:

Project:

Project Ideas

Hyperplane arrangements

Mentor

Miguel Marco / Volker Braun

Difficulty

Medium

Skills

standard Python knowledge, good mathematical knowledge about hyperplane arrangements

Sage already has a module for hyperplane arrangements, but it only admits arrangements over the rationals and finite fields. Since there is a rich theory about complex arrangements, it would be interesting to extend this to other fields. It would probably require to redesign the classes, having one common base class and further classes for field-specific methods. In this setting, it would also make sense to implement invariants as the Orlik-Solomon/Orlik-Terao algebras, resonance varieties, fundamental group of complements, logarithmic derivation modules (with the corresponding Betti numbers)...

Wrap/Expose more functionalities from Singular

Mentor

Miguel Marco / Travis Scrimshaw

Difficulty

Medium

Skills

Ability to work with the category/parent/element framework, some basic understanding of commutative algebra objects

We ship Singular, which is used mainly for computations with multivariate polynomial rings and their ideals (mostly Gröbner basis). We could also take advantage of its capabilities to deal with modules, resolutions... In order to do so, we would need to write some wrapping classes for these objects and interface the corresponding Singular calls.

Implement a framework for non-free modules

Mentor

Travis Scrimshaw

Difficulty

Medium

Skills

Ability to work with the category/parent/element framework, some linear algebra or understanding of modules

There is very little capacity in Sage for non-free modules. We should implement generic functionality and base classes for non-free modules. This will likely have some overlap with the project to expose more from Singular.

Combine common functionality between CombinatorialFreeModule and Sage's free module code

Mentor

Travis Scrimshaw

Difficulty

Medium--Hard

Skills

Good understanding of OOP and adapter classes and basic linear algebra

Currently, there is some overlap between the implementation of CombinatorialFreeModule (CFM) and (sparse) FreeModule. In particular, a CFM is roughly a special indexing set on top of a sparse free module. The goal of this project would be to combine features between these two class hierarchies in an attempt to ease the burden of code maintenance and improve the features of both.

Please feel free to add ideas (or copy-paste them from last year's Sage GSOC wiki page).