- Circulant Graph
- Complete Graph
- Cycle Graph
- Echo Graph
- Empty Graph
- Grid Graph
- Hypercube Graph
- Path Graph
- RMat Graph
- Singleton Edge Graph
- Star Graph

Gelly provides a collection of scalable graph generators. Each generator is

- parallelizable, in order to create large datasets
- scale-free, generating the same graph regardless of parallelism
- thrifty, using as few operators as possible

Graph generators are configured using the builder pattern. The parallelism of generator
operators can be set explicitly by calling `setParallelism(parallelism)`

. Lowering the
parallelism will reduce the allocation of memory and network buffers.

Graph-specific configuration must be called first, then configuration common to all
generators, and lastly the call to `generate()`

. The following example configures a
grid graph with two dimensions, configures the parallelism, and generates the graph.

A circulant graph is an oriented graph configured with one or more contiguous ranges of offsets. Edges connect integer vertex IDs whose difference equals a configured offset. The circulant graph with no offsets is the empty graph and the graph with the maximum range is the complete graph.

An undirected graph connecting every distinct pair of vertices.

An undirected graph where the set of edges form a single cycle by connecting each vertex to two adjacent vertices in a chained loop.

An echo graph is a
circulant graph with `n`

vertices defined by the width of a
single range of offsets centered at `n/2`

. A vertex is connected to ‘far’
vertices, which connect to ‘near’ vertices, which connect to ‘far’ vertices, ….

A graph containing no edges.

An undirected graph connecting vertices in a regular tiling in one or more dimensions.
Each dimension is configured separately. When the dimension size is at least three the
endpoints are optionally connected by setting `wrapEndpoints`

. Changing the following
example to `addDimension(4, true)`

would connect `0`

to `3`

and `4`

to `7`

.

An undirected graph where edges form an `n`

-dimensional hypercube. Each vertex
in a hypercube connects to one other vertex in each dimension.

An undirected graph where the set of edges form a single path by connecting
two `endpoint`

vertices with degree `1`

and all midpoint vertices with degree
`2`

. A path graph can be formed by removing a single edge from a cycle graph.

A directed power-law multigraph generated using the Recursive Matrix (R-Mat) model.

RMat is a stochastic generator configured with a source of randomness implementing the
`RandomGenerableFactory`

interface. Provided implementations are `JDKRandomGeneratorFactory`

and `MersenneTwisterFactory`

. These generate an initial sequence of random values which are
then used as seeds for generating the edges.

The default RMat constants can be overridden as shown in the following example. The constants define the interdependence of bits from each generated edge’s source and target labels. The RMat noise can be enabled and progressively perturbs the constants while generating each edge.

The RMat generator can be configured to produce a simple graph by removing self-loops and duplicate edges. Symmetrization is performed either by a “clip-and-flip” throwing away the half matrix above the diagonal or a full “flip” preserving and mirroring all edges.

An undirected graph containing isolated two-paths where every vertex has degree
`1`

.

An undirected graph containing a single central vertex connected to all other leaf vertices.