Skip to content

GAP 4.11 release notes

Alexander Konovalov edited this page Mar 2, 2020 · 76 revisions

This is a page to collect most important changes planned to appear in GAP 4.11 release series.

To check if there are new pull requests that have to be added to these release notes, use the following queries:

For each pull request there, decide what to do with it: if it should be mentioned in these release notes, then add it in the appropriate place below, and afterwards give it the "added to release notes" label. Otherwise, add the "not for release notes" label. In either case, it will be removed from the list shown by the query.

GAP 4.11.0

New features and major changes

Removed ability to return objects from many error break loops

Many error break loops in GAP used to allow replacing an object in a computation by another one. This ability was very tricky to use, and leads to computation results that are difficult to reproduce. At the same time, supporting this adds complexity to the GAP kernel. We therefore decided to remove this feature. Right now, this is not yet fully done, but we removed about 3/4 of these, and will remove the rest in a future GAP release. (See e.g. PR #2966).

GAP now contains some C++ code

Therefore, in order to compile it, you need a C++ compiler. See #2667 for the rationale.

HPC-GAP

The ward tool has been decommissioned in PR #2870. In the future, guard checks will be performed in a different way; however, this code is not yet complete (see PR #2845). In the meantime, guard checking is broken. If you are interested in using HPC-GAP, please consider helping us to fix this and other issues with it.

Syntax trees

Functions were added which allow converting a GAP function object into an abstract syntax tree which can be parsed and modified from within GAP code (see PR #2628). Moreover, it is possible to convert such a syntax tree (possibly after modifying it) back into a GAP function object (see PR #3371).

Improved and extended functionality

  • #1633 Allow local variables in test files via #@local <list of variables to be local>, and conditional execution of tests via #@if, #@else, #@endif
  • #2520 Overhaul tracking of current statement, fixing several bugs where the break loop error message referenced the wrong statement
  • #2772 Add support for profiling interpreted code
  • #2773 Reorder methods after new implications are added
  • #2830 Undocumented functionality has now been extended and documented that allows one to construct the Green's classes of a semigroup that are contained in another Green's class (e.g. constructing the H-classes contained in an R-class)
  • #2856 Make AtExit a stack and make DirectoryTemporary more robust
  • #2869 Fix + and * methods for a DirectProductElement and a non-list collection
  • #2873 The GAP kernel version is now available in the configure script
  • #2876 IsomorphismTransformationSemigroup now returns an IdentityMapping for a transformation semigroup
  • #2923 Extend obsolete to support multiple levels
  • #2936 Add back ViewObj method for generic fields
  • #2946, #2955,
  • #2952 Add command line option --bare to start GAP without even needed packages (developer tool)
  • #2960 Add List method accepting an iterator and a function
  • #2974, #3372 Improve many error messages
  • #2985 Improve support for custom list object implementations
  • #2998, #2999, #3007 Expose additional functionality related to chars, floats and integers via the libgap API
  • #2900 Teach Test to abort test if ctrl-C is pressed
  • #2910 Add custom SetDimension implementation, and call SetDimension(A,0) in places creating trivial modules or algebras
  • #2924 Improve performance of NormalizerViaRadical
  • #3031 Improve performance of ConjugacyClasses for solvable groups
  • #3053 More properties can now be preserved when constructing direct products of semigroups
  • #3075 Special redispatch for Nat.Hom.ByNS if group is found out to be finite
  • #3076 Add IsAutoGlobal for testing whether a variable was declared using DeclareAutoreadableVariables
  • #3077 Allow appending to the command line history
  • #3078 Avoid memory issues in solvable conjugacy classes routine
  • #3080 Method to compute Hall subgroups of arbitrary finite groups.
  • #3093 Methods transforming small matrix groups into permutation groups now work for objects of type IsMatrixObj
  • #3099 Show a warning when GroupWithGenerators called on a domain
  • #3104 Extend IntegratedStraightLineProgram to the situation that some of the input programs return lists of elements
  • #3118 Make Refinements an AtomicRecord so it can be added to by users
  • #3129 BrauerTableOp now works for cyclic defect such that all Brauer characters lift to characteristic zero
  • #3168 Allow input and output to be mixed in Test
  • #3207 Display for functions with large literals is improved
  • #3626 Customisable names of classes and characters in Display of character tables
  • #3621 Add Display method for PC group
  • #3209 Enable backtraces with --enable-debug
  • #3226 Make last, last2, last3,time and memory_allocated read-only
  • #3231 Speed up IsConjugate for IsNaturalSymmetricGroup
  • #3247 CloseMutableBasis now returns true if the basis was extended and false otherwise
  • #3252 Improve gac to preserve argument names of compiled functions
  • #3253 CharacterTableIsoclinic now works for groups of type p.G.p
  • #3267 Change StructureDescription of an infinite cyclic group from C0 to Z
  • #3278 Improve method for IsSolvableGroup
  • #3335 Reduce memory usage on windows when running external programs
  • #3365 Add First(list), Last(list) and Last(list,func)
  • #3370 Pragmas are now available
  • #3376 SortedList now accepts a function as the second argument
  • #3383 Implement 2-cohomology and module computations for arbitrary finite groups, not just solvable ones, via TwoCohomologyGeneric
  • #3384 Improve performance of subgroup calculations (e.g. via ConjugacyClassesSubgroups) in some cases
  • #3385 Add FlipBlist, ClearAllBlist, SetAllBlist
  • #3387 Add ShowUsedInfoClasses
  • #3394 Make the descriptions for TNUMs (which we print in some error messages) more user friendly
  • #3399 Support floating point numbers when specifying how much memory GAP should use, for example "-o 2.5G"
  • #3420 Give more library methods human-readable names. These are used when profiling
  • #3423 Improve gac to support calls to custom function objects
  • #3430 NameFunction now is an attribute so that custom function objects can implement support for it
  • #3454 Improve error handling for Image, Images, PreImage and PreImages
  • #3455 New function DirectProductFamily
  • #3459 Add ShowDeclarationsOfOperation helper
  • #3473 Improve an AsList method for domains with stored GeneratorsOfDomain
  • #3483 Change the pre-set memory limit default from 2GB to 3/4 of physical memory. Use the -o option if you want to change this limit.
  • #3501 MaximalSubgroups now works even if tomlib is not available
  • #3504 make bootstrap now uses curl if wget is unavailable under macOS
  • #3516 Improve performance of the Julia GC integration
  • #3520 Clarify when nonabelian simple groups are meant in the documentation
  • #3522 Add IsNonabelianSimpleGroup
  • #3542 Add --add-package-config-<PACKAGENAME>="<CONFIG_ARGS>" option to BuildPackages.sh where <CONFIG_ARGS> are passed through to the configure script of package <PACKAGENAME>
  • #3543 Add PositionSortedBy
  • #3551 Add new kernel operations ELM_MAT, ASS_MAT
  • #3513 Use posix_spawn in iostreams if available
  • #3554 Add basic libgap APIs for working with matrices
  • #3564 Add WhereWithVars, an extended version of Where which prints the values of all arguments and locals
  • #3566 Optimise operations involving identity permutations, improve printing of permutations
  • #3630 Speed up MaximalAbelianQuotient for subgroups of fp groups
  • #3579 Speed up writing to global variables
  • #3592 The values of computed attributes will no longer be stored automatically in mutable attribute-storing objects
  • #3604 Add EuclideanDegree and QuotientRemainder for Z/nZ
  • #3619 Randomize is now documented, and its definition changed: note that it is now Randomize(random_source, obj)
  • #3620 make html can be used to compile only HTML versions of the GAP manuals, without a PDF.
  • #3683 Add etc/Makefile.gappkg, for use in the build system of GAP package with kernel extensions
  • #3690 Improve NullspaceModQ to support arbitrary moduli, and renamed it to NullspaceModN (the old name is still available as a synonym)
  • #3711 Adjust TestPackage to return information about the test result
  • #3715 Allow HPC-GAP to run as a forkable server process
  • #3745 Add a new kernel header gap_all.h for use by package authors instead of compiled.h
  • #3746 Allow package build systems to detect GAP version by inserting GAP_VERSION into sysinfo.gap
  • #3606 Add BindingsOfClosure helper (Work in progress)

Changed documentation

  • #2798 Clarify MemoizePosIntFunction documentation
  • #2946 Document what a "small integer" resp. "immediate integer" is
  • #2953 Document that PermutationGModule works not just for finite fields
  • #3101 Remove Section 87.2-5 on "Avoiding multiplication of permutations" in the reference manual (the described functionality does not actually work)
  • #3348 Add explanation for a workaround regarding the ^-key on OSX to INSTALL.md
  • #3358 Document the two-argument version of Set
  • #3360 Improve discoverability of rewriteToFile option in Test
  • #3363 Add some information in the documentation of IsPrimitive.
  • #3374 Document that InputTextFile should not be used for binary files
  • #3449 Clarify and corrects documentation of CompositionMapping
  • #3453 Improve documentation of GeneratorsOfDomain
  • #3468 New PrintObj method for general domains which know their GeneratorsOfDomain
  • #3469 DeclareCategoryCollections, constructors are now documented and parts of the reference manual are refactored
  • #3472 Document IsRangeRep and improve the documentation of ConvertToRangeRep, IsRange, and the section Ranges
  • #3529 Document CharacteristicSubgroups
  • #3591 Improve parts of the documentation in Chapter 41.
  • #3615 Document basic representations of objects (IsInternalRep, IsDataObjectRep, IsComponentObjectRep, IsPositionalObjectRep, IsAttributeStoringRep, IsPlistRep)
  • #3612 Improves the documentation of Quotient to make it sensible for non-commutative rings, and rings with zero divisors

Fixed bugs that could lead to crashes

  • #3151 Fix crash when ApplicableMethod is called incorrectly
  • #3221 Handle infinite recursion in attribute methods
  • #3491 Fix crashes when passing invalid arguments to functions for records: \., IsBound\., Unbind\. and \.\:\=
  • #3738 Fix bug in CycleStructurePerm for a single cycle of length 2^16 that caused wrong answers and memory corruption

Fixed bugs that could lead to incorrect results

  • #2938 Fix bug related to ImaginaryPart for quaternion algebras
  • #3103 This fixes #3097, a problem with Order of automorphism and #3100, a problem with GroupHomomorphismByImages
  • #3392 Prevent blist functions that modify an argument in-place (such as UniteBlist) from modifying immutable blists
  • #3522 IsSimpleGroup does not implies IsAlmostSimpleGroup anymore
  • #3575 Fix bug in calculating x/p for an integer x and permutation p, if p has been 'trimmed'.
  • #3603 Fix bug where the result of StandardAssociateUnit could be not a unit.
  • #3611 Fix StandardAssociateUnit for polynomial rings to return a polynomial, not an element of the coefficient ring
  • #3646 Fix bug in MinimalFaithfulPermutationDegree that reported a too large degree for certain groups representable as subdirect product
  • #3662 Fix bug in MaximalSubgroupClassReps that could lead to a wrong result
  • #3689 Fix bug in BlistList for two ranges that could lead to wrong results
  • #3690 Fix bug NullspaceModQ that could lead to wrong results
  • #3733 Fix ConstituentsOfCharacter for Brauer character: its result, when called with a Brauer character as its only argument, was not reliable. (This bug has been reported by Gabriel Navarro.) Also, calling it with a Brauer character table and a virtual Brauer character caused error messages

Fixed bugs that could lead to break loops

  • #3038 Fix RankOfPartialPermSemigroup for partial perm groups with empty GeneratorsOfGroup
  • #3052 Fix the viewing of empty transformation semigroups
  • #3110 Workaround for Issue #3055 and fix for GQuotient
  • #3142 Fix Int and Rat for float values nan, inf, -inf
  • #3192 Catch some corner cases for trivial group
  • #3331 Fix an issue with IsomorphismGroups if one group is finite and the other is infinite.
  • #3375 Improve warnings when using tabs in continuations
  • #3401 SSortedLists is not required to be homogeneous anymore
  • #3437 Fix a bug with in calculating SubdirectProducts which could sometimes fail on valid input.
  • #3559 Fix IsUpperTriangularMat for non-square matrices
  • #3571 Fix NrCols and NumberColumns for empty matrices in IsMatrix
  • #3763 Fix bug in IrrConlon leading to unexpected errors
  • #3865 Fix the code setting up a subgroup data structure by the solvable radical method, which could lead to unexpected errors

Other fixed bugs

  • #2595 Fix missing syntax warning for using undefined global variable
  • #2756 Reject invalid AND-filters such as Center and IsAssociative
  • #2903 Kernel: make OnLeftInverse use LQUO
  • #2908 Fix profiling when IO_Fork from the IO package is used
  • #2977 This fixes an infinite recursion if the rank of IsGroup and IsFinite becomes very large
  • #3189 Ensure IsHomogeneousList("") return true
  • #3229 Fix the fact that the ^^^^ markers on unbound globals would point to the wrong place.
  • #3320 Fix the problem whereby if GAP on windows sees a \r, it will remove the next \n, no matter how far away it is.
  • #3325 Fix libgap's GAP_ENTER_DEBUG macro (using it previously lead to a linker error)
  • #3390 Corrects input limit on 64Bit SetCyclotomicsLimit
  • #3395 PrintObj(1.) now correctly prints 1.
  • #3400 Fix the line breaking hints in the ViewString method for finite lists.
  • #3428 Fix GNU readline detection on OpenBSD, and make the configure test for it more robust
  • #3444 Remove obsolete -a command line option
  • #3481 Fix bug which caused code which calls PrintCSV many times with a filename to fail eventually
  • #3580 Fix potential infinite loop or recursion when computing the size of infinite cyclic groups
  • #3847 Fix printing of certain words in free groups (if subexpressions occur as powers iteratedly then nonsense could be displayed, but the data internally was correct)
  • #3610 Invalid use of / on ZmodZ (e.g. dividing a unit by a zero divisor) will produce an Error
  • #3612 fixes some methods for Quotient, in particular Quotient(R, x, Zero(R)) now returns fail

Removed or obsolete functionality

  • #2237 The undocumented (!) functions InfoRead1 and InfoRead2 are obsolete
  • #2237, #2961 Remove the obsolete synonyms MutableIdentityMat (for IdentityMat), MutableNullMat (for NullMat) and SHALLOW_SIZE (for SIZE_OBJ), DEBUG_LOADING (for GAPInfo.CommandLineOptions.D)
  • #2919 The undocumented (!) function SetFeatureObj is obsolete; use SetFilterObj resp. ResetFilterObj instead.
  • #3185 (Un)HideGlobalVariables is obsolete
  • #3269 TemporaryGlobalVarName is obsolete
  • #3409 Remove BANNER, QUIET

Packages

  • #3215 Issue tracker, maintainers and contributors are printed in package banners
  • #3286 Teach ValidatePackageInfo about the optional License field

Other changes

  • #2709 Rename MultRowVector to MultVector (the old name is still supported, but marked as obsolete)
  • #2729 Rename QuaternionGroup to DicyclicGroup, document IsDihedralGroup and IsQuaternionGroup
  • #3010 Read lib/transatl.g before any gap.ini file, when GAP is loaded
  • #3406 Remove RXVT-shell support for Windows
  • #3480 BuildPackages.sh now executes make clean before full build

New packages redistributed with GAP

  • AGT A library of strongly regular graphs on at most 40 vertices, and functionality to inspect combinatorial and algebraic properties of graphs in GRAPE format, by Rhys J. Evans
  • CddInterface GAP interface to cdd, by Kamal Saleh
  • DifSets Enumeration of the difference sets (up to equivalence) in groups, by Dylan Peifer
  • ferret C++ reimplementation of Jeffery Leon’s Partition Backtrack framework for solving problems in permutation groups, by Christopher Jefferson
  • images Finding minimal and canonical images in permutation groups, by Christopher Jefferson, Markus Pfeiffer, Rebecca Waldecker, Eliza Jonauskyte
  • NCOnvex Polyhedral constructions and computations for cones, polyhedrons, polytopes and fans, by Kamal Saleh, Sebastian Gutsche, superseding the former Convex package
  • NoCK Computation of Tolzanos’s obstruction for compact Clifford-Klein forms, by Maciej Bocheński, Piotr Jastrzębski, Anna Szczepkowska, Aleksy Tralle, Artur Woike
  • RepnDecomp Algorithms for decomposing linear representations of finite groups, by Kaashif Hymabaccus
Clone this wiki locally