Skip to content

GAP 4.9 release notes

Alexander Konovalov edited this page Aug 24, 2018 · 42 revisions

Queries for more updates/PRs:

  1. is:pr milestone:"GAP 4.9.3" is:closed -label:"release notes: not needed" -label:"release notes: added" is:merged
  2. is:pr is:closed is:merged -label:"release notes: not needed" -label:"release notes: added" label:backport-to-4.9

TODO: Updates between GAP 4.9.2 and GAP 4.9.3

  • #2617 Fix HighestWeightModule for Lie algebras in certain cases
  • #2691 kernel: fix GAP_STATIC_ASSERT fallback code

Updates between GAP 4.9.1 and GAP 4.9.2

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 the Profiling package.
  • #2449 Fixed a crash after entering return; in a "method not found" break loop.
  • #2465 The bin/gap.sh script now respect the GAP_DIR environment var [Contributed by RussWoodroofe]
  • #2475 The bin/BuildPackages.sh script now properly builds binaries for the simpcomp 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

Updates between GAP 4.9.0 and GAP 4.9.1

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 in LoadAllPackages 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
  • #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

Beta release of GAP 4.9

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

For Windows, use one of the following archives:

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:

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.

Major changes

  • 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 at README.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 for function(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 to y := 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 for Sort([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 added StableSort, StableSortBy and StableSortParallel. (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 more Random methods (and other RandomXYZ operations) now optionally take an explicit RandomSource 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 use RandomSource
    • #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 value false, then GAP can optimize if foo then ... fi; blocks completely away. For details, see MakeConstantGlobal in Section 4.9 "More About Global Variables" of the GAP reference manual.

Other changes

  • #379, #763, #985 Enhance StructureDescription with a major rewrite, enhancing DirectFactorsOfGroup and adding SemidirectDecompositions; 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 and FrattiniSubgroup as nilpotent
  • #402 Add method for Socle for finite nilpotent groups
  • #438, #880, #882 Change ViewString and String 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 and Socle 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 a FrattiniSubgroup method for powerful p-groups
  • #896, #968 Improve performance for group isomorphism/automorphisms
  • #903 Make ListX, SetX, SumX and ProductX 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 and UppercaseChar
  • #956 Add PositionMaximum and PositionMinimum
  • #960 Switching default command history length from infinity to 1000
  • #961 Allow conversion of -infinity to float via NewFloat and MakeFloat
  • #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 a Zero, 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 and AsSemigroup 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 and RootsMod for moduli with large prime factors; also add IS_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 functions AbsRat, SignRat; and speed up mod, 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
  • #1600 Check version of kernel for package versions
  • #1665 Add new AlgebraicExtensionNC operation
  • #1657 Add NumberColumns and NumberRows to MatrixObj 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) and SU(1,q)
  • #1990 Implement StandardAssociate and StandardAssociateUnit for ZmodnZ, clarify documentation for IsEuclideanRing
  • #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

Bug fixes

  • #433 Fix bugs in NormalSubgroups and PrintCSV
  • #559 Fix nice monomorphism dispatch for HallSubgroup (e.g. fixes HallSubgroup(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 and MinimalNormalSubgroups
  • #714 Make key and attribute values immutable
  • #718 Make OnTuples([-1], (1,2)) return an error
  • #719 Fix bug in NewmanInfinityCriterion which could corrupt the PCentralSeries 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, and IsReesZeroMatrixSemigroup
  • #769 Fix IsFullTransformationSemigroup to work correctly for the full transformation semigroup of degree 0
  • #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 cause OrthogonalEmbeddings to enter a break loop
  • #948 Fix crash in some methods involving partial perms
  • #950 FreeMonoid(0) no longer satisfies IsGroup
  • #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 and FixedPointsOfPartialPerm 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 an IsomorphismFpSemigroup
  • #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 returning false
  • #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 introduce RestrictedInverseGeneralMapping
  • #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.
  • #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

Removed or obsolete functionality

  • #512 Make SetUserPreferences obsolete (use SetUserPreference instead)
  • #597 Remove undocumented NameIsomorphismClass
  • #886 Remove unused code for rational classes of permutation groups
  • #1113 Remove unused and undocumented Randomizer and CheapRandomizer
  • #1305 Remove install-tools.sh script and documentation mentioning it
  • #1324 Withdraw CallWithTimeout and CallWithTimeoutList
  • #1331 Make RecFields obsolete (use RecNames instead)
  • #1374 Remove undocumented SuPeRfail and READ_COMMAND
  • #1765 Remove unused oldmatint.gi (old methods for functions that compute Hermite and Smith normal forms of integer matrices)
  • #1852 Make TRANSDEGREES obsolete

HPC-GAP

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.

Clone this wiki locally