Документация Engee

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:

  • edges

  • Base.eltype

  • edgetype (example: edgetype(g::CustomGraph) = LightGraphs.SimpleEdge{eltype(g)}))

  • has_edge

  • has_vertex

  • inneighbors

  • ne

  • nv

  • outneighbors

  • vertices

  • is_directed: Note that since LightGraphs uses traits to determine directedness, is_directed for a CustomGraph 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

  • zero

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.