Differences between revisions 3 and 4
Revision 3 as of 2019-02-05 16:47:16
Size: 4824
Editor: tscrim
Comment:
Revision 4 as of 2019-02-05 16:52:25
Size: 7515
Editor: dcoudert
Comment:
Deletions are marked like this. Additions are marked like this.
Line 63: Line 63:


== Enumeration of paths ==
|| Mentor || David Coudert ||
|| Area || Graph theory ||
|| Skills || Knowledge of graph algorithms, Python, C/C++, git. ||
In the graph module of Sagemath, we currently have a method in Python for enumerating all paths from a source to a destination in an undirected graph by increasing length (number of edges). We also have methods for enumerating all (simple) paths and cycles in a directed graph by increasing length (number of edges).
The following tasks are intended to speed up these methods and offer more functionalities:
 * Implement Cython versions of these algorithms and ensure that we can have the same functionalities for directed and undirected graphs;
 * Extend these methods to weighted (directed) graphs;
 * Implement an iterator over the shortests s-t paths using improved versions of Yen’s algorithm for simple paths and Eppstein’s algorithm for non-simple paths.


== Diameter, radius, eccentricities, and distances ==
|| Mentor || David Coudert ||
|| Area || Graph theory ||
|| Skills || Knowledge of graph algorithms, Python, C/C++, git ||
The graph module of Sagemath already provides some smart algorithms for computing the diameter and eccentricity of unweighted undirected graphs, and a large variety of methods for computing paths and distances.
 * The first goal of this project is to implement best known methods for computing diameter, radius, centers, eccentricities of (weighted) (un)directed graphs, so we could get the complete collection.
 * The second objective is to clean and improve methods for computing shortest paths and distances (single source and all pairs). In particular, implement the method proposed in https://ask.sagemath.org/question/44823/sage-floyd-algorithm-in-cython/.


== Improvements of the graph module ==
|| Mentor || David Coudert ||
|| Area || Graph theory ||
|| Skills || Knowledge of graph algorithms, Python, C/C++, git ||
The goal of this project is to contribute the improvement of the graph module of Sagemath by, for instance:
 * Clean the (di)graph constructors, in particular to enable loading a graph from a file. This requires to write methods for loading / saving a graph from/to a file in different graph formats. NetworkX has plenty of methods for reading graphs from file, but we should avoid the conversion from networkx graphs to Sage graphs. This has been initiated long time ago but not finalized.
 * Cythonize methods that are obviously too slow in Python.
 * Improve graph traversals like Lex-BFS and add other traversals like Lex-M (can be used to get approximation of tree length), Lex-DFS, etc.

GSoC 2019: Ideas Page

Introduction

Welcome to Sagemath's Ideas Page for GSoC 2019! (Last year 2018)

SageMath's GSoC organization homepage -- the hub for submitting applications and where the everything on Google's side is organized.

Please subscribe to the sage-gsoc mailing list and the GAP developer list for discussion on possible GAP GSoC projects. Also, make sure you have gone through the 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 here.

All projects will start with an introduction phase to learn about Sagemath’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 Trac of the project you are interested in applying to. The 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 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!

Project Ideas

Improve Support of Representation Theory

Mentor

Travis Scrimshaw

Area

Algebra, Representation Theory, possibly Combinatorics

Skills

Understanding of linear algebra, preferably representation theory and algebra, associated combinatorics desirable, Cython experience is good

Representation theory is the study of symmetries and is an important part of modern mathematics with applications to other fields, such as physics and chemistry. GAP supports doing computations using the characters of representations, but it often does not contain constructions nor manipulations of the modules. There is currently some limited support within Sage for representations as a proof-of-concept, but this needs to be expanded and refined. Things that can be added are tensor products (for bialgebras), dual representations (for Hopf algebras), induction and restriction functors, methods to construct representations of groups (e.g., symmetric group), Lie algebra representations, etc.

Implement Lie Superalgebras

Mentor

Travis Scrimshaw

Area

Algebra, Representation Theory

Skills

Foundations in algebra and combinatorics, experience reading research papers

Lie superalgebras were introduced by Kac in order to unify bosons and fermions and are currently an active topic of research. Lie algebras have been implemented in Sage and the that framework has been tested and is mostly stable. The next step is to extend this framework to Lie superalgebras and provide implementations of the basic and finite-dimensional Lie superalgebras. This project could also aim to cover some of their representation theory or quantum groups.

Refactor RSK and implement new insertion rules

Mentor

Travis Scrimshaw

Area

Combinatorics

Skills

Understanding of RSK and combinatorics, experience in Cython, data structures, and algorithms preferable

The Robinson-Schensted-Knuth (RSK) bijection is a core part of modern day combinatorics involving tableaux and symmetric functions. The current implementation includes the classical RSK insertion and two generalizations called Edelman-Greene and Hecke insertion. However, the current design does not scale well as new insertion algorithms are implemented in Sage (e.g., super RSK 24894 and dual/coRSK 25070). The goal of this project is to refactor the code to use the same design patterns as the growth diagrams. This project would also include writing new insertion rules.

Enumeration of paths

Mentor

David Coudert

Area

Graph theory

Skills

Knowledge of graph algorithms, Python, C/C++, git.

In the graph module of Sagemath, we currently have a method in Python for enumerating all paths from a source to a destination in an undirected graph by increasing length (number of edges). We also have methods for enumerating all (simple) paths and cycles in a directed graph by increasing length (number of edges). The following tasks are intended to speed up these methods and offer more functionalities:

  • Implement Cython versions of these algorithms and ensure that we can have the same functionalities for directed and undirected graphs;
  • Extend these methods to weighted (directed) graphs;
  • Implement an iterator over the shortests s-t paths using improved versions of Yen’s algorithm for simple paths and Eppstein’s algorithm for non-simple paths.

Diameter, radius, eccentricities, and distances

Mentor

David Coudert

Area

Graph theory

Skills

Knowledge of graph algorithms, Python, C/C++, git

The graph module of Sagemath already provides some smart algorithms for computing the diameter and eccentricity of unweighted undirected graphs, and a large variety of methods for computing paths and distances.

  • The first goal of this project is to implement best known methods for computing diameter, radius, centers, eccentricities of (weighted) (un)directed graphs, so we could get the complete collection.
  • The second objective is to clean and improve methods for computing shortest paths and distances (single source and all pairs). In particular, implement the method proposed in https://ask.sagemath.org/question/44823/sage-floyd-algorithm-in-cython/.

Improvements of the graph module

Mentor

David Coudert

Area

Graph theory

Skills

Knowledge of graph algorithms, Python, C/C++, git

The goal of this project is to contribute the improvement of the graph module of Sagemath by, for instance:

  • Clean the (di)graph constructors, in particular to enable loading a graph from a file. This requires to write methods for loading / saving a graph from/to a file in different graph formats. NetworkX has plenty of methods for reading graphs from file, but we should avoid the conversion from networkx graphs to Sage graphs. This has been initiated long time ago but not finalized.
  • Cythonize methods that are obviously too slow in Python.
  • Improve graph traversals like Lex-BFS and add other traversals like Lex-M (can be used to get approximation of tree length), Lex-DFS, etc.

GSoC/2019 (last edited 2019-03-06 10:22:37 by dcoudert)