About igraph releases and other things

C/igraph 0.10.3

C/igraph 0.10.3, the third bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This release adds support for generating triangular and hexagonal lattices, constructing trees from a “parent” vector, and retrieving the IDs of the edges in the induced subgraph of a vertex set. It also refines the experimental API of the UMAP layout function, fixes a few bugs and improves the documentation.

Read on for more details about the changes in version 0.10.3.


  • igraph_matrix_init_array() to initialize an igraph matrix by copying an existing C array in column-major or row-major order.
  • igraph_layout_umap_compute_weights() computes weights for the UMAP layout algorithm from distances. This used to be part of igraph_layout_umap(), but it is now in a separate function to allow the user to experiment with different weighting schemes.
  • igraph_triangular_lattice() to generate triangular lattices of various kinds.
  • igraph_hexagonal_lattice() to generate hexagonal lattices of various kinds.
  • igraph_tree_from_parent_vector() to create a tree or a forest from a parent vector (i.e. a vector that encodes the parent vertex of each vertex).
  • igraph_induced_subgraph_edges() produces the IDs of edges contained within a subgraph induced by the given vertices.


  • The signature of the experimental igraph_layout_umap() function changed; the last argument is now a Boolean that specifies whether distances should already be treated as weights, and the sampling probability argument was removed.


  • igraph_transitivity_barrat(), igraph_community_fluid_communities(), igraph_sir(), igraph_trussness() and graphlet functions did not correctly detect when a directed input graph had effective multi-edges due to ignoring edge directions. Such graphs are now rejected by these functions.
  • Fixed a bug in igraph_2dgrid_move() that sometimes crashed the Large Graph Layout function when a grid cell became empty.
  • igraph_pagerank() and igraph_personalized_pagerank() would fail to converge when the ARPACK implementation was used and a vertex had more than one outgoing edge but all these edges had zero weights.
  • igraph_pagerank() and igraph_personalized_pagerank() no longer allow negative weights. Previously, edges with negative weights were silently ignored when using the PRPACK implementation. The ARPACK implementation would issue a warning saying that they are ignored, but in fact it computed an incorrect result.
  • igraph_all_st_cuts() and igraph_all_st_mincuts() no longer trigger the “Finally stack too large” fatal error when called on certain large graphs. This was a regression in igraph 0.10.
  • igraph_community_label_propagation() no longer rounds weights to integers. This was a regression in igraph 0.10.
  • igraph_read_graph_graphdb() does more thorough checks on the input file.
  • igraph_calloc() did not zero-initialize the allocated memory. This is now corrected. Note that the macro IGRAPH_CALLOC() was not affected.
  • Fixed new warnings issued by the Xcode 14.1 toolchain.


  • igraph_subgraph_edges() is now deprecated to avoid confusion with igraph_induced_subgraph_edges(); its new name is igraph_subgraph_from_edges(). The old name is kept available until at least igraph 0.11.


  • Significantly improved performance for igraph_matrix_transpose().
  • Documentation improvements.