Skip to content

A reliable idiomatic nauty wrapper #452

@mxhbl

Description

@mxhbl

A reliable idiomatic nauty wrapper

The C library nauty provides advanced and efficient implementations of graph canonization and isomorphism algorithms. The NautyGraphs.jl package already exists and provides a barebones wrapper for nauty. A lot of this work probably will not be directly in the Graphs.jl repository.

  • Fast conversion and/or views between NautyGraphs.jl types and the C structures of nauty, including both dense (bit vector) and sparse (adjacency list) graph formats.
  • Complete Graph API support for the NautyGraphs.jl types (so that NautyGraphs.jl types can be used in all already existing Graph.jl algorithms that do not peek behind the API)
  • User-friendly handling of graph information computed by nauty, including properties of the graph automorphism group and detection of graph isomorphisms
  • use GraphsInterfaceChecker.jl in the test suite
  • Dispatch from operations defined in Graphs/GraphsMatching/GraphsOptim to nauty implementation. For instance if there is a pre-existing Graphs.some_interesting_property(::AbstractGraph) there should now be a new method defined in NautyGraphs some_interesting_property(g::AbstractGraph, ::NautyAlgorithm) that dispatches to the C implementation. It should convert the g argument to NautyGraph if necessary.
  • If there is an algorithm defined in nauty that does not exist yet in Graphs.jl, it should be declared in Graphs.jl (just a function with docs but no methods), together with an error hint that NautyGraphs.jl is necessary.
  • Proper tests and documentation.
  • PRs on this topic have to be submitted with clean git histories and well compartmentalized for ease of review.

Required skills: familiarity with the Graphs.jl API, the nauty API, and understanding of the Julia-C interface

Reviewer: any Graphs.jl member with merge rights

Duration: 3 months

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions