GAP packages overview

In this demonstration, we will visualise some information about the GAP packages ecosystem, using the JupyterViz package by Nathan Carter. First, we need to load this package.

In [1]:
LoadPackage("jupyterviz");
Out[1]:
true

First, we read metadata for all GAP packages available in this GAP installation (145 packages are redistributed with GAP 4.10.2; the number you will see below may differ dependently on your installation).

In [3]:
pkgnames := SortedList(RecNames(GAPInfo.PackagesInfo));;
Length(pkgnames);
Out[3]:
145

Now, we read an auxliary file with the necessary GAP code.

In [4]:
Read("../gap/packages.g");

This is the list of packages in this GAP installation, ordered by their release date.

In [5]:
reldates:=PackageReleaseDates();;
*** Releases in chronological order:
22/12/2012 : ToricVarieties 2012.12.22
07/03/2013 : CTblLib 1.2.2
27/10/2013 : HAPcryst 0.1.11
02/12/2014 : CoReLG 1.20
08/03/2016 : GBNP 1.0.3
11/03/2016 : ACE 5.2
20/03/2016 : CRISP 1.4.4
28/02/2017 : OpenMath 11.4.2
07/03/2017 : Toric 1.9.4
26/04/2017 : Smallsemi 0.6.11
03/08/2017 : IRREDSOL 1.4
10/09/2017 : SCO 2017.09.10
12/09/2017 : Nilmat 1.3
14/09/2017 : IntPic 0.2.3
25/09/2017 : Circle 1.6.1
21/11/2017 : genss 1.6.5
29/11/2017 : Polenta 1.3.8
03/12/2017 : NormalizInterface 1.0.2
30/01/2018 : EDIM 1.3.3
04/02/2018 : LocalizeRingForHomalg 2018.02.04
18/02/2018 : FactInt 1.6.2
08/03/2018 : fwtree 1.1
08/03/2018 : SglPPow 2.1
20/03/2018 : SymbCompCC 1.3
23/03/2018 : FGA 1.4.0
24/03/2018 : GUAVA 3.14
31/03/2018 : FinInG 1.4.1
09/04/2018 : SmallGrp 1.3
09/04/2018 : Sophus 1.24
09/04/2018 : Unipot 1.4
09/04/2018 : LieAlgDB 2.2
15/04/2018 : recog 1.3.2
23/04/2018 : RadiRoot 2.8
01/05/2018 : UnitLib 4.0.0
12/05/2018 : Polycyclic 2.14
08/06/2018 : json 2.0.0
08/06/2018 : Browse 1.8.8
11/06/2018 : Cubefree 1.17
13/06/2018 : ITC 1.5
14/06/2018 : float 0.9.1
06/07/2018 : 4ti2Interface 2018.07.06
18/07/2018 : Example 4.1.1
24/07/2018 : PatternClass 2.4.2
30/07/2018 : AutPGrp 1.10
09/08/2018 : GrpConst 2.6.1
19/08/2018 : permut 2.0.3
30/08/2018 : XModAlg 1.17
31/08/2018 : TransGrp 2.0.4
08/09/2018 : Gauss 2018.09.08
13/09/2018 : DeepThought 1.0.2
14/09/2018 : cohomolo 1.6.7
22/09/2018 : uuid 0.6
22/09/2018 : crypting 0.9
26/09/2018 : Automata 1.14
27/09/2018 : Forms 1.2.5
30/09/2018 : AutomGrp 1.3.1
07/10/2018 : SONATA 2.9.1
10/10/2018 : QPA 1.29
11/10/2018 : LiePRing 1.9.2
11/10/2018 : AClib 1.3.1
11/10/2018 : CRIME 1.5
17/10/2018 : GAPDoc 1.6.2
26/10/2018 : curlInterface 2.1.1
27/10/2018 : PrimGrp 3.3.2
29/10/2018 : SgpViz 0.999.4
01/11/2018 : ZeroMQInterface 0.11
03/11/2018 : FR 2.4.6
04/11/2018 : Carat 2.2.3
06/11/2018 : loops 3.4.1
14/11/2018 : lpres 1.0.1
15/11/2018 : Guarana 0.96.2
20/11/2018 : HeLP 3.4
30/11/2018 : Wedderga 4.9.5
02/12/2018 : MapClass 1.4.4
06/12/2018 : MajoranaAlgebras 1.4
18/12/2018 : datastructures 0.2.3
01/01/2019 : IO_ForHomalg 2019.01.01
05/01/2019 : GradedModules 2019.01.05
07/01/2019 : ExamplesForHomalg 2019.01.07
16/01/2019 : GeneralizedMorphismsForCAP 2019.01.16
16/01/2019 : LinearAlgebraForCAP 2019.01.16
16/01/2019 : ModulePresentationsForCAP 2019.01.16
01/02/2019 : GaussForHomalg 2019.02.01
01/02/2019 : HomalgToCAS 2019.02.01
01/02/2019 : RingsForHomalg 2019.02.01
03/02/2019 : homalg 2019.02.03
03/02/2019 : Modules 2019.02.03
05/02/2019 : HAP 1.19
06/02/2019 : hecke 1.5.2
06/02/2019 : Thelma 1.02
15/02/2019 : nq 2.5.4
17/02/2019 : ToolsForHomalg 2019.02.17
19/02/2019 : walrus 0.99
19/02/2019 : kbmag 1.5.8
19/02/2019 : ModIsom 2.5.0
21/02/2019 : QuaGroup 1.8.1
22/02/2019 : singular 2019.02.22
22/02/2019 : Repsn 3.1.0
23/02/2019 : orb 4.8.2
23/02/2019 : LieRing 2.4.1
23/02/2019 : JupyterKernel 1.3
23/02/2019 : polymaking 0.8.2
23/02/2019 : YangBaxter 0.7.0
23/02/2019 : RDS 1.7
02/03/2019 : SpinSym 1.5.1
04/03/2019 : XMod 2.73
08/03/2019 : MatricesForHomalg 2019.03.08
15/03/2019 : profiling 2.2.1
15/03/2019 : FORMAT 1.4.1
18/03/2019 : IO 4.6.0
18/03/2019 : DESIGN 1.7
20/03/2019 : cvec 2.7.2
20/03/2019 : GRAPE 4.8.2
24/03/2019 : RCWA 4.6.4
24/03/2019 : ResClasses 4.7.2
26/03/2019 : PolymakeInterface 2019.03.26
28/03/2019 : JupyterViz 1.5.1
29/03/2019 : SLA 1.5.2
02/04/2019 : GradedRingForHomalg 2019.04.02
16/04/2019 : XGAP 4.30
17/04/2019 : Digraphs 0.15.2
18/04/2019 : ANUPQ 3.2.1
18/04/2019 : matgrp 0.62
25/04/2019 : NumericalSgps 1.2.0
01/05/2019 : Convex 2019.05.01
01/05/2019 : TomLib 1.2.8
10/05/2019 : PackageManager 0.4
10/05/2019 : AtlasRep 2.1.0
17/05/2019 : Francy 1.2.4
19/05/2019 : SCSCP 2.3.0
19/05/2019 : Congruence 1.2.3
19/05/2019 : LAGUNA 3.9.3
20/05/2019 : AutoDoc 2019.05.20
28/05/2019 : CrystCat 1.1.9
28/05/2019 : Cryst 4.1.19
29/05/2019 : groupoids 1.66
29/05/2019 : utils 0.63
29/05/2019 : kan 1.29
29/05/2019 : idrel 2.43
31/05/2019 : FPLSA 1.2.3
03/06/2019 : simpcomp 2.1.10
04/06/2019 : Alnuth 3.1.1
07/06/2019 : CAP 2019.06.07
07/06/2019 : Semigroups 3.1.3
07/06/2019 : MonoidalCategories 2019.06.07

