Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gap-forms for openSUSE:Factory checked in at 2026-05-19 17:49:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gap-forms (Old) and /work/SRC/openSUSE:Factory/.gap-forms.new.1966 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gap-forms" Tue May 19 17:49:22 2026 rev:6 rq:1353915 version:1.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/gap-forms/gap-forms.changes 2026-01-27 16:11:50.976887386 +0100 +++ /work/SRC/openSUSE:Factory/.gap-forms.new.1966/gap-forms.changes 2026-05-19 17:49:42.374970131 +0200 @@ -1,0 +2,8 @@ +Tue May 19 01:32:52 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 1.3.0 + * Added `ConformalSymplecticGroup`, fixed a bug in + `PreservedSesquilinearForms` and improved various internals + to better work with matrix objects. + +------------------------------------------------------------------- Old: ---- forms-1.2.14.tar.gz New: ---- forms-1.3.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gap-forms.spec ++++++ --- /var/tmp/diff_new_pack.SJfs2l/_old 2026-05-19 17:49:42.986995944 +0200 +++ /var/tmp/diff_new_pack.SJfs2l/_new 2026-05-19 17:49:42.986995944 +0200 @@ -17,14 +17,14 @@ Name: gap-forms -Version: 1.2.14 +Version: 1.3.0 Release: 0 Summary: GAP: Sesquilinear and quadratic forms License: GPL-2.0-or-later Group: Productivity/Scientific/Math URL: https://gap-packages.github.io/forms/ #Git-Clone: https://github.com/gap-packages/forms -#Changelog: <source>/doc/intro.xml +#Changelog: <source>/doc/intro.xml or <source>/doc/chap1.html (page end) Source: https://github.com/gap-packages/forms/releases/download/v%version/forms-%version.tar.gz BuildArch: noarch BuildRequires: gap-rpm-devel ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.SJfs2l/_old 2026-05-19 17:49:43.038998138 +0200 +++ /var/tmp/diff_new_pack.SJfs2l/_new 2026-05-19 17:49:43.046998476 +0200 @@ -1,5 +1,5 @@ -mtime: 1769430520 -commit: 9420125976f37732bbc63db0f183df3e565f64f3bcb01970895e6de48f445053 +mtime: 1779156271 +commit: 1cf9f2b61f7c36871c31aa8d171a4ef787d3e03410870b665d6c88873e94336c url: https://src.opensuse.org/jengelh/gap-forms revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-05-19 04:04:31.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ forms-1.2.14.tar.gz -> forms-1.3.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/Makefile new/forms-1.3.0/Makefile --- old/forms-1.2.14/Makefile 1970-01-01 01:00:00.000000000 +0100 +++ new/forms-1.3.0/Makefile 2026-05-17 02:00:00.000000000 +0200 @@ -0,0 +1,20 @@ +.PHONY: run doc html clean check + +GAP ?= gap +GAP_ARGS = -q --quitonbreak --packagedirs $(abspath .) + +# run GAP and load the package +run: + $(GAP) --packagedirs "$(abspath .);" -c 'LoadPackage("forms");' + +doc: + $(GAP) $(GAP_ARGS) makedoc.g -c 'QUIT;' + +html: + NOPDF=1 $(GAP) $(GAP_ARGS) makedoc.g -c 'QUIT;' + +clean: + cd doc && rm -f *.{aux,bbl,blg,brf,css,dvi,html,idx,ilg,ind,js,lab,log,out,pdf,pnr,ps,six,tex,toc,txt,xml.bib} _*.xml title.xml + +check: + $(GAP) $(GAP_ARGS) tst/testall.g diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/PackageInfo.g new/forms-1.3.0/PackageInfo.g --- old/forms-1.2.14/PackageInfo.g 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/PackageInfo.g 2026-05-17 02:00:00.000000000 +0200 @@ -10,8 +10,8 @@ SetPackageInfo( rec( PackageName := "Forms", Subtitle := "Sesquilinear and Quadratic", - Version := "1.2.14", - Date := "26/01/2026", + Version := "1.3.0", + Date := "17/05/2026", License := "GPL-2.0-or-later", SourceRepository := rec( @@ -124,7 +124,7 @@ AutoDoc := rec( TitlePage := rec( Copyright := Concatenation( - "©right; 2015-2024 by the authors<P/>\n\n", + "©right; 2015-2026 by the authors<P/>\n\n", "This package may be distributed under the terms and conditions ", "of the GNU Public License Version 2 or (at your option) any later version.\n" ), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/chap0.html new/forms-1.3.0/doc/chap0.html --- old/forms-1.2.14/doc/chap0.html 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/chap0.html 2026-05-17 02:00:00.000000000 +0200 @@ -29,10 +29,10 @@ <h2>Sesquilinear and Quadratic</h2> <p> - 1.2.14</p> + 1.3.0</p> <p> - 26 January 2026 + 17 May 2026 </p> </div> @@ -60,7 +60,7 @@ <p><a id="X81488B807F2A1CF1" name="X81488B807F2A1CF1"></a></p> <h3>Copyright</h3> -<p>© 2015-2024 by the authors</p> +<p>© 2015-2026 by the authors</p> <p>This package may be distributed under the terms and conditions of the GNU Public License Version 2 or (at your option) any later version.</p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/chap0.txt new/forms-1.3.0/doc/chap0.txt --- old/forms-1.2.14/doc/chap0.txt 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/chap0.txt 2026-05-17 02:00:00.000000000 +0200 @@ -6,10 +6,10 @@ [1X Sesquilinear and Quadratic [101X - 1.2.14 + 1.3.0 - 26 January 2026 + 17 May 2026 John Bamberg @@ -41,7 +41,7 @@ ------------------------------------------------------- [1XCopyright[101X - [33X[0;0Y© 2015-2024 by the authors[133X + [33X[0;0Y© 2015-2026 by the authors[133X [33X[0;0YThis package may be distributed under the terms and conditions of the GNU Public License Version 2 or (at your option) any later version.[133X diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/chap0_mj.html new/forms-1.3.0/doc/chap0_mj.html --- old/forms-1.2.14/doc/chap0_mj.html 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/chap0_mj.html 2026-05-17 02:00:00.000000000 +0200 @@ -32,10 +32,10 @@ <h2>Sesquilinear and Quadratic</h2> <p> - 1.2.14</p> + 1.3.0</p> <p> - 26 January 2026 + 17 May 2026 </p> </div> @@ -63,7 +63,7 @@ <p><a id="X81488B807F2A1CF1" name="X81488B807F2A1CF1"></a></p> <h3>Copyright</h3> -<p>© 2015-2024 by the authors</p> +<p>© 2015-2026 by the authors</p> <p>This package may be distributed under the terms and conditions of the GNU Public License Version 2 or (at your option) any later version.</p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/chap1.html new/forms-1.3.0/doc/chap1.html --- old/forms-1.2.14/doc/chap1.html 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/chap1.html 2026-05-17 02:00:00.000000000 +0200 @@ -119,6 +119,8 @@ <p>Version 1.2.14 prepares for a change in a future GAP version where GAP will enhance <code class="code">InvariantQuadraticForm</code>, <code class="code">InvariantBilinearForm</code> and <code class="code">InvariantSesquilinearForm</code> to also provide the field of definition.</p> +<p>Version 1.3.0 adds <code class="code">ConformalSymplecticGroup</code>, fixes a bug in <code class="code">PreservedSesquilinearForms</code> and improves various internals to better work with matrix objects.</p> + <div class="chlinkprevnextbot"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap0.html">[Previous Chapter]</a> <a href="chap2.html">[Next Chapter]</a> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/chap1.txt new/forms-1.3.0/doc/chap1.txt --- old/forms-1.2.14/doc/chap1.txt 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/chap1.txt 2026-05-17 02:00:00.000000000 +0200 @@ -124,3 +124,7 @@ enhance [10XInvariantQuadraticForm[110X, [10XInvariantBilinearForm[110X and [10XInvariantSesquilinearForm[110X to also provide the field of definition.[133X + [33X[0;0YVersion 1.3.0 adds [10XConformalSymplecticGroup[110X, fixes a bug in + [10XPreservedSesquilinearForms[110X and improves various internals to better work + with matrix objects.[133X + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/chap1_mj.html new/forms-1.3.0/doc/chap1_mj.html --- old/forms-1.2.14/doc/chap1_mj.html 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/chap1_mj.html 2026-05-17 02:00:00.000000000 +0200 @@ -122,6 +122,8 @@ <p>Version 1.2.14 prepares for a change in a future GAP version where GAP will enhance <code class="code">InvariantQuadraticForm</code>, <code class="code">InvariantBilinearForm</code> and <code class="code">InvariantSesquilinearForm</code> to also provide the field of definition.</p> +<p>Version 1.3.0 adds <code class="code">ConformalSymplecticGroup</code>, fixes a bug in <code class="code">PreservedSesquilinearForms</code> and improves various internals to better work with matrix objects.</p> + <div class="chlinkprevnextbot"> <a href="chap0_mj.html">[Top of Book]</a> <a href="chap0_mj.html#contents">[Contents]</a> <a href="chap0_mj.html">[Previous Chapter]</a> <a href="chap2_mj.html">[Next Chapter]</a> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/forms.tex new/forms-1.3.0/doc/forms.tex --- old/forms-1.2.14/doc/forms.tex 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/forms.tex 2026-05-17 02:00:00.000000000 +0200 @@ -98,8 +98,8 @@ {\Huge \textbf{ Sesquilinear and Quadratic \mbox{}}}\\ \vfill -{\Huge 1.2.14 \mbox{}}\\[1cm] -{ 26 January 2026 \mbox{}}\\[1cm] +{\Huge 1.3.0 \mbox{}}\\[1cm] +{ 17 May 2026 \mbox{}}\\[1cm] \mbox{}\\[2cm] {\Large \textbf{ John Bamberg\\ \mbox{}}}\\ @@ -141,7 +141,7 @@ {\small \section*{Copyright} \logpage{[ 0, 0, 1 ]} - {\copyright} 2015\texttt{\symbol{45}}2024 by the authors + {\copyright} 2015\texttt{\symbol{45}}2026 by the authors This package may be distributed under the terms and conditions of the GNU Public License Version 2 or (at your option) any later version. \mbox{}}\\[1cm] @@ -275,7 +275,9 @@ internal changes were made that should not affect users. Version 1.2.14 prepares for a change in a future GAP version where GAP will -enhance \texttt{InvariantQuadraticForm}, \texttt{InvariantBilinearForm} and \texttt{InvariantSesquilinearForm} to also provide the field of definition. } +enhance \texttt{InvariantQuadraticForm}, \texttt{InvariantBilinearForm} and \texttt{InvariantSesquilinearForm} to also provide the field of definition. + +Version 1.3.0 adds \texttt{ConformalSymplecticGroup}, fixes a bug in \texttt{PreservedSesquilinearForms} and improves various internals to better work with matrix objects. } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/intro.xml new/forms-1.3.0/doc/intro.xml --- old/forms-1.2.14/doc/intro.xml 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/intro.xml 2026-05-17 02:00:00.000000000 +0200 @@ -116,6 +116,8 @@ <P/>Version 1.2.14 prepares for a change in a future GAP version where GAP will enhance <C>InvariantQuadraticForm</C>, <C>InvariantBilinearForm</C> and <C>InvariantSesquilinearForm</C> to also provide the field of definition. +<P/>Version 1.3.0 adds <C>ConformalSymplecticGroup</C>, fixes a bug in <C>PreservedSesquilinearForms</C> +and improves various internals to better work with matrix objects. </Section> <!-- ############################################################ --> Binary files old/forms-1.2.14/doc/manual.pdf and new/forms-1.3.0/doc/manual.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/doc/title.xml new/forms-1.3.0/doc/title.xml --- old/forms-1.2.14/doc/title.xml 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/doc/title.xml 2026-05-17 02:00:00.000000000 +0200 @@ -9,7 +9,7 @@ Sesquilinear and Quadratic </Subtitle> <Version> - 1.2.14 + 1.3.0 </Version> <Author> John Bamberg<Alt Only="LaTeX"><Br/></Alt> @@ -38,10 +38,10 @@ </Author> <Date> - 26 January 2026 + 17 May 2026 </Date> <Copyright> - ©right; 2015-2024 by the authors<P/> + ©right; 2015-2026 by the authors<P/> This package may be distributed under the terms and conditions of the GNU Public License Version 2 or (at your option) any later version. </Copyright> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/init.g new/forms-1.3.0/init.g --- old/forms-1.2.14/init.g 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/init.g 2026-05-17 02:00:00.000000000 +0200 @@ -14,3 +14,7 @@ ReadPackage("forms","lib/forms.gd"); ReadPackage("forms","lib/recognition.gd"); + +if IsBound( ConformalSymplecticGroup ) then + ReadPackage("forms","lib/conformal.gd"); +fi; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/lib/classic.gi new/forms-1.3.0/lib/classic.gi --- old/forms-1.2.14/lib/classic.gi 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/lib/classic.gi 2026-05-17 02:00:00.000000000 +0200 @@ -109,7 +109,7 @@ fi; mat:= matinv * InvariantBilinearForm( g ).matrix * TransposedMat( matinv ); - SetInvariantBilinearForm( gg, rec( matrix:= mat ) ); + SetInvariantBilinearForm( gg, rec( matrix:= mat, baseDomain:= gf ) ); if Characteristic( gf ) <> 2 and HasIsFullSubgroupGLorSLRespectingBilinearForm( g ) then SetIsFullSubgroupGLorSLRespectingBilinearForm( gg, @@ -784,17 +784,17 @@ g:= SpecialUnitaryGroupCons( filt, d, q ); stored:= InvariantSesquilinearForm( g ).matrix; - # If the prescribed form fits then just return. - if stored = form!.matrix then - return g; - fi; - # Check that 'form' lives over the intended field. F:= GF(q^2); if not IsSubset( F, form!.basefield ) then Error( "the defining field of <form> does not fit to <q>" ); fi; + # If the prescribed form fits then just return. + if stored = form!.matrix then + return g; + fi; + # Compute a base change matrix. # (Check that the canonical forms are equal.) wanted:= HermitianFormByMatrix( stored, F ); @@ -832,8 +832,8 @@ ############################################################################# ## #O SymplecticGroupCons( <filter>, <form> ) -#O SymplecticGroupCons( <filter>, <d>, <q>, <form> ) #O SymplecticGroupCons( <filter>, <d>, <R>, <form> ) +#O SymplecticGroupCons( <filter>, <d>, <q>, <form> ) ## ## 'SymplecticGroup' is a plain function that is defined in the GAP ## library. @@ -846,9 +846,9 @@ function( obj ) DeclareConstructor( "SymplecticGroupCons", [ IsGroup, obj ] ); DeclareConstructor( "SymplecticGroupCons", - [ IsGroup, IsPosInt, IsPosInt, obj ] ); - DeclareConstructor( "SymplecticGroupCons", [ IsGroup, IsPosInt, IsRing, obj ] ); + DeclareConstructor( "SymplecticGroupCons", + [ IsGroup, IsPosInt, IsPosInt, obj ] ); end ); @@ -875,7 +875,7 @@ [ IsMatrixGroup and IsFinite, IsBilinearForm ], { filt, form } -> SymplecticGroupCons( filt, NumberRows( form!.matrix ), - Size( form!.basefield ), form ) ); + form!.basefield, form ) ); ############################################################################# @@ -888,7 +888,7 @@ IsPosInt, IsPosInt, IsMatrixOrMatrixObj ], - { filt, d, q, mat } -> SymplecticGroupCons( filt, d, q, + { filt, d, q, mat } -> SymplecticGroupCons( filt, d, GF(q), BilinearFormByMatrix( mat, GF(q) ) ) ); InstallMethod( SymplecticGroupCons, @@ -897,7 +897,7 @@ IsPosInt, IsPosInt, IsGroup and HasInvariantBilinearForm ], - { filt, d, q, G } -> SymplecticGroupCons( filt, d, q, + { filt, d, q, G } -> SymplecticGroupCons( filt, d, GF(q), BilinearFormByMatrix( InvariantBilinearForm( G ).matrix, GF(q) ) ) ); @@ -907,30 +907,46 @@ IsPosInt, IsPosInt, IsBilinearForm ], - function( filt, d, q, form ) - local g, stored, F, wanted, mat1, mat2, mat, matinv, gens, gg; + { filt, d, q, form } -> SymplecticGroupCons( filt, d, GF(q), form ) ); + + +############################################################################# +## +#M SymplecticGroupCons( <filt>, <d>, <F>, <form> ) +## +InstallMethod( SymplecticGroupCons, + "matrix group for dimension, finite field, form", + [ IsMatrixGroup and IsFinite, + IsPosInt, + IsField and IsFinite, + IsBilinearForm ], + function( filt, d, F, form ) + local q, g, stored, form_matrix, wanted, mat1, mat2, mat, matinv, gens, gg; # Create the default generators and form. - g:= SymplecticGroupCons( filt, d, q ); + q:= Size( F ); + g:= SymplecticGroupCons( filt, d, F ); stored:= InvariantBilinearForm( g ).matrix; - # If the prescribed form fits then just return. - if stored = form!.matrix then - return g; - fi; - # Check that 'form' lives over the intended field. - F:= GF(q); if not IsSubset( F, form!.basefield ) then Error( "the defining field of <form> does not fit to <q>" ); fi; + # If the prescribed form fits then just return. + form_matrix:= Matrix( form!.matrix, stored ); +#T This 'Matrix' call should become unnecessary. +#T For that, the functions used below have to support 'IsMatrixObj' arguments. + if stored = form_matrix then + return g; + fi; + # Compute a base change matrix. # (Check that the canonical forms are equal.) wanted:= BilinearFormByMatrix( stored, F ); - mat1:= BaseChangeToCanonical( form ); - mat2:= BaseChangeToCanonical( wanted ); - if mat1 * form!.matrix * TransposedMat( mat1 ) <> + mat1:= Matrix( BaseChangeToCanonical( form ), stored ); + mat2:= Matrix( BaseChangeToCanonical( wanted ), stored ); + if mat1 * form_matrix * TransposedMat( mat1 ) <> mat2 * stored * TransposedMat( mat2 ) then Error( "canonical forms of <form> and <wanted> differ" ); fi; @@ -947,7 +963,7 @@ SetName( gg, Name( g ) ); fi; - SetInvariantBilinearForm( gg, rec( matrix:= form!.matrix, + SetInvariantBilinearForm( gg, rec( matrix:= form_matrix, baseDomain:= F ) ); if HasIsFullSubgroupGLorSLRespectingBilinearForm( g ) then SetIsFullSubgroupGLorSLRespectingBilinearForm( gg, @@ -957,18 +973,13 @@ return gg; end ); - -############################################################################# -## -#M SymplecticGroupCons( <filt>, <d>, <R>, <form> ) -## InstallMethod( SymplecticGroupCons, "matrix group for dimension, finite field, matrix of form", [ IsMatrixGroup and IsFinite, IsPosInt, IsField and IsFinite, IsMatrixOrMatrixObj ], - { filt, d, F, form } -> SymplecticGroupCons( filt, d, Size( F ), + { filt, d, F, form } -> SymplecticGroupCons( filt, d, F, BilinearFormByMatrix( form, F ) ) ); InstallMethod( SymplecticGroupCons, @@ -977,14 +988,6 @@ IsPosInt, IsField and IsFinite, IsGroup and HasInvariantBilinearForm ], - { filt, d, F, G } -> SymplecticGroupCons( filt, d, Size( F ), + { filt, d, F, G } -> SymplecticGroupCons( filt, d, F, BilinearFormByMatrix( InvariantBilinearForm( G ).matrix, F ) ) ); - -InstallMethod( SymplecticGroupCons, - "matrix group for dimension, finite field, form", - [ IsMatrixGroup and IsFinite, - IsPosInt, - IsField and IsFinite, - IsBilinearForm ], - { filt, d, F, form } -> SymplecticGroupCons( filt, d, Size( F ), form ) ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/lib/conformal.gd new/forms-1.3.0/lib/conformal.gd --- old/forms-1.2.14/lib/conformal.gd 1970-01-01 01:00:00.000000000 +0100 +++ new/forms-1.3.0/lib/conformal.gd 2026-05-17 02:00:00.000000000 +0200 @@ -0,0 +1,28 @@ +############################################################################# +## +## conformal.gd 'Forms' package +## + +############################################################################# +## +#O ConformalSymplecticGroupCons( <filter>, <form> ) +#O ConformalSymplecticGroupCons( <filter>, <matrix> ) +#O ConformalSymplecticGroupCons( <filter>, <G> ) +#O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <form> ) +#O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <matrix> ) +#O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <G> ) +#O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <form> ) +#O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <matrix> ) +#O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <G> ) +## +## Declare the variants involving a bilinear form as an argument. +## +Perform( + [ IsMatrixOrMatrixObj, IsBilinearForm, IsGroup ], + function( obj ) + DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, obj ] ); + DeclareConstructor( "ConformalSymplecticGroupCons", + [ IsGroup, IsPosInt, IsRing, obj ] ); + DeclareConstructor( "ConformalSymplecticGroupCons", + [ IsGroup, IsPosInt, IsPosInt, obj ] ); + end ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/lib/conformal.gi new/forms-1.3.0/lib/conformal.gi --- old/forms-1.2.14/lib/conformal.gi 1970-01-01 01:00:00.000000000 +0100 +++ new/forms-1.3.0/lib/conformal.gi 2026-05-17 02:00:00.000000000 +0200 @@ -0,0 +1,195 @@ +############################################################################# +## +#M ConformalSymplecticGroupCons( <filt>, <form> ) +## +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for matrix of form", + [ "IsMatrixGroup and IsFinite", "IsMatrixOrMatrixObj" ], + { filt, mat } -> ConformalSymplecticGroupCons( filt, + BilinearFormByMatrix( mat, BaseDomain( mat ) ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for group with form", + [ "IsMatrixGroup and IsFinite", "IsGroup and HasInvariantBilinearForm" ], + { filt, G } -> ConformalSymplecticGroupCons( filt, + BilinearFormByMatrix( + InvariantBilinearForm( G ).matrix, + Forms_FieldOfDefinition( InvariantBilinearForm( G ), G ) ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for group with form", + [ "IsMatrixGroup and IsFinite", + "IsGroup and HasInvariantBilinearFormUpToScalars" ], + { filt, G } -> ConformalSymplecticGroupCons( filt, + BilinearFormByMatrix( + InvariantBilinearFormUpToScalars( G ).matrix, + Forms_FieldOfDefinition( InvariantBilinearFormUpToScalars( G ), G ) ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for form", + [ "IsMatrixGroup and IsFinite", "IsBilinearForm" ], + { filt, form } -> ConformalSymplecticGroupCons( filt, + NumberRows( form!.matrix ), + form!.basefield, form ) ); + + +############################################################################# +## +#M ConformalSymplecticGroupCons( <filt>, <d>, <q>, <form> ) +## +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for dimension, finite field size, matrix of form", + [ "IsMatrixGroup and IsFinite", + "IsPosInt", + "IsPosInt", + "IsMatrixOrMatrixObj" ], + { filt, d, q, mat } -> ConformalSymplecticGroupCons( filt, d, GF(q), + BilinearFormByMatrix( mat, GF(q) ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for dimension, finite field size, group with form", + [ "IsMatrixGroup and IsFinite", + "IsPosInt", + "IsPosInt", + "IsGroup and HasInvariantBilinearForm" ], + { filt, d, q, G } -> ConformalSymplecticGroupCons( filt, d, GF(q), + BilinearFormByMatrix( + InvariantBilinearForm( G ).matrix, GF(q) ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for dimension, finite field size, group with form", + [ "IsMatrixGroup and IsFinite", + "IsPosInt", + "IsPosInt", + "IsGroup and HasInvariantBilinearFormUpToScalars" ], + { filt, d, q, G } -> ConformalSymplecticGroupCons( filt, d, GF(q), + BilinearFormByMatrix( + InvariantBilinearFormUpToScalars( G ).matrix, GF(q) ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for dimension, finite field size, form", + [ "IsMatrixGroup and IsFinite", + "IsPosInt", + "IsPosInt", + "IsBilinearForm" ], + { filt, d, q, form } -> ConformalSymplecticGroupCons( filt, d, GF(q), form ) ); + + +############################################################################# +## +#M ConformalSymplecticGroupCons( <filt>, <d>, <R>, <form> ) +## +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for dimension, finite field, matrix of form", + [ "IsMatrixGroup and IsFinite", + "IsPosInt", + "IsField and IsFinite", + "IsMatrixOrMatrixObj" ], + { filt, d, F, form } -> ConformalSymplecticGroupCons( filt, d, F, + BilinearFormByMatrix( form, F ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for dimension, finite field, group with form", + [ "IsMatrixGroup and IsFinite", + "IsPosInt", + "IsField and IsFinite", + "IsGroup and HasInvariantBilinearForm" ], + { filt, d, F, G } -> ConformalSymplecticGroupCons( filt, d, F, + BilinearFormByMatrix( + InvariantBilinearForm( G ).matrix, F ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for dimension, finite field, group with form", + [ "IsMatrixGroup and IsFinite", + "IsPosInt", + "IsField and IsFinite", + "IsGroup and HasInvariantBilinearFormUpToScalars" ], + { filt, d, F, G } -> ConformalSymplecticGroupCons( filt, d, F, + BilinearFormByMatrix( + InvariantBilinearFormUpToScalars( G ).matrix, F ) ) ); + +InstallMethod( ConformalSymplecticGroupCons, + "matrix group for dimension, finite field, form", + [ "IsMatrixGroup and IsFinite", + "IsPosInt", + "IsField and IsFinite", + "IsBilinearForm" ], + function( filt, d, F, form ) + local g, stored, matrix_filt, form_matrix, wanted, mat1, mat2, mat, matinv, + gens, gg; + + # Create the default generators and form. + g:= ConformalSymplecticGroupCons( filt, d, F ); + stored:= InvariantBilinearFormUpToScalars( g ).matrix; + matrix_filt:= ConstructingFilter( stored ); + Assert( 1, ForAll( GeneratorsOfGroup( g ), + x -> ConstructingFilter( x ) = matrix_filt ) ); + + # If the prescribed form fits then just return. + # We do not require that 'form!.matrix' is in 'matrix_filt', + # only its entries describe the desired form. + form_matrix:= Matrix( matrix_filt, F, form!.matrix ); + if stored = form_matrix then + return g; + fi; + + # Compute a base change matrix. + # (Check that the canonical forms are equal.) + wanted:= BilinearFormByMatrix( stored, F ); + mat1:= Matrix( matrix_filt, F, BaseChangeToCanonical( form ) ); + mat2:= Matrix( matrix_filt, F, BaseChangeToCanonical( wanted ) ); + if mat1 * form_matrix * TransposedMat( mat1 ) <> + mat2 * stored * TransposedMat( mat2 ) then + Error( "canonical forms of <form> and <wanted> differ" ); + fi; + mat:= mat2^-1 * mat1; + matinv:= mat^-1; + + # Create the group w.r.t. the prescribed form. + gens:= List( GeneratorsOfGroup( g ), x -> matinv * x * mat ); + gg:= GroupWithGenerators( gens ); + + UseIsomorphismRelation( g, gg ); + + if HasName( g ) then + SetName( gg, Name( g ) ); + fi; + + SetInvariantBilinearFormUpToScalars( gg, + rec( matrix:= form_matrix, baseDomain:= F ) ); + + if HasIsFullSubgroupGLRespectingBilinearFormUpToScalars( g ) then + SetIsFullSubgroupGLRespectingBilinearFormUpToScalars( gg, + IsFullSubgroupGLRespectingBilinearFormUpToScalars( g ) ); + fi; + + return gg; +end ); + + +############################################################################# +## +## The following methods are currently needed to make the code work +## in case one creates groups whose elements are in `IsMatrixObj`. +## Eventually we must support `IsMatrixObj` matrices in form objects. +## + +InstallOtherMethod( BilinearFormByMatrix, + "for a ffe matrix object and a field", + [ "IsMatrixObj and IsFFECollColl", "IsField and IsFinite" ], + { m, F } -> BilinearFormByMatrix( Unpack( m ), F ) ); + +InstallOtherMethod( BilinearFormByMatrix, + "for a ffe matrix object", + [ "IsMatrixObj and IsFFECollColl" ], + m -> BilinearFormByMatrix( Unpack( m ) ) ); + + +# The following is apparently needed in the tests in `tst/adv/conformal.tst`. +# Strictly speaking, the following is not correct, +# according to the definition of `DegreeFFE`. +# Eventually we should fix the use of `FieldOfMatrixList` +# and `FieldOfMatrixGroup`, then `DegreeFFE` will not be important anymore. +InstallOtherMethod( DegreeFFE, + [ "IsMatrixObj and IsFFECollColl" ], + mat -> DegreeOverPrimeField( BaseDomain( mat ) ) ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/lib/recognition_new.gi new/forms-1.3.0/lib/recognition_new.gi --- old/forms-1.2.14/lib/recognition_new.gi 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/lib/recognition_new.gi 2026-05-17 02:00:00.000000000 +0200 @@ -90,7 +90,7 @@ ## InstallGlobalFunction( ClassicalForms_GeneratorsWithBetterScalarsSesquilinear, function( grp, frob ) - local tries, gens, field, m1, a1, new, i, scalars, root, improvegenerator, res, newgens, champion, len, qq, q; + local tries, gens, field, m1, a1, new, i, scalars, improvegenerator, res, newgens, champion, len, qq, q; # the aim of this function is to replace the matrix m1 by a # matrix that has as few solutions to the scalar equation @@ -114,7 +114,7 @@ # if it is possible to change the matrix to multiple that preserves up to scalar one, this is achieved. improvegenerator := function(m1,i,count,len) - local a1, s, j, k, scalars, root; #I think root should be declare locally here! + local a1, s, j, k, scalars; a1 := ClassicalForms_PossibleScalarsSesquilinear(field,m1,frob); #Recall that the scalars satisfy the equation lambda^a[1] = a[2] @@ -123,15 +123,11 @@ fi; if IsList(a1) then - root := NthRoot(field,a1[2],a1[1]); if a1[1] = 1 then # the matrix m1 has scalar a1[2] - #if a1[2] has a square root, we can replace m1 with m1*sqrt{a1[2]}; - if LogFFE(a1[2],PrimitiveRoot(field)) mod 2 = 0 then - return [m1/NthRoot(field,a1[2],2),[One(field)]]; + if LogFFE(a1[2],PrimitiveRoot(field)) mod (q+1) = 0 then + return [m1/NthRoot(field,a1[2],q+1),[One(field)]]; fi; - return [m1,[a1[2]]]; #originally, the three lines above this return were not there. Those three lines make sure scalar becomes 1 if possible (basicaly if there is a sqrt). - elif LogFFE(root,PrimitiveRoot(field)) mod (q+1) = 0 then - return [m1/NthRoot(field,root,q+1),[One(field)]]; #either frob = id, then q+1 = 2, or frob is not trivial, then we take q+1-st root. In both cases, modify m1 to a matrix that has scalar one. + return [m1,[a1[2]]]; #originally, the three lines above this return were not there. Those three lines make sure scalar becomes 1 if possible (basically if there is a q+1-st root). else scalars := AsList(Group(NthRoot(field,a1[2],a1[1]))); # add all possible scalars for m1 if count = 0 then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/read.g new/forms-1.3.0/read.g --- old/forms-1.2.14/read.g 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/read.g 2026-05-17 02:00:00.000000000 +0200 @@ -16,3 +16,7 @@ ReadPackage("forms", "lib/recognition.gi"); ReadPackage("forms", "lib/classic.gi"); ReadPackage("forms", "lib/recognition_new.gi"); + +if IsBound( ConformalSymplecticGroup ) then + ReadPackage("forms", "lib/conformal.gi"); +fi; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/tst/adv/classic.tst new/forms-1.3.0/tst/adv/classic.tst --- old/forms-1.2.14/tst/adv/classic.tst 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/tst/adv/classic.tst 2026-05-17 02:00:00.000000000 +0200 @@ -1,4 +1,5 @@ -#@local is_equal, q, F, d, es, e, g, stored, pi, permmat, form, gg, F2, mat +#@local is_equal, q, F, d, es, e, g, filters, filt, stored, pi, permmat +#@local form, gg, F2, mat gap> START_TEST( "Forms: classic.tst" ); @@ -164,29 +165,53 @@ > od; # Test the creation of symplectic groups. +gap> if IsBound( ConformalSymplecticGroup ) then +> # Support for matrix objects was added together with this function, +> # https://github.com/gap-system/gap/pull/6213. +> # Once we know a GAP version that decides the availability, +> # the version number can be used for the distinction. +> filters:= [ IsPlistRep, IsPlistMatrixRep ];; +> else +> filters:= [ IsPlistRep ];; +> fi; gap> for q in [ 2, 3, 4, 5, 7, 8, 9, 11, 13, 16, 17, 19, 23, 25 ] do > F:= GF(q); > for d in [ 2, 4 .. 8 ] do -> g:= SymplecticGroup( d, q ); -> stored:= InvariantBilinearForm( g ).matrix; -> pi:= PermutationMat( (1,2), d, F ); -> permmat:= pi * stored * TransposedMat( pi ); -> form:= BilinearFormByMatrix( stored, F ); -> gg:= SymplecticGroup( d, q, permmat ); -> if not ( is_equal( g, SymplecticGroup( g ) ) and -> ( is_equal( g, SymplecticGroup( stored ) ) or -> BaseDomain( stored ) <> F ) and -> is_equal( g, SymplecticGroup( form ) ) and -> is_equal( g, SymplecticGroup( d, q, g ) ) and -> is_equal( g, SymplecticGroup( d, q, stored ) ) and -> is_equal( g, SymplecticGroup( d, q, form ) ) and -> is_equal( g, SymplecticGroup( d, F, g ) ) and -> is_equal( g, SymplecticGroup( d, F, stored ) ) and -> is_equal( g, SymplecticGroup( d, F, form ) ) and -> IsSubset( gg, GeneratorsOfGroup( gg ) ) and -> IsSubset( g, List( GeneratorsOfGroup( gg ), x -> x^pi ) ) ) then -> Error( "problem with Sp(", d, ",", q, ")" ); -> fi; +> for filt in filters do +> PushOptions( rec( ConstructingFilter:= filt ) ); +> +> g:= SymplecticGroup( d, q ); +> if filt <> IsPlistRep and not filt( One( g ) ) then +> Error( "wrong repres. of matrices", [ q, d, filt ] ); +> fi; +> stored:= InvariantBilinearForm( g ).matrix; +> if filt <> IsPlistRep and not filt( stored ) then +> Error( "wrong repres. of matrices" ); +> fi; +> pi:= Matrix( PermutationMat( (1,2), d, F ), stored ); +> permmat:= pi * stored * TransposedMat( pi ); +> form:= BilinearFormByMatrix( stored, F ); +> gg:= SymplecticGroup( d, q, permmat ); +> if filt <> IsPlistRep and not filt( One( gg ) ) then +> Error( "wrong repres. of matrices" ); +> fi; +> if not ( is_equal( g, SymplecticGroup( g ) ) and +> ( is_equal( g, SymplecticGroup( stored ) ) or +> BaseDomain( stored ) <> F ) and +> is_equal( g, SymplecticGroup( form ) ) and +> is_equal( g, SymplecticGroup( d, q, g ) ) and +> is_equal( g, SymplecticGroup( d, q, stored ) ) and +> is_equal( g, SymplecticGroup( d, q, form ) ) and +> is_equal( g, SymplecticGroup( d, F, g ) ) and +> is_equal( g, SymplecticGroup( d, F, stored ) ) and +> is_equal( g, SymplecticGroup( d, F, form ) ) and +> IsSubset( gg, GeneratorsOfGroup( gg ) ) and +> IsSubset( g, List( GeneratorsOfGroup( gg ), x -> x^pi ) ) ) then +> Error( "problem with Sp(", d, ",", q, ") for ", filt ); +> fi; +> +> PushOptions( rec( ConstructingFilter:= fail ) ); +> od; > od; > od; @@ -232,4 +257,4 @@ false ## -gap> STOP_TEST( "classic.tst" ); +gap> STOP_TEST( "Forms: classic.tst" ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/tst/adv/conformal.tst new/forms-1.3.0/tst/adv/conformal.tst --- old/forms-1.2.14/tst/adv/conformal.tst 1970-01-01 01:00:00.000000000 +0100 +++ new/forms-1.3.0/tst/adv/conformal.tst 2026-05-17 02:00:00.000000000 +0200 @@ -0,0 +1,72 @@ +#@local q, F, d, filts, filt, g, stored, pi, permmat, form, gg, pg, sp + +gap> START_TEST( "Forms: conformal.tst" ); + +# Test the creation of conformal symplectic groups. +gap> for q in [ 2, 3, 4, 5, 7, 8, 9, 11, 13, 16, 17, 19, 23, 25 ] do +> F:= GF(q); +> for d in [ 2, 4 .. 8 ] do +> filts:= [ IsPlistRep, IsPlistMatrixRep ]; +> if q = 2 then +> Add( filts, IsGF2MatrixRep ); +> elif q <= 256 then +> Add( filts, Is8BitMatrixRep ); +> fi; +> for filt in filts do +> PushOptions( rec( ConstructingFilter:= filt ) ); +> +> g:= ConformalSymplecticGroup( d, F ); +> if filt <> IsPlistRep and not filt( One( g ) ) then +> Error( "wrong repres. of matrices", [ q, d, filt ] ); +> fi; +> stored:= InvariantBilinearFormUpToScalars( g ).matrix; +> if filt <> IsPlistRep and not filt( stored ) then +> Error( "wrong repres. of matrices" ); +> fi; +> pi:= Matrix( PermutationMat( (1,2), d, F ), stored ); +> permmat:= pi * stored * TransposedMat( pi ); +> form:= BilinearFormByMatrix( stored, F ); +> gg:= ConformalSymplecticGroup( d, F, permmat ); +> if filt <> IsPlistRep and not filt( One( gg ) ) then +> Error( "wrong repres. of matrices" ); +> fi; +> if not ( g = ConformalSymplecticGroup( g ) and +> ( g = ConformalSymplecticGroup( stored ) or +> BaseDomain( stored ) <> F ) and +> g = ConformalSymplecticGroup( d, q ) and +> g = ConformalSymplecticGroup( form ) and +> g = ConformalSymplecticGroup( d, q, g ) and +> g = ConformalSymplecticGroup( d, q, stored ) and +> g = ConformalSymplecticGroup( d, q, form ) and +> g = ConformalSymplecticGroup( d, F, g ) and +> g = ConformalSymplecticGroup( d, F, stored ) and +> g = ConformalSymplecticGroup( d, F, form ) and +> IsSubset( gg, GeneratorsOfGroup( gg ) ) and +> IsSubset( g, List( GeneratorsOfGroup( gg ), x -> x^pi ) ) ) then +> Error( "problem with CSp(", d, ",", q, ")" ); +> fi; +> +> if Size( g ) < 10^7 then +> pg:= ConformalSymplecticGroup( IsPermGroup, d, q ); +> if Size( g ) <> Size( pg ) then +> Error( "problem with CSp(IsPermGroup, ", d, ",", q, ")" ); +> fi; +> fi; +> +> sp:= SymplecticGroup( d, q, permmat ); +> if filt <> IsPlistRep and not filt( One( sp ) ) then +> Error( "wrong repres. of matrices" ); +> fi; +> g:= ConformalSymplecticGroup( sp ); +> if not IsSubset( g, sp ) then +> Error( "problem with CSp(", d, ",", q, ")" ); +> fi; +> +> PushOptions( rec( ConstructingFilter:= fail ) ); +> od; +> od; +> od; + +## +gap> STOP_TEST( "Forms: conformal.tst" ); + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/tst/adv/test_pres_sesforms3.tst new/forms-1.3.0/tst/adv/test_pres_sesforms3.tst --- old/forms-1.2.14/tst/adv/test_pres_sesforms3.tst 1970-01-01 01:00:00.000000000 +0100 +++ new/forms-1.3.0/tst/adv/test_pres_sesforms3.tst 2026-05-17 02:00:00.000000000 +0200 @@ -0,0 +1,81 @@ +gap> START_TEST("Forms: test_pres_sesforms3.tst"); + +# Regression tests for issue #83: +# examples where sesquilinear forms preserved up to scalars +# were not detected due to scalar normalization issues. +gap> grp := Group([ +> [ [ Z(3^2)^3, Z(3^2)^6, Z(3^2)^7 ], +> [ Z(3^2)^7, Z(3^2)^2, Z(3)^0 ], +> [ Z(3^2)^7, Z(3^2)^7, 0*Z(3) ] ], +> [ [ 0*Z(3), 0*Z(3), Z(3) ], +> [ Z(3^2)^7, Z(3)^0, Z(3^2)^7 ], +> [ Z(3), Z(3^2), Z(3) ] ], +> [ [ Z(3^2), 0*Z(3), 0*Z(3) ], +> [ 0*Z(3), Z(3^2), 0*Z(3) ], +> [ 0*Z(3), 0*Z(3), Z(3^2) ] ] +> ]);; +gap> forms := PreservedSesquilinearForms(grp); +[ < hermitian form > ] +gap> TestPreservedSesquilinearForms(grp, forms); +true +gap> grp := Group(Z(3)^0*[ +> [ [ 0, 1, 2, 2, 0, 1, 1, 0 ], +> [ 0, 1, 0, 2, 0, 1, 0, 2 ], +> [ 1, 2, 2, 0, 0, 0, 2, 2 ], +> [ 0, 0, 0, 1, 0, 0, 0, 0 ], +> [ 0, 0, 0, 0, 1, 0, 1, 1 ], +> [ 0, 0, 0, 0, 0, 0, 0, 1 ], +> [ 0, 0, 0, 0, 0, 1, 1, 2 ], +> [ 0, 0, 0, 0, 0, 2, 0, 2 ] ], +> [ [ 2, 1, 0, 2, 2, 2, 0, 1 ], +> [ 0, 0, 0, 1, 0, 2, 2, 1 ], +> [ 1, 2, 0, 0, 1, 0, 2, 2 ], +> [ 0, 0, 0, 1, 0, 1, 2, 1 ], +> [ 1, 0, 2, 1, 1, 1, 0, 0 ], +> [ 0, 1, 0, 2, 1, 1, 1, 1 ], +> [ 1, 2, 1, 0, 0, 0, 2, 2 ], +> [ 0, 1, 0, 1, 1, 1, 2, 2 ] ], +> [ [ 0, 2, 0, 1, 1, 2, 1, 0 ], +> [ 2, 0, 1, 2, 2, 1, 0, 2 ], +> [ 2, 2, 0, 0, 0, 0, 2, 1 ], +> [ 1, 1, 1, 1, 0, 0, 1, 2 ], +> [ 1, 1, 2, 0, 2, 0, 1, 2 ], +> [ 0, 2, 0, 1, 2, 0, 2, 0 ], +> [ 1, 0, 1, 2, 2, 1, 0, 1 ], +> [ 0, 2, 0, 2, 2, 1, 1, 0 ] ] +> ]);; +gap> forms := PreservedSesquilinearForms(grp); +[ < bilinear form > ] +gap> TestPreservedSesquilinearForms(grp, forms); +true +gap> grp := Group(Z(5)^0*[ +> [ [ 0, 1, 0, 0, 0, 0, 0, 0 ], +> [ 0, 0, 0, 0, 1, 0, 0, 0 ], +> [ 0, 0, 0, 0, 0, 0, 0, 1 ], +> [ 2, 3, 4, 3, 1, 3, 2, 4 ], +> [ 1, 4, 0, 0, 1, 0, 0, 0 ], +> [ 0, 2, 2, 2, 4, 4, 2, 1 ], +> [ 2, 3, 4, 2, 1, 3, 3, 4 ], +> [ 2, 2, 3, 0, 1, 0, 0, 3 ] ], +> [ [ 0, 0, 1, 0, 0, 0, 0, 0 ], +> [ 0, 0, 0, 0, 0, 1, 0, 0 ], +> [ 2, 4, 0, 3, 2, 1, 2, 2 ], +> [ 2, 4, 0, 2, 4, 4, 4, 4 ], +> [ 4, 4, 1, 0, 1, 0, 3, 2 ], +> [ 1, 1, 2, 3, 2, 4, 1, 3 ], +> [ 3, 2, 0, 3, 1, 4, 1, 4 ], +> [ 3, 3, 1, 4, 0, 3, 4, 3 ] ], +> [ [ 0, 0, 0, 1, 0, 0, 0, 0 ], +> [ 0, 0, 0, 0, 0, 0, 1, 0 ], +> [ 2, 2, 3, 1, 3, 3, 2, 4 ], +> [ 3, 0, 0, 0, 0, 0, 0, 0 ], +> [ 1, 0, 2, 1, 0, 3, 2, 1 ], +> [ 1, 3, 2, 4, 3, 1, 2, 2 ], +> [ 0, 3, 0, 0, 0, 0, 0, 0 ], +> [ 0, 1, 3, 0, 3, 1, 0, 1 ] ] +> ]);; +gap> forms := PreservedSesquilinearForms(grp); +[ < bilinear form > ] +gap> TestPreservedSesquilinearForms(grp, forms); +true +gap> STOP_TEST("test_pres_sesforms3.tst", 10000 ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/forms-1.2.14/tst/testall.g new/forms-1.3.0/tst/testall.g --- old/forms-1.2.14/tst/testall.g 2026-01-26 13:02:02.000000000 +0100 +++ new/forms-1.3.0/tst/testall.g 2026-05-17 02:00:00.000000000 +0200 @@ -6,6 +6,11 @@ Add( exclude, "adv/classic.tst" ); fi; +if not IsBound(ConformalSymplecticGroup) then + # conformal.tst cannot run + Add( exclude, "adv/conformal.tst" ); +fi; + TestDirectory(DirectoriesPackageLibrary("forms", "tst"), rec( exitGAP := true,
