Developing Alternate Graph Types
Страница в процессе перевода. |
This section is designed to guide developers who wish to write their own graph structures.
All LightGraphs functions rely on a standard API to function. As long as your graph structure is a subtype of AbstractGraph
and implements the following API functions with the given return values, all functions within the LightGraphs package should just work:
-
edgetype
(example:edgetype(g::CustomGraph) = LightGraphs.SimpleEdge{eltype(g)})
) -
is_directed
: Note that since LightGraphs uses traits to determine directedness,is_directed
for aCustomGraph
type should be implemented with both of the following signatures:-
is_directed(::Type{CustomGraph})::Bool
(example:is_directed(::Type{<:CustomGraph}) = false
) -
is_directed(g::CustomGraph)::Bool
-
If the graph structure is designed to represent weights on edges, the weights
function should also be defined. Note that the output does not necessarily have to be a dense matrix, but it must be a subtype of AbstractMatrix{<:Real}
and indexable via [u, v]
.
Note on inheriting from AbstractSimpleGraph
Every subtype of AbstractSimpleGraph must return neighbors in ascending order.