This is my attempt to port the Chevie package from GAP3 to Julia. I started this project at the end of 2018 and it is still in flux so some function names or interfaces may still change. Pull requests and issues are welcome.
I have implemented the GAP functionality (infrastructure) needed to make
Chevie work. I have already registered most of this infrastructure as
separate packages; the following packages are loaded and re-exported so
that their functionality is automatically available when you use Chevie
.
In other words, Chevie
is a meta-package for the following packages:
- (univariate) LaurentPolynomials (and rational fractions)
- (multivariate) PuiseuxPolynomials (and rational fractions when there are no fractional exponents)
- CyclotomicNumbers(elements of cyclotomic fields)
- ModuleElts (elements of a free module over some ring)
- Combinat (combinatorics and some basic number theory)
- PermGroups (permutations, groups, permutations groups. It contains the modules
Perms
andGroups
which could be separate packages) - SignedPerms (signed permutations)
- MatInt (Integer matrices and lattices)
- CycPols (cyclotomic polynomials)
- GenLinearAlgebra (linear algebra on any field/ring)
- FinitePosets (finite posets)
- FiniteFields (finite fields)
- GroupPresentations (presentations of groups, and groups defined by generators and relations)
- UsingMerge (Automatically compose several packages)
Have a look at the documentation of the above packages to see how to use their features.
I have implemented some other infrastructure which currently resides in
Chevie
but may eventually become separate packages:
- factorizing polynomials over finite fields (module
FFfac
) - factorizing polynomials over the rationals (module
Fact
) - Number fields which are subfields of the Cyclotomics (module
Nf
)
For permutation groups I have often replaced GAP's sophisticated algorithms
with naive but easy-to-write methods suitable only for small groups
(sufficient for the rest of the package but perhaps not for your needs).
Otherwise the infrastructure code is often competitive with GAP, despite
using much less code (often 100 lines of Julia replace 1000 lines of C);
and I am sure it could be optimised better than I did. Comments on code and
design are welcome. For functions that are too inefficient or difficult to
implement (such as character tables of arbitrary groups), Chevie
uses the
GAP
package as an extension. This means that if you have the GAP
package installed, Chevie
will automatically call GAP
to implement
these functions.
Functions in the Chevie.jl
package are often 10 times faster than the
equivalent functions in GAP3/Chevie (after the maddeningly long compilation
time on the first run --- Julia's TTFP).
The Chevie
package currently contains about 95% of the GAP3 Chevie
functionality. If you are a user of GAP3/Chevie, the gap
function can
help you to find the equivalent functionality in Chevie.jl
to a Gap3
function: it takes a string and gives you Julia translations of functions
in Gap3 that match that string.
julia> gap("words")
CharRepresentationWords => traces_words_mats
CoxeterWords(W[,l]) => word.(Ref(W),elements(W[,l]))
GarsideWords => elements
You can then access online help for the functions you have found.
The port to Julia is not complete in the sense that 80% of the code is the
data library from Chevie, which was automatically ported by a transpiler so
its code is "strange". When the need to maintain the GAP3
and Julia
versions simultaneously subsides, I will do a proper translation of the
data library, which should give an additional speed boost.
This is a registered package that can be installed/upgraded in the standard way. For Julia newbies, we will remind you what this is. To install, do this at the REPL command line:
- enter package mode with ]
- do the command
(@v1.10) pkg> add Chevie
- exit package mode with backspace and then do
julia> using Chevie
and you are set up. For first help, type "?Chevie".
To update later to the latest version, do
(@v1.10) pkg> update
Chevie.jl
requires julia 1.10 or later.