Skip to content

Improvements to automorphisms/isomorphisms of solvable group - #6494

Merged
fingolfin merged 5 commits into
gap-system:masterfrom
hulpke:isom_better
Aug 14, 2026
Merged

Improvements to automorphisms/isomorphisms of solvable group#6494
fingolfin merged 5 commits into
gap-system:masterfrom
hulpke:isom_better

Conversation

@hulpke

@hulpke hulpke commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

These changes resolve memory use and sluggishness issues being brought up in #6478. This is done by reducing over cautious effort in computing a permutation representation, computation of compatible pairs using MeatAxe functionality,
and by using a new stabilizer routine that works along a composition series, mirrorign what the pc algorithm does. It also will try replacing a large orbit buildup with specific element tests to save on memory.

Also added special handling of 2-generator groups, which might refer back to the old routine if there are few images.

@hulpke hulpke added kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements do not review PRs which are not yet ready for a proper external review (e.g. only submitted for test results) labels Aug 6, 2026
When computing the permutation representation of an automorphism group,
avoid being dragged into a special case for abelian groups.
Use `SubnormalOrbitExtension` to speed up a stabilizer calculation. Call the
function directly, before trying to fit it more generally in the method
selection.
@hulpke hulpke added topic: performance bugs or enhancements related to performance (improvements or regressions) and removed do not review PRs which are not yet ready for a proper external review (e.g. only submitted for test results) labels Aug 12, 2026
@codecov

codecov Bot commented Aug 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 18.77729% with 186 lines in your changes missing coverage. Please review.
✅ Project coverage is 70.92%. Comparing base (153950b) to head (76ad4aa).
⚠️ Report is 4 commits behind head on master.

Files with missing lines Patch % Lines
lib/oprtperm.gi 0.57% 172 Missing ⚠️
lib/grppcaut.gi 33.33% 6 Missing ⚠️
lib/morpheus.gi 85.36% 6 Missing ⚠️
lib/grppcext.gi 66.66% 2 Missing ⚠️

❗ There is a different number of reports uploaded between BASE (153950b) and HEAD (76ad4aa). Click for more details.

HEAD has 24 uploads less than BASE
Flag BASE (153950b) HEAD (76ad4aa)
30 6
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6494      +/-   ##
==========================================
- Coverage   79.03%   70.92%   -8.12%     
==========================================
  Files         685      683       -2     
  Lines      293802   292998     -804     
  Branches     8664     8611      -53     
==========================================
- Hits       232219   207815   -24404     
- Misses      59782    83278   +23496     
- Partials     1801     1905     +104     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@ThomasBreuer

Copy link
Copy Markdown
Contributor

Concerning the examples from #6478 (and several examples similar to the first one), the changes cause that the computations finish quickly:

gap> G:= PcGroupCode( 135495704269114461030660305981889315450271424036046321125005843079133602927728608631986934108567747, 25392 );;
gap> H:= PcGroupCode( 135495704269114461030660305981889315450271424035062002213763081335657669881129534118574177870592195, 25392 );;
gap> IsomorphismGroups( G, H );
[ f2*f3*f4*f6^6*f7^21, f1*f2*f4*f6^11*f7^10 ] -> [ f2*f3*f4*f6^3*f7, f1*f3 ]
gap> time;
710

and

gap> order:= 20412;;
gap> G:= PcGroupCode( 10686578428610998262971791592184364557772754547145470755, order );;
gap> H:= PcGroupCode( 5343819977472525260046739767108264858899801257522787107, order );;
gap> IsomorphismGroups( G, H );
fail

hulpke added 3 commits August 13, 2026 12:56
to compute an orbit along a composition series also in a nonsolvable group.
avoid some membership tests and transfer group orders
For two-generator groups, isomorphism test will use old routine if only few
possible images.
Automorphism groups of abelian groups will know their order.

Be more lenient with degree for Aut(pc)
@hulpke hulpke changed the title Changes to stabilizer calculations and permreps in automorphism groups Improvements to automorphisms/isomorphisms of solvable group Aug 13, 2026

@fingolfin fingolfin left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Great, thanks

@fingolfin
fingolfin merged commit 458c8d3 into gap-system:master Aug 14, 2026
30 checks passed
@fingolfin

Copy link
Copy Markdown
Member

Unfortunately this causes the tests of several packages to fail. A minimal reproducer in pure GAP:

gap> SetAssertionLevel(2);
gap> AutomorphismGroup(SmallGroup(24,3));   # SL(2,3)
Error, Assertion failure
Stack trace:
*[1] ForAll( imgs, function ( x )
      return x in H;
  end )
   @ /Users/mhorn/Projekte/GAP/gap/lib/ghom.gi:299
 [2] GroupGeneralMappingByImagesNC( G, H, gens, imgs )
   @ /Users/mhorn/Projekte/GAP/gap/lib/ghom.gi:429
 [3] GroupHomomorphismByImagesNC( DP, D, gens, genimgs )
   @ /Users/mhorn/Projekte/GAP/gap/lib/grppcext.gi:443
 [4] EXPermutationActionPairs( D )
   @ /Users/mhorn/Projekte/GAP/gap/lib/grppcext.gi:646
 [5] CompatiblePairs( F, M, D )
   @ /Users/mhorn/Projekte/GAP/gap/lib/grppcaut.gi:1363
 [6] AutomorphismGroupSolvableGroup( G )
   @ /Users/mhorn/Projekte/GAP/gap/lib/morpheus.gi:2562
<function "AutomorphismGroup finite groups">( <arguments> )
 called from read-eval loop at *stdin*:2
you can enter 'quit;' to quit to outer loop, or
you can enter 'return;' to continue

I'll see if I can spot the issue quickly, otherwise we should revert it for now and @hulpke needs to reland it once he has a fix

@hulpke

hulpke commented Aug 14, 2026

Copy link
Copy Markdown
Contributor Author

Unfortunately this causes the tests of several packages to fail. A minimal reproducer in pure GAP:
I'll see if I can spot the issue quickly, otherwise we should revert it for now and @hulpke needs to reland it once he has a fix

I just pushed a fix into the same branch, not realizing this was merged. I will do another PR.

hulpke added a commit to hulpke/gap that referenced this pull request Aug 14, 2026
This fixes the error notes in gap-system#6494 post-merge
hulpke added a commit to hulpke/gap that referenced this pull request Aug 14, 2026
This fixes the error notes in gap-system#6494 post-merge
fingolfin added a commit that referenced this pull request Aug 15, 2026
Also some code cleanup

Co-authored-by: Max Horn <max@quendi.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements topic: performance bugs or enhancements related to performance (improvements or regressions)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants