[Nauty] Release candidate #1 of nauty&Traces 2.9.0 available

Jerry James loganjerry at gmail.com
Tue May 6 13:23:03 AEST 2025


In checks6.c, the seemsbad() function can fall off the end without
returning a value if k == 6.  There should be a return statement after
line 123.  (This was found by looking at compiler warnings after
building with -Wall.)

There are quite a few warnings about variables that might be accessed
without ever having been initialized.  It is difficult for me to tell
if any can actually happen.  For example, in main() in dretodot.c, gcc
warns that StInd might be used uninitialized.  This is because, in the
!liststart case, StInd is initialized on line 540, inside a for loop.
The initialization of StInd does not depend on the loop variable, but
gcc can't hoist the assignment out of the loop because it doesn't know
that the loop will ever execute at all; i.e., it doesn't know that n
is positive.  Just moving the assignment of StInd out of the loop is
enough to eliminate that warning.  There are many more.

On Sun, May 4, 2025 at 8:22 AM Brendan McKay via Nauty <nauty at anu.edu.au> wrote:
>
> Dear Nauty people,
>
> At https://users.cecs.anu.edu.au/~bdm/nauty/nauty2_9_0rc1.tar.gz you
> can obtain the first release candidate for nauty&Traces version 2.9.0.
>
> Package maintainers: please wait for the final 2.9.0 release before
> distributing this.
>
> Recent versions of compilers like gcc and clang and their accompanying
> libraries,
> when a newer C standard is specified, have become increasing fussy about
> requiring feature test macros (like _POSIX_C_SOURCE) before exposing
> prototypes
> of library functions that are not in the C standard. This is in
> accordance with the
> rules, but unfortunately different distributions have implemented it
> inconsistently.
> Even different flavours of Linux sometimes need different specifications.
> Moreover, putting such feature test macros into the nauty header files
> breaks code
> that wants to do some things in a non-POSIX way. So now I have attempted to
> restrict feature test macros to the *.c files that need them. Fingers
> crossed.
>
> A list of the main changes 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 bug in pickg/countg for chromatic number (-G). The program worked
>    correctly if --G was used without -G, but the -G option did not work
>    properly. This was a bug in testg.c and not in the procedures in
>    nauchromatic.c.
>
> * 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.
>
>
>
>
>
> _______________________________________________
> Nauty mailing list
> Nauty at anu.edu.au
> https://mailman.anu.edu.au/mailman/listinfo/nauty



-- 
Jerry James
http://www.jamezone.org/



More information about the Nauty mailing list