Skip to content

Releases: igraph/igraph

igraph 1.0.0-rc1

31 Aug 21:12
780c73d
Compare
Choose a tag to compare
igraph 1.0.0-rc1 Pre-release
Pre-release

This is the first release candidate of the upcoming 1.0.0 igraph release. Some API changes are still expected in the next few days. The changelog posted here is merged from the changelogs of the master and develop branches, and it represents all the changes compared to the latest stable release (0.10.16). These changes will be repeated in the changelog of 1.0.0 when we are ready.

Breaking changes

This section gives detailed on breaking changes you need to consider when updating code written for igraph 0.10.x.

General changes

  • igraph now requires a C++ compiler that supports the C++14 standard.
  • igraph_setup() is now recommended to be called before using the library. This function may gain essential functions in the future. See below for details.
  • igraph_integer_t was renamed to igraph_int_t, but igraph_integer_t is kept as an alias and it will remain available for at least the next major version. Library headers and source code uses igraph_int_t from now on.
  • igraph_rng_set_default() now returns a pointer to the previous RNG. Furthermore, this function now only stores a pointer to the igraph_rng_t struct passed to it, instead of copying the struct. Thus the igraph_rng_t must continue to exist for as long as it is used as the default RNG.
  • Interruption handlers do not take a void* argument any more; this is relevant to maintainers of higher-level interfaces only.
  • Interruption handlers now return an igraph_bool_t instead of an igraph_error_t; the returned value must be true if the calculation has to be interrupted and false otherwise.
  • igraph_status(), igraph_statusf() and their macro versions (IGRAPH_STATUS() and IGRAPH_STATUSF()) do not convert error codes to IGRAPH_INTERRUPTED any more. Any error code returned from the status handler function is forwarded intact to the caller. If you want to trigger the interruption of the current calculation from the status handler without reporting an error, report IGRAPH_INTERRUPTED explicitly. It is the responsibility of higher-level interfaces to handle this error code appropriately.
  • The RNG_BEGIN() and RNG_END() macros were removed. You are now responsible for seeding the RNG before using any igraph function that may use random numbers by calling igraph_rng_seed(igraph_rng_default(), ...), or by simply ensuring that igraph_setup() was called before the first use of the library.

Error codes

  • The IGRAPH_EINVEVECTOR error code was removed; igraph_create() and igraph_add_edges() that used to return this error code for invalid edge vectors will now return IGRAPH_EINVAL instead.
  • The IGRAPH_NONSQUARE error code was removed; functions that used this error code now return IGRAPH_EINVAL instead when encountering a non-square matrix.
  • The IGRAPH_EGLP error code and all other GLP-specific error codes (starting with IGRAPH_GLP_) were removed; functions that used this error code now return IGRAPH_FAILURE instead, providing more details in the message associated to the error code.
  • The IGRAPH_ELAPACK error code was removed; functions that used this error code now return IGRAPH_FAILURE instead, providing more details in the message associated to the error code.
  • The IGRAPH_CPUTIME error code was removed in favour of the interruption mechanism built into igraph.
  • The unused IGRAPH_EDIVZERO and IGRAPH_EATTRIBUTES error codes were removed with no replacement.
  • The deprecated error code IGRAPH_ENEGLOOP was removed. Use IGRAPH_ENEGCYCLE instead. The underlying numerical value is the same as it was for IGRAPH_ENEGLOOP.
  • ARPACK-specific error codes (starting with IGRAPH_ARPACK_...) were replaced with a single IGRAPH_EARPACK error code. Details about the underlying ARPACK failure are provided in the error message.
  • A new error code called IGRAPH_EINVEID was added for cases when an invalid edge ID was encountered in an edge ID vector.

Core data structures

  • igraph_strvector_push_back_len() now takes a length parameter of size_t instead of igraph_integer_t.
  • igraph_strvector_print() no longer takes a file parameter. Use igraph_strvector_fprint() to print to a file.
  • igraph_vector_reverse() no longer returns an error code.
  • igraph_vector_shuffle() no longer returns an error code.
  • igraph_vector_swap() and igraph_matrix_swap() no longer return an error code.
  • igraph_vector_list_swap() and igraph_graph_list_swap() no longer return an error code.
  • igraph_vector_swap_elements() no longer returns an error code.
  • igraph_vector_list_swap_elements() and igraph_graph_list_swap_elements() no longer return an error code.
  • igraph_matrix_copy_to() gained an igraph_matrix_storage_t storage parameter that specifies whether the data should be written in column-major or row-major format.