The majority of packages has been updated within the last two years

In [6]:
PackageReleaseDatesSummary(reldates);;
*** Number of packages last updated in specified year:
2012 : 1
2013 : 2
2014 : 1
2016 : 3
2017 : 11
2018 : 58
2019 : 69

We will now illustrate this with a bar chart, produced with the help of the JupyterViz package.

In [7]:
Plot(reldates,rec(type:="bar"));
Out[7]:

GAP 4.11 will introduce new field in the package metadata to specify its license using SPDX identfiers. Some packages already include this information, and even more will contain it after the next GAP release.

In [8]:
licinfo:=PackagesByLicenseType();;
*** 61 packages have SPDX license identifier in PackageInfo.g
*** 84 packages have no SPDX license identifier in PackageInfo.g

*** Licence types, when SPDX license identifier provided:
84 : Not specified
50 : GPL-2.0-or-later
6 : GPL-3.0-or-later
1 : none
1 : MIT
1 : GPL-3.0
1 : GPL-2.0 OR GPL-3.0
1 : BSD-3-Clause

In [9]:
Plot(licinfo, rec(type:="pie"));
Out[9]:

Next, we look at the number of packages providing a standard test.

In [10]:
PackagesStandardTests();
*** 113 packages have standard test in PackageInfo.g
*** 32 packages have no standard test in PackageInfo.g

For packages with tests, use the list below for Travis CI tests:
- PKG_NAME=ace
- PKG_NAME=aclib
- PKG_NAME=alnuth
- PKG_NAME=anupq
- PKG_NAME=atlasrep
- PKG_NAME=autodoc
- PKG_NAME=automata
- PKG_NAME=automgrp
- PKG_NAME=autpgrp
- PKG_NAME=carat
- PKG_NAME=circle
- PKG_NAME=cohomolo
- PKG_NAME=congruence
- PKG_NAME=crime
- PKG_NAME=crisp
- PKG_NAME=crypting
- PKG_NAME=cryst
- PKG_NAME=crystcat
- PKG_NAME=ctbllib
- PKG_NAME=cubefree
- PKG_NAME=curlinterface
- PKG_NAME=cvec
- PKG_NAME=datastructures
- PKG_NAME=deepthought
- PKG_NAME=design
- PKG_NAME=digraphs
- PKG_NAME=example
- PKG_NAME=factint
- PKG_NAME=fga
- PKG_NAME=fining
- PKG_NAME=float
- PKG_NAME=format
- PKG_NAME=forms
- PKG_NAME=fplsa
- PKG_NAME=fr
- PKG_NAME=francy
- PKG_NAME=gbnp
- PKG_NAME=genss
- PKG_NAME=grape
- PKG_NAME=groupoids
- PKG_NAME=grpconst
- PKG_NAME=guarana
- PKG_NAME=guava
- PKG_NAME=hap
- PKG_NAME=hapcryst
- PKG_NAME=hecke
- PKG_NAME=help
- PKG_NAME=idrel
- PKG_NAME=intpic
- PKG_NAME=io
- PKG_NAME=irredsol
- PKG_NAME=json
- PKG_NAME=jupyterkernel
- PKG_NAME=jupyterviz
- PKG_NAME=kan
- PKG_NAME=kbmag
- PKG_NAME=laguna
- PKG_NAME=liealgdb
- PKG_NAME=liepring
- PKG_NAME=liering
- PKG_NAME=loops
- PKG_NAME=lpres
- PKG_NAME=majoranaalgebras
- PKG_NAME=mapclass
- PKG_NAME=matgrp
- PKG_NAME=modisom
- PKG_NAME=monoidalcategories
- PKG_NAME=normalizinterface
- PKG_NAME=nq
- PKG_NAME=numericalsgps
- PKG_NAME=openmath
- PKG_NAME=orb
- PKG_NAME=packagemanager
- PKG_NAME=patternclass
- PKG_NAME=permut
- PKG_NAME=polenta
- PKG_NAME=polycyclic
- PKG_NAME=polymaking
- PKG_NAME=primgrp
- PKG_NAME=profiling
- PKG_NAME=qpa
- PKG_NAME=radiroot
- PKG_NAME=rcwa
- PKG_NAME=rds
- PKG_NAME=recog
- PKG_NAME=repsn
- PKG_NAME=resclasses
- PKG_NAME=scscp
- PKG_NAME=semigroups
- PKG_NAME=sglppow
- PKG_NAME=sgpviz
- PKG_NAME=simpcomp
- PKG_NAME=singular
- PKG_NAME=sla
- PKG_NAME=smallgrp
- PKG_NAME=smallsemi
- PKG_NAME=sonata
- PKG_NAME=sophus
- PKG_NAME=spinsym
- PKG_NAME=thelma
- PKG_NAME=tomlib
- PKG_NAME=toric
- PKG_NAME=transgrp
- PKG_NAME=unipot
- PKG_NAME=unitlib
- PKG_NAME=utils
- PKG_NAME=uuid
- PKG_NAME=walrus
- PKG_NAME=wedderga
- PKG_NAME=xmod
- PKG_NAME=xmodalg
- PKG_NAME=yangbaxter
- PKG_NAME=zeromqinterface

