Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gap-ferret for openSUSE:Factory 
checked in at 2026-09-29 17:49:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gap-ferret (Old)
 and      /work/SRC/openSUSE:Factory/.gap-ferret.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gap-ferret"

Tue Sep 29 17:49:10 2026 rev:11 rq:1381224 version:1.0.17

Changes:
--------
--- /work/SRC/openSUSE:Factory/gap-ferret/gap-ferret.changes    2026-01-21 
14:17:07.274310677 +0100
+++ /work/SRC/openSUSE:Factory/.gap-ferret.new.383539/gap-ferret.changes        
2026-09-29 17:50:25.794835209 +0200
@@ -1,0 +2,6 @@
+Mon Sep 28 16:24:05 UTC 2026 - Jan Engelhardt <[email protected]>
+
+- Update to release 1.0.17
+  * Testsuite and CI/CD scripts were updated
+
+-------------------------------------------------------------------

Old:
----
  ferret-1.0.16.tar.gz

New:
----
  ferret-1.0.17.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gap-ferret.spec ++++++
--- /var/tmp/diff_new_pack.JYfyze/_old  2026-09-29 17:50:26.955883754 +0200
+++ /var/tmp/diff_new_pack.JYfyze/_new  2026-09-29 17:50:26.960883963 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           gap-ferret
-Version:        1.0.16
+Version:        1.0.17
 Release:        0
 Summary:        GAP: Backtrack Search in Permutation Groups
 License:        MPL-2.0

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.JYfyze/_old  2026-09-29 17:50:26.989885175 +0200
+++ /var/tmp/diff_new_pack.JYfyze/_new  2026-09-29 17:50:26.991885259 +0200
@@ -1,5 +1,5 @@
-mtime: 1768923026
-commit: a1454bcdd5f6f0510f196e158f6d2a515db404607e12313f2d303d5c0e957920
+mtime: 1790612657
+commit: 14633c8bd872aa53a0a3dacc502a1307dfe5e89fcaf585066e7009b0bfac1bc2
 url: https://src.opensuse.org/jengelh/gap-ferret
 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-09-28 18:24:17.000000000 +0200
@@ -0,0 +1 @@
+.osc

++++++ ferret-1.0.16.tar.gz -> ferret-1.0.17.tar.gz ++++++
++++ 2038 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/PackageInfo.g new/ferret-1.0.17/PackageInfo.g
--- old/ferret-1.0.16/PackageInfo.g     2026-01-20 16:03:33.000000000 +0100
+++ new/ferret-1.0.17/PackageInfo.g     2026-09-28 02:00:00.000000000 +0200
@@ -2,8 +2,8 @@
 
 PackageName := "ferret",
 Subtitle := "Backtrack Search in Permutation Groups",
-Version := "1.0.16",
-Date := "20/01/2026", # dd/mm/yyyy format
+Version := "1.0.17",
+Date := "28/09/2026", # dd/mm/yyyy format
 License := "MPL-2.0",
 
 Persons := [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/YAPB++/source/library/perm.hpp 
new/ferret-1.0.17/YAPB++/source/library/perm.hpp
--- old/ferret-1.0.16/YAPB++/source/library/perm.hpp    2026-01-20 
16:03:33.000000000 +0100
+++ new/ferret-1.0.17/YAPB++/source/library/perm.hpp    2026-09-28 
02:00:00.000000000 +0200
@@ -1,6 +1,8 @@
 #ifndef PERM_HPP_PDWE
 #define PERM_HPP_PDWE
 
+#include <cstdint>    // for uintptr_t
+
 #include "vec1.hpp"
 #include "library.hpp"
 #include "shared_ptr.hpp"
@@ -90,7 +92,7 @@
     Permutation(const Permutation& p)
     : psm(p.psm)
     {
-        if((long)psm > 1)
+        if((uintptr_t)psm > 1)
             incrementPermSharedDataCount(psm);
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/YAPB++/source/rbase/build_rbase.hpp 
new/ferret-1.0.17/YAPB++/source/rbase/build_rbase.hpp
--- old/ferret-1.0.16/YAPB++/source/rbase/build_rbase.hpp       2026-01-20 
16:03:33.000000000 +0100
+++ new/ferret-1.0.17/YAPB++/source/rbase/build_rbase.hpp       2026-09-28 
02:00:00.000000000 +0200
@@ -1,6 +1,14 @@
 #ifndef BUILD_RBASE_HPPAC
 #define BUILD_RBASE_HPPAC
 
+#include <cstdlib>
+
+#ifdef _WIN32
+// Windows has no random(); the choices made with it here are not
+// cryptographic, so rand() serves
+static inline long random() { return rand(); }
+#endif
+
 #include "rbase.hpp"
 #include "problem.hpp"
 #include "search/search_options.hpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/_entities.xml new/ferret-1.0.17/doc/_entities.xml
--- old/ferret-1.0.16/doc/_entities.xml 2026-01-20 16:08:46.000000000 +0100
+++ new/ferret-1.0.17/doc/_entities.xml 2026-09-28 02:00:00.000000000 +0200
@@ -1 +1,4 @@
 <!ENTITY Ferret '<Package>Ferret</Package>'>
+<!ENTITY RELEASEDATE '28 September 2026'>
+<!ENTITY RELEASEYEAR '2026'>
+<!ENTITY VERSION '1.0.17'>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/chap0.html new/ferret-1.0.17/doc/chap0.html
--- old/ferret-1.0.16/doc/chap0.html    2026-01-20 16:08:47.000000000 +0100
+++ new/ferret-1.0.17/doc/chap0.html    2026-09-28 02:00:00.000000000 +0200
@@ -29,10 +29,10 @@
 <h2>Backtrack Search in Permutation Groups</h2>
 
 <p>
-    1.0.16</p>
+    1.0.17</p>
 
 <p>
-    20 January 2026
+    28 September 2026
   </p>
 
 </div>
@@ -41,7 +41,6 @@
 
 
 
-
   </b>
 <br />Email: <span class="URL"><a 
href="mailto:[email protected]";>[email protected]</a></span>
 <br />Homepage: <span class="URL"><a 
href="https://heather.cafe/";>https://heather.cafe/</a></span>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/chap0.txt new/ferret-1.0.17/doc/chap0.txt
--- old/ferret-1.0.16/doc/chap0.txt     2026-01-20 16:08:46.000000000 +0100
+++ new/ferret-1.0.17/doc/chap0.txt     2026-09-28 02:00:00.000000000 +0200
@@ -6,10 +6,10 @@
                      Backtrack Search in Permutation Groups 
   
   
-                                     1.0.16
+                                     1.0.17
   
   
-                                20 January 2026
+                               28 September 2026
   
   
                              Christopher Jefferson
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/chap0_mj.html new/ferret-1.0.17/doc/chap0_mj.html
--- old/ferret-1.0.16/doc/chap0_mj.html 2026-01-20 16:08:47.000000000 +0100
+++ new/ferret-1.0.17/doc/chap0_mj.html 2026-09-28 02:00:00.000000000 +0200
@@ -32,10 +32,10 @@
 <h2>Backtrack Search in Permutation Groups</h2>
 
 <p>
-    1.0.16</p>
+    1.0.17</p>
 
 <p>
-    20 January 2026
+    28 September 2026
   </p>
 
 </div>
@@ -44,7 +44,6 @@
 
 
 
-
   </b>
 <br />Email: <span class="URL"><a 
href="mailto:[email protected]";>[email protected]</a></span>
 <br />Homepage: <span class="URL"><a 
href="https://heather.cafe/";>https://heather.cafe/</a></span>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/chooser.html new/ferret-1.0.17/doc/chooser.html
--- old/ferret-1.0.16/doc/chooser.html  2026-01-20 16:08:47.000000000 +0100
+++ new/ferret-1.0.17/doc/chooser.html  2026-09-28 02:00:00.000000000 +0200
@@ -23,9 +23,18 @@
   return "";
 }
 
+<!-- load dark appearance either explicitly or via the OS preference -->
+function writeAppearanceStyle(mode) {
+  if (mode == "dark") {
+    document.writeln('<link rel="stylesheet" type="text/css" href="dark.css" 
/>');
+  } else if (mode != "light") {
+    document.writeln('<style type="text/css">@import "dark.css" 
(prefers-color-scheme: dark);</style>');
+  }
+}
+
 <!-- find style from current values in form -->
 function getstyle() {
-  var choices = ["toggle","colorprompt","tocside","font","justify"]; 
+  var choices = 
["toggle","colorprompt","tocside","font","justify","appearance"];
   var style = "";
   for (var i=0; choices.length > i; i++) {
     var a = currval(choices[i]);
@@ -55,17 +64,23 @@
 <!-- initialize form from GAPDocStyle cookie -->
 function initform() {
   var style = valueString(document.cookie, "GAPDocStyle");
+  if (style == 0 || style == "default")
+    writeAppearanceStyle("");
   if (style != 0 && style.length > 0 && style.length != "default") {
     stlist = style.split(",");
     var chform = document.forms[0].elements;
+    var appearance = "";
     for (var i=0; chform.length > i; i++) {
       if (chform[i].type == "radio") {
         for (var j=0; stlist.length > j; j++) {
-          if (chform[i].value == stlist[j]) 
+          if (stlist[j] == "dark" || stlist[j] == "light")
+            appearance = stlist[j];
+          if (chform[i].value == stlist[j])
             chform[i].checked = true;
         }
       }
     }
+    writeAppearanceStyle(appearance);
   }
 }
 
@@ -119,6 +134,15 @@
 <input type="radio" name="justify" value="ragged"
 onclick="javascript:f()"/> ragged right 
 </p>
+<p>
+Appearance:
+<input type="radio" name="appearance" value=""
+onclick="javascript:f()"/> system (default) &nbsp;&nbsp;&nbsp;
+<input type="radio" name="appearance" value="light" checked="checked"
+onclick="javascript:f()"/> light
+<input type="radio" name="appearance" value="dark"
+onclick="javascript:f()"/> dark
+</p>
 </form>
 <p>
 <a name="backLINK" href=""><strong>Apply settings to last page.</strong></a>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/dark.css new/ferret-1.0.17/doc/dark.css
--- old/ferret-1.0.16/doc/dark.css      1970-01-01 01:00:00.000000000 +0100
+++ new/ferret-1.0.17/doc/dark.css      2026-09-28 02:00:00.000000000 +0200
@@ -0,0 +1,178 @@
+/* dark.css                                             Frank Luebeck */
+/* Initial dark theme contributed by kiryph in issue #75.            */
+
+/* colors */
+body {
+  background: #121212;
+  color: #eee;
+}
+
+a:link {
+  color: #576cad;
+}
+
+a:visited {
+  color: #576cad;
+}
+
+a:active {
+  color: #eee;
+}
+
+a:hover {
+  background: #eee;
+}
+
+pre {
+  color: black;
+}
+
+tt, code {
+  color: #eee;
+}
+
+/* layout for the definitions of functions, variables, ... */
+div.func {
+  background: #909090;
+}
+
+/* Example elements (for old converted manuals, now in div+pre */
+table.example {
+  background: #efefef;
+}
+
+/* becomes ... */
+div.example {
+  background: #efefef;
+  color: black;
+}
+
+/* Links to chapters in all files at top and bottom. */
+div.chlinktop {
+  background: #22272e;
+  border-color: #3a414a;
+  color: #d7dde5;
+}
+
+div.chlinktop a:hover {
+  background: #2f3742;
+}
+
+div.chlinkbot {
+  background: #22272e;
+  border-color: #3a414a;
+  color: #d7dde5;
+}
+
+/* and this is for the "Top", "Prev", "Next" links */
+div.chlinkprevnexttop {
+  background: #22272e;
+  border-color: #3a414a;
+  color: #d7dde5;
+}
+
+div.chlinkprevnexttop a:hover {
+  background: #2f3742;
+}
+
+div.chlinkprevnextbot {
+  background: #22272e;
+  border-color: #3a414a;
+  color: #d7dde5;
+}
+
+div.chlinkprevnextbot a:hover {
+  background: #2f3742;
+}
+
+div.ContChap div.ContSect:hover div.ContSSBlock {
+  background: #eee;
+  border-color: #666;
+  color: #000;
+}
+
+div.ContSSBlock a:hover {
+  background: #fff;
+}
+
+/* and here for the side menu of contents in the chapter files */
+div.ChapSects a:hover {
+  background: #eee;
+  color: #000;
+}
+
+div.ChapSects div.ContSect:hover div.ContSSBlock {
+  background: #b5b5b5;
+  border-color: #666;
+  color: #000;
+}
+
+div.ChapSects div.ContSect:hover div.ContSSBlock a:hover {
+  background: #828282;
+}
+
+/* Table elements */
+table.GAPDocTable {
+  border-color: black;
+}
+
+table.GAPDocTable td, table.GAPDocTable th {
+  border-color: #555;
+}
+
+table.GAPDocTablenoborder td, table.GAPDocTable th {
+  border-color: #555;
+}
+
+/* Colors and fonts can be overwritten for some types of elements. */
+/* Verb elements */
+pre.normal {
+  color: #eee;
+}
+
+/* Func-like elements and Ref to Func-like */
+code.func {
+  color: #eee;
+}
+
+/* K elements */
+code.keyw {
+  color: #983d3d;
+}
+
+/* F elements */
+code.file {
+  color: #8e4510;
+}
+
+/* Arg elements */
+var.Arg {
+  color: #060;
+}
+
+/* colors for ColorPrompt like examples */
+span.GAPprompt {
+  color: #000097;
+}
+
+span.GAPbrkprompt {
+  color: #970000;
+}
+
+span.GAPinput {
+  color: #970000;
+}
+
+/* Bib entries */
+span.BibKey {
+  color: #052;
+}
+
+/* for light and dark mode pictures */
+.only-on-dark {
+  display: block;
+}
+
+.only-on-light {
+  display: none;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/ferret.tex new/ferret-1.0.17/doc/ferret.tex
--- old/ferret-1.0.16/doc/ferret.tex    1970-01-01 01:00:00.000000000 +0100
+++ new/ferret-1.0.17/doc/ferret.tex    2026-09-28 02:00:00.000000000 +0200
@@ -0,0 +1,415 @@
+% generated by GAPDoc2LaTeX from XML source (Frank Luebeck)
+\documentclass[a4paper,11pt]{report}
+
+\usepackage[top=37mm,bottom=37mm,left=27mm,right=27mm]{geometry}
+\sloppy
+\pagestyle{myheadings}
+\usepackage{amssymb}
+\usepackage[utf8]{inputenc}
+\usepackage{makeidx}
+\makeindex
+\usepackage{color}
+\definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083}
+\definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179}
+\definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894}
+\definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894}
+\definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000}
+\definecolor{Black}{rgb}{0.0,0.0,0.0}
+
+\definecolor{linkColor}{rgb}{0.0,0.0,0.554}
+\definecolor{citeColor}{rgb}{0.0,0.0,0.554}
+\definecolor{fileColor}{rgb}{0.0,0.0,0.554}
+\definecolor{urlColor}{rgb}{0.0,0.0,0.554}
+\definecolor{promptColor}{rgb}{0.0,0.0,0.589}
+\definecolor{brkpromptColor}{rgb}{0.589,0.0,0.0}
+\definecolor{gapinputColor}{rgb}{0.589,0.0,0.0}
+\definecolor{gapoutputColor}{rgb}{0.0,0.0,0.0}
+
+%%  for a long time these were red and blue by default,
+%%  now black, but keep variables to overwrite
+\definecolor{FuncColor}{rgb}{0.0,0.0,0.0}
+%% strange name because of pdflatex bug:
+\definecolor{Chapter }{rgb}{0.0,0.0,0.0}
+\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}
+
+
+\usepackage{fancyvrb}
+
+\usepackage{mathptmx,helvet}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp}
+
+
+\usepackage[
+            pdftex=true,
+            bookmarks=true,        
+            a4paper=true,
+            pdftitle={Written with GAPDoc},
+            pdfcreator={LaTeX with hyperref package / GAPDoc},
+            colorlinks=true,
+            backref=page,
+            breaklinks=true,
+            linkcolor=linkColor,
+            citecolor=citeColor,
+            filecolor=fileColor,
+            urlcolor=urlColor,
+            pdfpagemode={UseNone}, 
+           ]{hyperref}
+
+\newcommand{\maintitlesize}{\fontsize{50}{55}\selectfont}
+
+% write page numbers to a .pnr log file for online help
+\newwrite\pagenrlog
+\immediate\openout\pagenrlog =\jobname.pnr
+\immediate\write\pagenrlog{PAGENRS := [}
+\newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}}
+%% were never documented, give conflicts with some additional packages
+
+\newcommand{\GAP}{\textsf{GAP}}
+
+%% nicer description environments, allows long labels
+\usepackage{enumitem}
+\setdescription{style=nextline}
+
+%% depth of toc
+\setcounter{tocdepth}{1}
+
+
+
+
+
+%% command for ColorPrompt style examples
+\newcommand{\gapprompt}[1]{\color{promptColor}{\bfseries #1}}
+\newcommand{\gapbrkprompt}[1]{\color{brkpromptColor}{\bfseries #1}}
+\newcommand{\gapinput}[1]{\color{gapinputColor}{#1}}
+
+
+\begin{document}
+
+\logpage{[ 0, 0, 0 ]}
+\begin{titlepage}
+\mbox{}\vfill
+
+\begin{center}{\maintitlesize \textbf{ ferret \\
+\mbox{}}}\\
+\vfill
+
+\hypersetup{pdftitle={ ferret }}
+\markright{\scriptsize \mbox{}\hfill  ferret  \hfill\mbox{}}
+{\Huge \textbf{ Backtrack Search in Permutation Groups \\
+\mbox{}}}\\
+\vfill
+
+{\Huge  1.0.17 \mbox{}}\\[1cm]
+{ 28 September 2026 \mbox{}}\\[1cm]
+\mbox{}\\[2cm]
+{\Large \textbf{\strut  Christopher Jefferson     \strut\mbox{}}}\\
+\hypersetup{pdfauthor={ Christopher Jefferson    }}
+\end{center}\vfill
+
+\mbox{}\\
+{\mbox{}\\
+\small \noindent \textbf{ Christopher Jefferson    }  Email: 
\href{mailto://[email protected]} 
{\texttt{caj21@st\texttt{\symbol{45}}andrews.ac.uk}}\\
+  Homepage: \href{https://heather.cafe/} {\texttt{https://heather.cafe/}}\\
+  Address: \begin{minipage}[t]{8cm}\noindent
+ St Andrews\\
+ Scotland\\
+ UK\\
+ \end{minipage}
+}\\
+\end{titlepage}
+
+\newpage\setcounter{page}{2}
+{\small 
+\section*{Copyright}
+\logpage{[ 0, 0, 1 ]}
+ {\copyright} by Christopher Jefferson \mbox{}}\\[1cm]
+\newpage
+
+\def\contentsname{Contents\logpage{[ 0, 0, 2 ]}}
+
+\tableofcontents
+\newpage
+
+     
+\chapter{\textcolor{Chapter }{The Ferret Package}}\label{The Ferret Package}
+\logpage{[ 1, 0, 0 ]}
+\hyperdef{L}{X84F30BD780680D41}{}
+{
+  \index{Ferret package} This chapter describes the \textsf{GAP} package 
Ferret. Ferret implements highly efficient implementations of a range
+of search algorithms on permutation groups. If you are interested in if Ferret
+can be applied to another problem, please contact the authors, who will be
+happy to look into if your problem can be solved with Ferret.  
+\section{\textcolor{Chapter }{Replacing Built\texttt{\symbol{45}}in 
functionality}}\label{Replacing Built-in functionality}
+\logpage{[ 1, 1, 0 ]}
+\hyperdef{L}{X862CDAE07EF5953E}{}
+{
+  Ferret automatically installs methods which replace GAP's a number of GAP's
+built\texttt{\symbol{45}}in functionality: 
+\begin{itemize}
+\item  \emph{Intersection} for a list of permutation groups. 
+\item  \emph{Stabilizer(G,S,Action)} for a permutation group G, and the 
actions: 
+\begin{itemize}
+\item \texttt{OnSets}
+\item \texttt{OnOnSets}
+\item \texttt{OnSetsDisjointSets}
+\item \texttt{OnSetsSets}
+\item \texttt{OnTuples}
+\item \texttt{OnPairs}
+\item \texttt{OnDirectedGraph}
+\end{itemize}
+ 
+\item  \emph{Stabilizer(G, S)} for a permutation group G and a: 
+\begin{itemize}
+\item permutation
+\item transformation
+\item partial permutation
+\end{itemize}
+ 
+\end{itemize}
+ If you would like to disable this functionality, you can use 
\ref{EnableFerretOverloads}. 
+
+\subsection{\textcolor{Chapter }{EnableFerretOverloads}}
+\logpage{[ 1, 1, 1 ]}\nobreak
+\hyperdef{L}{X7E455E297809B021}{}
+{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{EnableFerretOverloads({\mdseries\slshape
 [active]})\index{EnableFerretOverloads@\texttt{EnableFerretOverloads}}
+\label{EnableFerretOverloads}
+}\hfill{\scriptsize (function)}}\\
+
+
+ if \mbox{\texttt{\mdseries\slshape active}} (a bool) is true, then enable 
Ferret specialisations of Intersection and
+Stabilizer. Call with \mbox{\texttt{\mdseries\slshape active}} false to 
disable. }
+
+ 
+
+\subsection{\textcolor{Chapter }{FerretOverloadsEnabled}}
+\logpage{[ 1, 1, 2 ]}\nobreak
+\hyperdef{L}{X874E2A697EB81FE3}{}
+{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FerretOverloadsEnabled({\mdseries\slshape
 })\index{FerretOverloadsEnabled@\texttt{FerretOverloadsEnabled}}
+\label{FerretOverloadsEnabled}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Return if Ferret specialisations of Intersection and Stabilizer are currently
+enabled. }
+
+ }
+
+  
+\section{\textcolor{Chapter }{Using 'Solve' to solve problems 
directly}}\label{Using 'Solve' to solve problems directly}
+\logpage{[ 1, 2, 0 ]}
+\hyperdef{L}{X856996FA785737BC}{}
+{
+  The main method of using Ferret's functionality is the \texttt{Solve} 
(\ref{Solve}) method. This method intersects a list of permutation groups. The 
unusual
+feature is that these permutation groups can be represented in a variety of
+ways. They can be usual GAP permutation groups given as a list of generators,
+or they can be the group which is the stabilizer of combinatorial object under
+some action. Larger problems are then composed from these pieces. For example,
+the stabilizer of a set S under a group G can be expressed as the intersection
+of the group which stabilizes the set S and the group G. For this problem,
+there would be no point using \texttt{Solve} (\ref{Solve}), as GAP's built in 
'Stabilizer' function provides the same functionality.
+However, with \texttt{Solve} (\ref{Solve}) we can intersect any number of 
groups at the same time, for example finding
+the intersection of two groups G and H, the stabilizer of a set S and the
+stabilizer of a set of sets T, with the following code: 
+\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
+  !gapprompt@gap>| !gapinput@Solve([ConInGroup(G), ConInGroup(H), |
+  !gapprompt@>| !gapinput@ConStabilize(S, OnSets), ConStabilize(T, 
OnSetSets)])|
+\end{Verbatim}
+ The currently allowed arguments to \texttt{Solve} (\ref{Solve}) are: 
+\begin{itemize}
+\item  \texttt{ConInGroup} (\ref{ConInGroup}), which represents a Permutation 
Group in GAP 
+\item  \texttt{ConStabilize} (\ref{ConStabilize:for an object and an action}), 
which takes an object and an action. 
+\end{itemize}
+ }
+
+ }
+
+        
+\chapter{\textcolor{Chapter }{The Solve Method}}\label{SolveChapter}
+\logpage{[ 2, 0, 0 ]}
+\hyperdef{L}{X83B607B385FBB68A}{}
+{
+  The central functionality of the Ferret package is based around the Solve
+method. This function performs a backtrack search, using the permutation
+backtracking algorithm, over a set of groups or cosets. Often users will want
+to use a higher level function which wraps this functionality, such as 
\texttt{Stabilizer} or \texttt{Intersection}. The solve function accepts a list 
of groups, and finds their intersection.
+For efficiency reasons, these groups can be specified in a variety of
+different ways. As an example, we will consider how to implement 
\texttt{Stabilizer(G, S, OnSets)}, the stabilizer of a set S in a permutation 
group G using Solve (this is not
+necessary, as when Ferret is loaded this method is replaced with a
+Ferret\texttt{\symbol{45}}based implementation). Another way of viewing 
\texttt{Stabilizer(G, S, OnSets)} is as the intersection of G with 
\texttt{Stabilizer(Sym(n), S, OnSets)}, where $Sym(n)$ is the symmetric group 
on n points, and n is at least as large as the largest
+moved point in G. Solve takes a list of objects which represent groups. Two of
+these are \texttt{ConInGroup(G)}, which represents the group G, and 
\texttt{ConStabilize(S, OnSets)}, which represents the group which stabilizes 
S. We find the intersection of
+these two groups by \texttt{Solve([ConInGroup(G), ConStabilize(S, OnSets)])}. 
+\section{\textcolor{Chapter }{Methods of representing groups in 
Ferret}}\label{Representing groups in Ferret}
+\logpage{[ 2, 1, 0 ]}
+\hyperdef{L}{X7ADF81FD7F1709BB}{}
+{
+  Groups and cosets must be represented in a way which Ferret can understand.
+The following list gives all the types of groups which Ferret accepts, and how
+to construct them. 
+
+\subsection{\textcolor{Chapter }{ConStabilize (for an object and an action)}}
+\logpage{[ 2, 1, 1 ]}\nobreak
+\hyperdef{L}{X780A9D5A7F85ADD6}{}
+{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ConStabilize({\mdseries\slshape
 object, action})\index{ConStabilize@\texttt{ConStabilize}!for an object and an 
action}
+\label{ConStabilize:for an object and an action}
+}\hfill{\scriptsize (function)}}\\
+\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ConStabilize({\mdseries\slshape
 object, n})\index{ConStabilize@\texttt{ConStabilize}!for a transformation or 
partial perm}
+\label{ConStabilize:for a transformation or partial perm}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function creates a Constraint which can be given to \texttt{Solve} 
(\ref{Solve}). It does not perform any useful actions by itself 
+
+ In the first form this represents the group which stabilises 
\mbox{\texttt{\mdseries\slshape object}} under \mbox{\texttt{\mdseries\slshape 
action}}. The currently allowed actions are \texttt{OnSets}, 
\texttt{OnSetsSets}, \texttt{OnSetsDisjointSets}, \texttt{OnSetsTuples}, 
\texttt{OnTuples}, \texttt{OnPairs} and \texttt{OnDirectedGraph}. 
+
+ In the second form it represents the stabilizer of a partial perm or
+transformation in the symmetric group on \mbox{\texttt{\mdseries\slshape n}} 
points. }
+
+ 
+
+\subsection{\textcolor{Chapter }{ConInGroup}}
+\logpage{[ 2, 1, 2 ]}\nobreak
+\hyperdef{L}{X7EE49BAB82A1BB20}{}
+{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ConInGroup({\mdseries\slshape
 G})\index{ConInGroup@\texttt{ConInGroup}}
+\label{ConInGroup}
+}\hfill{\scriptsize (function)}}\\
+
+
+ This function creates a Constraint which can be given to \texttt{Solve} 
(\ref{Solve}). It does not perform any useful actions by itself 
+
+ Represents the set of permutations in a permutation group 
\mbox{\texttt{\mdseries\slshape G}}, as an argument for \texttt{Solve} 
(\ref{Solve}). }
+
+ These methods are both used with Solve: 
+
+\subsection{\textcolor{Chapter }{Solve}}
+\logpage{[ 2, 1, 3 ]}\nobreak
+\hyperdef{L}{X7A415C2480970A43}{}
+{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Solve({\mdseries\slshape
 constraints[, rec]})\index{Solve@\texttt{Solve}}
+\label{Solve}
+}\hfill{\scriptsize (function)}}\\
+
+
+ Finds the intersection of the list \mbox{\texttt{\mdseries\slshape 
Constraints}}. Each member of \mbox{\texttt{\mdseries\slshape constraints}} 
should be a group or coset generated by one of \texttt{ConInGroup} 
(\ref{ConInGroup}) or \texttt{ConStabilize} (\ref{ConStabilize:for an object 
and an action}). The optional second argument allows configuration options to 
be passed in.
+These follow options are supported: 
+\begin{description}
+\item[{\texttt{rbaseCellHeuristic} (default "smallest")}]  The cell to be 
branched on. This is the option which will most effect the time
+taken to search. the default is usually best. Other options are: "First"
+(first cell), "Largest" (largest cell), "smallest2" (the 2nd smallest cell),
+"random" (a random cell) and "randomsmallest" (one of the smallest cells,
+chosen randomly) 
+\item[{\texttt{rbaseValueHeuristic} (default "smallest")}]  Choose which cell 
to branch on within a cell. While this will generally make a
+big difference to search, it is hard to predict the best value, and small
+changes to the problem will change the best heuristic. Options are the same as 
\texttt{rbaseCellHeuristic}. 
+\item[{\texttt{searchValueHeuristic} (default \texttt{RBase})}]  The order to 
branch during search. In general the best order is very hard to
+predict. Options are "RBase", "InvRBase", "Random", "Sorted" or "Nosort"
+(which uses the order the values naturally end up in by the algorithm). 
+\item[{\texttt{searchFirstBranchValueHeuristic} (default \texttt{RBase})}]  
Choose the search order used just on the left\texttt{\symbol{45}}most branches
+of search. Allows the same options as \texttt{searchValueHeuristic} 
+\item[{\texttt{stats} (default \texttt{false})}]  Change the return value to 
provide a range of information about how search
+performed (implies \texttt{recreturn}). This information will change between 
releases. 
+\item[{\texttt{nodeLimit} (default \texttt{false}) }]  Either \textsc{false}, 
or an integer which places a limit on the amount of search which should be
+performed. WARNING: When this option is set to an integer, Ferret will return
+the current best answer when the limit is reached, which may be a subgroup of
+the actual result. To know if this limit was reached, set \texttt{stats} to 
\textsc{true}, and check the nodes. 
+\item[{\texttt{recreturn} (default \texttt{false}) }]  Return a record 
containing private information, rather than the group. 
+\item[{\texttt{only{\textunderscore}find{\textunderscore}generators} (default 
\texttt{true})}]  By default only find the generators of the group. If false, 
then find all
+members of the group. This option is only useful for testing. If 'true', then
+sets 'recreturn' to true. 
+\end{description}
+ }
+
+ }
+
+ }
+
+        
+\chapter{\textcolor{Chapter }{Installing and Loading the Ferret 
Package}}\label{Installing and Loading the Ferret Package}
+\logpage{[ 3, 0, 0 ]}
+\hyperdef{L}{X782C0DD47E1D28EF}{}
+{
+   
+\section{\textcolor{Chapter }{Unpacking the Ferret Package}}\label{Unpacking 
the Ferret Package}
+\logpage{[ 3, 1, 0 ]}
+\hyperdef{L}{X8527DE187ADA7D7A}{}
+{
+  If the Ferret package was obtained as a part of the \textsf{GAP} 
distribution from the ``Download'' section of the \textsf{GAP} website, you may 
proceed to Section \ref{Compiling Binaries of the Ferret Package}. 
Alternatively, the Ferret package may be installed using a separate archive,
+for example, for an update or an installation in a
+non\texttt{\symbol{45}}default location (see  (\textbf{Reference: GAP Root 
Directories})). 
+
+ Below we describe the installation procedure for the \texttt{.tar.gz} archive 
format. Installation using other archive formats is performed in a
+similar way. 
+
+ It may be unpacked in one of the following locations: 
+\begin{itemize}
+\item  in the \texttt{pkg} directory of your \textsf{GAP}{\nobreakspace}4 
installation; 
+\item  or in a directory named \texttt{.gap/pkg} in your home directory (to be 
added to the \textsf{GAP} root directory unless \textsf{GAP} is started with 
\texttt{\texttt{\symbol{45}}r} option); 
+\item  or in a directory named \texttt{pkg} in another directory of your 
choice (e.g.{\nobreakspace}in the directory \texttt{mygap} in your home 
directory). 
+\end{itemize}
+ In the latter case one one must start \textsf{GAP} with the 
\texttt{\texttt{\symbol{45}}l} option, e.g.{\nobreakspace}if your private 
\texttt{pkg} directory is a subdirectory of \texttt{mygap} in your home 
directory you might type: 
+
+ {\nobreakspace}{\nobreakspace}\texttt{gap \texttt{\symbol{45}}l 
";\mbox{\texttt{\mdseries\slshape myhomedir}}/mygap"} 
+
+ where \mbox{\texttt{\mdseries\slshape myhomedir}} is the path to your home 
directory, which (since \textsf{GAP}{\nobreakspace}4.3) may be replaced by a 
tilde (the empty path before the
+semicolon is filled in by the default path of the \textsf{GAP}{\nobreakspace}4 
home directory). }
+
+  
+\section{\textcolor{Chapter }{Compiling Binaries of the Ferret 
Package}}\label{Compiling Binaries of the Ferret Package}
+\logpage{[ 3, 2, 0 ]}
+\hyperdef{L}{X7DB615628530240D}{}
+{
+  After unpacking the archive, go to the newly created \texttt{ferret} 
directory and call \texttt{./configure} to use the default \texttt{../..} path 
to the \textsf{GAP} home directory or \texttt{./configure 
\mbox{\texttt{\mdseries\slshape path}}} where \mbox{\texttt{\mdseries\slshape 
path}} is the path to the \textsf{GAP} home directory, if the package is being 
installed in a
+non\texttt{\symbol{45}}default location. So for example if you install the
+package in the \texttt{\texttt{\symbol{126}}/.gap/pkg} directory and the 
\textsf{GAP} home directory is \texttt{\texttt{\symbol{126}}/gap4r5} then you 
have to call 
+
+ 
+\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
+  ./configure ../../../gap4r5/
+\end{Verbatim}
+ 
+
+ This will fetch the architecture type for which \textsf{GAP} has been 
compiled last and create a \texttt{Makefile}. Now simply call 
+
+ 
+\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
+  make
+\end{Verbatim}
+ 
+
+ to compile the binary and to install it in the appropriate place. }
+
+  
+\section{\textcolor{Chapter }{Loading the Ferret Package}}\label{Loading the 
Ferret Package}
+\logpage{[ 3, 3, 0 ]}
+\hyperdef{L}{X7BA03640834E607E}{}
+{
+  To use the Ferret Package you have to request it explicitly. This is done by
+calling \texttt{LoadPackage} (\textbf{Reference: LoadPackage}): 
+
+ 
+\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
+  !gapprompt@gap>| !gapinput@LoadPackage("ferret");|
+  true
+\end{Verbatim}
+ 
+
+ If you want to load the Ferret package by default, you can put the 
\texttt{LoadPackage} command into your \texttt{gaprc} file (see 
Section{\nobreakspace} (\textbf{Reference: The gap.ini and gaprc files})). }
+
+ }
+
+    \def\indexname{Index\logpage{[ "Ind", 0, 0 ]}
+\hyperdef{L}{X83A0356F839C696F}{}
+}
+
+\cleardoublepage
+\phantomsection
+\addcontentsline{toc}{chapter}{Index}
+
+
+\printindex
+
+\immediate\write\pagenrlog{["Ind", 0, 0], \arabic{page},}
+\newpage
+\immediate\write\pagenrlog{["End"], \arabic{page}];}
+\immediate\closeout\pagenrlog
+\end{document}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/manual.css new/ferret-1.0.17/doc/manual.css
--- old/ferret-1.0.16/doc/manual.css    2026-01-20 16:08:47.000000000 +0100
+++ new/ferret-1.0.17/doc/manual.css    2026-09-28 02:00:00.000000000 +0200
@@ -477,6 +477,10 @@
 span.BibHowpublished {
 }
 
+/* for light and dark mode pictures */
+.only-on-dark {
+  display: none;
+}
 
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/manual.js new/ferret-1.0.17/doc/manual.js
--- old/ferret-1.0.16/doc/manual.js     2026-01-20 16:08:47.000000000 +0100
+++ new/ferret-1.0.17/doc/manual.js     2026-09-28 02:00:00.000000000 +0200
@@ -47,6 +47,20 @@
   return 0;
 }
 
+/* load dark appearance either explicitly or via the OS preference */
+function writeAppearanceStyle(mode) {
+  if (mode == "dark") {
+    document.writeln(
+      '<link rel="stylesheet" type="text/css" href="dark.css" />'
+    );
+  } else if (mode != "light") {
+    document.writeln(
+      '<style type="text/css">@import "dark.css" ' +
+      '(prefers-color-scheme: dark);</style>'
+    );
+  }
+}
+
 /* when a non-default style is chosen via URL or a cookie, then
    the cookie is reset and the styles .js and .css files are read  */
 function overwriteStyle() {
@@ -55,6 +69,8 @@
   /* otherwise check cookie */
   if (style == 0)
     style = valueString(document.cookie, "GAPDocStyle");
+  if (style == 0 || style == "default")
+    writeAppearanceStyle("");
   if (style == 0)
     return;
   if (style == "default")
@@ -70,13 +86,19 @@
     document.cookie = "GAPDocStyle="+style+";Path="+path;
     /* split into names of style files */
     var stlist = style.split(",");
+    var appearance = "";
     /* read style's css and js files */
     for (var i=0; i < stlist.length; i++) {
-      document.writeln('<link rel="stylesheet" type="text/css" href="'+
-                                                         stlist[i]+'.css" />');
-      document.writeln('<script src="'+stlist[i]+
-                                      '.js" type="text/javascript"></script>');
+      if (stlist[i] == "dark" || stlist[i] == "light") {
+        appearance = stlist[i];
+      } else {
+        document.writeln('<link rel="stylesheet" type="text/css" href="'+
+                                                           stlist[i]+'.css" 
/>');
+        document.writeln('<script src="'+stlist[i]+
+                                        '.js" 
type="text/javascript"></script>');
+      }
     }
+    writeAppearanceStyle(appearance);
   }
 }
 
@@ -110,4 +132,3 @@
   for (var i=0; i < jscontentfuncs.length; i++)
     jscontentfuncs[i]();
 }
-
Binary files old/ferret-1.0.16/doc/manual.pdf and 
new/ferret-1.0.17/doc/manual.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/ferret-1.0.16/doc/title.xml new/ferret-1.0.17/doc/title.xml
--- old/ferret-1.0.16/doc/title.xml     2026-01-20 16:08:46.000000000 +0100
+++ new/ferret-1.0.17/doc/title.xml     2026-09-28 02:00:00.000000000 +0200
@@ -9,10 +9,10 @@
     Backtrack Search in Permutation Groups
   </Subtitle>
   <Version>
-    1.0.16
+    1.0.17
   </Version>
   <Author>
-    Christopher Jefferson<Alt Only="LaTeX"><Br/></Alt>
+    Christopher Jefferson
 <Address>
 St Andrews<Br/>
 Scotland<Br/>
@@ -20,10 +20,9 @@
 </Address>
 <Email>[email protected]</Email>
 <Homepage>https://heather.cafe/</Homepage>
-
   </Author>
   <Date>
-    20 January 2026
+    28 September 2026
   </Date>
   <Copyright>
     &copyright; by Christopher Jefferson

Reply via email to