= GSoC 2017: Ideas Page = == Introduction == Welcome to Sage's Ideas Page for GSoC 2017! '''[[https://summerofcode.withgoogle.com/organizations/5790079692832768/ | SageMath's GSoC organization homepage]]''' -- the hub for submitting applications and where the everything on Google's side is organized. Please subscribe to the [[https://groups.google.com/forum/#!forum/sage-gsoc|sage-gsoc]] mailing list and the GAP developer list for discussion on possible GAP GSoC projects. Also, make sure you have gone through the '''[[https://wiki.sagemath.org/GSoC/Students | information regarding application procedures, requirements and general advice]]'''. The Application Template is also available on that wiki page. Archives of past GSoC project ideas can be found [[https://wiki.sagemath.org/GSoC | here]]. 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. We also '''require''' you to show us that you are able to execute actual development by submitting a relevant patch and/or reviewing a ticket via [[https://trac.sagemath.org/ | Trac]] of the project you are interested in applying to. The [[http://doc.sagemath.org/html/en/developer/index.html|developer guide]] is a great comprehensive resource that can guide you through your first steps in contributing to Sage. Apart from the project ideas listed below, there is also a comprehensive list of future feature wishes [[http://trac.sagemath.org/query?status=needs_info&status=needs_work&status=new&milestone=sage-wishlist&or&milestone=sage-feature&col=id&col=summary&col=status&col=type&col=priority&col=component&order=priority|in our trac issue tracker]]. They might contain the perfect project idea for you we didn't even think about! <> = Project Ideas = == Redesigning the polynomial class hierarchy and linking with libraries == || Mentor || Johan Rosenkilde, Jean-Pierre Flori || || Area || Basic algebra, C/C++, Cython || || Skills || Strong programming skills, familiarity with polynomial algebra || Sage supports univariate and multivariate polynomial arithmetic over general rings with many features. For efficiency, it is crucial that Sage links to low-level implementations for polynomials over certain rings, such as finite fields or integers. These things have been in Sage for a long time, and e.g. much of the linking code was written in early versions of Cython when it was much less powerful than it is now. It is time to rethink and redesign the class hierarchy and the linking code for polynomials in Sage. The task in this project is to get an overview of the current features Sage supports, what we would like to do forward, and then come up with a better, cleaner design and implementation for doing this. This will entail re-linking to the many projects Sage already talks to, and perhaps find projects that have appeared on the OSS scene since. == Complex and Arithmetic Dynamics in Sage == || Mentor || Benjamin Hutz || || Area || number theory, algebraic geometry, Python || || Skills || strong math background, reasonable programming skills || There is a significant amount of functionality for iteration of functions in Sage. However, there are number of areas where this could be improved. The [[https://wiki.sagemath.org/dynamics/ArithmeticAndComplex|sage-dynamics]] wiki lists a number of wish-list projects. Many of them are small and many are inter-related. A proposal could easily combine a number of these to form a complete proposal. As a few large scope items that seem particularly well suited to GSOC: * coercion model for schemes/maps * interface with complex dynamics library * generic schemes/maps; i.e. charts But don't feel limited in your proposal to just these items or that you need to include any of these items. == Matroid Theory == || Mentor || Stefan van Zwam || || Area || Matroid theory, graph theory || || Skills || Strong foundation in (discrete) mathematics (PhD student level), strong programming skills, experience reading research papers || Matroid theory in SageMath can be improved in many ways. Some potential topics, of varying difficulty, are: * Support for transversal matroids and gammoids * Proper support for graphic/cographic/frame matroids (showing the graph, resigning across cuts, Whitney switching, etc.) * Tangles and branch decompositions. * Faster minor testing (finish ticket 16545, and extend the ideas to non-binary matroids) * representability tests over various fields. Maybe use decompositions and stabilizer theorems to cut down on the number of matrices to check? * A framework for dealing with minor-closed classes: like a set data structure, but with some support for minors. * linear extensions/coextensions that keep track of allowed vectors. * Bracket rings/Tutte groups/universal partial fields (needs: strong knowledge of algebra and Groebner bases) == Improve Representation Theory == || Mentor || Travis Scrimshaw || || Area || Representation theory, algebra, combinatorics || || Skills || Understanding of algebra, basic understanding of combinatorics, experience with Cython preferred || Sage is currently the only software that provides systematic support for crystals, combinatorial realizations of Kac-Moody algebra representations. However, Sage does not have a lot of support for other aspects of representation theory and there is room for improvement in the current code. Some of the potential projects include: * Improve the framework and speed of crystals. * Implement various bases for the symmetric group algebra. * Implement induction and restriction functors. * Implement representations for Hecke algebras. * Implement group representations as modules. * Algorithm to find invariant subspaces [[https://trac.sagemath.org/ticket/11285|#11285]]. * Finalize implementations of Fock space, Lie algebras, cellular algebras, etc. == Improve Root and Coxeter Systems == || Mentor || Travis Scrimshaw || || Area || Representation theory, combinatorics, geometry || || Skills || Solid foundation of linear algebra, experience with root systems preferred || This project is above improving the implementation of root systems and Coxeter systems in Sage. It is divided into 3 main areas: ==== Root systems ==== We currently have an implementation of root systems with special inputs for finite and affine types, but there has been interest to implement an easy system for obtaining hyperbolic types. One goal is to implement such a system. Another aspect is to make the current implementation of Dynkin diagrams, Cartan matrices, and root systems more robust. ==== Coxeter systems ==== The currently implementation of Coxeter systems currently uses the root system code and needs to be improved. In particular, this removing any ambiguity between types B and C. ==== Weyl groups ==== One last aspect is that the root system code could be used to describe a permutation representation of finite Coxeter groups, but currently this relies on the (experimental) GAP3 package. This is not necessary, and we should remove this as a dependency by doing a direct implementation. == Implement Quantum Cluster Algebras == || Mentor || Travis Scrimshaw || || Area || Combinatorics, algebra || || Skills || Solid foundation of algebra, experience reading research papers preferable || Cluster algebras have been implemented in Sage (see, e.g., [[http://doc.sagemath.org/html/en/reference/combinat/sage/combinat/cluster_algebra_quiver/cluster_seed.html|ClusterSeed]] and [[https://trac.sagemath.org/ticket/21254|#21254]]). The next step is to implement the quantum version, where the variables now skew commute. Quantum cluster algebras are known to have deep connections with various areas of mathematics. The primary goal of this project is to provide a basic implementation. == Modular decomposition of graphs and digraphs == || Mentor || Dima Pasechnik || || Area || Graph theory || || Skills || Good knowledge of algorithmic graph theory|| [[https://en.wikipedia.org/wiki/Modular_decomposition|Modular decomposition of (di)graphs]] is a generalization of the concept of the decomposition of (di)graphs into connected components. Its [[https://trac.sagemath.org/ticket/22110|current implementation]] in Sage relies on badly broken abandoned C code, and badly needs to be replaced by something that works and is not too slow. However, the only open-source implementations of some of these procedures are either in Java or in Perl, and thus aren't really useful for Sage. Specific projects here would as follows: * Implement an efficient algorithm for modular decomposition of graphs in Python, e.g. extending [[https://networkx.github.io/|NetworkX]] or using a Sage graph backend. * Same as previous, but for directed graphs * Speed up these using Cython, or a plain C (or C++) implementation * Once the 1st/2nd is done, implement more functionality in Sage that relies on modular decomposition, as it is a popular tool in graph theory, see e.g. [[https://en.wikipedia.org/wiki/Skew_partition| skew partition]]. The project can be further extended to handle the problem of computing [[https://en.wikipedia.org/wiki/Split_(graph_theory)|split decompositions]] of (di)graphs, and adding efficient implementations of graph-traversals such as [[https://en.wikipedia.org/wiki/Lexicographic_breadth-first_search|LexBFS]]. --- TEMPLATE == Project Title == || Mentor || Name(s) || || Area || Mathematical and/or technical scope ... || || Skills || What the student should bring ... || ... * ... * ...