-
Notifications
You must be signed in to change notification settings - Fork 112
Open
Labels
bountyThere is an award for solving this issue.There is an award for solving this issue.bounty:400bounty:reserved
Description
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
Labels
bountyThere is an award for solving this issue.There is an award for solving this issue.bounty:400bounty:reserved