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:
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
*Formattypes are readily accessible. However, the functionality ofloadgraphis extended for the various types only when the appropriate dependencies are available. We are searching for more intuitive ways to design this interface.