For packages without tests, this is the TODO list to add them:
- [ ] 4ti2interface
- [ ] browse
- [ ] cap
- [ ] convex
- [ ] corelg
- [ ] edim
- [ ] examplesforhomalg
- [ ] fwtree
- [ ] gapdoc
- [ ] gauss
- [ ] gaussforhomalg
- [ ] generalizedmorphismsforcap
- [ ] gradedmodules
- [ ] gradedringforhomalg
- [ ] homalg
- [ ] homalgtocas
- [ ] io_forhomalg
- [ ] itc
- [ ] linearalgebraforcap
- [ ] localizeringforhomalg
- [ ] matricesforhomalg
- [ ] modulepresentationsforcap
- [ ] modules
- [ ] nilmat
- [ ] polymakeinterface
- [ ] quagroup
- [ ] ringsforhomalg
- [ ] sco
- [ ] symbcompcc
- [ ] toolsforhomalg
- [ ] toricvarieties
- [ ] xgap

An overview of package documentation tools, and also diagnostic of missing css files is produced next.

In [11]:
PackagesManualFormats();
*** 113 packages use GAPDoc (immediately or via AutoDoc) 

*** 32 packages do not have GAPDoc-based documentation:
- [ ] ace
- [ ] aclib
- [ ] alnuth
- [ ] automgrp
- [ ] autpgrp
- [ ] carat
- [ ] cohomolo
- [ ] crisp
- [ ] cryst
- [ ] crystcat
- [ ] cubefree
- [ ] design
- [ ] fga
- [ ] format
- [ ] fwtree
- [ ] grape
- [ ] grpconst
- [ ] irredsol
- [ ] itc
- [ ] liepring
- [ ] matgrp
- [ ] modisom
- [ ] nilmat
- [ ] radiroot
- [ ] rds
- [ ] sglppow
- [ ] sonata
- [ ] sonata
- [ ] symbcompcc
- [ ] transgrp
- [ ] unipot
- [ ] xgap

*** 2 GAPDoc-based manuals miss css files:
- [ ] gbnp
- [ ] simpcomp


Finally, we are trying to identify all authors involved in developing GAP packages.

In [12]:
PackageAuthors();
*** Around 200 package authors/maintainers involved
(this is an estimate, and the list may contain duplicates):

