|
| 1 | +--- |
| 2 | +title: C/igraph 0.10.17 |
| 3 | +date: 2025-09-19 |
| 4 | +tags: c |
| 5 | +--- |
| 6 | + |
| 7 | +[C/igraph](https://igraph.org/c/) 0.10.17, the (hopefully) last bugfix release of the 0.10 series, has arrived, |
| 8 | +with several new additions, bug fixes and performance improvements. |
| 9 | +As usual, the source can be obtained from [the GitHub releases page](https://github.com/igraph/igraph/releases/tag/0.10.17). |
| 10 | + |
| 11 | +This is the last planned release of the 0.x series. A new 1.0 release with a stable API will arrive soon, with quite a few breaking changes that were necessary to evolve igraph's API into a form that we can commit ourselves to for a longer period of time. If you do not want to update your existing code, you should stick to 0.10.17 in your own projects. |
| 12 | + |
| 13 | +A summary of changes in 0.10.17 is below. |
| 14 | + |
| 15 | +<!--more--> |
| 16 | + |
| 17 | +### Added |
| 18 | + |
| 19 | +- `igraph_layout_align()` attempts to align a graph layout with the coordinate axes in a visually pleasing manner (experimental function). |
| 20 | +- `igraph_product()` supports the lexicographic, strong and modular graph products. Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2772 and #2793! |
| 21 | +- `igraph_rooted_product()` computes the rooted graph product (experimental function). Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2793! |
| 22 | +- `igraph_mycielskian()` (experimental function) and `igraph_mycielski_graph()` compute a Mycielski transformation of a graph, and a Mycielski graph, respectively. Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2741! |
| 23 | +- `igraph_path_graph()` is a convenience wrapper for `igraph_ring()` with `circular=false`. |
| 24 | +- `igraph_cycle_graph()` is a convenience wrapper for `igraph_ring()` with `circular=true`. |
| 25 | +- `igraph_site_percolation()`, `igraph_bond_percolation()` and `igraph_edgelist_percolation()` compute the evolution of the size of the giant component of a graph when vertices (site percolation) or edges (bond percolation) are added one by one in a given order (experimental functions). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2778! |
| 26 | +- `igraph_invert_permutation()` inverts a permutation stored in an integer vector. |
| 27 | +- `igraph_is_vertex_coloring()` and `igraph_is_edge_coloring()` check if a vertex or edge coloring is valid, i.e. whether adjacent vertices/edges always have distinct colors (experimental functions). Thanks to Sarah Rashidi @its-serah for contributing this in #2807! |
| 28 | +- `igraph_is_bipartite_coloring()` checks if a bipartite type assignment is valid, i.e. whether adjacent vertices always have different types (experimental function). Thanks to Sarah Rashidi @its-serah for contributing this in #2807! |
| 29 | +- `igraph_rich_club_sequence()` calculates how the density of a graph changes as vertices are removed (experimental function). Thanks to Zara Zong @minifinity for contributing this in #2740! |
| 30 | + |
| 31 | +### Changed |
| 32 | + |
| 33 | +- `igraph_bipartite_game_gnp()` can now generate graphs with more than a hundred million vertices. Thanks to Dev Lohani @devlohani99 for implementing this in #2767! |
| 34 | +- `igraph_reindex_membership()` now supports arbitrary cluster indices. Previously, it would error when indices are not within `0 .. n-1` where `n` is the membership vector length. |
| 35 | +- `igraph_modularity()` now supports arbitrary cluster indices. However, ensuring that cluster indices are within the range `0 .. n-1`, where `n` is the vertex count, allows for better performance. |
| 36 | + |
| 37 | +### Fixed |
| 38 | + |
| 39 | +- Fix failure in SIR simulation due to roundoff errors creating slightly negative rates. |
| 40 | +- Fix infinite coordinates for certain path graphs with `igraph_layout_kamada_kawai_3d()`. |
| 41 | +- `igraph_community_leiden()` did not iterate until the partition ceased to change when `n_iterations < 0`. Thanks to Lucas Lopes Felipe @lucaslopes for fixing this in #2799! |
| 42 | +- The widest path functions `igraph_widest_path_widths_floyd_warshall()`, `igraph_widest_path_widths_dijkstra()`, `igraph_get_widest_paths()`, and `igraph_get_widest_path()` incorrectly ignored edges with positive infinite width. Now they ignore edges with negative infinite width. |
| 43 | +- `igraph_cliques_callback()` would sometimes fail to respect a request to stop (i.e. returning `IGRAPH_STOP`) from the callback. This is now corrected. |
| 44 | +- `igraph_hypercube()` now validates the hypercube dimension and prevents negative values. |
| 45 | +- `igraph_sparsemat_view()` checks for out-of-memory conditions. |
| 46 | +- Fix assertion error when stopping search early in `igraph_simple_cycles_callback()` by returning `IGRAPH_STOP` from the callback. |
| 47 | + |
| 48 | +### Deprecated |
| 49 | + |
| 50 | +- `igraph_sparsemat()` and `igraph_weighted_sparsemat()` are now deprecated; their functionality is duplicated by `igraph_get_adjacency_sparse()`. They will be removed in version 1.0. |
| 51 | +- `igraph_convex_hull()` is deprecated in favour of `igraph_convex_hull_2d()` and scheduled for removal in 1.0. |
| 52 | + |
| 53 | +### Other |
| 54 | + |
| 55 | +- Documentation improvements, including a new glossary. |
| 56 | +- Simple cycle search (`igraph_simple_cycles()` and `igraph_simple_cycles_callback()`) is sped up by skipping cycle search from some redundant start vertices. Thanks to Tim Bernhard @GenieTim for contributing this improvement in #2714! |
| 57 | +- `igraph_realize_degree_sequence()` is significantly sped up for simple undirected graphs, and now has near-linear complexity for this case. Thanks to Zara Zong @ minifinity for implementing this in #2786! |
0 commit comments