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).

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.