C/igraph 0.10.11

C/igraph 0.10.11 is now released. As usual, the source can be obtained from the GitHub releases page. This release brings a large number of quality enhancements, including many bug fixes and performance improvements. Upgrading is highly recommended for all igraph users.

This will be one of the last—if not the last—releases of the 0.10 series, with igraph 1.0 planned for release early summer this year. Pre-releases will be made available for feedback from the community.

A summary of changes in 0.10.11 is below.


Added

  • igraph_is_complete() checks whether there is a connection between all pairs of vertices (experimental function, contributed by Aymeric Agon-Rambosson @aagon in #2510).
  • igraph_join() creates the join of two graphs (experimental function, contributed by Quinn Buratynski @GanzuraTheConsumer in #2508).

Fixed

  • Fixed a corruption of the “finally” stack in igraph_write_graph_gml() for certain invalid GML files.
  • Fixed a memory leak in igraph_write_graph_lgl() when vertex names were present but edge weights were not.
  • Fixed the handling of duplicate edge IDs in igraph_subgraph_from_edges().
  • Fixed conversion of sparse matrices to dense with igraph_sparsemat_as_matrix() when sparse matrix object did not make use of its full allocated capacity.
  • igraph_write_graph_ncol() and igraph_write_graph_lgl() now refuse to write vertex names which would result in an invalid file that cannot be read back in.
  • igraph_write_graph_gml() now ignores graph attributes called edge or node with a warning. Writing these would create an invalid GML file that igraph couldn’t read back.
  • igraph_disjoint_union() and igraph_disjoint_union_many() now check for overflow.
  • igraph_read_graph_graphml() now correctly compares attribute values with certain expected values, meaning that prefixes of valid values of attr.type are not accepted anymore.
  • Empty IDs are not allowed any more in <key> tags of GraphML files as this is a violation of the GraphML specification.
  • igraph_is_separator() and igraph_is_minimal_separator() now work correctly with disconnected graphs.
  • igraph_linegraph() now considers self-loops to be self-adjacent in undirected graphs, bringing consistency with how directed graphs were already handled in previous versions.
  • igraph_all_st_mincuts() now correctly returns all minimum cuts. This also fixes a problem with igraph_minimum_size_separators().
  • Corrected minor error in igraph_community_label_propagation() when adding labels to isolated nodes with some fixed labels present.
  • igraph_community_spinglass() no longer crashes when passing an edgeless graph and an empty weight vector.
  • igraph_rewire() no longer crashes on graphs with more than three vertices but fewer than two edges.

Changed

  • igraph_rewire() on longer throws an error on graphs with fewer than four vertices. These graphs are now returned unchanged, just like other graphs which are the unique realization of their degree sequence.

Other

  • Performance: igraph_is_simple() now makes more granular use of the cache.
  • Performance: igraph_degree() now makes use of the cache when checking for self-loops.
  • The performance of igraph_is_minimal_separator() was improved.
  • igraph_is_graphical() now performs graphicality checks for degree sequences of simple directed graphs in linear time, an improvement from the previously used quadratic algorithm (contributed by Arnar Bjarni Arnarson @Tagl in #2537).
  • Documentation improvements.

There have been many updates for C/igraph. I am wondering whether there is any update for Python-igraph? Maybe the Python igraph is automatically updated in the sense that the Python code uses the C code which has already been updated?

No, python-igraph is updated separately. I haven’t had time for new releases of the Python interface yet.

If you just need the bugfixes, you can check out the source code from Github, point the vendor/source/igraph submodule to the new version of the C core and then either recompile or send me a pull request. The new wheels are then built on Github Actions automatically.

@logion2000 A new version is now out.

When will igraph 1.0 be released? I think it is early summer now.

Postponed to the autumn. Don’t take this as a promise though.

Basically what major improvements can be expected from the release of 1.0?

If you are using igraph from Python, R or Mathematica, you will not immediately notice major improvements.

This release is mainly about cleaning up the programming interface in C, and providing longer-term stability for C programmers, and foundations for future improvements. There are a handful of functional improvements that are visible in high-level languages and required breaking changes, but these are a minority. For example, edge betweenness based community detection now works properly on weighted graphs. get_all_simple_paths() has better features for filtering the results. Eigenvector and HITS centrality give more helpful advice for inexperiencd users in terms of warnings. The G(n,m) model can produce multigraphs, and so on. InfoMAP will be much faster, and will expose additional features. See the changelog (still incomplete) and tentative issue list to see a bunch of other improvements.

The changes in this release (some of which are not yet in the changelog) are mostly relevant for making future development easier and faster. Improvements and feature additions will continue to be made gradually throughout the 1.0 series, as they were during the 0.10 series. The focus will be on making it easier and quicker to expose improvements made in the C core in high-level interfaces, so users can benefit sooner from them. There are several features that were added during 0.10.x versions, but are not yet accessible in all high-level interfaces.

If you are C programmer, expect a cleaner, more logical and more predictable interface. If you are a C++ programmer, expect an experimental C++ wrapper to be released soon after 1.0—this will make it significantly more convenient to use igraph from C++.

I also have to say that the ambitions for the immediate future had to be scaled back significantly as igraph is currently without any funding. For this reason, things are likely to progress very slowly after the 1.0 release is out. We did have ambitious plans, including a major redesign of the Python interface, but funding applications have been less successful than expected.

I hope Zuckerburg will be more generous. Does Elon Musk also provide funding for this type of projects?