support multiple NrMovedPoints arguments in PrimitiveGroupsIterator - #82
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #82 +/- ##
==========================================
+ Coverage 99.13% 99.19% +0.06%
==========================================
Files 46 46
Lines 38327 38333 +6
==========================================
+ Hits 37995 38026 +31
+ Misses 332 307 -25
🚀 New features to boost your workflow:
|
|
Concerning code coverage: If we want to see the warnings about missing degree restrictions, then we have to call Moreover, one gets an error message if the library of groups of degree larger than 4095 is not installed. Turning this question around: |
|
We will soon have all groups of degree < 8192 in this repo, so part of your question will become moot. I need to find some time to properly think about the rest. BTW I think this also affects |
But this is about another function, |
|
Trying to understand the background of |
fingolfin
left a comment
There was a problem hiding this comment.
Thanks a lot for working on this. A few thoughts..
|
I have this and a couple other changes already worked out, and will update the PR, @ThomasBreuer ; let me know if that's a nuisance, then I can also revert it |
Both sides add tst/testinstall/interface.tst; keep the checks from either one, and declare `d` alongside `grps`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Fold the `NrMovedPoints` conditions into `deg` as they are scanned, instead of first sorting them into two auxiliary lists. Rename `f` to `unrestrictedDegree` and drop the assignment that the initialisation above now covers. Only the odd argument positions are scanned for `NrMovedPoints`, so a value that happens to equal it can no longer be read as a condition. The warning is now derived per condition rather than from the intersection of all of them. It stays exact whenever some condition lies in `PRIMRANGE`; it warns needlessly only when every requested set reaches outside the library but their intersection does not. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A primitive group is transitive, so its degree divides its order. The
resulting degree restriction was derived from the first `Size` or
`Order` condition only, and was dropped entirely whenever the degree
was also named explicitly.
Deriving it from all of them narrows the search instead:
AllPrimitiveGroups( NrMovedPoints, [1..2000], Size, 168 )
now inspects the 16 divisors of 168 rather than 2000 degrees, 149 ms
down to 1 ms. The answers are unaffected either way, since every
condition is applied again while the groups are selected.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fingolfin
left a comment
There was a problem hiding this comment.
Looks good to me but since I made recent changes with help of Claude, I will not merge this unless @ThomasBreuer also agrees it is OK (and he might very well not be OK with it)
| if IsList(p) then | ||
| f:=not IsSubset(deg,Difference(p,[1])); | ||
| deg:=Intersection(deg,p); | ||
| unrestrictedDegree:= unrestrictedDegree and not IsSubset(PRIMRANGE, p); |
There was a problem hiding this comment.
No.
We cannot decide unrestrictedDegree from the individual degree lists, only their intersection gives the answer. We do not want the warning in the following example.
gap> PRIMRANGE;
[ 1 .. 8191 ]
gap> PrimitiveGroupsIterator( NrMovedPoints, [ 1, 3 .. 8193 ], NrMovedPoints, [ 2, 4 .. 8192 ] );;
#W AllPrimitiveGroups: Degree restricted to [ 2 .. 8191 ]
There was a problem hiding this comment.
You are absolutely right. Code rewritten now.
There was a problem hiding this comment.
Thanks.
This looks good now.
A degree list reaching beyond PRIMRANGE does not by itself mean the
library missed something: the search is complete as soon as the degrees
all the conditions agree on lie inside it. Deciding per condition
warned needlessly, e.g. for
NrMovedPoints, [ 1, 3 .. 8193 ], NrMovedPoints, [ 2, 4 .. 8192 ]
whose intersection is empty.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`deg` is the file's name for the degrees being searched, in a dozen functions; `degrees` next to it read as its plural rather than as the degrees the caller asked for. Name the requests after what they are, and pair them: `requestedDegrees`, `requestedSizes`. `unrestrictedDegree` named the wrong thing. It is set for `NrMovedPoints, 9000`, where the degree is restricted, just not to something the library holds. What it says is that the answer may miss groups, which is why a warning follows. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
addresses #80
(Fortunately,
NrMovedPointswas the only function that had this problem.)