Library for the analysis of networks
igraph_transitivity_barrat()
now returns an error code if the input graph has multiple edges (which is not handled correctly by the implementation yet).igraph_local_scan_k_ecount()
now handles loops correctly.igraph_transitivity_avglocal_undirected()
is no longer slower than igraph_transitivity_local_undirected()
.IGRAPH_OPENMP_SUPPORT=OFF
at configuration time to disable this.igraph_get_incidence()
no longer reads and writes out of bounds when given a non-bipartite graph, but gives a warning and ignores edges within a part.igraph_dyad_census()
no longer reports an overflow on singleton graphs, and handles loops and multigraphs correctly. Undirected graphs are handled consistently and will no longer give a warning.igraph_vector_lex_cmp()
and igraph_vector_colex_cmp()
dereferenced their arguments only once instead of twice, and therefore did not work with igraph_vector_ptr_sort()
.igraph_maximal_cliques_subset()
and igraph_transitivity_barrat()
corrupted the error handling stack ("finally stack") under some circumstances.CMAKE_INSTALL_LIBDIR
. This only affected Linux distributions which install into lib64
or other locations instead of lib
.libm
) when this is not necessary._CRT_SECURE_NO_WARNINGS
is now defined during compilation to enable compatibility with UWP.MSYS Makefiles
CMake generator was used. Some source files in igraph were renamed as a consequence, but these should not affect users of the library.igraph_rng_min()
is now deprecated; assume a constant zero as its return value if you used this function in your own code.find_package(igraph)
to find igraph and detect the appropriate compilation options for projects that link to it.CMAKE_INSTALL_<dir>
variables were absolute paths.libigraph.so.0.0.0
, as it used to be for igraph 0.8 and earlier.igraph_get_shortest_paths_dijkstra()
and igraph_get_shortest_paths_bellman_ford()
that returned incorrect results for unreachable vertices.igraph_vector_lex_cmp()
and igrapg_vector_colex_cmp()
for lexicographic
and colexicographic comparison of vectors. These functions may also be used
for sorting.igraph_community_multilevel()
is now randomized (PR #1696, thanks to Daniel Noom).CMAKE_INSTALL_LIBDIR
, were not respected.igraph_subcomponent()
, igraph_stack_ptr_free_all()
, igraph_stack_ptr_destroy_all()
, igraph_status_handler_stderr()
, igraph_progress_handler_stderr()
.igraph_rngtype_mt19937
, igraph_rngtype_rand
, igraph_rngtype_glibc2
) were not exported from the shared library.igraph_layout_graphopt()
no longer rounds the spring_length
parameter to an integer.igraph_get_all_shortest_paths_dijkstra()
no longer modifies the res
vector's item destructor.igraph_get_shortest_path_bellman_ford()
did not work correctly when calculating paths to all vertices.igraph_arpack_rnsolve()
checks its parameters more carefully.igraph_community_to_membership()
does not crash anymore when csize
is requested but membership
is not.igraph_citing_cited_type_game()
: fixed memory leaks (PR #1700, thanks to Daniel Noom).igraph_transitivity_undirected()
, igraph_transitivity_avglocal_undirected()
and igraph_transitivity_barrat()
no longer trigger an assertion failure when used with the null graph (PRs #1709, #1710).igraph_(personalized_)pagerank()
would return incorrect results for weighted multigraphs with fewer than 128 vertices when using IGRAPH_PAGERANK_ALGO_PRPACK
.igraph_diversity()
now checks its input more carefully, and throws an error when the input graph has multi-edges or is directed.igraph_shortest_paths_johnson()
would return incorrect results when the to
argument differed from from
(thanks to Daniel Noom).igraph_is_graphical()
would fail to set the result variable for certain special degree sequences in the undirected simple graph case.PATH
was sometimes not set correctly, causing the tests to fail (PR #1692).bison
and flex
.arith.h
header for f2c when cross-compiling; see the Installation section of the documentation.IGRAPH_ENABLE_LTO
build option now supports the AUTO
value, which uses LTO only if the compiler supports it. Warning: CMake may not always be able to detect that LTO is not fully supported. Therefore, the default setting is OFF
.igraph_grg_game()
, igraph_sbm_game()
, igraph_barabasi_game()
, igraph_barabasi_aging_game()
.igraph_feedback_arc_set()
and igraph_community_optimal_modularity()
are now interruptible.-Wno-varargs
flag.igraph_is_eulerian()
finds out whether an Eulerian path/cycle exists.igraph_eulerian_path()
returns an Eulerian path.igraph_eulerian_cycle()
returns an Eulerian cycle.igraph_global_efficiency()
computes the global efficiency of a network.igraph_local_efficiency()
computes the local efficiency around each vertex.igraph_average_local_efficiency()
computes the mean local efficiency.igraph_is_graphical()
checks if a degree sequence has a realization as a simple or multigraph, with or without self-loops.igraph_is_bigraphical()
checks if two degree sequences have a realization as a bipartite graph.igraph_realize_degree_sequence()
now supports constructing non-simple graphs as well.igraph_set_fatal_handler()
sets the fatal error handler. It is the only function in this functionality group that is relevant to end users.IGRAPH_FATAL()
and the functions igraph_fatal()
and igraph_fatalf()
raise a fatal error. These are for internal use.IGRAPH_ASSERT()
is a replacement for the assert()
macro. It is for internal use.igraph_fatal_handler_abort()
is the default fatal error handler.IGRAPH_WARNINGF
, IGRAPH_ERRORF
and IGRAPH_FATALF
macros provide warning/error reporting with printf
-like syntax. (PR #1627, thanks to Daniel Noom!)igraph_average_path_length_dijkstra()
computes the mean shortest path length in weighted graphs (PR #1344).igraph_get_shortest_paths_bellman_ford()
computes the shortest paths (including the vertex and edge IDs along the paths) using the Bellman-Ford algorithm (PR #1642, thanks to Guy Rozenberg). This makes it possible to calculate the shortest paths on graphs with negative edge weights, which was not possible before with Dijkstra's algorithm.igraph_get_shortest_path_bellman_ford()
is a wrapper for igraph_get_shortest_paths_bellman_ford()
for the single path case.igraph_is_same_graph()
cheks that two labelled graphs are the same (PR #1604).igraph_harmonic_centrality()
computes the harmonic centrality of vertices.igraph_harmonic_centrality_cutoff()
computes the range-limited harmonic centrality._estimate
(PR #1583):
igraph_closeness_cutoff()
.igraph_betweenness_cutoff()
.igraph_edge_betweenness_cutoff()
.igraph_vector_is_any_nan()
checks if any elements of an igraph_vector_t
is NaN.igraph_inclist_size()
returns the number of vertices in an incidence list.igraph_lazy_adjlist_size()
returns the number of vertices in a lazy adjacency list.igraph_lazy_inclist_size()
returns the number of vertices in a lazy incidence list.igraph_bfs_simple()
now provides a simpler interface to the breadth-first search functionality.igraph_adjlist_init()
and igraph_lazy_adjlist_init()
now require the caller to specify what to do with loop and multiple edges.igraph_inclist_init()
and igraph_lazy_inclist_init()
now require the caller to specify what to do with loop edges.igraph_vector_int_t
consistently.igraph_community_multilevel()
: added resolution parameter.igraph_community_fluid_communities()
: graphs with no vertices or with one vertex only are now supported; they return a trivial partition.igraph_modularity()
and igraph_modularity_matrix()
: added resolution parameter.igraph_modularity()
and igraph_modularity_matrix()
now support the directed version of modularity.igraph_modularity()
returns NaN for graphs with no edges to indicate that the modularity is not well-defined for such graphs.cutoff=0
is no longer interpreted as infinity (i.e. no cutoff) in betweenness
, edge_betweenness
and closeness
. If no cutoff is desired, use a negative value such as cutoff=-1
.nobigint
argument has been removed from igraph_betweenness()
, igraph_betweenness_estimate()
and igraph_centralization_betweenness()
, as it is not longer needed. The current implementation is more accurate than the old one using big integers.igraph_closeness()
now considers only reachable vertices during the calculation (i.e. the closeness is calculated per-component in the undirected case) (PR #1630).igraph_closeness()
gained two additional output parameters, reachable_count
and all_reachable
, returning the number of reached vertices from each vertex, as well as whether all vertices were reachable. This allows for computing various generalizations of closeness for disconnected graphs (PR #1630).igraph_pagerank()
, igraph_personalized_pagerank()
and igraph_personalized_pagerank_vs()
no longer support the IGRAPH_PAGERANK_ALGO_POWER
method. Their options
argument now has type igraph_arpack_options_t *
instead of void *
.igraph_average_path_length()
now returns the number of disconnected vertex pairs in the new unconn_pairs
output argument.igraph_diameter()
now return the result as an igraph_real_t
instead of an igraph_integer_t
.igraph_average_path_length()
and igraph_diameter()
now return IGRAPH_INFINITY
when unconn=FALSE
and the graph is not connected. Previously they returned the number of vertices.igraph_callaway_traits_game()
and igraph_establishment_game()
now have an optional output argument to retrieve the generated vertex types.igraph_callaway_traits_game()
and igraph_establishment_game()
now allow omitting the type distribution vector, in which case they assume a uniform distribution.igraph_asymmetric_preference_game()
now accept a different number of in-types and out-types.igraph_subisomorphic_lad()
now supports graphs with self-loops.igraph_is_chordal()
and igraph_maximum_cardinality_search()
now support non-simple graphs and directed graphs.igraph_realize_degree_sequence()
has an additional argument controlling whether multi-edges or self-loops are allowed.igraph_is_connected()
now returns false for the null graph; see https://github.com/igraph/igraph/issues/1538 for the reasoning behind this decision.igraph_lapack_ddot()
is renamed to igraph_blas_ddot()
.igraph_to_directed()
: added RANDOM and ACYCLIC modes (PR #1511).igraph_topological_sorting()
now issues an error if the input graph is not acyclic. Previously it issued a warning.igraph_vector_(which_)(min|max|minmax)()
now handles NaN elements.igraph_i_set_attribute_table()
is renamed to igraph_set_attribute_table()
.igraph_i_sparsemat_view()
is renamed to igraph_sparsemat_view()
.igraph_is_degree_sequence()
and igraph_is_graphical_degree_sequence()
are deprecated in favour of the newly added igraph_is_graphical()
.igraph_closeness_estimate()
is deprecated in favour of the newly added igraph_closeness_cutoff()
.igraph_betweenness_estimate()
and igraph_edge_betweenness_estimate()
are deprecated in favour of the newly added igraph_betweenness_cutoff()
and igraph_edge_betweenness_cutoff()
.igraph_adjlist_remove_duplicate()
and igraph_inclist_remove_duplicate()
are now deprecated in favour of the new constructor arguments in igraph_adjlist_init()
and igraph_inclist_init()
.igraph_adjedgelist_init()
, igraph_adjedgelist_destroy()
, igraph_adjedgelist_get()
, igraph_adjedgelist_print()
, igraph_adjedgelist_remove_duplicate()
.igraph_lazy_adjedgelist_init()
, igraph_lazy_adjedgelist_destroy()
, igraph_lazy_adjedgelist_get()
, igraph_lazy_adjedgelist_get_real()
.igraph_adjacent()
.igraph_es_adj()
.igraph_subgraph()
.igraph_pagerank_old()
, deprecated in 0.7, has been removed.igraph_vector_bool
and igraph_matrix_bool
functions that relied on inequality-comparing igraph_bool_t
values are removed.cutoff
parameter. This is corrected (PR #1630).igraph_layout_gem()
was not interruptible; now it is.igraph_barabasi_aging_game()
now checks its parameters more carefully.igraph_callaway_traits_game()
and igraph_establishment_game()
now check their parameters.igraph_lastcit_game()
checks its parameters more carefully, and no longer crashes with zero vertices (PR #1625).igraph_cited_type_game()
incorrectly rounded the attractivity vector entries to integers.igraph_residual_graph()
now returns the correct residual capacities; previously it wrongly returned the original capacities (PR #1598).igraph_psumtree_update()
now checks for negative values and NaN.igraph_communities_spinglass()
: fixed several memory leaks in the IGRAPH_SPINCOMM_IMP_NEG
implementation.igraph_incident()
now returns edges in the same order as igraph_neighbors()
.igraph_modularity_matrix()
returned incorrect results for weighted graphs. This is now fixed. (PR #1649, thanks to Daniel Noom!)igraph_lapack_dgetrf()
would crash when passing NULL
for its ipiv
argument (thanks for the fix to Daniel Noom).igraph_matrix
functions would fail to report errors on out-of-memory conditions.igraph_maxdegree()
now returns 0 for the null graph or empty vector set. Previously, it did not handle this case.igraph_vector_bool_all_e()
now considers all nonzero (i.e. "true") values to be the same.igraph_(personalized_)pagerank(_vs)()
now check their parameters more carefully.igraph_personalized_pagerank()
no longer modifies its reset
parameter.igraph_(personalized_)pagerank(_vs)
: the IGRAPH_PAGERANK_ALGO_ARPACK
method now handles self-loops correctly.igraph_personalized_pagerank(_vs)()
: the result retuned for edgeless or all-zero-weight graphs with the IGRAPH_PAGERANK_ALGO_ARPACK
ignored the personalization vector. This is now corrected.igraph_personalized_pagerank(_vs)()
with a non-uniform personalization vector, a disconnected graph and the IGRAPH_PAGERANK_ALGO_PRPACK
method would return results that were inconsistent with IGRAPH_PAGERANK_ALGO_ARPACK
. This happened because PRPACK always used a uniform reset distribution when the random walk got stuck in a sink vertex. Now it uses the user-specified reset distribution for this case as well.vector_min
being called on the zero-length weight vector).igraph_write_graph_pajek()
: the function now always uses the platform-native line endings (CRLF on Windows, LF on Unix and macOS). Earlier versions tried to enforce Windows line endings, but this was error-prone, and since all recent versions of Pajek support both line endings, enforcing Windows line endings is not necessary any more.igraph_layout_davidson_harel()
was not interruptible; now it is.igraph_i_cattribute_combine_vertices()
.This is the fourth bugfix release of the 0.8 series.
igraph_i_cattribute_combine_vertices()
: fixed invalid cleanup code that eventually filled up the "finally" stack when combining vertices with attributes extensively.igraph_hrg_sample()
: fixed incorrect function prototypeigraph_is_posinf()
and igraph_is_neginf()
: fixed incorrect result on platforms where the sign of the result of isinf()
is not indicative of the sign of the input.This is the third bugfix release of the 0.8 series.
igraph_vector_binsearch_slice()
performs binary search on a sorted slice of a vector.igraph_eigenvector_centrality()
assumes the adjacency matrix of undirected graphs to have twice the number of self-loops for each vertex on the diagonal. This makes the results consistent between an undirected graph and its directed equivalent when each edge is replaced by a mutual edge pair.igraph_isomorphic()
now verifies that the input graphs have no multi-edges (PR #1464).igraph_difference()
was creating superfluous self loops (#597).igraph_count_multiple()
was giving incorrect results for self-loops in directed graph (PR #1399).igraph_betweenness_estimate()
: fixed incorrect results with finite cutoff (PR #1392).igraph_eigen_matrix_symmetric()
: fixed incorrect matrix multiplication (PR #1379).igraph_realize_degree_sequence()
did not correctly detect some non-graphical inputs.igraph_is_graphical_degree_sequence()
: fixed incorrect results in undirected case (PR #1441).igraph_community_leiden()
: fixed incorrect result when self-loops are present (PR #1476).igraph_eigenvector_centrality()
: fixed incorrect value for isolated vertices in weighted graphs.igraph_eigenvector_centrality()
: corrected the handling of self-loops.igraph_layout_reingold_tilford()
: fixed an issue where branches of the tree would sometimes overlap.igraph_degree_sequence_game()
: improved performance with IGRAPH_DEGSEQ_SIMPLE_NO_MULTIPLE_UNIFORM
method.This is the second bugfix release of the 0.8 series.
igraph_all_st_mincuts()
and igraph_sir()
igraph_sir()
igraph_community_leiden()
: fixed crash when interruptingigraph_sir()
.This is the first bugfix release of the 0.8 series.
igraph_degree_sequence_game()
igraph_forest_fire_game()
igraph_community_edge_betweenness()
: fix for graphs with no edges (PR #1312)igraph_bridges()
now handles multigraphs correctly (PR #1335)igraph_avg_nearest_neighbor_degree()
: fix for memory leak in weighted case (PR #1339)igraph_community_leiden()
: fix crash bug (PR #1357)ACKOWLEDGEMENTS.md