Attribute handling

  • igraph_attribute_handler_t members that formerly took an untyped igraph_vector_ptr_t argument are now taking a typed igraph_attribute_record_list_t argument instead.
  • The deprecated IGRAPH_ATTRIBUTE_DEFAULT value of the igraph_attribute_type_t enum was removed.
  • The gettype member of igraph_attribute_table_t was renamed to get_type for sake of consistency with the naming scheme of other struct members.
  • Attribute table members that retrieve graph, vertex or edge attributes must not clear the incoming result vector any more; results must be appended to the end of the provided result vector instead.
  • The value member of igraph_attribute_record_t is now a union that can be used to formally treat the associated pointer as an igraph_vector_t *, igraph_strvector_t * or igraph_vector_bool_t *.

Core graph manipulation

  • igraph_delete_vertices_map() (formerly called igraph_delete_vertices_idx()) and igraph_induced_subgraph_map() now use -1 to represent unmapped vertices in the returned forward mapping vector and they do not offset vertex indices by 1 any more. (Note that the inverse map always behaved this way, this change makes the two mappings consistent).
  • igraph_edges() gained a new bycol argument that determines the order in which the edges are returned. bycol = false reproduces the existing behaviour, while bycol = true returns the edges suitable for a matrix stored in column-wise order.
  • igraph_neighbors() and igraph_vs_adj() gained two extra arguments to specify what to do with loop and multiple edges. This makes their interfaces consistent with igraph_adjlist_init().
  • igraph_incident() and igraph_es_incident() gained an extra arguments to specify what to do with loop edges. This makes their interfaces consistent with igraph_inclist_init().
  • igraph_multiple_t was removed from the public API as it is essentially a boolean. The symbolic constants IGRAPH_MULTIPLE and IGRAPH_NO_MULTIPLE were kept to improve readability of code written directly in C.

Basic graph properties

  • igraph_density() now takes an optional weights parameter.
  • igraph_is_simple() gained an extra igraph_bool_t argument that decides whether edge directions should be considered. Directed graphs with a mutual edge pair are treated as non-simple if this argument is set to IGRAPH_UNDIRECTED (which treats the graph as if it was undirected).
  • The type of the loops argument of igraph_adjlist_init_complementer(), igraph_centralization_degree(), igraph_centralization_degree_tmax(), igraph_degree(), igraph_maxdegree(), igraph_sort_vertex_ids_by_degree() and igraph_strength() was changed to igraph_loops_t from igraph_bool_t, allowing finer-grained control about how loop edges are treated.
  • igraph_get_biadjacency() now takes a weights parameter, and can optionally create weighted biadjacency matrices.
  • igraph_adjacency() now treats IGRAPH_LOOPS_TWICE as IGRAPH_LOOPS_ONCE when the mode is IGRAPH_ADJ_DIRECTED, IGRAPH_ADJ_UPPER or IGRAPH_ADJ_LOWER. For directed graphs, this is for the sake of consistency with the rest of the library where IGRAPH_LOOPS_TWICE is considered for undirected graphs only. For the "upper" and "lower" modes, double-counting the diagonal makes no sense because the double-counting artifact appears when you add the transpose of an upper (or lower) diagonal matrix on top of the matrix itself. See Github issue #2501 for more context.

Graph generators

  • igraph_barabasi_game(), igraph_barabasi_aging_game(), igraph_recent_degree_game() and igraph_recent_degree_aging_game() no longer interprets an empty outseq vector as a missing out-degree sequence. Pass NULL if you don't wish to specify an out-degree sequence.
  • igraph_degree_sequence_game() no longer interprets an empty in-degree vector as a request for generating undirected graphs. To generate undirected graphs, pass NULL for in-degrees.
  • igraph_lcf() was renamed to igraph_lcf_small() and igraph_lcf_vector() was renamed to igraph_lcf(). Now igraph_lcf() takes shifts as a vector input, while igraph_lcf_small() accepts a shorthand notation where shifts are given as a variable number of function arguments.
  • igraph_sbm_game() uses an igraph_edge_type_sw_t allowed_edge_types parameter instead of igraph_bool_t loops and supports generating graphs with mutli-edges. The parameter determining the total number of vertices (n) was removed as it was redundant.
  • igraph_rewire_edges() uses an igraph_edge_type_sw_t allowed_edge_types parameter instead of loops and multiple.
  • igraph_watts_strogatz_game() uses an igraph_edge_type_sw_t allowed_edge_types parameter instead of loops and multiple.
  • igraph_static_fitness_game() uses an igraph_edge_type_sw_t allowed_edge_types parameter instead of loops and multiple.
  • igraph_static_power_law_game() uses an igraph_edge_type_sw_t allowed_edge_types parame...
Read more

igraph 0.10.16

10 Jun 23:45
beebfcd
Compare
Choose a tag to compare

Added

  • igraph_count_triangles() counts undirected triangles in a graph.
  • igraph_count_adjacent_triangles() (rename of igraph_adjacent_triangles()).
  • igraph_rng_get_bool() and RNG_BOOL() produce a single random boolean.
  • igraph_product() computes various kinds of graph products of two graphs. Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2748!

Changed

  • igraph_neighborhood_size(), igraph_neighborhood() and igraph_neighborhood_graphs() now accept a negative order value and interpret it as infinite order. Previously, a negative order value was disallowed.
  • igraph_famous() now accepts Groetzsch as an alias of Grotzsch.
  • igraph_vertex_path_from_edge_path() can now determine the start vertex automatically.

Fixed

  • igraph_largest_independent_vertex_sets() and igraph_maximal_independent_vertex_sets() would sometimes return incorrect results for graphs with self-loops. This is now corrected.
  • igraph_vertex_path_from_edge_path() now validates the start vertex.
  • Fixed a memory leak in the GraphML parser for cases when the id attribute was specified multiple times within the same XML tag.

Deprecated

  • The undocumented function igraph_vector_sumsq() is deprecated. Use igraph_blas_dnrm2() to compute the Euclidean norm of real vectors.
  • igraph_adjacent_triangles() is deprecated and scheduled for removal in 1.0.
  • igraph_deterministic_optimal_imitation(), igraph_moran_process(), igraph_roulette_wheel_imitation() and igraph_stochastic_imitation() are now deprecated and scheduled for removal in 1.0.
  • igraph_rng_get_dirichlet() is deprecated and scheduled for removal in 1.0. Its interface is inconsistent with the other igraph_rng_get_...() functions and we have a replacemenet for it in igraph_sample_dirichlet(). igraph 1.0 will gain an igraph_rng_sample_dirichlet() function that lets the caller pass in an igraph_rng_t instance as well.

Other

  • Workaround for bug in CMake 3.31.0, see https://gitlab.kitware.com/cmake/cmake/-/issues/26449
  • Updated the vendored plfit library to version 1.0.0. This works around a bug in some MSVC / Windows SDK versions that define a NAN macro that is not a compile-time constant.
  • Updated vendored BLAS to 3.12.0 and vendored ARPACK to ARPACK-NG 3.7.0.
  • Re-translated vendored BLAS/LAPACK/ARPACK sources with f2c version 20240504.
  • The performance of igraph_transitivity_undirected() is improved by a factor of about 2.5.
  • The performance of igraph_degree_sequence_game() is improved when using IGRAPH_DEGSEQ_CONFIGURATION_SIMPLE.
  • Documentation improvements and fixes.

igraph 0.10.15

06 Nov 10:12
635b432
Compare
Choose a tag to compare

Added

  • igraph_bitset_update() copies the contents of one bitset into another (experimental function).
  • igraph_vector_sort_ind() (rename of igraph_vector_qsort_ind()).
  • igraph_vector_contains_sorted() (rename of igraph_vector_binsearch2()).
  • igraph_vector_reverse_section() reverses a contiguous section of a vector.
  • igraph_vector_rotate_left() applies a cyclic permutation to a vector.
  • igraph_strvector_swap_elements() swaps two strings in an igraph_strvector_t.
  • igraph_find_cycle() finds a single cycle in a graph, if it exists (experimental function).
  • igraph_feedback_vertex_set() finds a minimum feedback vertex set in a directed or undirected graph (experimental function).
  • igraph_simple_cycles() and igraph_simple_cycles_callback() find all simple cycles in a graph, optionally with an upper bound on the cycle length (experimental functions). Many thanks to Tim Bernhard @GenieTim for contributing this functionality in #2181.

Changed

  • igraph_feedback_arc_set() uses a much faster method for solving the exact minimum feedback arc set problem. The new method (IGRAPH_FAS_EXACT_IP_CG) is used by default (i.e. with IGRAPH_FAS_EXACT_IP), but the previous method is also kept available (IGRAPH_FAS_EXACT_IP_TI).
  • igraph_motifs_randesu(), igraph_motifs_randesu_callback(), igraph_motifs_randesu_estimate() and igraph_motifs_randesu_no() now accept NULL for their cut_prob parameter, signifying that a complete search should be performed.
  • igraph_centralization_eigenvector_centrality_tmax() and igraph_centralization_eigenvector_centrality() cannot produce meaningful results without normalizing vertex-level eigenvector centrality in a well-defined way. This was not the case when using scale=false. These functions now ignore the value of the scale parameter and always scale vertex-level centrality scores to have a maximum of 1. If you require a different type of normalization for the vertex-level eigenvector centrality scores, perform this normalization manually, and call igraph_centralization() to compute the centralization.
  • When igraph_eigenvector_centrality() receives a directed acyclic graph as input, it now produces an eigenvector which has 1s in sink vertices and 0s everywhere else. Previously, it would return an all-zero vector. Note that eigenvector centrality is not uniquely defined for graphs that are not (strongly) connected, and both of these results can be considered valid. This change is to ensure consistency with the definition of the theoretical maximum of eigenvector centralization, which assumes the in-star to be the most centralized directed network.

Fixed

  • igraph_layout_drl() and igraph_layout_drl_3d() would crash with an assertion failure when interrupted. This is now fixed.
  • Removed broken interruption support from igraph_community_spinglass_single().
  • In rare cases igraph_community_multilevel() could enter an infinite loop. This is now corrected.
  • Fixed null-dereference in igraph_community_voronoi() when requesting modularity but not membership.
  • Fixed null-dereference in igraph_community_optimal_modularity() when requesting modularity but not membership and passing a null graph or singleton graph.
  • igraph_layout_umap() and igraph_layout_umap_3d() would crash when passing distances=NULL and distances_are_weights=true. This is now fixed.
  • igraph_layout_umap() and igraph_layout_umap_3d() would crash on interruption. This is now fixed.
  • igraph_read_graph_pajek() now warns about duplicate vertex IDs in input files.
  • The documented igraph_strvector_resize_min() was missing from headers.
  • igraph_feedback_arc_set() now validates the edge weights.
  • igraph_layout_lgl() was not working correctly since igraph 0.10.0 due to a poor choice of initial coordinates. This is now fixed.
  • igraph_centralization_degree_tmax(), igraph_centralization_betweenness_tmax(), igraph_centralization_closeness_tmax(), and igraph_centralization_eigenvector_centrality_tmax() now validate their nodes parameter.
  • igraph_centralization_degree_tmax(), igraph_centralization_betweenness_tmax(), igraph_centralization_closeness_tmax(), and igraph_centralization_eigenvector_centrality_tmax() now return NaN for zero-vertex graphs. Previously they would return invalid values.
  • igraph_centralization_eigenvector_centrality_tmax() now returns 0 for the undirected singleton graph. Previous it would return an invalid value.
  • igraph_motifs_randesu_estimate() now validates the sample size.
  • igraph_bipartite_projection_size() now validates the bipartite types vector.

Deprecated

  • igraph_minimum_spanning_tree_prim() and igraph_minimum_spanning_tree_unweighted() are deprecated. Use igraph_minimum_spanning_tree() in conjunction with igraph_subgraph_from_edges() instead.
  • igraph_array3_t and all associated functions are deprecated and scheduled for removal in igraph 1.0.
  • igraph_vector_qsort_ind() is deprecated in favour of igraph_vector_sort_ind().
  • igraph_vector_binsearch2() is deprecated in favour of igraph_vector_contains_sorted().

Other

  • Fixed multiple memory leaks in benchmark programs.
  • Documentation improvements.

igraph 0.10.13

28 Jun 06:50
e1d48f8
Compare
Choose a tag to compare

Added

  • igraph_bitset_fill() sets all elements of a bitset to the same value (experimental function).
  • igraph_bitset_null() clears all elements of a bitset (experimental function).
  • igraph_bitset_is_all_zero(), igraph_bitset_is_all_one(), igraph_bitset_is_any_zero(), igraph_bitset_is_any_one() check if any/all elements of a bitset are zeros/ones (experimental functions).
  • igraph_chung_lu_game() implements the classic Chung-Lu model, as well as a number of its variants (experimental function).
  • igraph_mean_degree() computes the average of vertex degrees (experimental function).
  • igraph_count_loops() counts self-loops in the graph (experimental function).
  • igraph_is_clique() checks if all pairs within a set of vertices are connected (experimental function).
  • igraph_is_independent_vertex_set() checks if no pairs within a set of vertices are connected (experimental function).
  • igraph_hypercube() creates a hypercube graph (experimental function).
  • igraph_vector_intersection_size_sorted() counts elements common to two sorted vectors (experimental function).
  • igraph_stack_capacity() returns the allocated capacity of a stack.
  • igraph_vector_is_all_finite() checks if all elements in a vector are finite (i.e. neither NaN nor Inf).

Fixed

  • Fixed a bug that incorrectly cached that a graph has no multiple edges when igraph_init_adjlist() was called with IGRAPH_NO_LOOPS and IGRAPH_NO_MULTIPLE and all the multi-edges were loop edges.
  • igraph_is_forest() would fail to set the result variable when testing for a directed forest, and it was already cached that the graph was not an undirected forest.
  • igraph_hub_and_authority_scores() no longer clips negative results to zeros when negative weights are present.
  • Fixed an assertion failure in igraph_realize_bipartite_degree_sequence() with some non-graphical degree sequences when requesting simple bipartite graphs.
  • igraph_static_fitness_game() checks the input more carefully, and avoids an infinite loop in rare edge cases, such as when (almost) all fitness scores are zero.
  • igraph_arpack_rnsolve() used the incorrect error message text for some errors. This is now corrected.
  • Corrected the detection of some MSVC-specific bitset intrinsics during configuration.
  • Corrected a bug in the fallback implementation of igraph_bitset_countl_zero() when IGRAPH_INTEGER_SIZE was set to 32. This fallback implementation was not used with GCC, Clang, or MSVC.

