JuliaGraphs / Graphs.jl

An optimized graphs package for the Julia programming language
http://juliagraphs.org/Graphs.jl/
Other
465 stars 92 forks source link

Roadmap for Graphs.jl 2.0 #128

Open gdalle opened 2 years ago

gdalle commented 2 years ago

Recently, a lot of interesting but compatibility-breaking suggestions have emerged when dealing with specific issues. In order for these ideas not to be forgotten, here is a thread where we can start to organize major changes with a possible 2.0 release in mind.

gdalle commented 2 years ago

Here are a few topics that seem important to discuss, in no particular order. Feel free to add your own!

Support vertex and edge metadata

Add easier access to edges

Relax restrictions on vertex indices & iterators

Clarify support (or lack thereof) for multigraphs

Settle the question of flows and matchings

Improve usability of shortest paths

Improve code style

Fix heisenbugs in Parallel tests

Tokazama commented 2 years ago

It would be nice for us to use a generic interface to metadata that's not exclusive to graphs.

jpfairbanks commented 2 years ago

I would add higher order networks to this list. Simplicial Sets (Vertices, Edges, Triangles, Tetrahedra ...), Hypergraphs (V, S\subset Powerset(V)), Directed Hypergraphs, Bipartite graphs, etc would be good to think about.

etiennedeg commented 2 years ago

Clarify the API of all hidden assumptions, make the API complete

Consider returning only vertices for algorithms that return an induced subgraph

consistent approach for graph direction

New Features (Not specifically 2.0, but could be nice goals)

Provide basic and generic features for graph traversal

etiennedeg commented 2 years ago

@Tokazama Have you a more precise idea of your suggestion ? I'm not sure to understand what it would looks like.

Tokazama commented 2 years ago

In terms of trait support I'd like to suggest two things:

  1. We are working very hard to create a lightweight core package for ArrayInterface.jl that contains traits for mutability, resizing, etc.
  2. Something comparable to IndexStyle for graphs. I did a quick gist using GraphStyle a while ago. We could account for direct access to edges across different graph structures using this without creating a complex type hierarchy.
Tokazama commented 2 years ago

@Tokazama Have you a more precise idea of your suggestion ? I'm not sure to understand what it would looks like.

This is a very rough draft of a generic interface for metadata I've been working on. My OSS time has been severely limited the past month due to a short term shift in my work schedule, so not much progress has been made. I think I need to write up a more exhaustive proposal describing the issue that needs to be solved with some input from other interested developers (it's a bit high level for most users). I've thought about putting something on discourse but I fear getting input from everybody that happens upon it will be a bit distracting.

Tokazama commented 2 years ago

There's discussion related to metadata here https://github.com/JuliaData/DataAPI.jl/issues/22

filchristou commented 1 year ago

Regarding the multigraphs, I have the impression it would be fairly easy to have support in the Graphs.jl Have a look at WrappedMultiGraphs.jl. Basically, this package kills this if statement and deals with the repercussions. I think something like that could be incorporated in Graphs.jl and possibly provide a trait IsMulti similar to IsDirected.

gdalle commented 1 year ago

I'll take a look!