Skip to content

A reliable idiomatic wrapper for the C library very_nauty [$400] #448

Description

@Krastanov

A reliable idiomatic very_nauty wrapper [$400]

The JuliaGraphs/VNGraphs.jl package already exists and provides a simple low-level wrapper for the C library. A lot of this work probably will not be directly in the Graphs.jl repository.

  • Fast conversion and/or views between Graphs.jl types and the C structures of very_nauty (slow converters already exist for simple graphs)
  • Complete Graph API support for the VNGraph types (so that VNGraph types can be used in all already existing Graph.jl algorithms that do not peek behind the API)
  • use GraphsInterfaceChecker.jl in the test suite
  • Dispatch from operations defined in Graphs/GraphsMatching/GraphsOptim to very_nauty implementation. For instance if there is a pre-existing Graphs.some_interesting_property(::AbstractGraph) there should now be a new method defined in VNGraphs some_interesting_property(g::AbstractGraph, ::VNAlgorithm) that dispatches to the C implementation. It should convert the g argument to VNGraph if necessary.
  • If there is an algorithm defined in very_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 VNGraphs 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 and understanding of the Julia-C interface

Reviewer: any Graphs.jl member with merge rights

Duration: 3 months

Payout procedure:

The Funding for these bounties comes from the National Science Foundation and from the NSF Center for Quantum Networks. The payouts are managed by the NumFOCUS foundation and processed in bulk once every two months. If you live in a country in which NumFOCUS can make payments, you can participate in this bounty program.

Click here for more details about the bug bounty program.

Bug bounty logistic details (click to expand)

To claim exclusive time to work on this bounty either post a comment here or message skrastanov@umass.edu with:

  • your name
  • github username
  • (optional) a brief list of previous pertinent projects you have engaged in

If you want to, you can work on this project without making a claim, however claims are encouraged to give you and other contributors peace of mind. Whoever has made a claim takes precedence when solutions are considered.

You can always propose your own funded project, if you would like to contribute something of value that is not yet covered by an official bounty.

Activity

  1. BenraouaneSoufiane commented on Aug 1, 2025

    @BenraouaneSoufiane
  2. Krastanov commented on Aug 1, 2025

    @Krastanov
    Author
  3. naxatra2 commented on Sep 13, 2025

    @naxatra2

    Is this issue still open. I wanted to try this

  4. Krastanov commented on Sep 14, 2025

    @Krastanov
    MemberAuthor

    Thanks for your interest! It is still open. Could you share a bit about your background, have you worked with Julia and with C before? Have you worked on Graph theory more broadly?

  5. naxatra2 commented on Sep 14, 2025

    @naxatra2

    I’ve done coursework in C language as well as in graph theory, though I haven’t yet contributed to open source projects or created independent projects in those areas. I don’t have prior experience with Julia either.

    I recently completed my GSoC project with DeepForest (under NumFOCUS), and while exploring other NumFOCUS-related projects, I came across this one and found it interesting. I was also looking for gigs and saw that this project had a bounty on it, which made me want to try for the bounty. That’s how I came here.

  6. Krastanov commented on Sep 17, 2025

    @Krastanov
    MemberAuthor

    @naxatra2 , apologies, I thought I had responded. Given your lack of experience with Julia, I would like to go through some onboarding before exclusively assigning the bounty to you. For instance, could you choose whichever of the TODO items in the bounty description seems easiest and submit a PR for it? I would be happy to help with first steps and polish, etc. Once such an initial PR is merged, demonstrating your familiarity with the tools and the language, I would be happy to assign the bounty exclusively to you.

  7. nsajko commented on Oct 5, 2025

    @nsajko
    Member

    I intend to tackle this. I see I was just invited to join the org, just about now, though. I suppose it is better if I postpone joining the org until later.

  8. Krastanov commented on Oct 5, 2025

    @Krastanov
    MemberAuthor

    Hi, @nsajko ! The invite was because of your message on the Graphs channel on slack about the libraries you are setting up -- you can go ahead and accept that invite if you would like, no need to wait.

    As for tackling this bounty, it is free for the taking at the moment.

  9. nenadilic84 commented on Feb 12, 2026

    @nenadilic84

    Hi @Krastanov, I've started working on this bounty. I've submitted two PRs to VNGraphs.jl:

    • PR Transfer issues from LightGraphs.jl #18 — Complete Graphs.jl AbstractGraph interface: edges iterator, outneighbors/inneighbors, rem_edge!, add_vertex!, copy, has_edge bug fix, and GraphsInterfaceChecker.jl compliance tests. All 266 tests pass.
    • PR broken documentation links in the README #19 — VNAlgorithm dispatch: is_connected, connected_components, chromatic_number, edge_chromatic_number, and clique_number with auto-conversion from any AbstractGraph. All 307 tests pass.

    Remaining items from the checklist:

    • Fast conversion/views (the current conversion copies edges; I can explore a zero-copy view wrapper if desired)
    • Declare chromatic_number, clique_number etc. in Graphs.jl itself (separate PR)

    Happy to iterate based on review feedback.

  10. zhanglin2603 commented on Feb 12, 2026

    @zhanglin2603

    I'd like to apply for this bounty. I understand the task is to create a reliable, idiomatic Julia wrapper for the C library very_nauty, enabling seamless integration with Graphs.jl's API and existing algorithms.
    My delivery plan:
    • Implement fast converters/views between Graphs.jl types and very_nauty C structures, ensuring full Graph API support for VNGraph types.
    • Develop dispatch mechanisms to route existing Graphs.jl operations to very_nauty implementations, with comprehensive tests and documentation.
    Please provide clear acceptance criteria to ensure alignment. I'm [Your Name], GitHub username [username], with experience in Julia C interfaces and Graphs.jl.

  11. lmee commented on Feb 12, 2026

    @lmee

    Hi maintainers, I would like to take "A reliable idiomatic wrapper for the C library very_nauty [$400]". I will start with a scoped first PR and keep implementation notes transparent. First PR plan: reproduce the issue against acceptance criteria, ship a minimal fix, and include focused tests in the first PR. First PR deliverable: minimal-risk patch, clear commit scope, and verification notes. I will add a short risk/checklist section so review and merge are faster. You can reach me at lmee_mail@163.com. Best, Jerry Li

  12. nenadilic84 commented on Feb 13, 2026

    @nenadilic84

    /attempt #448

  13. energypantry commented on Feb 16, 2026

    @energypantry

    Hi @Krastanov, I read the complete issue and comments, including the claim process and payout notes.

    I can take a scoped first milestone for this bounty:

    • wire core Graphs.jl API dispatch paths into VNGraphs.jl,
    • add test coverage for conversion + traversal primitives,
    • submit as small PRs with clean history.

    If approved, I can post the first reviewable PR update within ~48 hours.

  14. Josharvy commented on Aug 24, 2026

    @Josharvy

    hey, id like to take this on - ive been looking at the VNGraphs.jl code and the remaining Graphs.jl API gaps look manageable. happy to start with edges/neighbors then work through the interface checker.

  15. singhharsh1708 commented on Sep 7, 2026

    @singhharsh1708

    Hi @Krastanov, I would like to take this one if it is still free.

    Background, since you have asked others for it: I work mainly in SciML, with 86 merged PRs in OrdinaryDiffEq.jl covering solver internals, error control and the MRI-GARK multirate family. More relevant here, I recently built PETScDiffEq.jl, a Julia wrapper over PETSc's C API, so the Julia to C side is what I have been living in lately. Graphs.jl itself I know as a user rather than a contributor.

    Rather than claim it cold, I would start where you pointed naxatra2: take the smallest TODO item as its own PR so you can see the code before the bounty is committed to me. From the list that looks like completing the AbstractGraph API on VNGraph types together with the GraphsInterfaceChecker.jl test wiring, as one small PR with clean history. If that reads right to you I will open it this week.

  16. singhharsh1708 commented on Sep 7, 2026

    @singhharsh1708

    Following up on the above with what I have actually opened, and with one thing addressed directly, since it is the fair worry when a new name turns up with several PRs at once.

    VNGraphs.jl#33 fixes has_edge, #34 adds outneighbors and inneighbors, #35 adds edges, #36 completes the mutating methods, #37 adds VNAlgorithm with clique_number dispatched to the C routine, and Graphs.jl#529 declares chromatic_number and edge_chromatic_number as private method-less functions, following your review on #507 point by point. They are one concern per PR rather than one branch because that is what you asked for on VNGraphs.jl#26, and each is independent except #35, which needs #34.

    Every claim in them is measured rather than asserted. Each has a negative control showing the new test fails without the change, agreement is checked against the SimpleGraph conversion rather than against my own expectations, and where I claim a performance difference I give the numbers, including the case where very_nauty loses to Graphs.jl and I say so. Two of them turned up real defects I had not gone looking for: has_edge(g, e) recursing into a StackOverflowError, and add_edge! writing past the end of the adjacency array for an out-of-range vertex and reporting success. Where my work overlaps an open PR of someone else's, #14 and #26, I said so in my own PR rather than leave you to find it.

    On the review burden specifically: I am a GSoC 2026 student with SciML under the NumFOCUS umbrella, with 125 merged PRs across the SciML organisation, 104 of them in OrdinaryDiffEq.jl, so responding to review is the normal shape of my week rather than something I disappear from. If any of these need changes I will turn them around in hours, and I am equally happy for you to close mine in favour of #14 wherever the two overlap. I would rather the package end up right than the PR be mine.

  17. added a commit that references this issue on Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bountyThere is an award for solving this issue.bounty:400

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions