• Stars
    star
    451
  • Rank 96,142 (Top 2 %)
  • Language
    Julia
  • License
    Other
  • Created almost 3 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An optimized graphs package for the Julia programming language

Graphs.jl

Documentation Build status Code coverage Code style: Blue Aqua QA

Overview

The goal of Graphs.jl is to offer a performant platform for network and graph analysis in Julia, following the example of libraries such as NetworkX in Python. To this end, Graphs.jl offers:

  • a set of simple, concrete graph implementations -- SimpleGraph (for undirected graphs) and SimpleDiGraph (for directed graphs)
  • an API for the development of more sophisticated graph implementations under the AbstractGraph type
  • a large collection of graph algorithms with the same requirements as this API.

Installation

Installation is straightforward. First, enter Pkg mode by hitting ], and then run the following command:

pkg> add Graphs

Basic use

Graphs.jl includes numerous convenience functions for generating graphs, such as path_graph, which builds a simple undirected path graph of a given length. Once created, these graphs can be easily interrogated and modified.

julia> g = path_graph(6)
{6, 5} undirected simple Int64 graph

# Number of vertices
julia> nv(g)
6

# Number of edges
julia> ne(g)
5

# Add an edge to make the path a loop
julia> add_edge!(g, 1, 6);

Documentation

The full documentation is available at GitHub Pages. Documentation for methods is also available via the Julia REPL help system. Additional tutorials can be found at JuliaGraphsTutorials.

Citing

We encourage you to cite our work if you have used our libraries, tools or datasets. Starring the Graphs.jl repository on GitHub is also appreciated.

The latest citation information may be found in the CITATION.bib file within the repository.

Contributing

We welcome contributions and bug reports! Please see CONTRIBUTING.md for guidance on development and bug reporting.

JuliaGraphs development subscribes to the Julia Community Standards.

It is an explicit design decision that any data not required for graph manipulation (attributes and other information, for example) is expected to be stored outside of the graph structure itself.

Additional functionality like advanced IO and file formats, weighted graphs, property graphs, and optimization-related functions can be found in the packages of the JuliaGraphs organization.

Project status

The Graphs.jl project is a reboot of the LightGraphs.jl package (archived in October 2021), which remains available on GitHub at sbromberger/LightGraphs.jl. If you don't need any new features developed since the fork, you can continue to use older versions of LightGraphs.jl indefinitely. New versions will be released here using the name Graphs.jl instead of LightGraphs.jl. There was an older package also called Graphs.jl. The source history and versions are still available in this repository, but the current code base is unrelated to the old Graphs.jl code and is derived purely from LightGraphs.jl. To access the history of the old Graphs.jl code, you can start from commit 9a25019.

Transition from LightGraphs to Graphs

LightGraphs.jl and Graphs.jl are functionally identical, still there are some steps involved making the change:

  • Change LightGraphs = "093fc24a-ae57-5d10-9952-331d41423f4d" to Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" in your Project.toml.
  • Update your using and import statements.
  • Update your type constraints and other references to LightGraphs to Graphs.
  • Increment your version number. Following semantic versioning, we suggest a patch release when no graphs or other Graphs.jl-objects can be passed through the API of your package by those depending on it, otherwise consider it a breaking release. "Passed through" entails created outside and consumed inside your package and vice versa.
  • Tag a release.

About versions

  • The master branch of Graphs.jl is generally designed to work with versions of Julia starting from the LTS release all the way to the current stable release, except during Julia version increments as we transition to the new version.
  • Later versions: Some functionality might not work with prerelease / unstable / nightly versions of Julia. If you run into a problem, please file an issue.
  • The project was previously developed under the name LightGraphs.jl and older versions of LightGraphs.jl (โ‰ค v1.3.5) must still be used with that name.
  • There was also an older package also called Graphs.jl (git tags v0.2.5 through v0.10.3), but the current code base here is a fork of LightGraphs.jl v1.3.5.
  • All older LightGraphs.jl versions are tagged using the naming scheme lg-vX.Y.Z rather than plain vX.Y.Z, which is used for old Graphs.jl versions (โ‰ค v0.10) and newer versions derived from LightGraphs.jl but released with the Graphs.jl name (โ‰ฅ v1.4).
  • If you are using a version of Julia prior to 1.x, then you should use LightGraphs.jl at lg-v.12.* or Graphs.jl at v0.10.3

