We will have a new concrete graph type Graph{V} which can represent arbitrary vertices.
We would need new constructors to be able to construct such new graphs.
Instead of passing nv, we should provide a list (or even an iterator ?) of the vertices of the graph.
As the type of vertices can be arbitrary, the type signatures of generators can quickly become a mess / incompatible
Also we will need to support multigraphs
My proposal
Graph{V}() and Graph(::Type{V})should be unambiguous
Remove SimpleGraph{T}(nv::Integer, ne::Integer) (much better to call explicitly erdos-renyi)
I don't really get this one SimpleGraph(nv::Integer, ne::Integer, edgestream::Channel), I think It does not add much to SimpleGraphFromIterator
Here is a thread for discussing the constructors for Graphs 2.0
Current constructors
Constructors for
SimpleGraph
SimpleGraph{T}()
: empty graphSimpleGraph{T}(nv::Integer)
: graph with no edgesSimpleGraph{T}(nv::Integer, ne::Integer)
: random graph (erdos-renyi)SimpleGraph(::Type{T})
: empty graphSimpleGraph(nv::Integer, ne::Integer, edgestream::Channel)
: add edges from the stream until stream end or we reachne
edges.SimpleGraphFromIterator(edgelist)
SimpleGraph(adjmx::AbstractMatrix)
SimpleGraph{T}(g::AbstractGraph)
SimpleGraph(edge_list::Vector{SimpleGraphEdge{T}})
Goals for 2.0
We will have a new concrete graph type
Graph{V}
which can represent arbitrary vertices. We would need new constructors to be able to construct such new graphs.Instead of passing
nv
, we should provide a list (or even an iterator ?) of the vertices of the graph.As the type of vertices can be arbitrary, the type signatures of generators can quickly become a mess / incompatible
Also we will need to support multigraphs
My proposal
Graph{V}()
andGraph(::Type{V})
should be unambiguousSimpleGraph{T}(nv::Integer, ne::Integer)
(much better to call explicitlyerdos-renyi
)SimpleGraph(nv::Integer, ne::Integer, edgestream::Channel)
, I think It does not add much toSimpleGraphFromIterator
Graph{T<:Integer}(nv::Integer)
Graph{V<:Integer}(adjmx=adjmx)
(Multi)Graph{V}(edge_list=edge_list)
(Multi)Graph{V}(vertices=vertices)
(Multi)Graph{V}(vertices=vertices::Vector{V})
Graph{V}(vertices=vertices::Vector{V}, adjmx=adjmx)
(Multi)Graph{V}(vertices=vertices::Vector{V}, edge_list=edge_list)
Is this proposal sound? Do you have some other ideas of generators? A better proposal?