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 2025-09-15 19:52:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gap-ferret (Old) and /work/SRC/openSUSE:Factory/.gap-ferret.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gap-ferret" Mon Sep 15 19:52:25 2025 rev:9 rq:1304668 version:1.0.15 Changes: -------- --- /work/SRC/openSUSE:Factory/gap-ferret/gap-ferret.changes 2025-02-28 17:40:34.035701069 +0100 +++ /work/SRC/openSUSE:Factory/.gap-ferret.new.1977/gap-ferret.changes 2025-09-15 19:56:32.848275279 +0200 @@ -1,0 +2,6 @@ +Sun Sep 14 19:27:03 UTC 2025 - Jan Engelhardt <[email protected]> + +- Update to release 1.0.15 + * Remove obsolete ErrorNoReturn definition for old GAP + +------------------------------------------------------------------- Old: ---- ferret-1.0.14.tar.gz New: ---- ferret-1.0.15.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gap-ferret.spec ++++++ --- /var/tmp/diff_new_pack.4ZPsfM/_old 2025-09-15 19:56:33.328295434 +0200 +++ /var/tmp/diff_new_pack.4ZPsfM/_new 2025-09-15 19:56:33.328295434 +0200 @@ -1,7 +1,7 @@ # # spec file for package gap-ferret # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: gap-ferret -Version: 1.0.14 +Version: 1.0.15 Release: 0 Summary: GAP: Backtrack Search in Permutation Groups License: MPL-2.0 ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.4ZPsfM/_old 2025-09-15 19:56:33.360296778 +0200 +++ /var/tmp/diff_new_pack.4ZPsfM/_new 2025-09-15 19:56:33.364296945 +0200 @@ -1,5 +1,5 @@ -mtime: 1740697291 -commit: bb6a0d91a41c9141fcd168d07b32e44b3b773c1582e8fce24d94b535854f71b0 +mtime: 1757878054 +commit: 4b86c27ae38ae715ed3ed270bcf84e600dc85282e3ade5e1f4f35c3cc8475b34 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 2025-09-14 21:27:45.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ ferret-1.0.14.tar.gz -> ferret-1.0.15.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/PackageInfo.g new/ferret-1.0.15/PackageInfo.g --- old/ferret-1.0.14/PackageInfo.g 2024-09-08 03:37:04.000000000 +0200 +++ new/ferret-1.0.15/PackageInfo.g 2025-09-11 11:19:50.000000000 +0200 @@ -2,8 +2,8 @@ PackageName := "ferret", Subtitle := "Backtrack Search in Permutation Groups", -Version := "1.0.14", -Date := "08/09/2024", # dd/mm/yyyy format +Version := "1.0.15", +Date := "11/09/2025", # dd/mm/yyyy format License := "MPL-2.0", Persons := [ @@ -75,9 +75,9 @@ AvailabilityTest := function() if not IsKernelExtensionAvailable("ferret") then LogPackageLoadingMessage(PACKAGE_WARNING, - ["the kernel module is not compiled, ", + ["the kernel module is not compiled, ", "the package cannot be loaded."]); - return fail; + return false; fi; return true; end, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/YAPB++/source/library/algorithms.hpp new/ferret-1.0.15/YAPB++/source/library/algorithms.hpp --- old/ferret-1.0.14/YAPB++/source/library/algorithms.hpp 2024-09-08 03:37:04.000000000 +0200 +++ new/ferret-1.0.15/YAPB++/source/library/algorithms.hpp 2025-09-11 11:19:50.000000000 +0200 @@ -30,14 +30,12 @@ inline vec1<int> partitionToList(const vec1<vec1<int> >& part, int size, MissingPoints mp) { vec1<int> vec(size, 0); - int covered = 1; for(int i : range1(part.size())) { for(int val : part[i]) { D_ASSERT(vec[val] == 0); vec[val] = i; - covered++; } } // Maybe the permutation is missing some values of the end. These @@ -87,14 +85,12 @@ inline std::map<int, int> partitionToMap(const vec1<vec1<int> >& part) { std::map<int, int> m; - int covered = 1; for(int i : range1(part.size())) { for(int val : part[i]) { D_ASSERT(m[val] == 0); m[val] = i; - covered++; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/YAPB++/source/library/sort_events.hpp new/ferret-1.0.15/YAPB++/source/library/sort_events.hpp --- old/ferret-1.0.14/YAPB++/source/library/sort_events.hpp 2024-09-08 03:37:04.000000000 +0200 +++ new/ferret-1.0.15/YAPB++/source/library/sort_events.hpp 2025-09-11 11:19:50.000000000 +0200 @@ -4,6 +4,8 @@ #include "library/vec1.hpp" #include "promotable_list.hpp" +#include <cstdint> + typedef uint32_t HashType; struct HashStart diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/YAPB++/source/partition_refinement.hpp new/ferret-1.0.15/YAPB++/source/partition_refinement.hpp --- old/ferret-1.0.14/YAPB++/source/partition_refinement.hpp 2024-09-08 03:37:04.000000000 +0200 +++ new/ferret-1.0.15/YAPB++/source/partition_refinement.hpp 2025-09-11 11:19:50.000000000 +0200 @@ -40,7 +40,9 @@ ps->fixCellInverses(cell); +#if DEBUG_LEVEL > 0 int cellsplits = 0; +#endif SortEvent se(cellBegin, cellEnd); @@ -49,7 +51,9 @@ if(f(ps->val(pos)) != f(ps->val(pos+1))) { se.addHashStart(f(ps->val(pos+1)),pos+1); +#if DEBUG_LEVEL > 0 cellsplits++; +#endif if(ps->split(cell, pos+1).hasFailed()) abort(); } @@ -103,10 +107,8 @@ SplitState filterPartitionStackByFunction_withSortData(PartitionStack* ps, F f) { PartitionEvent& pe = ps->getAbstractQueue()->getPartitionEvent(); - int len = 0; for(auto it = pe.order.begin(); it != pe.order.end(); ++it) { - len++; if(it->change) { int cell = pe.change_cells[it->index].first; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/doc/chap0.html new/ferret-1.0.15/doc/chap0.html --- old/ferret-1.0.14/doc/chap0.html 2024-09-08 03:37:45.000000000 +0200 +++ new/ferret-1.0.15/doc/chap0.html 2025-09-11 11:19:50.000000000 +0200 @@ -29,10 +29,10 @@ <h2>Backtrack Search in Permutation Groups</h2> <p> - 1.0.14</p> + 1.0.15</p> <p> - 8 September 2024 + 11 September 2025 </p> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/doc/chap0.txt new/ferret-1.0.15/doc/chap0.txt --- old/ferret-1.0.14/doc/chap0.txt 2024-09-08 03:37:44.000000000 +0200 +++ new/ferret-1.0.15/doc/chap0.txt 2025-09-11 11:19:50.000000000 +0200 @@ -6,10 +6,10 @@ [1X Backtrack Search in Permutation Groups [101X - 1.0.14 + 1.0.15 - 8 September 2024 + 11 September 2025 Christopher Jefferson diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/doc/chap0_mj.html new/ferret-1.0.15/doc/chap0_mj.html --- old/ferret-1.0.14/doc/chap0_mj.html 2024-09-08 03:37:45.000000000 +0200 +++ new/ferret-1.0.15/doc/chap0_mj.html 2025-09-11 11:19:50.000000000 +0200 @@ -32,10 +32,10 @@ <h2>Backtrack Search in Permutation Groups</h2> <p> - 1.0.14</p> + 1.0.15</p> <p> - 8 September 2024 + 11 September 2025 </p> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/doc/chap3.html new/ferret-1.0.15/doc/chap3.html --- old/ferret-1.0.14/doc/chap3.html 2024-09-08 03:37:45.000000000 +0200 +++ new/ferret-1.0.15/doc/chap3.html 2025-09-11 11:19:50.000000000 +0200 @@ -39,7 +39,7 @@ <h4>3.1 <span class="Heading">Unpacking the Ferret Package</span></h4> -<p>If the Ferret package was obtained as a part of the <strong class="pkg">GAP</strong> distribution from the <q>Download</q> section of the <strong class="pkg">GAP</strong> website, you may proceed to Section <a href="chap3.html#X7DB615628530240D"><span class="RefLink">3.2</span></a>. Alternatively, the Ferret package may be installed using a separate archive, for example, for an update or an installation in a non-default location (see <a href="../../../doc/ref/chap9.html#X7A4973627A5DB27D"><span class="RefLink">Reference: GAP Root Directories</span></a>).</p> +<p>If the Ferret package was obtained as a part of the <strong class="pkg">GAP</strong> distribution from the <q>Download</q> section of the <strong class="pkg">GAP</strong> website, you may proceed to Section <a href="chap3.html#X7DB615628530240D"><span class="RefLink">3.2</span></a>. Alternatively, the Ferret package may be installed using a separate archive, for example, for an update or an installation in a non-default location (see <a href="/home/runner/gap/doc/ref/chap9.html#X7A4973627A5DB27D"><span class="RefLink">Reference: GAP Root Directories</span></a>).</p> <p>Below we describe the installation procedure for the <code class="file">.tar.gz</code> archive format. Installation using other archive formats is performed in a similar way.</p> @@ -87,7 +87,7 @@ <h4>3.3 <span class="Heading">Loading the Ferret Package</span></h4> -<p>To use the Ferret Package you have to request it explicitly. This is done by calling <code class="func">LoadPackage</code> (<a href="../../../doc/ref/chap76.html#X79B373A77B29D1F5"><span class="RefLink">Reference: LoadPackage</span></a>):</p> +<p>To use the Ferret Package you have to request it explicitly. This is done by calling <code class="func">LoadPackage</code> (<a href="/home/runner/gap/doc/ref/chap76.html#X79B373A77B29D1F5"><span class="RefLink">Reference: LoadPackage</span></a>):</p> <div class="example"><pre> @@ -95,7 +95,7 @@ true </pre></div> -<p>If you want to load the Ferret package by default, you can put the <code class="code">LoadPackage</code> command into your <code class="file">gaprc</code> file (see Section <a href="../../../doc/ref/chap3.html#X7FD66F977A3B02DF"><span class="RefLink">Reference: The gap.ini and gaprc files</span></a>).</p> +<p>If you want to load the Ferret package by default, you can put the <code class="code">LoadPackage</code> command into your <code class="file">gaprc</code> file (see Section <a href="/home/runner/gap/doc/ref/chap3.html#X7FD66F977A3B02DF"><span class="RefLink">Reference: The gap.ini and gaprc files</span></a>).</p> <div class="chlinkprevnextbot"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap2.html">[Previous Chapter]</a> <a href="chapInd.html">[Next Chapter]</a> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/doc/chap3_mj.html new/ferret-1.0.15/doc/chap3_mj.html --- old/ferret-1.0.14/doc/chap3_mj.html 2024-09-08 03:37:45.000000000 +0200 +++ new/ferret-1.0.15/doc/chap3_mj.html 2025-09-11 11:19:50.000000000 +0200 @@ -42,7 +42,7 @@ <h4>3.1 <span class="Heading">Unpacking the Ferret Package</span></h4> -<p>If the Ferret package was obtained as a part of the <strong class="pkg">GAP</strong> distribution from the <q>Download</q> section of the <strong class="pkg">GAP</strong> website, you may proceed to Section <a href="chap3_mj.html#X7DB615628530240D"><span class="RefLink">3.2</span></a>. Alternatively, the Ferret package may be installed using a separate archive, for example, for an update or an installation in a non-default location (see <a href="../../../doc/ref/chap9_mj.html#X7A4973627A5DB27D"><span class="RefLink">Reference: GAP Root Directories</span></a>).</p> +<p>If the Ferret package was obtained as a part of the <strong class="pkg">GAP</strong> distribution from the <q>Download</q> section of the <strong class="pkg">GAP</strong> website, you may proceed to Section <a href="chap3_mj.html#X7DB615628530240D"><span class="RefLink">3.2</span></a>. Alternatively, the Ferret package may be installed using a separate archive, for example, for an update or an installation in a non-default location (see <a href="/home/runner/gap/doc/ref/chap9_mj.html#X7A4973627A5DB27D"><span class="RefLink">Reference: GAP Root Directories</span></a>).</p> <p>Below we describe the installation procedure for the <code class="file">.tar.gz</code> archive format. Installation using other archive formats is performed in a similar way.</p> @@ -90,7 +90,7 @@ <h4>3.3 <span class="Heading">Loading the Ferret Package</span></h4> -<p>To use the Ferret Package you have to request it explicitly. This is done by calling <code class="func">LoadPackage</code> (<a href="../../../doc/ref/chap76_mj.html#X79B373A77B29D1F5"><span class="RefLink">Reference: LoadPackage</span></a>):</p> +<p>To use the Ferret Package you have to request it explicitly. This is done by calling <code class="func">LoadPackage</code> (<a href="/home/runner/gap/doc/ref/chap76_mj.html#X79B373A77B29D1F5"><span class="RefLink">Reference: LoadPackage</span></a>):</p> <div class="example"><pre> @@ -98,7 +98,7 @@ true </pre></div> -<p>If you want to load the Ferret package by default, you can put the <code class="code">LoadPackage</code> command into your <code class="file">gaprc</code> file (see Section <a href="../../../doc/ref/chap3_mj.html#X7FD66F977A3B02DF"><span class="RefLink">Reference: The gap.ini and gaprc files</span></a>).</p> +<p>If you want to load the Ferret package by default, you can put the <code class="code">LoadPackage</code> command into your <code class="file">gaprc</code> file (see Section <a href="/home/runner/gap/doc/ref/chap3_mj.html#X7FD66F977A3B02DF"><span class="RefLink">Reference: The gap.ini and gaprc files</span></a>).</p> <div class="chlinkprevnextbot"> <a href="chap0_mj.html">[Top of Book]</a> <a href="chap0_mj.html#contents">[Contents]</a> <a href="chap2_mj.html">[Previous Chapter]</a> <a href="chapInd_mj.html">[Next Chapter]</a> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/doc/ferret.tex new/ferret-1.0.15/doc/ferret.tex --- old/ferret-1.0.14/doc/ferret.tex 1970-01-01 01:00:00.000000000 +0100 +++ new/ferret-1.0.15/doc/ferret.tex 2025-09-11 11:19:50.000000000 +0200 @@ -0,0 +1,416 @@ +% 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.15 \mbox{}}\\[1cm] +{ 11 September 2025 \mbox{}}\\[1cm] +\mbox{}\\[2cm] +{\Large \textbf{ Christopher Jefferson\\ + \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} Binary files old/ferret-1.0.14/doc/manual.pdf and new/ferret-1.0.15/doc/manual.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/doc/title.xml new/ferret-1.0.15/doc/title.xml --- old/ferret-1.0.14/doc/title.xml 2024-09-08 03:37:44.000000000 +0200 +++ new/ferret-1.0.15/doc/title.xml 2025-09-11 11:19:50.000000000 +0200 @@ -9,7 +9,7 @@ Backtrack Search in Permutation Groups </Subtitle> <Version> - 1.0.14 + 1.0.15 </Version> <Author> Christopher Jefferson<Alt Only="LaTeX"><Br/></Alt> @@ -23,7 +23,7 @@ </Author> <Date> - 8 September 2024 + 11 September 2025 </Date> <Copyright> ©right; by Christopher Jefferson diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ferret-1.0.14/lib/helper_functions.g new/ferret-1.0.15/lib/helper_functions.g --- old/ferret-1.0.14/lib/helper_functions.g 2024-09-08 03:37:04.000000000 +0200 +++ new/ferret-1.0.15/lib/helper_functions.g 2025-09-11 11:19:50.000000000 +0200 @@ -13,20 +13,6 @@ ## -# Fill in missing function in older versions of GAP -if not IsBound(ErrorNoReturn) then - BindGlobal("ErrorNoReturn", - function ( arg ) - ErrorInner( rec( - context := ParentLVars( GetCurrentLVars( ) ), - mayReturnVoid := false, - mayReturnObj := false, - lateMessage := "type 'quit;' to quit to outer loop", - printThisStatement := false ), arg ); - return; - end); -fi; - _FerretHelperFuncs := MakeImmutable(rec( # Simple helper to support optional arguments