More Repositories

1

GraphPlot.jl

Graph visualization for Julia.
Julia
200
star
2

MultilayerGraphs.jl

A Julia package for the creation, manipulation and analysis of the structure, dynamics and functions of multilayer graphs.
Julia
118
star
3

MatrixNetworks.jl

Graph and Network algorithms in Julia
Julia
109
star
4

NetworkLayout.jl

Layout algorithms for graphs and trees in pure Julia.
Julia
97
star
5

JuliaGraphsTutorials

Tutorials in the form of Jupyter notebooks for the JuliaGraphs ecosystem
Jupyter Notebook
97
star
6

MetaGraphsNext.jl

A package for graphs with vertex labels and metadata in Julia
Julia
73
star
7

GraphViz.jl

Julia Binding to the GraphViz library
Julia
67
star
8

GraphIO.jl

Graph IO functionality for various formats.
Julia
61
star
9

MetaGraphs.jl

Graph data structures with multiple heterogeneous metadata for Graphs.jl.
Julia
58
star
10

SimpleWeightedGraphs.jl

Edge-weighted graphs compatible with Graphs.jl
Julia
37
star
11

LightGraphsFlows.jl

Flow algorithms on LightGraphs
Julia
36
star
12

StaticGraphs.jl

Memory-efficient immutable LightGraphs.
Julia
32
star
13

GraphDataFrameBridge.jl

Tools for interoperability between DataFrame objects and LightGraphs and MetaGraphs objects
Julia
30
star
14

GraphsFlows.jl

Flow algorithms on Graphs.jl
Julia
27
star
15

LightGraphsExtras.jl

Additional functionality for LightGraphs.jl
Julia
21
star
16

GraphsOptim.jl

A package for graph optimization algorithms that rely on mathematical programming.
Julia
17
star
17

VegaGraphs.jl

Create beatiful and interactive visualizations for graphs using Vega-Lite
Jupyter Notebook
16
star
18

SNAPDatasets.jl

LightGraphs.jl-formatted graph files taken from the SNAP Datasets collection.
Julia
16
star
19

GraphsMatching.jl

Matching algorithms for Graphs.jl
Julia
15
star
20

CommunityDetection.jl

Community Detection algorithms for LightGraphs
Julia
14
star
21

LightGraphsMatching.jl

Matching algorithms for LightGraphs.jl
Julia
13
star
22

GraphsBase.jl

Basic interface and structures for the JuliaGraphs ecosystem
Julia
11
star
23

SpecialGraphs.jl

Encoding special graph structures in types
Julia
8
star
24

juliagraphs.github.io

Organization page
SCSS
7
star
25

JuliaGraphs-meta

Forum for JuliaGraphs discussion - issues only.
6
star
26

GraphsExtras.jl

Additional functionality for Graphs.jl
Julia
5
star
27

BlossomMatching.jl

A Julia implementation of the Blossom V matching algorithm
Julia
5
star
28

Graph500.jl

Graph500 benchmarks written in Julia using LightGraphs
Julia
4
star
29

D3GraphPlot.jl

Julia
4
star
30

GraphCentrality.jl

(DEPRECATED) Centrality measures for Graphs.jl
Julia
4
star
31

DBGraphs.jl

Julia
3
star
32

Networks.jl

(DEPRECATED) Additional graph flexibility for LightGraphs
Julia
3
star
33

GraphsInterfaceChecker.jl

Formalization of the AbstractGraph interface from Graphs.jl, specified using Interfaces.jl.
Julia
3
star