News

About igraph releases and other things

C/igraph 0.10.13

C/igraph 0.10.13, the twelfth bugfix release of the 0.10 series, has arrived, with several new additions, bug fixes and performance improvements. As usual, the source can be obtained from the GitHub releases page.

A summary of changes in 0.10.13 is below.

Added

  • igraph_bitset_fill() sets all elements of a bitset to the same value (experimental function).
  • igraph_bitset_null() clears all elements of a bitset (experimental function).
  • igraph_bitset_is_all_zero(), igraph_bitset_is_all_one(), igraph_bitset_is_any_zero(), igraph_bitset_is_any_one() check if any/all elements of a bitset are zeros/ones (experimental functions).
  • igraph_chung_lu_game() implements the classic Chung-Lu model, as well as a number of its variants (experimental function).
  • igraph_mean_degree() computes the average of vertex degrees (experimental function).
  • igraph_count_loops() counts self-loops in the graph (experimental function).
  • igraph_is_clique() checks if all pairs within a set of vertices are connected (experimental function).
  • igraph_is_independent_vertex_set() checks if no pairs within a set of vertices are connected (experimental function).
  • igraph_hypercube() creates a hypercube graph (experimental function).
  • igraph_vector_intersection_size_sorted() counts elements common to two sorted vectors (experimental function).
  • igraph_stack_capacity() returns the allocated capacity of a stack.
  • igraph_vector_is_all_finite() checks if all elements in a vector are finite (i.e. neither NaN nor Inf).

Fixed

  • Fixed a bug that incorrectly cached that a graph has no multiple edges when igraph_init_adjlist() was called with IGRAPH_NO_LOOPS and IGRAPH_NO_MULTIPLE and all the multi-edges were loop edges.
  • igraph_is_forest() would fail to set the result variable when testing for a directed forest, and it was already cached that the graph was not an undirected forest.
  • igraph_hub_and_authority_scores() no longer clips negative results to zeros when negative weights are present.
  • Fixed an assertion failure in igraph_realize_bipartite_degree_sequence() with some non-graphical degree sequences when requesting simple bipartite graphs.
  • igraph_static_fitness_game() checks the input more carefully, and avoids an infinite loop in rare edge cases, such as when (almost) all fitness scores are zero.
  • igraph_arpack_rnsolve() used the incorrect error message text for some errors. This is now corrected.
  • Corrected the detection of some MSVC-specific bitset intrinsics during configuration.
  • Corrected a bug in the fallback implementation of igraph_bitset_countl_zero() when IGRAPH_INTEGER_SIZE was set to 32. This fallback implementation was not used with GCC, Clang, or MSVC.

Changed

  • igraph_is_graphical() and igraph_is_bigraphical() are now linear-time in all cases, and generally several times faster than before (thanks to @gendelpiekel, contributed in #2605).
  • igraph_erdos_renyi_game_gnp() can now generate graphs with more than a hundred million vertices.
  • igraph_hub_and_authority_scores() now warns when negative edge weights are present.
  • igraph_layout_lgl() now uses a BFS tree rooted in the vertex specified as proot to guide the layout. Previously it used an unspecified (arbitrary) spanning tree.
  • Updated the internal heuristics used by igraph’s ARPACK interface, igraph_arpack_rssolve() and igraph_arpack_rnsolve(), to improve the robustness of calculations.
  • Updated the initial vector construction in igraph_hub_and_authority_scores(), igraph_eigenvector_centrality() and igraph_(personalized_)pagerank() with IGRAPH_PAGERANK_ALGO_ARPACK. This improves the robustness and convergence of calculations.

Other

  • Documentation improvements.
  • Reduced the memory usage of several functions by using bitsets instead of boolean vectors.
  • igraph_vector_intersect_sorted() has better performance when the input vector sizes are similar.