{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Prehistory\n", "\n", "### 1994-2000: Computational Invariant theory of permutation groups\n", "\n", "- Needed:\n", " - Group theory: GAP\n", " - Computer Algebra: MuPAD\n", " - Gröbner bases: FGb\n", "\n", "- PerMuVAR in MuPAD\n", "- Ugly homegrown C++ permutation group library (GLIP) + low level interface\n", "- Text interface to FGb\n", "- Student project: Lyx as notebook interface" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 2000-2008: MuPAD-Combinat for Algebraic Combinatorics\n", "Was MuPAD the right choice?\n", "
\n", " \n", " Brainstorming with Alexander Hulpke at Conférence Calcul Formel Libre '02 Lyon\n", "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 2008-: Sage-Combinat for Algebraic Combinatorics\n", "SageMath: finally GAP, PARI, Singular, Python, ... all under the same open source roof!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 2008-2011: Nicolas B.' thesis in Invariant Theory\n", "\n", "\n", "#### GAP's text-based interface shows its limits\n", "- Major bottleneck: Low granularity operations, like iterating through a group" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "G = gap.SymmetricGroup(7)\n", "%time l = list(G.List())" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- 201?: first libgap prototype: C-level interface to GAP" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "G = libgap.SymmetricGroup(7)\n", "%time l = list(G.List())" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "#### High Performance Implementation of orbit generation\n", "- Collaboration Hivert / Borie\n", "- 1000x speedup!\n", "- Value of vectorization and low level parallelism for combinatorics" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 2009-2015: Representation Theory of semigroups\n", "\n", "
\n", " \n", "
\n", "\n", "Needs:\n", "- Coxeter groups (in GAP3)\n", "- Semigroups (GAP's Semigroup package, Semigroupe)\n", "- Combinatorics, Algebra, ... (Sage)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Technical problems:\n", "- Semigroupe unusable as C++ library beyond proof of concept\n", "- libgap incompatible with GAP packages\n", "- libgap hard to maintain\n", "\n", "Usability problems:\n", "- GAP groups behaving as native Sage groups\n", "- GAP semigroups **not** behaving as native Sage semigroups" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Consequences:\n", "- Fragmented communities: users have to choose between systems\n", "- Lots of reimplemented code in Sage\n", "- An algorithm of 2010 still not implemented in full generality" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Nicolas B, Justine F., Balthazar Charles, : need mix GAP and Sage\n", "\n", "\n", "## libsemigroups\n", "\n", "Semigroupe -> Jean-Eric Pin\n", "\n", "Proof of concept binding from Sage, but does not scale\n", "\n", "libsemigroups\n", "\n", "Python bindings (joint sprint with James)\n", "\n", "Conda packaging (joint sprint with James)\n", "\n", "Bindings with cppy (Cernay workshop): non functional\n", "\n", "Use from xeus-cling (@LoicGouarin, Johan Mabile, ): functional: run the index.ipynb notebook of https://github.com/james-d-mitchell/libsemigroups on binder.\n", "\n", "\n", "## \n", "\n", "Use sage-explorer \n", "\n", "A widget to display tableaux\n", "\n", "Modular rep theory from GAP.\n", "\n", "MeatAxe\n", "\n", "LLT, symmetric functions, ...\n", "\n", "- Call for help: live-collaboration @minrk\n", "\n", "pypersist / Memoize \n", "\n", "Already used by Pauline.\n", "\n", "\n", "## Aladin and Tom\n", "\n", "Working at Huawey and YouTube; using Jupyter on a daily basis for machine learning!" ] } ], "metadata": { "celltoolbar": "Diaporama", "kernelspec": { "display_name": "SageMath 8.9.beta7", "language": "sage", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "rise": { "auto_select": "first", "autolaunch": true, "background-image": "linear-gradient(rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.9)), url(../../../public/images/banner.png);", "scroll": true, "start_slideshow_at": "selected", "transition": "none" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }