IGraph/M is a Mathematica package for use in complex networks and graph theory research. It started out as a well-integrated Mathematica interface to igraph, one of the most popular open source network analysis packages available. In addition to exposing igraph functionality to Mathematica, the current version of IGraph/M contains many other functions for working with graphs.

IGraph/M is a bit different from the official igraph interfaces (for C, Python and R). Mathematica already has extensive graph theory and network analysis functionality, and IGraph/M does not aim to replace this. Instead it is meant to complement it and integrate with it, so functions from both systems can be used seamlessly together. Thus it works directly with Mathematica’s `Graph`

datatype. Trivial functionality that is already present in Mathematica, such as adding or removing edges, converting to/from an adjacency matrix, etc., is not exposed. The focus is on functionality that is not already present in Mathematica, and functionality that complements Mathematica’s builtins in a meaningful way.

IGraph/M comes pre-packaged and ready to use on Windows, OS X and Linux (64-bit Intel), as well as the Raspberry Pi computer. The code is open source and can be compiled on other platforms as well (such as 32-bit Windows).

*A PDF version of the documentation notebook (12 MB) is available for preview purposes.*

**To be notified of new releases, or to discuss IGraph/M, join the Gitter chatroom!**

### Installation

*For a fully automatic download and installation, use the updateIGraphM[] function shown on the project’s GitHub page. Manual installation instructions are below.*

Download the `.paclet`

file form the GitHub releases page, and install it using the `PacletInstall`

Mathematica function. For example, if `IGraphM-0.3.97.2.paclet`

was downloaded into the directory `~/Downloads`

, then evaluate

```
Needs["PacletManager`"]
PacletInstall["~/Downloads/IGraphM-0.3.97.2.paclet"]
```

A more detailed guide for installing packages distributed in the paclet format is available on StackExchange. Currently it is recommended to use the latest prerelease version (0.3.97.2).

Test that it works with a few simple commands:

```
<<IGraphM`
IGVersion[]
Graph[GraphData["DodecahedralGraph"],
EdgeStyle -> Directive[Thick, Opacity[1]], VertexStyle -> Black
] // IGEdgeMap[ColorData[109], EdgeStyle -> IGEdgeColoring]
```

### Usage and documentation

To get started, load the package with

`<<IGraphM``

Now the documentation can be opened using the command `IGDocumentation[]`

. It contains many usage examples.

IGraph/M being a one-man effort so far, the builtin documentation is not yet complete. To learn about a particular function, please go through the following steps:

To get basic information on a function, first look at its usage message. For example:

`?IGCommunitiesEdgeBetweenness`

`IGCommunitiesEdgeBetweenness[graph]`

finds communities using the Girvan–Newman algorithm.

For a more detailed description, look up the function in the documentation notebook (`IGDocumentation[]`

). Mathematica-specific details are usually described here.

For an even more detailed description of the functionality, or to learn about the implementation of various functions, check the official C/igraph documentation. It usually includes references to the papers describing the implemented algorithms.

All IGraph/M function names start with the prefix `IG`

, and related functions use a consistent naming. For example, all community detection functions are named as `IGCommunities...`

`?IGCommunities*`

All graph layout functions are named as `IGLayout...`

, all random graph generators are called `IG...Game`

, etc.

### Feature highlights

As of IGraph/M 0.3, not all of the igraph functionality is exposed. Contributions are welcome, and feature requests are accepted (just open a new issue).

- Interruption support: using Evaluate → Abort Evaluation in Mathematica works with most IGraph/M functions.
- Centrality measures for weighted graphs.
- Fast estimates of vertex betweenness, edge betweenness and closeness centrality; for large graphs.
- Community detection algorithms.
- Minimum feedback arc set for weighted and unweighted graphs.
- Vertex and edge colouring.
- Find all cliques (not just maximal ones); count cliques of different sizes without storing them; work with weighted cliques.
- Count 3- and 4-motifs; find triangles.
- Histogram for shortest path lengths (weighted and unweighted).
- Rewire edges, keeping either the density or the degree sequence.
- Alternative fast algorithms for isomorphism testing: Bliss, VF2, LAD.
- Subgraph isomorphism (including induced subgraphs with LAD).
- Isomorphism for edge or vertex coloured graphs; multigraph isomorphism implementation based on edge colouring.
- Alternative algorithms for generating random graphs with given degree sequence; test for degree sequence graphicality.
- Additional layout algorithms: most work with weighted graphs and can continue the layout optimization starting from a given set of vertex positions.
- Biconnected components, articulation points, find all minimum vertex cuts.
- Functions for easy graph property transformations and graph styling.
- Functions for converting geometric meshes to graphs.
- Several other specialized functions not mentioned here …

The documentation contains many examples and can be accessed using the `IGDocumentation[]`

command.

### Feedback, bugs and troubleshooting

If you find a problem with the package, first check the Troubleshooting section of the README file. If the information there does not help resolve the problem, you can ask in the chatroom, email me, or open a new issue at the tracker. Be sure to include the output of `IGraphM`Developer`GetInfo[]`

in your report.

For any other type of feedback, just send an email. Remember that the project is open to contributions!

## Comments !