-
Notifications
You must be signed in to change notification settings - Fork 160
GAP 4.9 release notes
Queries for more updates/PRs:
- is:pr milestone:"GAP 4.9.3" is:closed -label:"release notes: not needed" -label:"release notes: added" is:merged
- is:pr is:closed is:merged -label:"release notes: not needed" -label:"release notes: added" label:backport-to-4.9
- #2617 Fix HighestWeightModule for Lie algebras in certain cases
- #2691 kernel: fix GAP_STATIC_ASSERT fallback code
Changes, ordered by id
- #2421 Fixed a bug in iterating over an empty cartesian product [Reported by @isadofschi]
-
#2444 Profiling correctly handles calls to
longjmp
and allows to generate profiles using version 2.0.1 of theProfiling
package. -
#2449 Fixed a crash after entering
return;
in a "method not found" break loop. -
#2465 The
bin/gap.sh
script now respect theGAP_DIR
environment var [Contributed by RussWoodroofe] -
#2475 The
bin/BuildPackages.sh
script now properly builds binaries for thesimpcomp
package - #2488 Fix a bug in computing maximal subgroups, which broke other things (e.g. computing intermediate subgroups). [Reported by Seyed Hassan Alavi]
-
#2578 Fix calling
AtExit
methods after loading a workspace -
#2596 Fix a crash when an error occurs and
OutputLog
points to a stream which uses a stream
Changes, ordered by id
-
#2166 Fix crashes with very large heaps (> 2 GB) on 32 bit systems, and work around a bug in
memmove
in 32-bit glibc versions which could corrupt memory (affects most current Linux distributions) -
#2167 Fix name of the
reversed
option inLoadAllPackages
documentation -
#2202 Removed a never released undocumented HPC-GAP syntax extension which allowed to use a backtick/backquote as alias for
MakeImmutable
. -
#2253 Various changes:
- Improve performance and memory usage of
ImageKernelBlockHomomorphism
- Document
LowIndexSubgroups
- Correct
ClassesSolvableGroup
documentation to clarify that it requires, but does not test membership - fix
IsNaturalGL
for trivial matrix groups with empty generating set
- Improve performance and memory usage of
-
#2259 Make it possible to interrupt
repeat continue; until false;
and similar tight loops with ctrl-C -
#2260 Fix
TriangulizedMat([])
to return an empty list instead of producing an error - #2313, #2320, #2321 Fix several potential (albeit rare) crashes related to garbage collection
On February 2nd, 2018 we published GAP 4.9.0 (the beta release of GAP 4.9), which may be downloaded from https://www.gap-system.org/pub/gap/gap-4.9/beta/.
For Linux and macOS, use one of the following archives, which have the same content and only differ by the archive format: backt
- https://www.gap-system.org/pub/gap/gap-4.9/beta/gap-4.9.0.tar.bz2
- https://www.gap-system.org/pub/gap/gap-4.9/beta/gap-4.9.0.tar.gz
- https://www.gap-system.org/pub/gap/gap-4.9/beta/gap-4.9.0.zip
For Windows, use one of the following archives:
- standard 32-bit version: https://www.gap-system.org/pub/gap/gap-4.9/beta/gap-4.9.0-win.zip
- 32-bit version without readline support (to use in case of any techinical problems with the standard version): https://www.gap-system.org/pub/gap/gap-4.9/beta/gap-4.9.0-noreadline-win.zip
- experimental 64-bit version: https://www.gap-system.org/pub/gap/gap-4.9/beta/gap-4.9.0-win64.zip
The changes in GAP 4.9 are documented on this Wiki page, which contains links to actual pull requests and related discussions:
https://github.com/gap-system/gap/wiki/GAP-4.9-release-notes
We invite users and developers to test the beta release and report any problems using one of the following channels:
- the GAP issue tracker: https://github.com/gap-system/gap/issues
- Open GAP Development mailing list: http://mail.gap-system.org/mailman/listinfo/gap
- GAP Support: http://www.gap-system.org/Contacts/People/supportgroup.html
Package authors are recommended to test and update their packages for GAP 4.9 during the next two months. We are asking for all updates to be made available by April 1st, 2018 and will be planning the first public release shortly after that.
-
Merged HPC-GAP into GAP. For details, please refer to the HPC-GAP section at the end of these release notes.
-
GAP has a new build system, which resolves many quirks and issues with the old system, and will be easier to maintain. For regular users, the usual
./configure && make
should work fine as before. If you are interested in technical details on the new build system, take a look atREADME.buildsys.md
. -
The guidelines for developing GAP packages were revised and moved from the Example package to Chapter 76 "Using and Developing GAP Packages" of the GAP reference manual (if you are interested in the details of the discussion, see #484)
-
In addition to supporting single argument lambda functions like
a -> a+1
, GAP now supports lambdas with fewer or more than one argument, or even a variable number. E.g.{a,b} -> a+b
is a shorthand forfunction(a,b) return a+b; end
. For details, see Section 4.23 "Function" of the GAP reference manual. (For technical details, e.g. why we did not choose the syntax(a,b) -> a+b
, see #490) -
Function calls, list accesses and records now can be nested. For example, you can now write
y := f().x;
(essentially equivalent toy := f();; y := y.x;
), which previously would have resulted in an error (see #457 and #462) -
The libraries of small, primitive and transitive groups which previously were an integral part of GAP were split into three separate packages PrimgGrp, SmallGrp and TransGrp. For backwards compatibility, these are required packages in GAP 4.9 (i.e., GAP will not start without them). We plan to change this for GAP 4.10, once all packages which currently implicitly rely on these new packages had time to add explicit dependencies on them. (For some technical details, see #1650, #1714 )
-
The performance of GAP's sorting functions (such as
Sort
,SortParallel
, ...) has been substantially improved, in some examples by more than a factor of four (as a silly example, compare the timing forSort([1..100000000] * 0);
). As a side effect, the result of sorting lists with equal entries may produce different answers compared to previous GAP versions. If you would like to make your code independant of the exact employed sorting algorithm, you can use the newly addedStableSort
,StableSortBy
andStableSortParallel
. (For some technical details, see #609) -
We removed our old home-grown big integer code, and instead always use the GMP based big integer code. This means that the GMP library now is a required dependency, not just an optional one. Note that GAP has been using GMP big integer arithmetic for a long time by default, and we also have been bundling GMP with GAP. So this change mostly removed code that was never in use for most users.
-
A number of improvements have been made to
Random
. These may lead to different sequences of numbers being created. On the up side, many moreRandom
methods (and otherRandomXYZ
operations) now optionally take an explicitRandomSource
as first argument (but not yet all: help with this is welcome). Some relevant pull requests:- #1165 Allow creating random permutations using a random source
-
#1168 let more
Random
methods use an alternative source -
#810 Help
Random
methods to useRandomSource
- #808 Remove uses of old random generator
-
#781 Fix
Random
on long (>2^28) lists -
#1511 Fix
RandomUnimodularMat
- #1599 Use RandomSource in a few more places
-
The output and behaviour of the profiling system has been substantially improved.
- #1069 Make profiling correctly handle the same file being opened multiple times
-
#1073 Do not profile the
return
statements inserted into the end of functions -
#1164 Ensure we reset
OutputtedFilenameList
in profiling when a workspace is restored - #1806 Better tracking of amounts of memory allocated and time spent in the garbage collector
- #1808 Allow profiling of memory usage
- #1913 Remove profiling limit on files with <= 2^16 lines
-
In many cases GAP now outputs the filename and location of functions in helpful places, e.g. in error messages or when displaying compiled functions. We also try to always use the format
FILENAME:LINE
, which various utilities already know how to parse (e.g. in iTerm2, cmd-clicking on such a string can be configured to open an editor for the file at the indicated line). For some technical details, see #469, #755, #1058. -
#1682, #1770 GAP now supports constant variables, whose value cannot change anymore during runtime; code using such constants can then be slightly optimized by GAP. E.g. if
foo
is turned into a constant variable bound to the valuefalse
, then GAP can optimizeif foo then ... fi;
blocks completely away. For details, seeMakeConstantGlobal
in Section 4.9 "More About Global Variables" of the GAP reference manual.
-
#379, #763, #985 Enhance
StructureDescription
with a major rewrite, enhancingDirectFactorsOfGroup
and addingSemidirectDecompositions
; the core algorithm now also works for infinite abelian groups. Further, it became faster by quickly finding abelian direct factors and recognizing several cases where the group is direct indecomposable. -
#400 Mark
FittingSubgroup
andFrattiniSubgroup
as nilpotent -
#402 Add method for
Socle
for finite nilpotent groups -
#438, #880, #882 Change
ViewString
andString
methods for various inverse semigroups and monoids - #442 Enhance some nilpotent and p-group attributes
-
#444 Improve
Union
for a list with many ranges -
#447 Add
UserHomeExpand
, a function to expand~
in filenames. -
#460 Extra hint in "No Method Found" if one of the arguments is
fail
- #529 Tell Sylow subgroups of natural An or Sn their size when we make them
- #535 Some small enhancements on Sylow and Hall subgroup computations, mostly for nilpotent groups.
- #540 Remove .zoo archive related tools
-
#552, #583, #606 Add new
FrattiniSubgroup
,MaximalNormalSubgroups
,MinimalNormalSubgroups
andSocle
methods for abelian and/or solvable groups, even infinite ones. The new methods are only triggered if the group already knows that it is abelian and/or solvable. -
#561 New attribute
NormalHallSubgroups
, returning a list of all normal Hall subgroups of a group. -
#563 Add
ComplementClassesRepresentatives
fallback method for arbitrary groups -
#612 Add parsing of hex literals in strings, e.g.
"\0x61"
is turned into"a"
- #683 Collection of enhancements
- #720, #1027 Various speed improvements to polynomial factorization and the GAP meataxe
- #727, #732 The code and documentation for transformations is improved and corrected in many instances
-
#761 Change
RootFFE
to optionally takes a field or field size as first argument, from which the roots will be taken -
#777 Change
Permanent
from a global function to an attribute -
#824 Add
CallListFuncWrap
, which wraps return value to allow distinguishing between functions which return and functions which don't. -
#835 Allow repeated use of same
DeclareSynonym
call - #843 New implementation of modified Todd-Coxeter (the old one had bugs, see #302)
- #878 New Functionality: Cannon/Holt automorphisms and others
-
#894 Add
IsPowerfulPGroup
property, and aFrattiniSubgroup
method for powerful p-groups - #896, #968 Improve performance for group isomorphism/automorphisms
-
#903 Make
ListX
,SetX
,SumX
andProductX
support lists which are not collections -
#905 Some improvements for
LatticeByCyclicExtension
-
#925, #1593 Add helpers to retrieve information about operations and filters:
CategoryByName
,ClassOfOperation
,FilterByName
,FiltersObj
,FiltersType
,IdOfFilter
,IdOfFilterByName
,IsAttribute
,IsCategory
,IsProperty
,IsRepresentation
- #928 Add case-insensitive autocomplete
- #939 Give better error message if a helpfile is missing
-
#952 Add
LowercaseChar
andUppercaseChar
-
#956 Add
PositionMaximum
andPositionMinimum
- #960 Switching default command history length from infinity to 1000
-
#961 Allow conversion of
-infinity
to float viaNewFloat
andMakeFloat
-
#986 Add option
NoPrecomputedData
to avoid use of data libraries in certain computations (useful if one wants to verify the content of these data libraries) -
#1036 Remove one-argument version of
AsPartialPerm
for a transformation -
#1040 Partial perms now have a
MultiplicativeZero
rather than aZero
, since they are multiplicative rather than additive elements -
#1046 Various enhancements
- A bugfix in NaturalHomomorphismByIdeal for polynomial rings.
- Improvements in handling solvable permutation groups.
- The trivial group now is a member of the perfect groups library.
- Improvements in using tabulated data for maximal subgroups.
-
#1053 New tests for group constructors and some fixes (e.g.
GO(1,4,5)
used to trigger an error) -
#1062 Make
HasSolvableFactorGroup
slightly more efficient -
#1066 Enhance
HasXXFactorGroup
- #1072 Remove GAP4stones from tests
-
#1112
AsMonoid
andAsSemigroup
are now operations, and various bugs were resolved related to isomorphisms of semigroups and monoids - #1116 Mark isomorphisms between trivial groups as bijective
-
#1141 Speed up
RootMod
andRootsMod
for moduli with large prime factors; also addIS_PROBAB_PRIME_INT
kernel function - #1144 The search for the documentation of system setters and testers now returns corresponding attributes and properties
-
#1192, #1265, #1421, #1448 Remove command line options
-c
,-U
,-i
and-X
, add--quitonbreak
- #1163 Remove Itanium support
- #1314 Adding two strings now shows a more helpful error
-
#1334 Suppress "Unbound global variable" warning in
IsBound
- #1363 Increase warning level for Conway polynomial
-
#1390 Performance improvements to maximal and intermediate subgroups, fix of
RepresentativeAction
- #1441 Revise Chapter 52 of the reference manual (fp semigroups and monoids)
-
#1464, #1770 Improve the performance of the
Info
statement - #1498 When printing function bodies, avoid some redundant spaces
- #1585 Add kernel functions for directly accessing entries of GF2/8bit compressed matrices
-
#1591 Add
String
method for functions - #1600 Check modules were compiled with the same version of GAP when loading them.
-
#1613 When printing function, reproduce
TryNextMethod()
correctly -
#1616] New feature
Bitfields
providing efficient support for packing multiple data items into a single word for cache and memory efficiency - Improved
bin/BuildPackages.sh
, in particular- #2022 add option to abort upon failure
- Rewrote integer code (GMP) for better performance of certain large integer operations, and added kernel implementations of various functions, including these:
-
#1045 Add kernel implementations of
AbsInt
,SignInt
; add new kernel functionsAbsRat
,SignRat
; and speed upmod
,RemInt
,QuoInt
for divisors which are small powers of 2 -
#1075 Add kernel implementations of
Jacobi
,PowerModInt
,Valuation
(for integers),PValuation
(for integers) -
#1969 Add kernel implementation of
Factorial
-
#1921 Add kernel implementation of
Binomial
-
#2019 Add kernel implementation of
LcmInt
-
#1045 Add kernel implementations of
- #1600 Check version of kernel for package versions
-
#1665 Add new
AlgebraicExtensionNC
operation -
#1657 Add
NumberColumns
andNumberRows
toMatrixObj
interface -
#1755
MinimalGeneratingSet
returns an answer for non-cyclic groups that already have a generating set of size 2 (which hence is minimal) -
#1762 Add
GetWithDefault
- #1773 Fast method for ElmsBlist when positions are a range with increment 1
- #1831 Make permutations remember their inverses
-
#1874 Add invariant forms for
GU(1,q)
andSU(1,q)
-
#1990 Implement
StandardAssociate
andStandardAssociateUnit
forZmodnZ
, clarify documentation forIsEuclideanRing
- #2016 Improve documentation and interface for floats
-
#2021 Add
PositionsProperty
method for non-dense lists -
#2037 Add
TrivialGroup(IsFpGroup)
-
#2098 Change
ObjectifyWithAttributes
to return the new objects - Improved GAP testing infrastructure, extended GAP test suite, and increased code coverage
- Countless other tweaks, improvements, fixes were applied to the GAP library, kernel and manual
-
#433 Fix bugs in
NormalSubgroups
andPrintCSV
-
#559 Fix nice monomorphism dispatch for
HallSubgroup
(e.g. fixesHallSubgroup(GL(3,4), [2,3])
) - #581 Check for permutations whose degree would exceed the internal limit, and document that limit.
- #709 Fix segfault after quitting from the break loop in certain cases; fixes #397
-
#711 Fix rankings for
Socle
andMinimalNormalSubgroups
- #714 Make key and attribute values immutable
-
#718 Make
OnTuples([-1], (1,2))
return an error -
#719 Fix bug in
NewmanInfinityCriterion
which could corrupt thePCentralSeries
attribute -
#731 The length of the list returned by
OnSetsPerm
is now properly set -
#766 Fix
Remove
misbehaving when last member of list with gaps in it is removed. -
#768, #1676 Fix bugs in various methods for Rees (0-)matrix semigroups:
IsFinite
,IsOne
,Enumerator
,IsReesMatrixSemigroup
, andIsReesZeroMatrixSemigroup
-
#769 Fix
IsFullTransformationSemigroup
to work correctly for the full transformation semigroup of degree0
- #782 Fix printing very large (> 2^28 points) permutations
-
#854 Fix
Intersection([])
-
#876 Fix crash in
IsKernelFunction
for some inputs -
#941 Fix bug in
ShortestVector
which could causeOrthogonalEmbeddings
to enter a break loop - #948 Fix crash in some methods involving partial perms
-
#950
FreeMonoid(0)
no longer satisfiesIsGroup
- #1009 Fix crash when invoking weak pointer functions on invalid arguments
- #1015 Fix a bug parsing character constants
-
#1029, #1059, #1383, #1573 Fix several bugs and crashes in
Z(p,d)
for invalid arguments, e.g.Z(4,5)
,Z(6,3)
- #1033 Fix starting GAP on systems with large inodes
-
#1034 Fix
NrFixedPoints
andFixedPointsOfPartialPerm
for a partial perm and a partial perm semigroup (they used to return the moved points rather than the fixed points) -
#1035 Fix
MeetOfPartialPerms
when given a collection of 1 or 0 partial perms -
#1036 The behaviour of
AsPartialPerm
for a transformation and a list is corrected -
#1038
IsomorphismReesZeroMatrixSemigroup
for a 0-simple semigroup is now defined on the zero of the source and range semigroups - #1039 Fix isomorphisms from finitely-presented monoids to finitely-presented semigroups, and allow isomorphisms from semigroups to fp-monoids
-
#1040 Fix
One
for a partial perm semigroup without generators -
#1044 Fix
MemoryUsage
for positional and component objects -
#1096 Fix
PlainString
causing immutable strings to become mutable - #1124 Restore support for sparc64
-
#1130 Fix a problem with
<
for transformations, which could give incorrect results -
#1151 Fix crash when comparing recursive data structures such as
[~] = [~]
-
#1247 Ensure output of
TrivialGroup(IsPermGroup)
has zero generators -
#1259 Fix for applying the
InverseGeneralMapping
of anIsomorphismFpSemigroup
-
#1294 Collection of improvements and fixes
- A fix for quotient rings of rings by structure constants
- Generic routine for transformation matrix to rational canonical form
- Speed improvements to block homomorphisms
- New routines for conjugates or subgroups with desired containment
- Performance improvement for conjugacy classes in groups with a huge number of classes, giving significant improvements to:
- IntermediateSubgroups (e.g. 7-Sylow subgroup in PSL(7,2)), ascending chain and thus in turn double coset calculations and further routines that rely on it
-
#1370 Fix
EqFloat
to return correct results, instead of always returningfalse
-
#1417 Various changes, including fixes for
CallFuncList
-
#1432 Better define the result of
MappingPermListList
-
#1435 Check the arguments to
IsInjectiveListTrans
to prevent crashes -
#1488 Change
BlownUpMat
to return fail for certain invalid inputs - #1492, #1771 Fixes for creating Green's classes of semigroups
-
#1504 Fix
DoImmutableMatrix
for finite fields - #1514 Make structural copy handle Blists properly.
- #1569 Minimal fix for Algebraic Extensions over finite fields of order > 256.
- #1669 Fix for computing quotients of certain algebra modules
-
#1672 Fix an error in the default method for
PositionNot
- #1676 Improvements to reesmat code and new tests
-
#1679 Fix
CodePcGroup
for the trivial polycyclic group -
#1697 Fix
FroidurePinExtendedAlg
for partial perm monoids - #1701 Fix computing the radical of a zero dimensional associative algebra
-
#1716 Fix a bug in
RadicalOfAlgebra
which could cause a break loop for some associative algebras -
#1753 Fix a recursion depth trap error when repeatedly calling
Test
-
#1754 Fix bugs in
PrimePGroup
for direct products of p-groups -
#1780 Fix
UpEnv
(available in break loops) when at the bottom of the backtrace -
#1784 Fix
IsomorphismPartialPermSemigroup
and Monoid for perm groups with 0 generators -
#1785 Fix
DisplaySemigroup
for transformation semigroups - #1798 Fix MagmaWith[One|Inverses] "no method found" errors
- #1809 Fix an error computing kernel of group homomorphism from fp group into permutation group
- #1809 Fix an error in MTC losing components when copying a new augmented coset table
-
#1814 Fix output of
Where
in a break loop, which pointed at the wrong code line in some cases - #1851 Fix the interaction of signals in GAP and the IO package
- #1856 Make line editing resilient to LineEditKeyHandler failure (in particular, don't crash)
-
#1867 Omit non-characters from
PermChars
results -
#1872 Fix
ExteriorPower
when exterior power is 0-dimensional (used to return a 1-dimensional result) - #1884 Fix recursion depth trap and other improvements for quotients of fp groups
- #1907 Fix a bug in the computation of a permutation group isomorphic to a group of automorphisms
-
#1920 Fix bug in
InstallFlushableValueFromFunction
-
#1937 Fix
ONanScottType
and introduceRestrictedInverseGeneralMapping
-
#1991 Fix
QuotientMod
documentation, and the integer implementation- This partially reverts changes made in 2013. The documentation is now correct (resp. consistent again),
and several corner cases, e.g.
QuotientMod(0,0,m)
now work correctly.
- This partially reverts changes made in 2013. The documentation is now correct (resp. consistent again),
and several corner cases, e.g.
-
#2056 Fix
PositionProperty
with from < 1 - #2058 Fix inefficiency when dealing with certain algebra modules
- #2064 Restrict capacity of plain lists to 2^28 in 32-bit and 2^60 in 64-bit builds
-
#512 Make
SetUserPreferences
obsolete (useSetUserPreference
instead) -
#597 Remove undocumented
NameIsomorphismClass
- #886 Remove unused code for rational classes of permutation groups
-
#1113 Remove unused and undocumented
Randomizer
andCheapRandomizer
-
#1305 Remove
install-tools.sh
script and documentation mentioning it -
#1324 Withdraw
CallWithTimeout
andCallWithTimeoutList
-
#1331 Make
RecFields
obsolete (useRecNames
instead) -
#1374 Remove undocumented
SuPeRfail
andREAD_COMMAND
- #1765 Remove unused oldmatint.gi (old methods for functions that compute Hermite and Smith normal forms of integer matrices)
-
#1852 Make
TRANSDEGREES
obsolete
GAP includes experimental code to support multithreaded programming in GAP, dubbed HPC-GAP (where HPC stands for "high performance computing"). GAP and HPC-GAP codebases diverged during the project, and we are currently working on unifying the codebases and incorporating the HPC-GAP code back into the mainstream GAP versions.
This is work in progress, and HPC-GAP as it is included with GAP right now
still suffers from various limitations and problems, which we are actively
working on to resolve. However, including it with GAP (disabled by default)
considerably simplifies development of HPC-GAP. It also means that you can
very easily get a (rough!) sneak peak of HPC-GAP. It comes together with the
new manual book called "HPC-GAP Reference Manual" and located in the doc/hpc
directory.
Users interested in experimenting with shared memory parallel programming in GAP can build HPC-GAP by following the instructions from https://github.com/gap-system/gap/wiki/Building-HPC-GAP. While it is possible to build HPC-GAP from a release version of GAP you downloaded from the GAP website, due to the ongoing development of HPC-GAP, we recommend that you instead build HPC-GAP from the latest development version available in the GAP repository at GitHub, i.e. https://github.com/gap-system/gap.