Library for the analysis of networks
igraph_girth()
no longer fails when the graph has no cycles and the girth
parameter is set to NULL
.igraph_write_graph_gml()
did not respect entity encoding options when writing the Creator
line.igraph_asymmetric_preference_game()
, igraph_vs_copy()
and igraph_es_copy()
.igraph_barabasi_game()
and igraph_barabasi_aging_game()
when passing in negative degree exponents.igraph_write_graph_leda()
can now write boolean attributes.igraph_reverse_edges()
reverses the specified edges in the graph while preserving all attributes.IGRAPH_ARPACK_PROD
error code is no longer used. Instead, the specific error encountered while doing matrix multiplication is reported.<
or "
still work.igraph_local_scan_1_ecount()
when the graph was directed but the mode was IGRAPH_ALL
and some nodes had loop edges. See issue #2092.igraph_local_scan_neighborhood_ecount()
when the graph was undirected.igraph_pagerank()
with the ARPACK method and igraph_hub_score()
/ igraph_authority_score()
could return incorrect results. The problem could be detected by checking that the returned eigenvalue is not negative. See issue #2090.igraph_permute_vertices()
now checks for out-of-range indices and duplicates in the permutation vector.igraph_create()
now checks for non-finite vertex indices in the edges vector.igraph_eigenvector_centrality()
would return incorrect scores when some weights were negative.igraph_es_seq()
and igraph_ess_seq()
did not include the to
vertex in the sequence.igraph_eit_create()
and igraph_vit_create()
now check that all edge/vertex indices are in range when creating iterators from sequence-type selectors.igraph_grg_game()
now validates its arguments.igraph_layout_drl()
and its 3D version now validate their inputs.igraph_layout_kamada_kawai()
, igraph_layout_fruchterman_reingold()
, igraph_layout_drl()
, as well as their 3D versions now check for non-positive weights.igraph_asymmetric_preference_game()
interpreted its type_dist_matrix
argument incorrectly.igraph_community_spinglass()
for null and singleton graphs.igraph_layout_gem()
does not crash any more for graphs with only a single vertex.igraph_bridges()
no longer uses recursion and thus is no longer prone to stack overflow.igraph 0.10.0-rc.1, the first release candidate of igraph 0.10.0 is now available for download. We decided to go for a release candidate because there are lots of breaking changes in igraph 0.10.0 compared to previous versions, and we would like to gather some feedback from the community before going forward.
The release notes posted here summarize the changes between 0.10.0-rc.1 and 0.10.0-rc.2 only; please refer to the release notes of 0.10.0-rc.1 for a general understanding of what will change between 0.9 and 0.10 and why.
igraph_dyad_census()
now uses igraph_real_t
instead of igraph_integer_t
for its output arguments, and it no longer returns -1 when overflow occurs.
igraph_girth()
now uses igraph_real_t
as the return value so we can return infinity for graphs with no cycles (instead of zero).
igraph_sparsemat_is_symmetric()
now returns an error code and the result itself is provided in an output argument.
Documentation updates and build infrastructure fixes.
igraph 0.10.0-rc.1, the first release candidate of igraph 0.10.0 is now available for download. We decided to go for a release candidate because there are lots of breaking changes in igraph 0.10.0 compared to previous versions, and we would like to gather some feedback from the community before going forward.
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.
Some of the highlights are:
A consistent use of igraph_integer_t
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.
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.
As there are numerous breaking changes in this release, please read the changelog (CHANGELOG.md
) carefully and pay special attention to the "Breaking changes" section.
igraph_community_walktrap()
now uses double precision floating point operations internally instead of single precision.igraph_community_leiden()
, the nb_clusters
output parameter is now optional (i.e. it can be NULL
).igraph_read_graph_graphml()
no longer attempts to temporarily set the C locale, and will therefore not work correctly if the current locale uses a decimal comma.igraph_community_walktrap()
would return an invalid modularity
vector when the merges
matrix was not requested.igraph_community_walktrap()
would return a modularity
vector that was too long for disconnected graphs. This would cause a failure in some weighted graphs when the membership
vector was requested.igraph_community_walktrap()
now checks the weight vector: only non-negative weights are accepted, and all vertices must have non-zero strength.igraph_community_walktrap()
now returns a modularity score of NaN for graphs with no edges.igraph_community_fast_greedy()
now returns a modularity score of NaN for graphs with no edges.igraph_community_edge_betweenness()
now returns a modularity vector with a single NaN entry for graph with no edges. Previously it returned a zero-length vector.igraph_community_leading_eigenvector()
does not ignore non-ARPACK-related errors from igraph_arpack_rssolve()
any more.igraph_preference_game()
now works correctly when fixed_size
is true and type_dist
is not given; earlier versions had a bug where more than half of the vertices mistakenly ended up in group 0.igraph_hrg_fit()
when using start=1
.igraph_write_graph_dot()
now outputs NaN values unchanged.igraph_write_graph_dot()
no longer produces invalid DOT files when empty string attributes are present.igraph_layout_fruchterman_reingold()
and igraph_layout_kamada_kawai()
, as well as their 3D versions, did not respect vertex coordinate bounds (xmin
, xmax
, etc.) when minimum values were large or maximum values were small. This is now fixed.igraph_layout_kamada_kawai()
and igraph_layout_kamada_kawai_3d()
) are chosen to be more in line with the original publication, improving the stability of the result. See issue #963. This changes the output of the function for the same graph, compared with previous versions. To obtain the same layout, initialize coordinates with igraph_layout_circle()
(in 2D) or igraph_layout_sphere()
(in 3D).igraph_layout_fruchterman_reingold()
and its 3D version. This fixes using the "grid" variant of the algorithm on disconnected graphs.igraph_sumtree_search()
would consider search interval opens on the left and closed on the right, contrary to the documentation. This is now corrected to closed on the left and open on the right. In some cases this lead to a zero-weight element being returned for a zero search value. See issue #2080.igraph_bfs()
when an empty roots
or restricted
vector was provided.igraph_diversity()
now returns 0 for degree-1 vertices. Previously it incorrectly returned NaN or +-Inf depending on roundoff errors.igraph_community_walktrap()
does not crash any more when provided with
modularity=NULL
and membership=NULL
.igraph_get_all_shortest_paths_dijsktra()
now uses tolerances when comparing path lengths, and is thus robust to numerical roundoff errors.igraph_vector_*_swap
and igraph_matrix_swap
now take O(1) instead of O(n) and accept all sizes.igraph_vector_init()
no longer accepts negative vector sizes.igraph_assortativity_nominal()
crashed on the null graph.igraph_rng_get_integer()
and RNG_INTEGER()
were incorrect, one larger than they should have been.igraph_community_walktrap()
now checks its steps
input argument.igraph_community_walktrap()
was incorrect (it was always zero). This is now fixed.igraph_correlated_game()
would return incorrect results, or exhaust the memory, for most input graphs that were not generated with igraph_erdos_renyi_game_gnp()
.igraph_isoclass()
, igraph_isoclass_subgraph()
, igraph_isoclass_create
) and motif finder functions (igraph_motifs_randesu()
, igraph_motifs_randesu_estimate()
, igraph_motifs_randesu_callback()
) now
support undirected (sub)graphs of sizes 5 and 6. Previsouly only sizes 3 and 4 were supported.abort()
from vendored libraries, which could unexpectedly shut down the host language of igraph's high-level interfaces.igraph_community_label_propagation()
no longer leaves any vertices unlabeled when they were not reachable from any labeled ones, i.e. the returned membership vector is guaranteed not to contain negative values (#1853).igraph_cmp_epsilon()
that resulted in incorrect results for edge betweenness calculations in certain rare cases with x87 floating point math when LTO was also enabled (#1894).igraph_erdos_renyi_game_(gnm|gnp)
would not produce self-loops for the singleton graph.igraph_local_efficiency()
that sometimes erroneously reported zero as the local efficiency of a vertex in directed graphs.igraph_vector_update()
(and its type-specific variants) did not check for memory allocation failure.igraph_is_tree()
has improved performance and memory usage.igraph_is_connected()
has improved performance when checking weak connectedness.igraph_maximal_cliques()
and related functions.plfit
package was updated to 0.9.3.plfit
instead of the vendored one.igraph_reindex_membership()
does not allow negative membership indices any more.
igraph_rewire_directed_edges()
now generates multigraphs when edge directions are ignored, to make it consistent with the directed case.
Fixed a bug in igraph_gomory_hu_tree()
that returned only the equivalent flow tree instead of the cut tree (#1810).
Fixed a bug in the IGRAPH_TO_UNDIRECTED_COLLAPSE
mode of igraph_to_undirected()
that provided an incorrect merge vector to the attribute handler, leading to problems when edge attributes were merged using an attribute combination (#1814).
Fixed the behaviour of the IGRAPH_ENABLE_LTO
option when it was set to AUTO
; earlier versions had a bug where AUTO
simply checked whether LTO is supported but then did not use LTO even if it was supported.
When using igraph from a CMake project, it is now checked that the project has the C++ language enabled. This is necessary for linking to igraph with CMake.
Improved the root selection method for disconnected graphs in the Reingold-Tilford layout (#1836). The new root selection method provides nicer results if the graph is not a tree, although it is still recommended to use the Sugiyama layout instead, unless the input graph is almost a tree, in which case Reingold-Tilfold may still be preferred.
igraph_decompose()
is now much faster for large graphs containing many isolates or small components (#960).
igraph_largest_cliques()
and igraph_clique_number()
were re-written to use igraph_maximal_cliques_callback()
so they are much faster now (#804).
The vendored GLPK has been upgraded to GLPK 5.0.
Documentation improvements.