Igraph Versions Save

Library for the analysis of networks

0.10.1

1 year ago

Fixed

  • Corrected a regression (compared to igraph 0.9) in weighted clique search functions.
  • 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.
  • Fixed potential memory leak on out-of-memory condition in igraph_asymmetric_preference_game(), igraph_vs_copy() and igraph_es_copy().
  • Fixed an assertion failure in igraph_barabasi_game() and igraph_barabasi_aging_game() when passing in negative degree exponents.
  • Fixed a compilation failure with some old Clang versions.

Changes

  • igraph_write_graph_leda() can now write boolean attributes.

Other

  • Support for ARM64 on Windows.
  • Documentation improvements.

0.10.0

1 year ago

0.9.10

1 year ago

Added

  • igraph_reverse_edges() reverses the specified edges in the graph while preserving all attributes.

Changed

  • The IGRAPH_ARPACK_PROD error code is no longer used. Instead, the specific error encountered while doing matrix multiplication is reported.
  • XML external entities are not resolved any more when parsing GraphML files to prevent XML external entity injection (XXE) attacks. Standard XML entities like < or " still work.

Fixed

  • Fixed incorrect results from 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.
  • Fixed incorrect counting of self-loops in igraph_local_scan_neighborhood_ecount() when the graph was undirected.
  • In some rare edge cases, 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.
  • Fixed incorrect result of 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.
  • Include paths of dependent packages would be specified incorrectly in some environments.

0.10.0-rc.2

1 year ago

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.

Fixed

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

0.10.0-rc.1

1 year ago

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.

0.9.9

1 year ago

Changed

  • igraph_community_walktrap() now uses double precision floating point operations internally instead of single precision.
  • In 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.

Fixed

  • 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.
  • Fixed a memory leak in 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.
  • The initial coordinates of the Kamada-Kawai layout (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).
  • Improved numerical stability in Kamada-Kawai layout.
  • Corrected a problem in the calculation of displacements in 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.

Other

  • Documentation improvements.

0.9.8

2 years ago

Fixed

  • Assertion failure in 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.

Other

  • Documentation improvements.

0.9.7

2 years ago

Changed

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

Fixed

  • NCOL and LGL format writers no longer accept "name" and "weight" attributes of invalid types.
  • The LGL writer could not access numerical weight attributes, potentially leading to crashes.
  • External PLFIT libraries and their headers are now detected at their standard installation location.
  • igraph_vector_init() no longer accepts negative vector sizes.
  • igraph_assortativity_nominal() crashed on the null graph.
  • Label propagation now ensures that all labels are dominant.
  • Fixed incorrect partition results for walktrap algorithm (issue #1927)
  • Negative values returned by 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.
  • The first modularity value reported by 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().

Other

  • The C attribute handler now verifies attribute types when retrieving attributes.
  • Documentation improvements

0.9.6

2 years ago

Changed

  • Isomorphism class functions (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.

Fixed

  • igraph would not build with MinGW when using the vendored GLPK and enabling TLS.
  • Removed some uses of 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).
  • The Kamada-Kawai layout is now interruptible.
  • The Fruchterman-Reingold layout is now interruptible.
  • Fixed a bug in 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).
  • Weighted clique related functions now fall back to the unweighted variants when a null vertex weight vector is given to them.
  • igraph_erdos_renyi_game_(gnm|gnp) would not produce self-loops for the singleton graph.
  • Fixed a bug in 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.
  • Fixed a potential crash in the GraphML reader that would be triggered by some invalid GraphML files.

Other

  • igraph_is_tree() has improved performance and memory usage.
  • igraph_is_connected() has improved performance when checking weak connectedness.
  • Improved error handling in igraph_maximal_cliques() and related functions.
  • The build system now checks that GLPK is of a compatible version (4.57 or later).
  • The vendored plfit package was updated to 0.9.3.
  • You can now build igraph with an external plfit instead of the vendored one.
  • Documentation improvements.

0.9.5

2 years ago

Fixed

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

Other

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