Changed

  • igraph_is_graphical() and igraph_is_bigraphical() are now linear-time in all cases, and generally several times faster than before (thanks to @gendelpiekel, contributed in #2605).
  • igraph_erdos_renyi_game_gnp() can now generate graphs with more than a hundred million vertices.
  • igraph_hub_and_authority_scores() now warns when negative edge weights are present.
  • igraph_layout_lgl() now uses a BFS tree rooted in the vertex specified as proot to guide the layout. Previously it used an unspecified (arbitrary) spanning tree.
  • Updated the internal heuristics used by igraph's ARPACK interface, igraph_arpack_rssolve() and igraph_arpack_rnsolve(), to improve the robustness of calculations.
  • Updated the initial vector construction in igraph_hub_and_authority_scores(), igraph_eigenvector_centrality() and igraph_(personalized_)pagerank() with IGRAPH_PAGERANK_ALGO_ARPACK. This improves the robustness and convergence of calculations.

Other

  • Documentation improvements.
  • Reduced the memory usage of several functions by using bitsets instead of Boolean vectors.
  • igraph_vector_intersect_sorted() has better performance when the input vector sizes are similar.

igraph 0.10.12

06 May 19:17
9e77170
Compare
Choose a tag to compare

Added

  • igraph_transitive_closure() computes the transitive closure of a graph (experimental function).
  • igraph_reachability() determines which vertices are reachable from each other in a graph (experimental function).
  • igraph_count_reachable() counts how many vertices are reachable from each vertex (experimental function).
  • Added a bitset data structure, igraph_bitset_t, and a set of corresponding functions (experimental functionality).

Fixed

  • igraph_community_label_propagation() is now interruptible.
  • igraph_is_bipartite() would on rare occasions return invalid results when the cache was employed.
  • igraph_weighted_adjacency() correctly passes through NaN values with IGRAPH_ADJ_MAX, and correctly recognizes symmetric adjacency matrices containing NaN values with IGRAPH_ADJ_UNDIRECTED.
  • igraph_read_graph_gml() can now read GML files that use ids larger than what is representable on 32 bits, provided that igraph was configured with a 64-bit igraph_integer_t size.
  • Fixed a performance issue in igraph_read_graph_graphml() with files containing a very large number of entities, such as >.
  • igraph_read_graph_pajek() has improved vertex ID validation that better matches that of Pajek's own behavior.

Changed

  • igraph_eigenvector_centrality() no longer issues a warning when the input is directed and weighted. When using this function, keep in mind that eigenvector centrality is well-defined only for (strongly) connected graphs, and edges with a zero weights are effectively treated as absent.

Deprecated

  • igraph_transitive_closure_dag() is deprecated in favour of igraph_transitive_closure()

Other

  • Documentation improvements.
  • igraph_strength() and igraph_degree(loops=false) are now faster when calculating values for all vertices (contributed by @gendelpiekel in #2602)

igraph 0.10.11

02 Apr 18:54
3030094
Compare
Choose a tag to compare

Added

  • igraph_is_complete() checks whether there is a connection between all pairs of vertices (experimental function, contributed by Aymeric Agon-Rambosson @aagon in #2510).
  • igraph_join() creates the join of two graphs (experimental function, contributed by Quinn Buratynski @GanzuraTheConsumer in #2508).

Fixed

  • Fixed a corruption of the "finally" stack in igraph_write_graph_gml() for certain invalid GML files.
  • Fixed a memory leak in igraph_write_graph_lgl() when vertex names were present but edge weights were not.
  • Fixed the handling of duplicate edge IDs in igraph_subgraph_from_edges().
  • Fixed conversion of sparse matrices to dense with igraph_sparsemat_as_matrix() when sparse matrix object did not make use of its full allocated capacity.
  • igraph_write_graph_ncol() and igraph_write_graph_lgl() now refuse to write vertex names which would result in an invalid file that cannot be read back in.
  • igraph_write_graph_gml() now ignores graph attributes called edge or node with a warning. Writing these would create an invalid GML file that igraph couldn't read back.
  • igraph_disjoint_union() and igraph_disjoint_union_many() now check for overflow.
  • igraph_read_graph_graphml() now correctly compares attribute values with certain expected values, meaning that prefixes of valid values of attr.type are not accepted anymore.
  • Empty IDs are not allowed any more in <key> tags of GraphML files as this is a violation of the GraphML specification.
  • igraph_is_separator() and igraph_is_minimal_separator() now work correctly with disconnected graphs.
  • igraph_linegraph() now considers self-loops to be self-adjacent in undirected graphs, bringing consistency with how directed graphs were already handled in previous versions.
  • igraph_all_st_mincuts() now correctly returns all minimum cuts. This also fixes a problem with igraph_minimum_size_separators().
  • Corrected minor error in igraph_community_label_propagation() when adding labels to isolated nodes with some fixed labels present.
  • igraph_community_spinglass() no longer crashes when passing an edgeless graph and an empty weight vector.
  • igraph_rewire() no longer crashes on graphs with more than three vertices but fewer than two edges.

Changed

  • igraph_rewire() on longer throws an error on graphs with fewer than four vertices. These graphs are now returned unchanged, just like other graphs which are the unique realization of their degree sequence.

Other

  • Performance: igraph_is_simple() now makes more granular use of the cache.
  • Performance: igraph_degree() now makes use of the cache when checking for self-loops.
  • The performance of igraph_is_minimal_separator() was improved.
  • igraph_is_graphical() now performs graphicality checks for degree sequences of simple directed graphs in linear time, an improvement from the previously used quadratic algorithm (contributed by Arnar Bjarni Arnarson @Tagl in #2537).
  • Documentation improvements.

igraph 0.10.10

13 Feb 10:20
2de2c37
Compare
Choose a tag to compare

Fixed

  • When igraph_is_forest() determined that a graph is not a directed forest, and the roots output parameter was set to NULL, it would incorrectly cache that the graph is also not an undirected forest.
  • igraph_spanner() now correctly ignores edge directions, and no longer crashes on directed graphs.

Deprecated

  • igraph_are_connected() is renamed to igraph_are_adjacent(); the old name is kept available until at least igraph 1.0.

Other

  • Documentation improvements.

igraph 0.10.9

02 Feb 15:05
51dfb14
Compare
Choose a tag to compare

Added

  • igraph_is_biconnected() checks if a graph is biconnected.
  • igraph_realize_bipartite_degree_sequence() constructs a bipartite graph that has the given bidegree sequence, optionally ensuring that it is connected (PR #2425 by Lára Margrét Hólmfríðardóttir @larah19).

Fixed

  • More robust error handling in HRG code.
  • Fixed infinite loop in igraph_hrg_sample_many().
  • igraph_community_fastgreedy() no longer crashes when providing a modularity vector only, but not a merges matrix of membership vector.
  • The graph property cache was not initialized correctly on systems where the size of bool was not 1 byte (#2477).
  • Compatibility with libxml2 version 2.12 (#2442).

Deprecated

  • The macro STR() is deprecated; use the function igraph_strvector_get() instead.

Other

  • Performance: Reduced memory usage and improved initialization performance for igraph_strvector_t.
  • Performance: Improved cache use by igraph_is_bipartite().
  • The documentation is now also generated in Texinfo format.
  • Documentation improvements

igraph 0.10.8

17 Nov 13:51
e5bfb60
Compare
Choose a tag to compare

Added

  • igraph_joint_degree_matrix() computes the joint degree matrix, i.e. counts connections between vertices of different degrees. (PR #2407 by Lára Margrét Hólmfríðardóttir @larah19)
  • igraph_joint_degree_distribution() computes the joint distribution of degrees at either end of edges.
  • igraph_joint_type_distribution() computes the joint distribution of vertex categories at either end of edges, i.e. the mixing matrix.
  • igraph_degree_correlation_vector() computes the degree correlation function and its various directed generalizations.

Changed

  • The behaviour of the Pajek format reader and writer is now more closely aligned with the Pajek software and the reader is more tolerant of input it cannot interpret. Only those vertex and edge parameters are treated as valid which Pajek itself understands, therefore support for size is now dropped, and support for the font edge parameter is added. See http://mrvar.fdv.uni-lj.si/pajek/DrawEPS.htm for more information. Invalid/unrecognized parameters are now converted to igraph attributes by the reader, but just as before, they are not output by the writer.
  • The Pajek format writer now encodes newline and quotation mark characters in a Pajek-compatible manner (\n and &#34;, respectively).
  • igraph_avg_nearest_neighbor_degree() now supports non-simple graphs.

Fixed

  • Resolved "ignoring duplicate libraries" warning when building tests with Xcode 15 on macOS.
  • Fixed the handling of duplicate vertex IDs in igraph_induced_subgraph().
  • igraph_vector_which_min() and igraph_vector_which_max() no longer allow zero-length input, which makes them consistent with other similar functions, and was the originally intended behaviour. Passing zero-length input is invalid use and currently triggers an assertion failure.
  • igraph_erdos_renyi_game_gnm() and igraph_erdos_renyi_game_gnp() are now interruptible.
  • igraph_de_bruijn() and igraph_kautz() are now interruptible.
  • igraph_full(), igraph_full_citation(), igraph_full_multipartite() and igraph_turan() are now interruptible.
  • igraph_avg_nearest_neighbor_degree() did not compute knnk correctly in the weighted case.
  • Fixed variadic arguments of invalid types, which could cause incorrect behaviour with igraph_matrix_print(), as well as test suite failures, on some platforms. 32-bit x86 was affected when setting IGRAPH_INTEGER_SIZE to 64.
  • igraph_subisomorphic_lad() now returns a single null map when the pattern is the null graph.
  • igraph_community_spinglass() now checks its parameters more carefully.
  • igraph_similarity_dice_pairs() and igraph_similarity_jaccard_pairs() now validate vertex IDs.
  • igraph_maxflow() now returns an error code if the source and target vertices are the same. It used to get stuck in an infinite loop in earlier versions when the flow argument was non-NULL.

igraph 0.10.7

04 Sep 13:55
6559f7e
Compare
Choose a tag to compare

Added

  • igraph_radius_dijkstra() computes the graph radius with weighted edges (experimental function).
  • igraph_graph_center_dijkstra() computes the graph center, i.e. the set of minimum eccentricity vertices, with weighted edges (experimental function).

Fixed

  • igraph_full_bipartite() now checks for overflow.
  • igraph_bipartite_game_gnm() and igraph_bipartite_game_gnp() are now more robust to overflow.
  • Bipartite graph creation functions now check input arguments.
  • igraph_write_graph_dot() now quotes real numbers written in exponential notation as necessary.
  • Independent vertex set finding functions could trigger the fatal error "Finally stack too large" when called on large graphs.

Deprecated

  • igraph_bipartite_game() is now deprecated; use igraph_bipartite_game_gnm() and igraph_bipartite_game_gnp() instead.

Other

  • Documentation improvements.