[Nauty] Fwd: Release candidate #2 of nauty&Traces 2.9.0 available

Brendan McKay Brendan.McKay at anu.edu.au
Sun May 25 22:19:56 AEST 2025


Dear Nauty people,

At https://users.cecs.anu.edu.au/~bdm/nauty/nauty2_9_0rc2.tar.gz you
can obtain the second release candidate for nauty&Traces version 2.9.0.

Package maintainers: please wait for the final 2.9.0 release before 
distributing this.

A list of the main changes since 2.8.9 is below.  As always, please 
report problems.

Brendan.
--------------------------------
* Many changes to configure.ac, makefile.in and runalltests. Major
   changes to the header files to account for the foibles of different
   operating systems and compiler standards.  Successful installation is
   now confirmed on 20 different OSes (but there is always #21...).
   Some programs (dreadnaut.c, shortg.c, dretog.c) now declare
   _POSIX_C_SOURCE=200809L and _XOPEN_SOURCE=500, but none
   of the *.h files touch those variables.

* Fixed bugs in pickg/countg for chromatic number (-G) and connectivity 
(-N).
   These were related bugs in testg.c and not in the procedures in
   nauchromatic.c and nauconnect.c.  Thanks to Jerry James for reporting.

* pickg/countg --HH counts hexagons (6-cycles) in undirected graphs.
   Fixed pickg/countg documentation for colouring parameters.

* Added "c" option to genposetg to select only connected posets.

* countneg -n (but not -e) can now handle incremental sparse format.

* The space efficiency of uniqg has improved to 48 bytes per isomorphism
   class, a bit more than 22 million per gigabyte. It got a little 
faster too.
- uniqg -H was good in 2.8.8 but broken in 2.8.9. Hopefully it's good again.
- uniqg -y writes a 256-bit hash of the input equivalence classes.
   It is independent of the word size and endianness, but depends on -S, -t
   and the parameters for colouring and invariants.
- The SHA256 procedures have been migrated to a separate file nausha.c
   so they can be used in other programs. See that file for documentation.
   That code is freeware by Brad Conte.

* listg -T writes a one-line format like 0--1,2--3,... as required by the
   program 'tutte'.

* Changes to dreadnaut:
   - The options related to invariants have been separated into options for
     digraphs and options for undirected graphs. To set the options
     (commands *, k and K) you need set the digraph option (+d or -d) first.
     This change was implemented so that the default invariant for digraphs
     could be changed to "adjacencies". The default for undirected graphs
     remains to not use an invariant.  Now dreadnaut should obtain the same
     canonical forms as the interfaces densenauty() and sparsenauty().

   - The command (...) can construct a graph from its graph6, sparse6, or
     digraph6 code, either given explicitly or read from a file. Examples:
       (IheA at GUAo)  - get the Petersen graph from its graph6 code
       (:I`ES at obGkqegW~)  - similarly for its sparse6 code
       (<file) - read the first graph from file "file"
       (<file#12) - read the 12th graph from file "file" (the first is #1).
       (<cmd:genspecialg -XTutte12Cage) - read the Tutte 12-cage as made
          by the utility genspecialg (assuming your operating system 
supports
          the popen() function)
     White space is ignored except for spaces in file or command names.

   - The commands t (write the graph) and b (write the canonical graph) have
     new variants t6 and b6 that write the respective graphs in graph6,
     sparse6 or digraph6 format, instead of the default human-readable 
format.

   - If your computer has the facility, you will get a suggestion to 
increase
     the stack size if dreadnaut crashes due to running out of stack. The
     command to do that on Unix-like systems is ulimit -s. Probably this 
will
     be futile, as it means nauty recursed to a very deep level and is 
unlikely
     to finish any time soon. An invariant might help.

* It has always been the case that options.digraph needs to be set to TRUE
   for undirected graphs with loops. This is now enforced by dreadnaut, and
   the interfaces densenauty() and sparsenauty(), by temporarily 
changing the
   option before nauty is called, if necessary.  You are still responsible
   for this if you use the direct nauty() interface. Traces is not certified
   for loops at all.

* The default for hamheuristic -L was increased. It also has a new option -c
   to perform an independent check of hamiltonian cycles after they are 
found.

* Functions setsize() and setinter() in naututil.c became type long long,
   as the previous type int is too small and maybe size_t is also too small.

* genspecialg has 29 new named graphs. Use genspecialg -Xhelp for a list.

* delptg -A deletes all the vertices specified by -d and/or -v.
   delptg -k# makes the #-core of the input graphs, formed by recursively
     removing vertices of degree less than #.
   Loops are now supported by delptg and contribute 2 to the degree for
     undirected graphs.

* "extern" has been removed from external function declarations. While 
it has
   not strictly been needed since the age of the dinosaurs, decades ago 
there
   were compilers that failed without it. Hopefully that is no longer true.

* Add parameter -D to nbrhoodg to select subgraphs in an interval of 
distances
   from a vertex. See nbrhoodg --help .

* addptg -D# restricts the maximum (out-)degree of the outputs.

* New utility distgraphg makes output graphs according to the distances
   between vertices in the input graphs. Run distgraphg --help.

* A considerable number of compiler warning messages were suppressed.
   Although almost all of them were due to the compiler's incomplete 
knowledge
   of the code,  an uninitialised variable with unknown consequences was
   discovered and fixed in Traces.





More information about the Nauty mailing list