Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
235 commits
Select commit Hold shift + click to select a range
5e589c4
methods for PreImRep renamed PreImRepNC
cdwensley Sep 28, 2022
d3e4845
replaced PreImRep by PreImRepNC in files from a... to g...
cdwensley Sep 28, 2022
85c9030
renamed PreImRep as PreImRepNC in files m... to t...
cdwensley Sep 29, 2022
8128aa2
PreImRep -> PreImRepNC in xml files
cdwensley Sep 29, 2022
d687596
some PreImRep -> PreImRepNC in tests
cdwensley Sep 29, 2022
6eeafb9
cases where fail being returned is immediately checked
cdwensley Sep 30, 2022
36e5279
PreImRep now a synonym for PreImRepNC
cdwensley Oct 4, 2022
c307c58
PreImages renamed PreImagesNC
cdwensley Oct 5, 2022
029ce4d
PreImagesSet renamed PreImagesSetNC
cdwensley Oct 6, 2022
de60e9b
PreImagesElm renamed PreImagesElmNC
cdwensley Oct 6, 2022
76df9a4
no mention of NC version in the tutorial manual
cdwensley Oct 27, 2022
1ef1bb0
attempting to elininate conflict in grp.gi
cdwensley Sep 24, 2023
c3b0bcd
hopefully fixed tst/testextra/makeperfect.g
cdwensley Nov 20, 2023
97eb465
attempting to resolve conflicts in /lib files
cdwensley Nov 23, 2023
0df089c
~use latest fitfree.gd
cdwensley Nov 27, 2023
82b0d53
using latesxt version of 5 files
cdwensley Nov 28, 2023
c779c11
updating ghomfp.gi
cdwensley Nov 29, 2023
2102235
updating ctblgrp.gi
cdwensley Nov 29, 2023
c2b8428
remove some trailing spaces
cdwensley Dec 2, 2023
5aa0244
removed some trailing spaces
cdwensley Dec 2, 2023
08ccfdd
fixing problems reported by LINT
cdwensley Dec 2, 2023
f7e6eae
Add comments in the release.yml workflow clarifying fetch-depth: 0 an…
wilfwilson Sep 17, 2025
71140a2
meataxe: rename some things internally (#6120)
fingolfin Sep 22, 2025
4ddfa18
Use `posix_spawn_file_actions_addchdir_np` when available, to fix mac…
ChrisJefferson Sep 22, 2025
4533adc
Tune MultMatrixRowLeft etc. for IsRowListMatrix (#6121)
fingolfin Sep 23, 2025
1855f04
kernel: include julia_gc.h in gap_all.h (#6124)
fingolfin Sep 23, 2025
0ad9cb4
kernel: avoid using PATH_MAX (#6123)
fingolfin Sep 23, 2025
194ceb0
Add an `IsConjugate` method based on nice monomorphisms (#6116)
ThomasBreuer Sep 24, 2025
af60981
Update release notes for 4.15.0-beta3
fingolfin Sep 24, 2025
a6e8c96
Fix a wrong `false` result of `IsSolvable` for certain trivial permut…
ThomasBreuer Sep 26, 2025
61a35d6
Update CHANGES.md for 4.15.0 ; recommend signing tags
fingolfin Sep 28, 2025
281390a
Complete move of update_website.py to GapWWW (#6131)
fingolfin Sep 29, 2025
8caec36
Fix `in` and other functionality for finite rational matrix groups (#…
fingolfin Oct 2, 2025
d38422b
Fix a typo (#6136)
fingolfin Oct 4, 2025
c1071b1
Stop using `transgrp` in the GAP test suites (#6117)
wilfwilson Oct 4, 2025
f7c73d8
Another fix for rational matrix groups (#6140)
fingolfin Oct 6, 2025
9e098b0
Update group library docs to be more independent of package changes (…
lgoettgens Oct 6, 2025
7be3dde
combine `IrrDixonSchneider` with `IrrBaumClausen` (#6134)
ThomasBreuer Oct 10, 2025
7d2697c
Make various operations for rational matrix groups faster (fixes a pe…
fingolfin Oct 10, 2025
15d87e1
Compute power maps when irreducibles were computed without them (#6141)
ThomasBreuer Oct 12, 2025
1156bb6
add a missing `ComputeAllPowerMaps` call (#6145)
ThomasBreuer Oct 15, 2025
410368d
Fix yet another issue in the char 0 matrix code (#6144)
fingolfin Oct 16, 2025
dac8111
Fix `CompatiblePairs` to not ignore the optional automorphism group a…
fingolfin Oct 17, 2025
625a444
CHANGES.md: sync with stable-4.15
fingolfin Oct 18, 2025
1ad7c81
Tweak release tooling and guidelines (#6147)
fingolfin Oct 20, 2025
8679195
build(deps): bump actions/download-artifact from 5 to 6 (#6154)
dependabot[bot] Oct 27, 2025
11950bf
build(deps): bump actions/upload-artifact from 4 to 5 (#6155)
dependabot[bot] Oct 27, 2025
abec89c
Update many broken links, update outdated docs etc. (#6153)
fingolfin Oct 27, 2025
b3a658e
forbid `Order` for non-endo group homomorphisms (#6156)
ThomasBreuer Oct 31, 2025
a60112a
Enhance support for very long transversals in a permutation group by …
Nov 11, 2025
83b2223
Only show authors in `Cite`, not maintainers (#6162)
lgoettgens Nov 12, 2025
caf94ad
FIX: RepresentativesPerfectSubgroups (#6160)
Nov 13, 2025
d18700b
Add missing local variable declaration (#6163)
fingolfin Nov 13, 2025
c62dc3c
Fixed a potential error message about data types when computing exten…
Nov 20, 2025
50b50cf
Fix permission problem in streams.txt (#6168)
frankluebeck Nov 25, 2025
eded971
build(deps): bump actions/checkout from 5 to 6 (#6167)
dependabot[bot] Dec 3, 2025
73fefd0
Fix the definition of `PClassPGroup` (#6169)
ThomasBreuer Dec 3, 2025
c34dcaa
fix `IsomorphismPermGroup` for trivial f. p. (sub)group (#6170)
ThomasBreuer Dec 3, 2025
195fcca
Don't reject paths containing a colon or backslash (#6175)
fingolfin Dec 12, 2025
e12781e
allow running tests without GAPDoc loaded (#6172)
ThomasBreuer Dec 12, 2025
d771746
build(deps): bump actions/upload-artifact from 5 to 6 (#6177)
dependabot[bot] Dec 15, 2025
821ee78
build(deps): bump actions/download-artifact from 6 to 7 (#6176)
dependabot[bot] Dec 15, 2025
a872b58
Improve documentation of `InverseGeneralMapping` (#6171)
TWiedemann Dec 15, 2025
cbf1890
provide `DefaultRingByGenerators` for alg. extensions (#6179)
ThomasBreuer Dec 18, 2025
f87da47
Miscellaneous tweaks (#6185)
fingolfin Dec 29, 2025
249bf2b
transfer changes `lib/vecmat.gi` -> `hpcgap/lib/vecmat.gi` (#6187)
ThomasBreuer Jan 9, 2026
22ba2c8
Sync more changes with HPC-GAP (#6189)
fingolfin Jan 9, 2026
7344294
add `DefaultFieldOfMatrix` for `IsAlgebraicElementCollColl` (#6182)
ThomasBreuer Jan 12, 2026
c54c739
fix `ImmutableMatrix` for `IsMatrixObj` (#6186)
ThomasBreuer Jan 12, 2026
d452207
GAP banner: split `ShowPackageInformation` into two functions (#6193)
ThomasBreuer Jan 13, 2026
b79224e
modify etc/emscripten/build.sh and web-template to split gap.data so …
wangyenshu Jan 10, 2026
4aae57e
remove redundant remarks
wangyenshu Jan 10, 2026
959ec1c
fix url path issue
wangyenshu Jan 10, 2026
4b742c1
Add MakeConjugatorIsomorphismNC (#6194)
fingolfin Jan 16, 2026
fee0ba2
Transfer more properties (such as `IsNaturalSL`, `InvariantQuadraticF…
lgoettgens Jan 16, 2026
7c8bb78
Document setter for mutable attributes (#6198)
ThomasBreuer Jan 16, 2026
27737cc
document objects with memory (#6174)
ThomasBreuer Jan 16, 2026
33c59b2
remove the `ConjugateGroup` method based on nice monom. (#6197)
ThomasBreuer Jan 19, 2026
e99a21c
Remove unused "PC STACK" variables for from the left collectors (this…
stertooy Jan 19, 2026
eddc943
Fix an inconsistency problem in `IsFinite` for matrix groups over cyc…
ThomasBreuer Jan 19, 2026
33b09da
dev: reformat with black 26.1.0 (#6204)
fingolfin Jan 23, 2026
b647db8
Avoid errors due to too large range bounds (#6201)
ThomasBreuer Jan 23, 2026
553bcd7
Don't transfer nice monos when conjugating (#6207)
fingolfin Jan 27, 2026
64438ae
Fix `FieldOfMatrixGroup` for certain classical matrix groups in dimen…
ThomasBreuer Jan 27, 2026
74dd935
Fix two bugs in `IsomorphismPermGroupForMatrixGroup` (#6206)
fingolfin Jan 28, 2026
33f8e8a
a little bit better documentation for nice monomorphisms (#6211)
ThomasBreuer Jan 29, 2026
dce75f7
remove `\=` and `IsSubset` methods via nice monomorphism (#6216)
ThomasBreuer Jan 31, 2026
7dd4916
let `START_TEST` and `STOP_TEST` reset global options (#6215)
ThomasBreuer Jan 31, 2026
43757f7
Merge two DimensionOfMatrixGroup methods (#6212)
fingolfin Feb 1, 2026
d25bfa3
Turn RestrictedNiceMonomorphism into an attribute (#6217)
fingolfin Feb 2, 2026
5726045
Add `ConformalSymplecticGroup` (#6213)
ThomasBreuer Feb 3, 2026
393c22a
CI: switch some jobs to using ubuntu-slim (#6208)
fingolfin Feb 9, 2026
51235b2
Fix CoverageLineByLine (#6218)
fingolfin Feb 9, 2026
cba67aa
Fix input for setup-cygwin@v2 in CI.yml (#6233)
stertooy Feb 16, 2026
c890f93
fix the documentation of `NewFamily` (#6220)
ThomasBreuer Feb 21, 2026
2d85105
fix a side-effect of `MaximalAbelianQuotient` (#6246)
ThomasBreuer Feb 25, 2026
1f2808c
Fix `IteratorStabChain` for groups with memory (#6243)
ThomasBreuer Feb 25, 2026
b16890d
Fix `PreImagesRepresentative` for group homomorphisms with `OnLines` …
ThomasBreuer Mar 3, 2026
6c7b270
build(deps): bump actions/upload-artifact from 6 to 7 (#6248)
dependabot[bot] Mar 3, 2026
70a453e
Make RestrictedMapping of GHBI use same range as original GHBI (#6230)
stertooy Mar 3, 2026
c50db27
Problems when multiplying a matrix object with a matrix (#6240)
ThomasBreuer Mar 3, 2026
6949df8
build(deps): bump actions/download-artifact from 7 to 8 (#6247)
dependabot[bot] Mar 3, 2026
c8e7891
src: silence addchdir_np deprecation on macOS
fingolfin Mar 8, 2026
88a0efa
docs: expand AGENTS.md guidance (#6256)
fingolfin Mar 9, 2026
f62e9b4
Improve break-loop stack traces (#6257)
fingolfin Mar 11, 2026
3b4496f
Add IsSymmetricMatrix & IsSymmetricMat (#6259)
limakzi Mar 11, 2026
5fb887d
Fix ShortestVectors to return complete list (#6253)
fingolfin Mar 12, 2026
508533a
Changed rank of \* for IsDirectProductElement and IsObject so it's ca…
marcusc31415 Mar 13, 2026
24c0fd4
Add error checks to ShortestVectors, cleanup (#6273)
fingolfin Mar 17, 2026
7cbae77
Add `FoldLeft`, `FoldLeftX`; and `ForAllX`, `ForAnyX`, `FilteredX`, `…
fingolfin Mar 23, 2026
ddf9357
Set `InfoText` when computing `Irr` (#6275)
ThomasBreuer Mar 23, 2026
6445863
Change `IsomorphismPermGroupForMatrixGroup` (#6244)
ThomasBreuer Mar 23, 2026
3123fdb
Speed up `IsSubset` for cyclotomic semirings and ranges (#6265)
limakzi Mar 23, 2026
0d8d883
Support Order, ProjectiveOrder, etc. for MatrixObj (#6278)
fingolfin Mar 23, 2026
5ac0084
Faster high-level Meataxe functions for irreducible modules (e.g. `MT…
fingolfin Mar 23, 2026
98f7f2c
Add DirectSumGModule (#6277)
fingolfin Mar 24, 2026
91699c2
Improve conjugation test (#6267)
limakzi Mar 24, 2026
c05a314
meataxe: use TestModulesFitTogether in more places (#6283)
fingolfin Mar 24, 2026
0e0e10e
Error handling: split stack frames over two lines; adjust more manual…
fingolfin Mar 25, 2026
3f5eebe
Implemented the method MultVectorRight for lists (#6280)
fingolfin Mar 25, 2026
4c3b809
kernel: avoid undefined behavior in be32decode (#6284)
jamesjer Mar 25, 2026
31ab95d
meataxe: simplify some code (#6285)
fingolfin Mar 26, 2026
01a5765
Add `AddMatrix`, `MultMatrix` for in-place modification of matrices (…
OldAnchovyTopping Mar 26, 2026
0f1cc6f
Replace many redundant uses of IsContainedInSpan (#6287)
fingolfin Mar 27, 2026
6398987
Avoid undefined behavior in integer.c (#6286)
jamesjer Mar 27, 2026
27778cd
Remove dev/smtx.tex (#6291)
fingolfin Mar 29, 2026
856031e
build(deps): bump actions/configure-pages from 5 to 6 (#6297)
dependabot[bot] Mar 30, 2026
47ef59d
build(deps): bump actions/deploy-pages from 4 to 5 (#6296)
dependabot[bot] Mar 30, 2026
8271c1d
build(deps): bump codecov/codecov-action from 5 to 6 (#6295)
dependabot[bot] Mar 30, 2026
87c4d5c
meataxe: cache socle and radical (#6294)
fingolfin Mar 31, 2026
877064d
Add UserHomeShorten as counterpart of UserHomeExpand (#6262)
fingolfin Mar 31, 2026
34ceee8
meataxe: cache dual (#6298)
fingolfin Mar 31, 2026
c186ac1
Make the meataxe faster by using `AddMatrix`, `AddVector`, `MultMatri…
fingolfin Mar 31, 2026
e602b44
meataxe: simplify using MutableBasis (#6290)
fingolfin Mar 31, 2026
370b633
Make MutableCopyMat slightly less 'obsolete' (#6304)
fingolfin Apr 9, 2026
5e741d5
Fix CopySubVector malfunction for GF(2) vectors (#6303)
fingolfin Apr 9, 2026
bec6d96
CI: fix cross compile tests (#6308)
fingolfin Apr 10, 2026
cff31a9
Shorten .tst filenames printed by Test and TestDirectory (#6306)
fingolfin Apr 10, 2026
e54fd7a
Admit the syntax `SymplecticGroup( IsPlistMatrixRep, 4, GF(4) )` (#6299)
ThomasBreuer Apr 10, 2026
10b016e
Let ObjWithMemory transfer IsRowListMatrix filter (#6310)
fingolfin Apr 10, 2026
9ce97a8
Add PositionNonZeroInRow for matrices and matrix objects (#6311)
fingolfin Apr 10, 2026
59fe451
Optimize PositionNonZero, PositionNonZeroInRow (#6312)
fingolfin Apr 12, 2026
4371255
Add `IsSquareMat` and `IsAntisymmetricMat` (#6268)
limakzi Apr 12, 2026
a81ddfd
Rename lib/matrobjrowlist.gi to lib/matobjrowlist.gi (#6316)
fingolfin Apr 13, 2026
cfb7e5f
Merge IsOne/IsZero methods for IsMatrix and IsMatrixObj (#6314)
fingolfin Apr 13, 2026
cfc9260
build(deps): bump softprops/action-gh-release from 2 to 3 (#6319)
dependabot[bot] Apr 13, 2026
2cb8eae
Remove ADD_LIST_DEFAULT (#6317)
fingolfin Apr 13, 2026
8264428
Allow CopySubVector on plain row vectors, fix CopySubMatrix (#6309)
fingolfin Apr 13, 2026
9617fe7
Declare NumberRows and NumberColumns as kernel attributes (#6318)
fingolfin Apr 14, 2026
c35d5e9
matobj: remove redundant code, use BindConstant (#6321)
fingolfin Apr 15, 2026
e2df690
Make RowLength obsolete (#6323)
fingolfin Apr 15, 2026
ee67267
Add a manual section: how to write code for matrix objects (#6320)
ThomasBreuer Apr 16, 2026
e3c15ce
Remove AsPlist (#6327)
fingolfin Apr 17, 2026
9ab1937
Validate DeterminantMat inputs (#6328)
fingolfin Apr 17, 2026
79bb636
modify build.sh for file lazy loading
wangyenshu Mar 12, 2026
ef3c2e7
improve comments
wangyenshu Mar 12, 2026
daffb93
update gap-worker.js
wangyenshu Mar 12, 2026
d46f91b
update run-web-demo.sh
wangyenshu Mar 12, 2026
7b72a10
Encode special filenames
wangyenshu Mar 12, 2026
abb7d4f
update build.sh to use filename and path hashing
wangyenshu Mar 12, 2026
a5fd4a4
Update run-web-demo.sh to use filename and path hashing
wangyenshu Mar 12, 2026
2c708d0
add python scripts for filename and path hashing
wangyenshu Mar 12, 2026
b618d7b
add nodejs script to build startup manifest
wangyenshu Mar 12, 2026
783a329
add sample startup_manifest.json
wangyenshu Mar 12, 2026
2d8fd06
modify index.html to preload resources
wangyenshu Mar 12, 2026
de8afce
Document build_startup_manifest.js in README
wangyenshu Mar 12, 2026
94a51c5
Update README.md with clearer build_startup_manifest.js usage
wangyenshu Mar 12, 2026
2f6951b
fix syntax error
wangyenshu Mar 12, 2026
9654445
wait preloaded resources to be fetched before starting the worker
wangyenshu Mar 12, 2026
9149c2b
use IDBFS for cache
wangyenshu Mar 13, 2026
e1017e1
add startup_manifest; previous is empty by mistake
wangyenshu Mar 13, 2026
aaa5f3e
use percentage encoding for special files
wangyenshu Mar 19, 2026
9aa5ac5
rename variable in percentage_encoding.py for readability and fix pat…
wangyenshu Mar 19, 2026
6853c5d
remove double percentage encoding; separate gap-fs.js and gap-fs.json
wangyenshu Mar 31, 2026
55b1d56
Update etc/emscripten/web-template/index.html
wangyenshu Apr 18, 2026
31e8dc7
Update etc/emscripten/web-template/gap-worker.js
wangyenshu Apr 18, 2026
11dffb5
Update etc/emscripten/web-template/gap-fs.js
wangyenshu Apr 18, 2026
f334361
Update etc/emscripten/build.sh
wangyenshu Apr 18, 2026
fcf460d
Update etc/emscripten/build_startup_manifest.js
wangyenshu Apr 18, 2026
b0f97bc
Update etc/emscripten/generate_gap_fs_json.py
wangyenshu Apr 18, 2026
b4557eb
build(deps): bump actions/upload-pages-artifact from 4 to 5 (#6336)
dependabot[bot] Apr 20, 2026
98fdfa3
build(deps): bump julia-actions/setup-julia from 2 to 3 (#6335)
dependabot[bot] Apr 20, 2026
a522732
Improve CosetLeadersMatFFE documentation (#6338)
fingolfin Apr 20, 2026
c70de2a
Allow 'shifting' ranges (#6334)
fingolfin Apr 20, 2026
c1340c8
Re-enable Codecov comments but delay PR notifications (#6332)
fingolfin Apr 20, 2026
3c0ebc7
PlainListCopy for list not knowing they are small (#6333)
fingolfin Apr 21, 2026
3e6752e
Faster {Copy,Extract}Sub{Matrix,Vector} for plist matrices/vectors (#…
fingolfin Apr 22, 2026
b7dfed7
doc: fix IrreducibleModules description to say 'at most' dim (#6337)
mvanhorn Apr 23, 2026
a2c4f01
Fix PartitionsGreatestLE for zero, improve docs (#6341)
fingolfin Apr 24, 2026
1a27eb1
Avoid some uses of IdGroup (#6343)
fingolfin Apr 28, 2026
3bde7d8
CompatiblePairs: clarify documentation (#6348)
fingolfin Apr 29, 2026
fa833e7
Uprank {Copy,Extract}SubMatrix for compressed matrices (#6349)
fingolfin Apr 29, 2026
874e2b2
Document & validate new package metadata TestPackages, NeededSystempa…
stertooy Apr 29, 2026
80adf0d
Refine SetSize and remove some immediate methods (#6347)
fingolfin Apr 30, 2026
bdf515e
Fix HexSHA256 to always return 64 hex digits (#6358)
ChrisJefferson May 3, 2026
de1a83d
Fix garbled result produced by CosetLeadersMatFFE (#6325)
fingolfin May 4, 2026
1e8d8c5
Fix crash in `CosetLeadersMatFFE` (#6326)
fingolfin May 4, 2026
9a3b1b1
Fix MinimalGeneratingSet for pc groups (#6340)
fingolfin May 4, 2026
0f408ee
Add `WhereDepth` user preference (#6261)
limakzi May 4, 2026
7fab2f8
doc: streamline Matrix argument variants (#6361)
fingolfin May 4, 2026
67cea73
Document DirectProductElement (#6260)
limakzi May 5, 2026
42a0ea6
Reset the options stack after an error also when the break loop is di…
ThomasBreuer May 5, 2026
e4f7606
Guard some `IdGroup` calls by `ID_AVAILABLE` (#6353)
fingolfin May 6, 2026
537d49e
Add `RandomMatrix`, `RandomInvertibleMatrix`; and fix a problem with …
ThomasBreuer May 6, 2026
ac313c7
Makefile.rules: add cleanall target, improve cleaning overall (#6378)
fingolfin May 8, 2026
8068db7
Improve documentation of several action functions (#6370)
lhsoicher May 8, 2026
362026f
Fix CI with GAP.jl (#6381)
lgoettgens May 8, 2026
ff95950
Fix an inconsistent ordering of conjugacy classes (#6382)
ThomasBreuer May 9, 2026
5c7953b
scanner: don't print EOF sentinel as line context on syntax error (#6…
ChrisJefferson May 9, 2026
31b9caf
dev/releases: ignore dependabot PRs (#6375)
fingolfin May 9, 2026
f665358
Minor cleanup of random suff (#6377)
fingolfin May 9, 2026
195a1c4
Avoid `IdGroup` in `IsSymmetricGroup` (#6383)
fingolfin May 9, 2026
431a765
kernel: turn global GAP and module states back into static globals (#…
fingolfin May 11, 2026
e02e21d
Ensure more tests pass with `gap --bare` (#6387)
fingolfin May 11, 2026
055434e
Miscellaneous fixes concerning vector and matrix objects (#6369)
ThomasBreuer May 11, 2026
7eff9eb
Increase kernel major version (#6390)
lgoettgens May 11, 2026
9e28d1d
CI: don't rely on primary GNU file server (#6388)
fingolfin May 11, 2026
f3050a7
Avoid IdGroup in IsGL and IsPSL (#6391)
fingolfin May 11, 2026
a4d8434
rebuilding my copy of this branch
cdwensley May 12, 2026
d784b62
Add `RandomMatrix`, `RandomInvertibleMatrix`; and fix a problem with …
ThomasBreuer May 6, 2026
ad93a3e
methods for PreImRep renamed PreImRepNC
cdwensley Sep 28, 2022
12ccf30
replaced PreImRep by PreImRepNC in files from a... to g...
cdwensley Sep 28, 2022
9dcc205
some PreImRep -> PreImRepNC in tests
cdwensley Sep 29, 2022
e037750
Ensure more tests pass with `gap --bare` (#6387)
fingolfin May 11, 2026
3224b21
Merge branch 'master' into preimrep
cdwensley May 12, 2026
13f07e3
fixing clash in lib/clshom.gi
cdwensley May 12, 2026
8603b5b
fixing clash in lib/grplatt.gi
cdwensley May 12, 2026
a89f5b5
fixing clash in lib/gpfpiso.gi - but check around line 2060
cdwensley May 12, 2026
83d8341
fixing whitespace
cdwensley May 13, 2026
6c18d33
remove duplicate lines
cdwensley May 13, 2026
b86a8ec
try to stop infinite recursion in alghom.tst
cdwensley May 13, 2026
9d46891
adding the test in PreImagesRepresentative
cdwensley May 13, 2026
fedaabc
added methods for PreImagesSet
cdwensley May 13, 2026
201f2b9
added methods for PreImagesElm and PreImagesSet
cdwensley May 13, 2026
839af79
added method for PreImages
cdwensley May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions doc/ref/grpfp.xml
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ gap> hom:=IsomorphismFpGroup(u);
[ <[ [ 1, 1 ] ]|f2^-1*f1^-1> ] -> [ F1 ]
gap> new:=Range(hom);
<fp group on the generators [ F1 ]>
gap> List(GeneratorsOfGroup(new),i->PreImagesRepresentative(hom,i));
gap> List(GeneratorsOfGroup(new),i->PreImagesRepresentativeNC(hom,i));
[ <[ [ 1, 1 ] ]|f2^-1*f1^-1> ]
]]></Example>
<P/>
Expand All @@ -504,7 +504,7 @@ behave like ordinary words and no extra treatment should be necessary.
<Example><![CDATA[
gap> r:=Range(hom).1^10;
F1^10
gap> p:=PreImagesRepresentative(hom,r);
gap> p:=PreImagesRepresentativeNC(hom,r);
<[ [ 1, 10 ] ]|(f2^-1*f1^-1)^10>
]]></Example>

Expand Down
2 changes: 1 addition & 1 deletion doc/ref/mapping.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %A mapping.xml GAP documentation Thomas Breuer -->
<!-- %A mapping.xml GAP documentation Thomas Breuer -->
<!-- %% -->
<!-- %% -->
<!-- %Y (C) 1998 School Math and Comp. Sci., University of St Andrews, Scotland -->
Expand Down
2 changes: 1 addition & 1 deletion doc/ref/rws.xml
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ gap> red:=ReducedForm(k,UnderlyingElement(melm));
f1^-1^3*f2^-1*f1^2
gap> melm:=ElementOfFpMonoid(FamilyObj(One(mon)),red);
f1^-1^3*f2^-1*f1^2
gap> gpelm:=PreImagesRepresentative(mhom,melm);
gap> gpelm:=PreImagesRepresentativeNC(mhom,melm);
f1^-3*f2^-1*f1^2
gap> r=gpelm;
true
Expand Down
41 changes: 21 additions & 20 deletions doc/tut/group.xml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %W group.tex GAP documentation Thomas Breuer -->
<!-- %W & Frank Celler -->
<!-- %W & Martin Schönert -->
<!-- %W & Heiko Theißen -->
<!-- %W group.tex GAP documentation Thomas Breuer -->
<!-- %W & Frank Celler -->
<!-- %W & Martin Schönert -->
<!-- %W & Heiko Theißen -->
<!-- %% -->
<!-- %% -->
<!-- %Y Copyright 1997, Lehrstuhl D für Mathematik, RWTH Aachen, Germany -->
<!-- %Y Copyright 1997, Lehrstuhl D für Mathematik, RWTH Aachen, Germany -->
<!-- %% -->
<!-- %% This file contains a tutorial introduction to groups. -->
<!-- %% -->
Expand Down Expand Up @@ -168,10 +168,9 @@ action domain of <C>norm</C>. (It only happens that both are subsets of the
natural numbers.) We can now form images and preimages under the natural
homomorphism. The set of preimages of an element under <C>hom</C> is a coset
modulo <C>elab</C>.
We use the function <Ref Func="PreImages" BookName="ref"/> here because

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this can just be left as PreImages, in general in documentation we don't encourage people to use NC methods of functions. Of course at the moment it doesn't make any difference.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ChrisJefferson Is this rule formulated somewhere in the documentation?

(If we do not want to encourage using NC variants in the documentation then this pull request should not change examples from the manual to use PreImagesRepresentativeNC instead of PreImagesRepresentative.)

I would agree that the NC variants are mainly intended to be used inside functions where it is clear from the context that the tests are not necessary. On the other hand, one can argue that the same holds for an interactive GAP session, for example, if one wants to compute a preimage of an element that was just constructed as an element of the range of the mapping in question.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ThomasBreuer Looking around when defining function we often define the NC and non-NC version at the same time, but when we reference we often only reference one.

I do think if we are mentioning PreImagesNC we should say what the difference is -- I know someone could follow the links to PreImages and PreImagesNC, but it is a bit strange here to see both mentioned.

In general it is probably worth thinking about if we want to use PreImagesRepresentative or PreImagesRepresentativeNC in most examples. I am not sure in general how much slower PreImagesRepresentative is going to be, so which we should be encouraging as a default -- but I would hope PreImagesRepresentative, because it is safer for users who are beginners.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ChrisJefferson Thanks for your thoughts.

Currently I find one statement about NC variants in the Tutorial Manual, which talks about Sub<something> vs. Sub<something>NC, and one statement about Sub<struct>NC in the Reference Manual Section "Constructing Subdomains"
I think there should be a general statement about Func vs. FuncNC (in the Tutorial as well as in the Reference Manual), saying that the latter omits some argument checks and that the documentation of the individual functions will explain which checks are omitted.
Some example that illustrates the difference should be shown in the Tutorial: When one creates a subgroup of a group then calling SubgroupNC instead of Subgroup will avoid membership tests for the subgroup generators; in the case of a permutation group, this may mean that the computation of a stabilizer chain for the big group can be avoided, which would hopefully be not expensive; for a matrix group such as the Baby Monster, calling SubgroupNC will be the only reasonable way to create a subgroup, since asking for membership will be in general hopeless.

In the Reference Manual, Func and FuncNC should be documented in the same ManSection, and then cross-references need to mention only the non-NC variant.

Concerning the use of NC variants in manual examples, I see two possible strategies. Either we use only the non-NC variants, or we use the NC variants in all those cases where the context admits this (perhaps with a textual comment why the NC variant may be called in examples in the Tutorial and in those cases where this is not obvious).
I would expect that the differences in runtime are negligible in manual examples, and if this is not the case for some example then this example deserves a comment about this fact.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that it is not a good idea to mention NC variants in the tutorial manual, and will make the necessary changes. The more general comments are very interesting but are beyond the scope of this PR.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed NC references in doc/tut/group.xml and doc/tut/algvspc.xml. Had problems trying to push these - no idea why - so used --force. Hope that does not cause any problems.

<C>hom</C> is not
a bijection, so an element of the range can have several preimages or
none at all.
We use the function <Ref Func="PreImages" BookName="ref"/> here
because <C>hom</C> is not a bijection,
so an element of the range can have several preimages or none at all.
<P/>
<Example><![CDATA[
gap> ker:= Kernel( hom );
Expand Down Expand Up @@ -943,18 +942,20 @@ gap> PreImage( hom, TrivialSubgroup(s3) ); # the kernel
Group([ (1,4)(2,3), (1,3)(2,4) ])
]]></Example>
<P/>
This homomorphism from <M>S_4</M> onto <M>S_3</M> is well known from elementary
group theory. Images of elements and subgroups under <C>hom</C> can be
This homomorphism from <M>S_4</M> onto <M>S_3</M> is well known from
elementary group theory.
Images of elements and subgroups under <C>hom</C> can be
calculated with the function <Ref Func="Image" BookName="ref"/>.
But since the mapping <C>hom</C> is not bijective, we cannot use the
function <Ref Func="PreImage" BookName="ref"/> for preimages of
elements (they can have several preimages). Instead, we have to use
<Ref Func="PreImagesRepresentative" BookName="ref"/>,
which returns one preimage if at least one
exists (and would return <K>fail</K> if none exists, which cannot occur for
But since the mapping <C>hom</C> is not bijective, we cannot use the
function <Ref Func="PreImage" BookName="ref"/> for preimages of elements
(they can have several preimages).
Instead, we have to use
<Ref Func="PreImagesRepresentative" BookName="ref"/>
which returns one preimage if at least one exists
(and would return <K>fail</K> if none exists, which cannot occur for
our surjective <C>hom</C>).
On the other hand, we can use <Ref Func="PreImage" BookName="ref"/> for the
preimage of a set (which always exists, even if it is empty).
On the other hand, we can use <Ref Func="PreImage" BookName="ref"/> for the
preimage of a set (which always exists, even if it is empty).
<P/>
Suppose we mistype the input when trying to construct a homomorphism as below.
<P/>
Expand Down
2 changes: 1 addition & 1 deletion lib/algebra.gi
Original file line number Diff line number Diff line change
Expand Up @@ -3647,7 +3647,7 @@ InstallMethod( CentralIdempotentsOfAlgebra,

until k>Length(ideals);

id:= List( ids, e -> PreImagesRepresentative( hom, e ) );
id:= List( ids, e -> PreImagesRepresentativeNC( hom, e ) );

# Now we lift the idempotents to the big algebra `A'. The
# first idempotent is lifted as follows:
Expand Down
2 changes: 1 addition & 1 deletion lib/algfp.gi
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,7 @@ InstallHandlingByNiceBasis( "IsFpAlgebraElementsSpace", rec(
if hom = fail then
TryNextMethod();
fi;
return PreImagesRepresentative( hom, r );
return PreImagesRepresentativeNC( hom, r );
end ) );


Expand Down
27 changes: 19 additions & 8 deletions lib/alghom.gi
Original file line number Diff line number Diff line change
Expand Up @@ -576,18 +576,29 @@ InstallMethod( ImagesRepresentative,

#############################################################################
##
#M PreImagesRepresentative( <map>, <elm> ) . . . . . . for algebra g.m.b.i.
#M PreImagesRepresentativeNC( <map>, <elm> ) . . . . . for algebra g.m.b.i.
##
InstallMethod( PreImagesRepresentative,
InstallMethod( PreImagesRepresentativeNC,
"for algebra g.m.b.i., and element",
FamRangeEqFamElm,
[ IsGeneralMapping and IsAlgebraGeneralMappingByImagesDefaultRep,
IsObject ],
function( map, elm )
return PreImagesRepresentative( AsLeftModuleGeneralMappingByImages(map),
elm );
return PreImagesRepresentativeNC(
AsLeftModuleGeneralMappingByImages(map), elm );
end );

## (13/05/26) commented this out to prevent infinite recursion in alghom.tst
## InstallMethod( PreImagesRepresentativeNC,
## "for algebra g.m.b.i. knowing inverse, and element",
## FamRangeEqFamElm,
## [ IsGeneralMapping and IsAlgebraGeneralMappingByImagesDefaultRep
## and HasInverseGeneralMapping,
## IsObject ],
## function( map, elm )
## return ImagesRepresentative( InverseGeneralMapping(map), elm );
## end );


#############################################################################
##
Expand Down Expand Up @@ -902,7 +913,7 @@ InstallMethod( ImagesRepresentative,

#############################################################################
##
#M PreImagesRepresentative( <ophom>, <mat> )
#M PreImagesRepresentativeOperationAlgebraHomomorphism( <ophom>, <mat> )
##
BindGlobal( "PreImagesRepresentativeOperationAlgebraHomomorphism", function( ophom, mat )
if not IsBound( ophom!.basisImage ) then
Expand All @@ -915,7 +926,7 @@ BindGlobal( "PreImagesRepresentativeOperationAlgebraHomomorphism", function( oph
return mat;
end );

InstallMethod( PreImagesRepresentative,
InstallMethod( PreImagesRepresentativeNC,
"for an operation algebra homomorphism, and an element",
FamRangeEqFamElm,
[ IsOperationAlgebraHomomorphismDefaultRep, IsMatrix ],
Expand Down Expand Up @@ -1076,9 +1087,9 @@ InstallMethod( ImagesRepresentative,

#############################################################################
##
#M PreImagesRepresentative( <ophom>, <mat> )
#M PreImagesRepresentativeNC( <ophom>, <mat> )
##
InstallMethod( PreImagesRepresentative,
InstallMethod( PreImagesRepresentativeNC,
"for an alg. hom. from f. p. algebra, and an element",
FamRangeEqFamElm,
[ IsAlgebraHomomorphismFromFpRep, IsMatrix ],
Expand Down
56 changes: 28 additions & 28 deletions lib/alglie.gi
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ InstallMethod( LieUpperCentralSeries,
# under the natural homomorphism.
Add( S, C );
hom:= NaturalHomomorphismByIdeal( L, C );
C:= PreImages( hom, LieCentre( Range( hom ) ) );
C:= PreImagesNC( hom, LieCentre( Range( hom ) ) );
#T we would like to get ideals!
#T is it possible to teach the hom. that the preimage of an ideal is an ideal?

Expand Down Expand Up @@ -1057,7 +1057,7 @@ InstallMethod( PowerS,

F:= LeftActingDomain( L );
p:= Characteristic( F );
return List( [ 1 .. p-1 ], i -> PowerSi( F , i ) );
return List( [ 1 .. p-1 ], i -> PowerSi( F, i ) );
end );


Expand Down Expand Up @@ -1385,7 +1385,7 @@ InstallMethod( CartanSubalgebra,
##
## This function calculates a basis of the associative matrix algebra
## generated by ad_L K, where <K> is a subalgebra of <L>.
## If {x_1,\ldots ,x_n} is a basis of K, then this algebra is spanned
## If {x_1,\ldots,x_n} is a basis of K, then this algebra is spanned
## by all words
## ad x_{i_1}\cdots ad x_{i_t}
## where t>0.
Expand Down Expand Up @@ -1706,7 +1706,7 @@ InstallMethod( LieSolvableRadical,
quo:= ImagesSource( hom );
r1:= LieSolvableRadical( quo );
B:= BasisVectors( Basis( r1 ) );
B:= List( B, x -> PreImagesRepresentative( hom, x ) );
B:= List( B, x -> PreImagesRepresentativeNC( hom, x ) );
Append( B, BasisVectors( Basis( n ) ) );

fi;
Expand Down Expand Up @@ -2092,7 +2092,7 @@ InstallMethod( DirectSumDecomposition,
SetRadicalOfAlgebra( Q, Subalgebra( Q, [ Zero( Q ) ] ) );

id:= List( CentralIdempotentsOfAlgebra( Q ),
x->PreImagesRepresentative(hom,x));
x->PreImagesRepresentativeNC(hom,x));

# Now we lift the idempotents to the big algebra `A'. The
# first idempotent is lifted as follows:
Expand Down Expand Up @@ -2749,7 +2749,7 @@ InstallMethod( NonNilpotentElement,

# Now `char F =0'.
# In this case either `L' is nilpotent or one of the
# elements $L.1, \ldots , L.n, L.i + L.j; 1 \leq i < j$
# elements $L.1, \ldots, L.n, L.i + L.j; 1 \leq i < j$
# is non nilpotent.

for i in [ 1 .. n ] do
Expand Down Expand Up @@ -4017,9 +4017,9 @@ InstallMethod( ImagesRepresentative,

###########################################################################
##
#M PreImagesRepresentative( f, x )
#M PreImagesRepresentativeNC( f, x )
##
InstallMethod( PreImagesRepresentative,
InstallMethod( PreImagesRepresentativeNC,
"for Fp to SCA mapping, and element",
FamRangeEqFamElm,
[ IsFptoSCAMorphism, IsSCAlgebraObj ], 0,
Expand Down Expand Up @@ -5567,33 +5567,33 @@ InstallMethod( JenningsLieAlgebra,
# Construct the homogeneous components of `L':

J:=JenningsSeries ( G );
Homs:= List ( [1..Length(J)-1] , x ->
Homs:= List ( [1..Length(J)-1], x ->
NaturalHomomorphismByNormalSubgroupNC( J[x], J[x+1] ));
grades := List ( Homs , Range );
grades := List ( Homs, Range );
hom_pcg:= List( grades, IsomorphismSpecialPcGroup );
pcgps:= List( hom_pcg, Range );
gens := [];
enum_gens:= [ ];
pos := [];
for i in [1.. Length(grades)] do
tempgens:= GeneratorsOfGroup( pcgps[i] );
Append ( gens , tempgens);
Append ( gens, tempgens);

# Record the number that each generator has in extrep.
Add( enum_gens, List( tempgens, x -> ExtRepOfObj( x )[1] ) );
Append ( pos , List ( tempgens , x-> i ) );
Append ( pos, List ( tempgens, x-> i ) );
od;

# Construct the field and the multiplication table:

dim:= Length(gens);
p:= PrimePGroup( G );
F:= GF( p );
T:= EmptySCTable( dim , Zero(F) , "antisymmetric" );
T:= EmptySCTable( dim, Zero(F), "antisymmetric" );
pimgs := [];
for i in [1..dim] do
a:= PreImagesRepresentative( Homs[pos[i]] ,
PreImagesRepresentative( hom_pcg[pos[i]], gens[i] ) );
a:= PreImagesRepresentativeNC( Homs[pos[i]],
PreImagesRepresentativeNC( hom_pcg[pos[i]], gens[i] ) );

# calculate the p-th power image of `a':

Expand All @@ -5610,10 +5610,10 @@ InstallMethod( JenningsLieAlgebra,
# Calculate the commutator [a,b], and map the result into
# the correct homogeneous component.

b:= PreImagesRepresentative( Homs[pos[j]],
PreImagesRepresentative( hom_pcg[pos[j]], gens[j] ));
b:= PreImagesRepresentativeNC( Homs[pos[j]],
PreImagesRepresentativeNC( hom_pcg[pos[j]], gens[j] ));
c:= Image( hom_pcg[pos[i] + pos[j]],
Image(Homs[pos[i] + pos[j]], a^-1*b^-1*a*b) );
Image(Homs[pos[i] + pos[j]], a^-1*b^-1*a*b) );
e:= ExtRepOfObj(c);
co:=[];
for k in [1,3..Length(e)-1] do
Expand Down Expand Up @@ -5764,32 +5764,32 @@ InstallMethod( PCentralLieAlgebra,

p:= PrimePGroup( G );
J:= PCentralSeries( G, p );
Homs:= List ( [1..Length(J)-1] , x ->
Homs:= List ( [1..Length(J)-1], x ->
NaturalHomomorphismByNormalSubgroupNC( J[x], J[x+1] ));
grades := List ( Homs , Range );
grades := List ( Homs, Range );
hom_pcg:= List( grades, IsomorphismSpecialPcGroup );
pcgps:= List( hom_pcg, Range );
gens := [];
enum_gens:= [ ];
pos := [];
for i in [1.. Length(grades)] do
tempgens:= GeneratorsOfGroup( pcgps[i] );
Append ( gens , tempgens);
Append ( gens, tempgens);

# Record the number that each generator has in extrep.
Add( enum_gens, List( tempgens, x -> ExtRepOfObj( x )[1] ) );
Append ( pos , List ( tempgens , x-> i ) );
Append ( pos, List ( tempgens, x-> i ) );
od;

# Construct the field and the multiplication table:

dim:= Length(gens);
F:= GF( p );
T:= EmptySCTable( dim , Zero(F) , "antisymmetric" );
T:= EmptySCTable( dim, Zero(F), "antisymmetric" );
pimgs := [];
for i in [1..dim] do
a:= PreImagesRepresentative( Homs[pos[i]] ,
PreImagesRepresentative( hom_pcg[pos[i]], gens[i] ) );
a:= PreImagesRepresentativeNC( Homs[pos[i]],
PreImagesRepresentativeNC( hom_pcg[pos[i]], gens[i] ) );


# calculate the p-th power image of `a':
Expand All @@ -5807,10 +5807,10 @@ InstallMethod( PCentralLieAlgebra,
# Calculate the commutator [a,b], and map the result into
# the correct homogeneous component.

b:= PreImagesRepresentative( Homs[pos[j]],
PreImagesRepresentative( hom_pcg[pos[j]], gens[j] ));
b:= PreImagesRepresentativeNC( Homs[pos[j]],
PreImagesRepresentativeNC( hom_pcg[pos[j]], gens[j] ));
c:= Image( hom_pcg[pos[i] + pos[j]],
Image(Homs[pos[i] + pos[j]], a^-1*b^-1*a*b) );
Image(Homs[pos[i] + pos[j]], a^-1*b^-1*a*b) );
e:= ExtRepOfObj(c);
co:=[];
for k in [1,3..Length(e)-1] do
Expand Down
12 changes: 7 additions & 5 deletions lib/algrep.gd
Original file line number Diff line number Diff line change
Expand Up @@ -697,10 +697,12 @@ DeclareOperation( "ModuleByRestriction", [ IsAlgebraModule, IsAlgebra ] );
## <Oper Name="NaturalHomomorphismBySubAlgebraModule" Arg='V, W'/>
##
## <Description>
## Here <A>V</A> must be a sub-algebra module of <A>V</A>. This function returns
## the projection from <A>V</A> onto <C><A>V</A>/<A>W</A></C>. It is a linear map, that is
## also a module homomorphism. As usual images can be formed with
## <C>Image( f, v )</C> and pre-images with <C>PreImagesRepresentative( f, u )</C>.
## Here <A>V</A> must be a sub-algebra module of <A>V</A>.
## This function returns
## the projection from <A>V</A> onto <C><A>V</A>/<A>W</A></C>.
## It is a linear map, that is also a module homomorphism.
## As usual images can be formed with <C>Image( f, v )</C>
## and pre-images with <C>PreImagesRepresentativeNC( f, u )</C>.
## <P/>
## The quotient module can also be formed
## by entering <C><A>V</A>/<A>W</A></C>.
Expand All @@ -726,7 +728,7 @@ DeclareOperation( "ModuleByRestriction", [ IsAlgebraModule, IsAlgebra ] );
## 18 over Rationals>>
## gap> v:= Basis( quo )[1];
## [ 1, 0, 0, 0, 0, 0, 0, 0, 0 ]
## gap> PreImagesRepresentative( f, v );
## gap> PreImagesRepresentativeNC( f, v );
## v.4
## gap> Basis( C )[4]^v;
## [ 1, 0, 0, 0, 0, 0, 0, 0, 0 ]
Expand Down
Loading
Loading