[Nauty] Version 2.8.8 of nauty & Traces is now official
Brendan McKay
Brendan.McKay at anu.edu.au
Tue Nov 21 17:16:13 AEDT 2023
Version 2.8.8 is now the official release.
Download from either of these sites:
https://users.cecs.anu.edu.au/~bdm/nauty/
https://pallini.di.uniroma1.it
Below is a list of all the changes since version 2.8.6.
Bug reports to me as usual.
Brendan
================================================
* Fixed gentreeg output for n=2, also corrected the table of counts
in the source file, which was shifted by 1. Also gentourng -c 2.
Thanks to Gonne Kretschmer for reporting these.
* deledgeg has a new option -v for removing only edges incident
to a particular vertex.
* countneg is a new utility for counting graphs by their number
of edges and/or vertices. It is faster and more space-efficient
than countg for this purpose, but it does not support incremental
sparse6 input or some options like -p and -f that countg supports.
* genspecialg has a new option -X which can select one of 126 named
graphs. Use "genspecialg --Xhelp" for a list. Proposals for
additional graphs are welcome, but note that this is for
individual important graphs and not substantial families.
genspecialg -Y# makes Paley graphs, where # is an odd prime power.
They are undirected if #=1 (mod 4), and directed if #=3 (mod 4).
genspecialg -K#,#,# makes generalized Kneser graphs. K(n,k,t)
is the graph of k-subsets of an n-set with subsets adjacent if
their intersection has size t. If t is omitted, t=0 is assumed.
genspecialg -D#,# makes de Bruijn graphs and digraphs. With -z
D(k,t) is the de Bruijn digraph formed by strings of length t
over an alphabet of size k. Without -z, the underlying
undirected graph (which is not usually regular) is made.
genpsecial -Q#,# is an extension of -Q# (hypercube of dimension #).
The second parameter, if present, is the hamming distance that
defines edges (normally 1).
genspecialg -m#,#,... makes complete multipartite graphs
genspecialg -a# makes an antiprism (to make a prism use -G-2,#).
genspecialg -w# makes a wheel with # spokes
genspecialg -l# makes a moebius ladder with # vertices
genspecialg -A# makes an antiregular graph with # vertices
genspecialg -L# makes a triangular graph L(K_#)
* New features for countg/pickg:
(1) The chromatic number is selected by -N and the chromatic index by -NN.
Thanks to Gordon Royle for code that formed the basis of these functions.
There is also -A for the class (chromatic index - maximum degree + 1).
In this context, a loop adds 1 to the degree of a vertex.
At most WORDSIZE colours are allowed.
(2) Connectivity is selected by -G and the edge-connectivity by -GG.
Digraphs are allowed. The connectivity of a digraph is defined by:
n-1 for K_n, otherwise the minimum size of a vertex separator between
a and b minimized over a,b such that there is no edge a->b. This is
the same as the maximum number of internally-vertex-disjoint directed
paths from a to b, minimized over distinct a,b. Thus, 1-connectivity
is equivalent to strong connectivity.
The older switch -c is still available with the old meaning: only valid
for undirected graphs, and the value 2 means "2 or more".
(3) The functions -I and -J were replaced by -ii and -jj to make room
for future features.
(4) Some sort keys have boolean variants with parameters:
--N# #-colourable (i.e. chromatic number <= #)
--NN# #-edge colourable
--G# #-connected (i.e. connectivity >= #)
--GG# #-edge connected
(5) Pentagons are counted by -P, undirected only.
(6) -kk determines the k such that the graph is a k-tree, or 0 if
the graph is not a k-tree for any k. Since the complete graph on
n vertices is annoyingly both an (n-1)-tree and an n-tree, it is
tabulated as an n-tree but matches either n-1 or n.
* The function stronglyconnected() in gutils2.c, which is used by
pickg/countg -C, had an uninitialized variable that could cause a crash.
* genbg got faster for trees
* addptg -j was generalized and addptg -e was added, see addptg --help.
* Don Knuth's 30-bit random number generator has been replaced by George
Marsaglia's 64-bit random number generator. The interface remains the
same except that seeds and values now have type unsigned long long and
there is a new function ran_init_2(seed1,seed2) that allows 128 bits
of initialization. All bits are random and the period is greater than
10^47. If naurng.c is compiled with -DUSE_TLS, each thread has its own
sequence of random numbers if they are initialized with different seeds.
The old generator is still available in naurng_knuth.[hc].
* genktreeg is a new generator for making k-trees. Thanks to
Licheng Zhang for the idea and helping with the testing.
* ransubg is a new tool that extracts a random subgraph/subdigraph from
an input graph. It can make random orientations.
* genrang with -d and -z makes pseudo-random regular loop-free digraphs.
* assembleg has -u and a changed summary line.
* If your sort program has a -S (memory allocation) option, then shortg
provides it via the -Z switch (-S means use sparse format). Valid
arguments to -Z, assuming sort supports them, are a number followed by
K, M, G, or %. Use of this argument on large tasks can give a
significant speed-up if you have a lot of memory.
* Traces had an error when there was a non-trivial initial colouring.
Thanks to Julius Kunze for reporting the error. This and a very rare
bug are now fixed. The canonical labelling may have changed. Traces is
now entirely independent of the WORDSIZE, so only one version of traces.o
is needed. Builds that use tracesS.o, tracesW.o or tracesL.o should use
traces.o instead.
* Version 2.8.8 introduces support for WORDSIZE=128, if your compiler
supports it. Note that no mainstream processor at the moment has native
support for operations on 128-integers, so those operations rely on
compiler emulation. This means that you aren't going to get efficiency
gains from using this facility, though the efficiency loss is not so
bad if you use aggressive optimization. Mostly this is a convenience
if you want code written for n <= WORDSIZE to work up to a larger size.
The makefile has targets for libraries nautyQ.a (arbitrary n) and
nautyQ1.a (n <= 128) which are built if the configure script decides that
128-bit support is available.
* geng -p will exclude graphs with 5-cycles.
An example plugin for geng is no4holes.c and is explained in the guide.
* You can make thread-safe libraries with "make TLSlibs" and install them
with "make TLSinstall".
More information about the Nauty
mailing list