C/igraph 0.10.0

C/igraph 0.10.0, the first release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page, as usual.

This release focuses on infrastructural improvements, stability, and making the igraph interface more consistent, more predictable and easier to use. It contains many API-breaking changes and function renamings, in preparation for a future 1.0 release, at which point the API will become stable. Changes in this direction are likely to continue through a 0.11 release. It is recommended that you migrate your code from 0.9 to 0.10 soon, to make the eventual transition to 1.0 easier.

Since the changelog for this release is huge, we are going to list only the most important highlights of this release:

  • We now use igraph_integer_t consistently for all indices and most integer quantities, both in the API and internally. This type is 64-bit by default on all 64-bit systems, bringing support for very large graphs with more than 2 billion vertices. Previously, vertex and edge indices were often represented as igraph_real_t. The move to an igraph_integer_t also implies a change from igraph_vector_t to igraph_vector_int_t in many functions.
  • The random number generation framework has been overhauled. Sampling from the full range of igraph_integer_t is now possible. Similarly, the sampling of random reals has been improved to utilize almost the full range of the mantissa of an igraph_real_t.
  • There is a new fully memory-managed container type for lists of vectors (igraph_vector_list_t), replacing most previous uses of the non-managed igraph_vector_ptr_t. Functions that previously used igraph_vector_ptr_t to return results and relied on the user to manage memory appropriately are now using igraph_vector_list_t, igraph_graph_list_t or similar and manage memory on their own.
  • Some simple graph properties, such as whether a graph contains self-loops or multi-edges, or whether it is connected, are now cached in the graph data structure. Querying these properties for a second time will take constant computational time. The igraph_invalidate_cache() function is provided for debugging purposes. It will invaidate all cache entries.
  • File format readers are much more robust and more tolerant of invalid input.
  • igraph is much more resilient to overflow errors.
  • Many improvements to robustness and reliability, made possible by internal refactorings.

You can find the full changelog on the GitHub release page.



Congrats to all devs, we made it!

Well done, igraph development team!

Is there a proposed timeframe for a Python binding to 0.10.0?

I am particularly interested in the igraph_minimum_cycle_basis() method.

Thank you!

We’ve already made a release that uses version 0.10.0 of the C core internally, but there are many new things in the C core that are not exposed via the Python interface yet (and we are a bit short on hands). If you let us know which functions are the ones that you’d like to see exposed in the Python interface, we can prioritize those for the next version. Version 0.10.1 will probably come in a few days at most. I’ll try to squeeze the minimum cycle basis function into that version.

Hi Tamas,

Thank you for the prompt reply. I well understand being short on available hands!

At the moment, I am mainly concerned with the minimum cycle basis function, as we are developing code that leans heavily on that function.

Your offer of exposing other requested functions in the Python interface is much appreciated. I will certainly place a request for exposure of other functions should they become of interest!

Thank you!

Graph.fundamental_cycles() and Graph.minimum_cycle_basis() are now in the development version of the Python interface and will be released with 0.10.1.