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(
-            "&copyright; 2015-2024 by the authors<P/>\n\n",
+            "&copyright; 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 @@
                            Sesquilinear and Quadratic 
   
   
-                                     1.2.14
+                                     1.3.0
   
   
-                                26 January 2026
+                                  17 May 2026
   
   
                                   John Bamberg
@@ -41,7 +41,7 @@
   
   -------------------------------------------------------
   Copyright
-  © 2015-2024 by the authors
+  © 2015-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.
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">&nbsp;<a href="chap0.html">[Top of 
Book]</a>&nbsp;  <a href="chap0.html#contents">[Contents]</a>&nbsp;  &nbsp;<a 
href="chap0.html">[Previous Chapter]</a>&nbsp;  &nbsp;<a 
href="chap2.html">[Next Chapter]</a>&nbsp;  </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        InvariantQuadraticForm,       
InvariantBilinearForm       and
   InvariantSesquilinearForm to also provide the field of 
definition.
   
+  Version    1.3.0    adds    ConformalSymplecticGroup,  
 fixes   a   bug   in
+  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/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">&nbsp;<a href="chap0_mj.html">[Top of 
Book]</a>&nbsp;  <a href="chap0_mj.html#contents">[Contents]</a>&nbsp;  
&nbsp;<a href="chap0_mj.html">[Previous Chapter]</a>&nbsp;  &nbsp;<a 
href="chap2_mj.html">[Next Chapter]</a>&nbsp;  </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>
-    &copyright; 2015-2024 by the authors<P/>
+    &copyright; 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,

Reply via email to