Erhard Aichinger, Michael Albert, Murat Alp, Nurullah Ankaralioglu, 
Zekeriya Arvasi, Björn Assmann, Reinald Baart, Thomas Baechler, 
Gurmeet Kaur Bakshi, Adolfo Ballester-Bolinches, John Bamberg, 
Mohamed Barakat, Laurent Bartholdi, Reimer Behrends, Hans Ulrich Besche, 
Anton Betten, Franz Binder, Marcus Bishop, Tom Boothby, Victor Bovdi, 
John N. Bray, Thomas Breuer, Osnel Broche Cristo, Peter Brooksbank, 
Stuart Burrell, Andreas Bächle, Thomas Bächler, Philippe Cara, 
Nathan Carter, Frank Celler, Serena Cicalò, Carmelo Cisco, A.M. Cohen, 
Enric Cosme-Llópez, Marco Costantini, Jasper Cramwinckel, Vahid Dabbaghian, 
Jan De Beule, Karel Dekimpe, Manuel Delgado, Alla Detinko, Florian Diebold, 
Heiko Dietrich, Andreas Distler, Ann Dooms, James East, Jürgen Ecker, 
Felix Effenberger, Attila Egri-Nagy, Bettina Eick, Luke Elliott, 
Graham Ellis, Ramón Esteban-Romero, Paolo Faccin, Dörte Feichtenschlager, 
Volkmar Felsch, Joe Fields, Dane Flannery, Strazzanti Francesco, 
The GAP Team, Greg Gamble, Pedro A. Garcia-Sanchez, 
Juan Ignacio García-García, Vladimir Gerdt, Simon Goertzen, Edward Green, 
Sebastian Gutsche, Franz Gähler, Simon Görtzen, Sergei Haller, 
Nicholas Ham, René Hartung, George Havas, Benjamín Alarcón Heredia, 
Allen Herman, Andrés Herrera-Poyatos, Anne Heyworth, Ludger Hippe, 
Ruth Hoffmann, Derek Holt, Max Horn, Stephen Howe, Alexander Hulpke, 
Burkhard Höfling, Sebastian Jambor, Adam James, Christopher Jefferson, 
Eric Jespers, Julius Jonusas, David Joyner, Markus Kirschmer, J.W. Knopper, 
Stefan Kohl, Alexander Konovalov, Vladimir Kornyak, Markus Lange-Hegermann, 
Vasyl Laver, Michel Lavrauw, Maska Law, Martin Leuner, Steve Linton, 
Arne Lorenz, Frank Lübeck, Lukas Maas, Kay Magaard, Sugandha Maheshwary, 
Gunter Malle, Leo Margolis, Manuel Martins, Nicola Maugeri, Peter Mayr, 
John McDermott, Thomas Merkwitz, Robert Miller, Eric Minkes, James Mitchell, 
Emma J. Moore, Jose Morais, José João Morais, Carlos Jesús Moreno Ávila, 
Oleksandr Motsak, Juergen Mueller, Yevgen Muntyan, Gábor Nagy, 
Liam Naughton, Joachim Neubüser, Max Neunhoeffer, Max Neunhöffer, 
Werner Nickel, Simon Nickerson, Max Nicosia, Alice Niemeyer, Felix Noeske, 
Christof Nöbauer, Eamonn O'Brien, Chris O'Neill, Alper Odabas, 
Ignacio Ojeda, Aurora Olivieri, Gabriela Olteanu, Richard A. Parker, 
Dima V. Pasechnik, Götz Pfeiffer, Markus Pfeiffer, Sebastian Posur, 
Colin Ramsay, Daniel Robertz, Marc Roeder, Erik Roijackers, 
Colva M. Roney-Dougal, Richard Rossmanith, Tobias Rossmann, Lea Ruscio, 
Christopher Russell, Alessio Sammartano, Dmytro Savchuk, Csaba Schneider, 
Hans Schönemann, Ákos Seress, Sergey Shpectorov, Christian Sievers, 
Øystein Skartsæterhagen, Finn Smith, Jhevon Smith, Leonard H. Soicher, 
Oeyvind Solberg, Andrew Solomon, Panagiotis Soules, Jonathan Spreer, 
Andreas Steenpaß, Benjamin Steinberg, Klara Stokes, 
Alfredo Sánchez-R. Navarro, Christof Söger, Cen Tjhai, Michael Torpey, 
Dmitriy Traytel, Enver Onder Uslu, Inneke Van Gelder, Michael Vaughan-Lee, 
Leandro Vendramin, Helena Verrill, Petr Vojtěchovský, Helmut Volklein, 
Vinay Wagh, Nina Wagner, Chris Wensley, Christopher D. Wensley, Glen Whitney, 
Madeleine Whybrow, Murray Whyte, Robert A. Wilson, Wilf Wilson, 
Charles R.B. Wright, Elena Yakimenko, Fabian Zickgraf, Giuseppe Zito, 
Willem de Graaf, Willem Adriaan de Graaf, Angel del Rio, 

Authors with the same surname and different first names:
 - Jose Morais, José João Morais, 
 - Götz Pfeiffer, Markus Pfeiffer, 
 - Finn Smith, Jhevon Smith, 
 - Chris Wensley, Christopher D. Wensley, 
 - Robert A. Wilson, Wilf Wilson, 
 - Willem de Graaf, Willem Adriaan de Graaf, 


The next diagram shows the number of packages having a given number of authors. Most of the packages are developed collaboratively.

In [13]:
Plot(PackageAuthorNumbers(),rec(type:="bar"));
Out[13]:

We finish with the map displaying GAP package development activity per country. For each package, each author gives a point to the country of their location, derived from the metadata from the latest version of their package.

In [14]:
mapdata:=PackagesByCountries();;
Warning: no country detected for Carmelo Cisco, package numericalsgps
Warning: no country detected for Stephen Howe, package recog
--------------------------------------------------------
Package activities by country
--------------------------------------------------------
175 : Germany
93 : U.K.
30 : U.S.
21 : 
15 : Australia
13 : Italy
10 : Belgium
10 : Portugal
10 : Spain
7 : India
6 : Netherlands
6 : Turkey
5 : New Zealand
4 : Austria
4 : Ireland
3 : Brazil
3 : Hungary
3 : Norway
2 : Canada
2 : Russia
2 : United Arab Emirates
1 : Argentina
1 : Greece
1 : Japan
1 : Romania
1 : Sweden
1 : Ukraine
1 : Venezuela
--------------------------------------------------------
In [15]:
CreateVisualization( rec( tool := "plotly", data := mapdata ) );
Out[15]: