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 @@ [1X Backtrack Search in Permutation Groups [101X - 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) +<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> ©right; by Christopher Jefferson
