== Introduction == Welcome to SageMath's Ideas Page for GSoC 2025! ([[https://wiki.sagemath.org/GSoC/2024 | Last year 2024]]) The [[https://summerofcode.withgoogle.com/how-it-works/#timeline | Timeline]] for GSoC 2025. Make sure you have gone through the '''[[https://wiki.sagemath.org/GSoC/Contributors|information regarding application procedures, requirements and general advice]]'''. The Application Template is also available on that wiki page. Also, please subscribe to the [[https://groups.google.com/forum/#!forum/sage-gsoc|sage-gsoc]] mailing list and the Sage developer list. Archives of past GSoC project ideas can be found [[https://wiki.sagemath.org/GSoC | here]]. We also '''require''' you to show us that you are able to execute actual development by submitting a relevant Pull Request and/or reviewing a Pull Request 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 SageMath. Apart from the project ideas listed below, there is also a wishlist for new features in our [[https://github.com/sagemath/sage/issues?q=sort%3Aupdated-desc+is%3Aopen|open GitHub Issues]]. They might contain or inspire the perfect project idea for you that we didn't even think about! Note that projects can be one of three lengths: * Medium: 175 hours * Large: 350 hours <> = Project Ideas = Here is a list of project proposals with identified mentors. Other well-motivated proposals from prospective contributors involving SageMath in a substantial way will be gladly considered, as well. {{{#!wiki comment/dashed --- TEMPLATE == Project Title == || Mentor || Name(s) || || Area || Mathematical and/or technical scope ... || || Skills || What the contributor should bring ... || || Length || Medium-term or long-term || || Difficulty || Easy, medium, hard, etc. || ... * ... * ... }}} == Coordinate the graded commutative algebra and exterior algebra implementations and Gröbner bases == || Mentor || Travis Scrimshaw || || Area || Algebra, Performance || || Skills || Understanding of abstract algebra and Cython. Knowledge of Gröbner basis is strongly recommended. || || Length || 175 hour and 350 hour variants || || Difficulty || Medium-hard || A graded commutative algebra (GCA) is an algebra where the even generators commute and the odd generators skew-commute. The implementation currently relies on singular's library [[https://www.singular.uni-kl.de/Manual/4-0-2/sing_469.htm|plural]] as a quotient ring of a g-algebra. SageMath has a native implementation of the exterior algebra, but it does not interface well with the GCA implementation. The primary goal of this project would be to improve the interaction between the two implementations; likely with a native implementation of GCAs. A second goal would be to improve the implementation of SageMath's implementation of Gröbner bases for the exterior algebra, which is currently quite slow (see, e.g., [[https://github.com/sagemath/sage/issues/34437|#34437]]). For the ambitious, these computations would be extracted to an independent C++ library for many common rings (implemented using other libraries). == Add additional combinatorial (Hopf) algebras and additional bases == || Mentor || Travis Scrimshaw || || Area || Algebra, Combinatorics || || Skills || Foundations in algebra and combinatorics, experience reading research papers recommended. || || Length || 175 hours and 350 hours variants || || Difficulty || Medium || There are a number of combinatorial Hopf algebras (CHAs) currently implemented in SageMath. However, there are a number of bases that are known and not yet implemented. For example, the double Schurs (as defined by Molev), and (weak) dual (canonical) Grothendiecks. There are also a number of related non-symmetric but still important polynomials that SageMath would benefit from providing. The goal of this project is to implement more of these bases and combinatorial (Hopf) algebras. == Refactor the diagram algebras/monoids and add new ones == || Mentor || Travis Scrimshaw || || Area || Algebra, Combinatorics || || Skills || Foundations in algebra and combinatorics, experience reading research papers recommended. || || Length || 175 hours and 350 hours variants || || Difficulty || Medium || The diagram algebras (i.e., subalgebras of the partition algebra) are implemented using code that has a number of redundancies that makes it hard to extend for new subalgebras. The main goal of this project is to refactor the underlying implementation in order to make it easier to implement new diagram algebras such as the Motzkin algebra. Furthermore, we will want to refactor the code so that the underlying diagram multiplication can be manipulated as a monoid. As an optional part, this would provide the cellular bases of these algebras in certain cases. == Improve (free) module implementations == || Mentor || Travis Scrimshaw || || Area || Linear Algebra, Performance, Refactoring || || Skills || Understanding of linear algebra and object-oriented programming. Cython experience is highly recommended. || || Length || 175 hours || || Difficulty || Medium-easy || SageMath has multiple implementations of free modules: 1. Finite dimensional coordinate representations in the "standard" basis using `FreeModule` that provides both a dense and sparse implementation. 2. Using `CombinatorialFreeModule` (CFM) as (possibly infinite dimensional) sparse vectors. There are various benefits to each implementation. However, they are largely disjoint and would mutually benefit from having a common base classes. In particular, having a dense implementation for CFM elements for applications that require heavier use of (dense) linear algebra. The goal of this project is to refactor these classes to bring them closer together (although they will likely remain separate as they are likely not fully compatible implementations for the parents). == Create an interface to the SmallGrp database == || Mentor || TBD || || Area || Group Theory || || Skills || Group Theory, GAP and Python experience || || Length || 350 hours || || Difficulty || Medium-hard || Create a convenient Pythonic interface to the small groups database that wraps the [[https://gap-packages.github.io/smallgrp/|SmallGrp]] GAP package. This will enable to create all small groups satisfying certain properties (e.g. abelian, solvable, non-nilpotent, given order) in an easy way, and to provide information about them. This project should also aim to improve the connection between the implementations of permutation, matrix and finitely presented groups in Sage``Math. This can also include programmable access to information about each group, like the subgroup lattice, as in [[http://groupnames.org|GroupNames]]. As an example, the interface might be {{{SmallGroups(60, nilpotent=True, type="permutation")}}} for an iterator that return Sage's !PermutationGroup objects of all nilpotent groups of order 60, say sorted by GAP ID. For the implementation, the !SmallGroups class might inherit from ​[[https://doc.sagemath.org/html/en/reference/sets/sage/sets/condition_set.html#sage.sets.condition_set.ConditionSet|ConditionSet]], and add methods for the information the !SmallGrp GAP package provides such as cardinality and short summary as in !SmallGroupsInformation. == Implement matrix spaces over commutative semirings == || Mentor || TBD || || Area || Mainly algebra, linear algebra and Sage basic data structures || || Skills || At least an intermediate knowledge in Python. Knowing Cython or the Sage category framework is a big advantage || || Length || 350 hours || || Difficulty || Medium-hard || The natural numbers with the standard addition and multiplication, and the min-plus [[https://doc.sagemath.org/html/en/reference/semirings/sage/rings/semirings/tropical_semiring.html|tropical algebra]] over a commutative ring, are examples of well-known commutative semirings. The aim of this project is to implement matrix spaces and matrices over such semirings. They have many uses in combinatorics, optimization and other mathematical areas. The mathematical background needed is not advanced. The main difficulty will be to understand the current implementation of matrix spaces over rings, and how to add support for semirings that plays well with it. If time permits, an implementation of polynomial (semi)rings over semirings can be implemented.