GraphIO provides support to Graphs.jl for reading/writing graphs in various formats.
Currently, the following functionality is provided:
Format | Read | Write | Multiple Graphs | Format Name | Comment |
---|---|---|---|---|---|
EdgeList | ✓ | ✓ | EdgeListFormat | a simple list of sources and dests separated by whitespace and/or comma, one pair per line. | |
GML | ✓ | ✓ | ✓ | GMLFormat | |
Graph6 | ✓ | ✓ | ✓ | Graph6Format | |
GraphML | ✓ | ✓ | ✓ | GraphMLFormat | |
Pajek NET | ✓ | ✓ | NETFormat | ||
GEXF | ✓ | GEXFFormat | |||
DOT | ✓ | ✓ | DOTFormat | ||
CDF | ✓ | CDFFormat |
Graphs are read using either the loadgraph
function or, for formats that support multiple graphs in a single file,
the loadgraphs
functions. loadgraph
returns a Graph object, while loadgraphs
returns a dictionary of Graph objects.
For example, an edgelist file could be loaded as:
using GraphIO.EdgeList, Graphs
graph = loadgraph("path_to_graph/my_edgelist.txt", "graph_key", EdgeListFormat())
All *Format
types are readily accessible.
However, in order to use some of them with loadgraph
, additional packages are required.
You may thus need to install and load the following dependencies before using parts of GraphIO.jl:
- Reading DOT or GML files: do
using ParserCombinator
- Reading GEXF or GraphML files: do
using EzXML
- Reading GML files: do
using CodecZlib
The current design avoids populating your environment with unnecessary dependencies.
IMPLEMENTATION NOTE: The current design uses package extensions, introduced in Julia v1.9. At the moment, package extensions cannot conditionally load types, that is one of the main reasons why all
*Format
types are readily accessible. However, the functionality ofloadgraph
is extended for the various types only when the appropriate dependencies are available. We are searching for more intuitive ways to design this interface.