Sage Day 109, May 28th of 2020
Nicolas M. Thiéry
LRI, Université Paris Sud
Note: just one of the many threads that came together to create OpenDreamKit
- From the beginning a big fan of software packages like GAP, Singular, Pari
demonstrated that, with a few dedicated leaders, whole communities
of researchers could get together, and share their work, and build
the tools they need.
The good:
The bad:
A question of Bruce Westbury at FPSAC 2013 in Paris:
Growing conviction: at this stage SageMath really needs:
Doable ????
We started with Vincent Delecroix and Thierry Monteil and ... it grew organically
Work Programme: Horizon 2020, European Research Infrastructures
Call: Virtual Research Environments
Budget: 7.6 M€
Aim: support the ecosystem of open source software for pure maths and applications
Consortium: 15 sites, 50 participants, ... together with the international community!
Software: GAP, Jupyter, Linbox, Pari, Singular, SageMath, ...
$\Longrightarrow$
import sage_annotations
from mygap import mygap
mygap.LoadPackage("Semigroups");
import sage_semigroups
import sage_combinat_widgets
from sage_explorer import explore
from sage_explorer.sage_explorer import Settings
Settings.add_property('cardinality', predicate=Groups().Finite().__contains__)
Settings.add_property('conjugacy_classes', predicate=Groups().Finite().__contains__)
Settings.add_property('multiplication_table', predicate=Groups().Finite().__contains__)
%display unicode_art
tensor.symbol = " ⊗ "
%run style/odk.py
T5 = mygap.FullTransformationSemigroup(5)
T5.cardinality()
3125
d_classes = T5.d_classes()
for d_class in d_classes:
print(d_class)
<Green's D-class: IdentityTransformation> <Green's D-class: Transformation( [ 1, 2, 3, 4, 1 ] )> <Green's D-class: Transformation( [ 1, 1, 2, 3, 1 ] )> <Green's D-class: Transformation( [ 3, 1, 3, 1, 3 ] )> <Green's D-class: Transformation( [ 1, 1, 1, 1, 1 ] )>
G = d_classes[1].schutzenberger_group()
G
Group([ (1,2,3,4), (1,2) ])
reps = G.irreducible_representations(GF(3))
for rho in reps:
display([matrix(rho(g).gap()) for g in G.group_generators()])
[ (2), (2) ]
[ (1), (1) ]
⎡ ⎛2 2 0⎞ ⎛2 0 0⎞ ⎤ ⎢ ⎜2 1 0⎟ ⎜0 2 2⎟ ⎥ ⎣ ⎝0 1 1⎠, ⎝0 0 1⎠ ⎦
⎡ ⎛0 1 2⎞ ⎛2 2 0⎞ ⎤ ⎢ ⎜2 2 1⎟ ⎜0 1 0⎟ ⎥ ⎣ ⎝2 2 0⎠, ⎝0 0 1⎠ ⎦
all( [ rho(g)*rho(h) == rho(g*h) for g in G for h in G ] )
True
One of ODK case studies for interfacing with other systems
libgap used to be a fragile hard to maintain fork of GAP
Volker Braun
libgap is now a standard feature of GAP
M. Horn, A. Konovalov , M. Pfeiffer , J. Demeyer , E. M. Bray , N. Thiéry , D. Pasechnik
GAP-Sage Days 2016, 2017, 2018
Made possible by GAP's build system refactoring
M. Horn, A. Konovalov , ...
A major step for sustainable packaging of GAP and Sage
One of ODK case study for extracting independent low-level libraries C++
libsemigroups API design:
J. Mitchell with F. Hivert and N. Thiéry: Cernay 2017, 2018
libsemigroups Python bindings
J. Mitchell and N. Thiéry : Edinburgh, 2017, Cernay 2017, 2018
libsemibroups usable directly in Jupyter thanks to xeus-cling
S. Corlay, J. Mabile, L. Gouarin
libsemigroups packaging
J. Mitchell and N. Thiéry : Jupyter for Mathematics Workshop, Edinburgh, 2017
A = T5.algebra(QQ); A
Algebra of <full transformation monoid of degree 5> over Rational Field
A.an_element() ^ 3
58*B + 74* Transformation( [ 4, 5, 1, 2, 3 ] ) B + 76*1 + 72* Transformation( [ 3, 4, 5, 1, 2 ] ) B + 63*B Transformation( [ 2, 3, 4, 5, 1 ] ) Transformation( [ 5, 1, 2, 3, 4 ] )
@semantic(mmt="Group", variant="multiplicative")
class Groups:
class ParentMethods:
@semantic(gap="GeneratorsOfGroup", codomain=Family[Self])
@abstract_method
def group_generators(self):
pass
explore(G)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-12-6e571a77e71b> in <module>() ----> 1 explore(G) NameError: name 'G' is not defined
Sym = SymmetricFunctions(QQ['t']);
s = Sym.s()
s[3,1].coproduct()
1 ⊗ s + s ⊗ s + s ⊗ s + s ⊗ s + s ⊗ s + s ⊗ s + ┌┬┬┐ ┌┐ ┌┬┐ ┌┐ ┌┬┬┐ ┌┐ ┌┬┐ ┌┬┐ ┌┐ ┌┬┐ ┌┬┐ ├┼┴┘ └┘ ├┼┘ └┘ └┴┴┘ ├┤ └┴┘ └┴┘ ├┤ └┴┘ └┴┘ └┘ └┘ └┘ └┘ s ⊗ s + s ⊗ s + s ⊗ 1 ┌┬┐ ┌┐ ┌┬┬┐ ┌┐ ┌┬┬┐ ├┼┘ └┘ └┴┴┘ └┘ ├┼┴┘ └┘ └┘
@interact
def f(p1 = Partition([2,1])._widget_()):
return s[p1].coproduct()
Interactive function <function f at 0x7f27dd74fd08> with 1 widget p1: GridViewWidget(value=[2, 1], children=…
Bringing some exceptional people to the SageMath community
Bringing communities together in a collaborative spirit: GAP, ..., Oscar
Tension between career paths and project-based funding
Running a project of the scale of ODK takes a lot of overhead
Granularity: can't always shoot for the moon
Some great admin people; but really, our EU services are not up to speed
They deserve it!
Jupyter is a key enabling technology for Open Science & EOSC
Europe should fund core development, to support and to steer
BOSSEE Call: European Open Science Cloud INFRAEOSC-02-2019
Scope: Core Jupyter development, demonstrators in many areas of science
Leader: Min-Ragan Kelley
Partners: EGI, INSERM, QuantStack, WildTreeTech, ...
Submitted: January 2019; denied
Will submit again!
Mathematical Data have a key role to play and raise specific challenges
FAIRMAT Call: European Open Science Cloud INFRAEOSC-02-2019
Scope: FAIR Data in Mathematics
Leader: Michael Kohlhase
Submitted: January 2019; denied
Will submit again!
Scope: Computational mathematics / Tetrapod
Leader: ? Key question: proper administrative support
Funding for: community building, conferences; no RSE!
How to overcome failures?
Public bodies ought to fund basic research
Public bodies ought to fund basic scientific software
development
OpenDreamKit style collaboratively developed toolkits have the
potential to massively transform how (mathematical) sciences are
researched, taught, and applied
Jupyter is a key enabling technology for Open Science & EOSC
Europe should fund core development, to support and steer
Research Software Engineers are a key asset
Requires funding, career paths, recognition ... and creative
setups
A dozen are needed for Computational Maths and the Tetrapod
Open Management & OpenDreamKit's spirit are powerful approaches
There is a great community here; it needs support
We need volunteers!
Go for it :-)