CC @ThomasBreuer
The CI tests in the forms package fail in tst/adv/conformal.tst with Error, <mat> * <matobj> is not defined
A self-contained reproducer:
F:=GF(2);
filt:=IsPlistMatrixRep;
permmat:= Matrix( filt, F, PermutationMat( (1,2), 2, F ) );
gg:= ConformalSymplecticGroup( 2, F, permmat ); # works
gg:= ConformalSymplecticGroup( 2, F, permmat : ConstructingFilter:= filt ); # error
gives
gap> F:=GF(2);
GF(2)
gap> filt:=IsPlistMatrixRep;
<Representation "IsPlistMatrixRep">
gap> permmat:= Matrix( filt, F, PermutationMat( (1,2), 2, F ) );
<2x2-matrix over GF(2)>
gap> gg:= ConformalSymplecticGroup( 2, F, permmat );
SL(2,2)
gap> gg:= ConformalSymplecticGroup( 2, F, permmat : ConstructingFilter:= filt );
Error, <mat> * <matobj> is not defined
*[1] Error( "<mat> * <matobj> is not defined" );
@ /Users/mhorn/Projekte/GAP/gap/lib/matobj.gi:1177
[2] mat2 * stored
@ /Users/mhorn/Projekte/GAP/repos/pkg/gap-packages/forms/lib/conformal.gi:135
[3] ConformalSymplecticGroupCons( filt, d, F, BilinearFormByMatrix( form, F ) )
@ /Users/mhorn/Projekte/GAP/repos/pkg/gap-packages/forms/lib/conformal.gi:89
[4] ConformalSymplecticGroupCons( filt, arg[1], arg[2], form )
@ /Users/mhorn/Projekte/GAP/gap/grp/conformal.gi:38
<function "ConformalSymplecticGroup">( <arguments> )
called from read-eval loop at *stdin*:85
you can 'quit;' to quit to outer loop, or
you can 'return;' to continue
brk>
It all boils down to the base changes:
F:= GF(2);
filt:=IsPlistMatrixRep;
PushOptions( rec( ConstructingFilter:= filt ) );
stored:=IdentityMatrix(filt, F, 2);
SwapMatrixRows(stored, 1, 2);
form:= BilinearFormByMatrix( stored, F );
mat1:= BaseChangeToCanonical( form );
mat1 * form!.matrix * TransposedMat( mat1 ); # works
mat1 * stored * TransposedMat( mat1 ); # does not
So at the core, the problem is that while we can now create a bilinear form from a matrixobj, internally it still stores an old-style matrix, and the base changes are then also old-style.
One approach to addressing this would be to extend the IsBilinearForm format to preserve the type of its input. I.e. if the form is constructed with a MatrixObj, then also store a MatrixObj inside.
CC @ThomasBreuer
The CI tests in the
formspackage fail intst/adv/conformal.tstwithError, <mat> * <matobj> is not definedA self-contained reproducer:
gives
It all boils down to the base changes:
So at the core, the problem is that while we can now create a bilinear form from a matrixobj, internally it still stores an old-style matrix, and the base changes are then also old-style.
One approach to addressing this would be to extend the
IsBilinearFormformat to preserve the type of its input. I.e. if the form is constructed with a MatrixObj, then also store a MatrixObj inside.