Jekyll2025-12-26T11:49:34+00:00https://igraph.org/feed.xmligraph – the network analysis packageC/igraph 1.0.12025-12-26T00:00:00+00:002025-12-26T00:00:00+00:00https://igraph.org/2025/12/26/igraph-1.0.1-cC/igraph 1.0.1, the first bugfix release of the 1.0 series, has arrived, with bug fixes and documentation improvements.

As usual, the source can be obtained from the GitHub releases page.

A summary of changes in 1.0.1 is below.

Fixed

  • Eliminated references to exit() from the igraph shared library. These were accidentally introduced into igraph 1.0.0 through Qhull and Infomap.
  • Eliminated references to std::cout from the igraph shared library, as required by CRAN.
  • Fixed a bug in igraph_hub_and_authority_scores() that printed a warning about zero entries in the result even when the number of zeros was below the threshold used in the corresponding checks.
  • Fixed compilation and tests when Infomap support is disabled.
  • Fixed rare compilation issues on some Apple systems with some non-standard compilers due to incompatibilities between defining the _POSIX_C_SOURCE feature test macro and standard C++ headers. Now _DARWIN_C_SOURCE is defined when compiling igraph on Apple systems.
  • Fixed inconsistent libf2c prototypes for s_copy() and s_cat(). This restores compatibility with emscripten.

Other

  • Documentation improvements.
  • nanoflann was updated to version 1.9.0
]]>
C/igraph 1.0.02025-09-20T00:00:00+00:002025-09-20T00:00:00+00:00https://igraph.org/2025/09/20/igraph-1.0.0-cNearly twenty years after the first igraph release, igraph 1.0 has finally arrived. This release focuses on providing a stable and more consistent interface that users and downstream maintainers can rely on with confidence, as well as adding new features that required API-breaking changes. There is now an official versioning policy, see VERSIONING.md.

As usual, the source can be obtained from the GitHub releases page.

A summary of changes in 1.0.0 is below.

Highlights

  • A more consistent and more predictable API.
  • Explicit versioning policy.
  • Several random graph generators, including the Erdős-Rényi generators, can now produce graphs with multi-edges.
  • Several functions that can generate a large number of results (cliques, cycles, etc.) now have a feature to limit the number of returned results, or to return a single result only.
  • Functionality for generating several kinds of spatial networks.

Breaking changes

This section lists API-breaking changes in this version, and provides guidance on adapting 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 the “Added” section 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 default 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 object must continue to exist for as long as it is used as the default RNG.
  • Interruption handlers do not take a void * argument anymore; 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.
  • Projects that depend on igraph must only include the <igraph.h> header. While an igraph installation includes several sub-headers, these are for organizational purposes only, and their contents may change without notice. Only #include <igraph.h> is supported.

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_int_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.
  • igraph_vector_view(), igraph_matrix_view(), igraph_matrix_view_from_vector(), and igraph_vector_ptr_view() now return their result as a return value instead of an output parameter. This allows assigning the value to a const variable without triggering warnings with modern compilers.

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 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 igraph_bool_t 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, igraph_loops_t loops and igraph_bool_t multiple to specify what to do with loop and multiple edges. This makes their interfaces consistent with igraph_adjlist_init(). Use loops = IGRAPH_LOOPS_TWICE and multiple = true to reproduce the previous behavior.
  • igraph_incident() and igraph_es_incident() gained an extra igraph_loops_t loops argument to specify what to do with loop edges. This makes their interfaces consistent with igraph_inclist_init(). Use loops = IGRAPH_LOOPS_TWICE to reproduce the previous behavior.
  • The igraph_multiple_t enum type was removed from the public API as it was essentially a Boolean. The symbolic constants IGRAPH_MULTIPLE (same as true) and IGRAPH_NO_MULTIPLE (same as false) 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. Pass IGRAPH_LOOPS_TWICE and IGRAPH_NO_LOOPS to reproduce the previous behaviour of true and false.
  • 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_erdos_renyi_game_gnm() uses a igraph_edge_type_sw_t allowed_edge_types parameter instead of igraph_bool_t loops, and can now uniformly sample not only simple graphs but also multigraphs. It also gained an edge_labeled Boolean parameter which controls whether to sample from the set of ordered edge lists (equivalent to igraph_iea_game() for multigraphs).
  • igraph_erdos_renyi_game_gnp() uses a igraph_edge_type_sw_t allowed_edge_types parameter instead of igraph_bool_t loops, and can now sample multigraphs from a maximum entropy model with a prescribed expected edge multiplicity. It also gained an edge_labeled Boolean parameter which controls whether to sample from the set of ordered edge lists.
  • igraph_bipartite_game_gnm() gained an igraph_edge_type_sw_t allowed_edge_types parameter, and can now uniformly sample not only simple graphs but also multigraphs. It also gained an edge_labeled Boolean parameter which controls whether to sample from the set of ordered edge lists (equivalent to igraph_bipartite_iea_game() for multigraphs).
  • igraph_bipartite_game_gnp() gained an igraph_edge_type_sw_t allowed_edge_types parameter, and can now sample multigraphs from a maximum entropy model with a prescribed expected edge multiplicity. It also gained an edge_labeled Boolean parameter which controls whether to sample from the set of ordered edge lists.
  • 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 now supports generating graphs with multi-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_rewire() now takes an igraph_edge_type_sw_t allowed_edge_types parameter to specify whether to create self-loops. The igraph_rewiring_t enum type was removed. Instead of the old IGRAPH_REWIRING_SIMPLE, use IGRAPH_SIMPLE_SW. Instead of the old IGRAPH_REWIRING_SIMPLE_LOOPS, use IGRAPH_LOOPS_SW.
  • igraph_rewire() now takes an optional igraph_rewiring_stats_t * output argument. You can pass the appropriate struct there to find out the number of successful swaps during the rewiring operation.
  • 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 parameter instead of loops and multiple.
  • igraph_correlated_game() now takes the graph being constructed as the first argument to remain consistent with other graph constructors. Earlier versions used to take the original graph as the first argument.
  • The semantics of the permutation argument of igraph_correlated_game() and igraph_correlated_pair_game() has changed: the i-th element of the vector now contains the index of the original vertex that will be mapped to the i-th vertex in the new graph. This is consistent with how igraph_permute_vertices() operates (which has also changed in igraph 1.0).

Paths and cycles

  • igraph_distances(), igraph_distances_cutoff(), igraph_get_shortest_path(), igraph_get_shortest_paths() and igraph_get_all_shortest_paths() gained a weights argument. The functions now automatically select the appropriate implementation (unweighted, Dijkstra, Bellman-Ford or Johnson) algorithm based on whether weights are present and whether there are negative weights or not. You can still call the individual methods by their more specific names.
  • igraph_distances_johnson() now takes an igraph_neimode_t mode parameter to determine in which direction paths should be followed.
  • igraph_similarity_jaccard() and igraph_similarity_dice() now take two sets of vertices to create vertex pairs of, instead of one.
  • The weighted variants of igraph_diameter(), igraph_pseudo_diameter(), igraph_radius(), igraph_graph_center(), igraph_eccentricity() and igraph_average_path_length() were merged into the undirected ones by adding a new argument named weights in the second position.
  • The weights parameter of igraph_average_path_length(), igraph_global_efficiency(), igraph_local_efficiency() and igraph_average_local_efficiency() were moved to the second position, after the graph itself, for consistency with other functions.
  • igraph_get_all_simple_paths() returns its results in an integer vector list (igraph_vector_int_list_t) instead of a single integer vector.
  • igraph_get_all_simple_paths() now has an additional parameter that allows restricting paths by minimum length as well, and its mode parameter was moved to before the path length limit parameters.
  • igraph_get_all_simple_paths() gained a max_results parameter to limit the number of returned results. Pass 1 to return a single result, or IGRAPH_UNLIMITED to return all results.
  • igraph_simple_cycles() gained a max_results parameter to limit the number of returned results. Pass 1 to return a single result, or IGRAPH_UNLIMITED to return all results.

Community detection

  • igraph_community_edge_betweenness() now takes both a weights and a lengths parameter. Edge weights (interpreted as connection strengths) are used to divide betweenness scores before selecting them for removal as well as for the modularity computation. Edge lengths are used for defining shortest path lengths during the betweenness computation. This fixes issues #2229 and #1040.
  • igraph_community_infomap() now supports regularization and gained the is_regularized and regularization_strength parameters.
  • igraph_community_label_propagation() changed signature to allow specification of label propagation algorithm (LPA) variants. A new fast label propagation variant was added.
  • igraph_community_leiden() now takes two vertex_out_weights and vertex_in_weights parameters in order to support directed graphs, instead of the previous single node_weights parameter. To obtain the old behavior for undirected graphs, pass the vertex weights as vertex_out_weights and set vertex_in_weights to NULL.
  • The history parameter of igraph_community_leading_eigenvector() is now a pointer to an igraph_vector_int_t instead of an igraph_vector_t.
  • igraph_community_optimal_modularity() now takes a resolution parameter and its weight parameter was moved to the second place.
  • igraph_community_spinglass_single() now uses igraph_real_t for its inner_links and outer_links output parameters, as these return not simply edge counts, but the sum of the weights of some edges.

Isomorphism functions and permutations

  • igraph_count_automorphisms() has been renamed to igraph_count_automorphisms_bliss() because it has a BLISS-specific interface. A new igraph_count_automorphisms() function was added with a simplified interface that does not depend on BLISS.
  • igraph_automorphism_group() has been renamed to igraph_automorphism_group_bliss() because it has a BLISS-specific interface. A new igraph_automorphism_group() function was added with a simplified interface that does not depend on BLISS.
  • igraph_canonical_permutation() has been renamed to igraph_canonical_permutation_bliss() because it has a BLISS-specific interface. A new igraph_canonical_permutation() function was added with a simplified interface that does not depend on BLISS.
  • igraph_subisomorphic_lad() does not have a CPU time limit parameter any more. If you wish to stop the calculation from another thread or a higher level interface, use igraph’s interruption mechanism.
  • The semantics of the igraph_permute_vertices() permutation argument has changed: the i-th element of the vector now contains the index of the original vertex that will be mapped to the i-th vertex in the new graph. This is now consistent with how other igraph functions treat permutations and vertex index vectors; for instance, you can now pass the result of igraph_topological_sorting() directly to igraph_permute_vertices() to obtain a new graph where the vertices are sorted topologically.
  • As a consequence to the change in the semantics of the igraph_permute_vertices() permutation argument, the semantics of the permutations returned from igraph_canonical_permutation() and igraph_canonical_permutation_bliss() have also been inverted to maintain the invariant that the output of these functions can be fed into igraph_permute_vertices() directly.
  • igraph_isoclass_subgraph() now takes a parameter of type igraph_vs_t vids instead of igraph_vector_int_t vids. Apply igraph_vss_vector() to the vector of vertex IDs to convert it to an igraph_vs_t.

Centralities

  • All betweenness functions got a normalized parameter to support normalizing the result by the number of vertex pairs in the graph. At the same time, their parameter ordering was standardized. The following functions are affected: igraph_betweenness(), igraph_betweenness_cutoff(), igraph_edge_betweenness(), igraph_edge_betweenness_cutoff(), igraph_betweenness_subset(), igraph_edge_betweenness_subset().
  • igraph_edge_betweenness() and igraph_edge_betweenness_cutoff() now have an eids parameter to return only a subset of results. This makes their interface consistent with other betweenness functions.
  • igraph_eigenvector_centrality(), igraph_centralization_eigenvector_centrality() and igraph_centralization_eigenvector_centrality_tmax() now use a mode parameter with possible values IGRAPH_OUT, IGRAPH_IN or IGRAPH_ALL to control how edge directions are considered. Previously they used a boolean directed parameter.
  • igraph_eigenvector_centrality(), igraph_centralization_eigenvector_centrality() and igraph_centralization_eigenvector_centrality_tmax() no longer have a scale parameter. The result is now always scaled so that the largest centrality value is 1.
  • igraph_hub_and_authority_scores() no longer has a scale parameter. The result is now always scaled so that the largest hub and authority scores are each 1.
  • igraph_pagerank(), igraph_personalized_pagerank() and igraph_personalized_pagerank_vs() had their parameter ordering standardized.

Cliques and independent sets

  • igraph_cliques(), igraph_weighed_cliques(), igraph_maximal_cliques(), igraph_maximal_cliques_file(), igraph_maximal_cliques_subset(), igraph_independent_sets() and igraph_maximal_independent_sets() received a max_results parameter to limit the number of returned results. Pass 1 to return a single result, or IGRAPH_UNLIMITED to return all results.
  • igraph_maximal_independent_sets() received min_size and max_size parameters that control the range of independent set sizes that are returned.
  • igraph_weighted_cliques() had its parameter ordering standardized: the igraph_bool_t maximal parameter now comes before the min_weight / max_weight parameters.
  • igraph_maximal_cliques_callback() had its parameter ordering standardized: the igraph_clique_handler_t *cliquehandler_fn, void *arg parameter pair now comes at the end, making this function consistent with igraph_cliques_callback().

Layouts

  • igraph_layout_sugiyama() does not return an “extended graph” anymore. The bends in the edges of the layout are encoded in a list of matrices instead; each item in the list belongs to an edge of the original graph and contains the control points of the edge in a row-wise fashion. The matrix will have no rows if no control points are needed on the edge.

Other network analysis

  • igraph_minimum_spanning_tree() takes a new method parameter that controls the algorithm used for finding the spanning tree. Kruskal’s algorithm was added.
  • The deprecated igraph_rng_get_dirichlet() function was removed.
  • igraph_motifs_randesu_no() and igraph_motifs_randesu_estimate() now take an igraph_real_t as their result argument to prevent overflows when igraph is compiled with 32-bit integers.
  • The igraph_motifs_handler_t callback type now takes a const igraph_vector_int_t *vids parameter. Previously this was not formally const, even though it was not allowed to modify vids. This affects uses of igraph_motifs_randesu_callback().
  • The experimental functions igraph_fundamental_cycles() and igraph_minimum_cycle_basis() now use the type igraph_real_t for their bfs_cutoff parameter, and had their weights parameter moved to the 2nd position.

Foreign formats

  • igraph_read_graph_ncol() and igraph_read_graph_lgl() now uses a default edge weight of 1 instead of 0 for files that do not contain edge weights for at least some of the edges.

Added

  • igraph_setup() performs all initialization tasks that are recommended before using the igraph library. Right now this function only initializes igraph’s internal random number generator with a practically random seed, but it may also perform other tasks in the future. It is recommended to call this function before using any other function from the library (although most of the functions will work fine now even if this function is not called).
  • igraph_iea_game() samples random multigraphs through independent edge assignment.
  • igraph_bipartite_iea_game() samples random bipartite multigraph through independent edge assignment.
  • igraph_weighted_biadjacency() creates a weighted graph from a bipartite adjacency matrix.
  • igraph_vector_ptr_capacity() returns the allocated capacity of a pointer vector.
  • igraph_vector_ptr_resize_min() deallocates unused capacity of a pointer vector.
  • igraph_strvector_fprint() prints a string vector to a file.
  • igraph_rng_sample_dirichlet(), igraph_rng_sample_sphere_volume() and igraph_rng_sample_sphere_surface() samples vectors from a Dirichlet distribution or from the volume or surface of a sphere while allowing the user to specify the random number generator to use.
  • igraph_nearest_neighbor_graph() computes a neighborhood graph of spatial points based on a neighbor count, cutoff distance, and chosen metric (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2788!
  • igraph_delaunay_graph() computes a Delaunay graph of a spatial point set (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2806!
  • igraph_gabriel_graph() computes the Gabriel graph of a spatial point set (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2827!
  • igraph_relative_neighborhood_graph() computes the relative neighborhood graph of a spatial point set (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2827!
  • igraph_lune_beta_skeleton() and igraph_circle_beta_skeleton() compute the lune and circle based β-skeletons of a spatial point set (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2827!
  • igraph_beta_weighted_gabriel_graph() computes a Gabriel graph of a spatial point set, along with a threshold β value for each edge, at which the edge ceases to be part of the lune-based β-skeleton (experimental function). Thanks to Arnór Friðriksson @Zepeacedust for implementing this in #2827!
  • igraph_spatial_edge_lengths() computes edge lengths based on spatial vertex coordinates (experimental function).
  • igraph_community_leiden_simple() is a simplified interface to igraph_community_leiden() that allows selecting the objective function to maximize directly.
  • igraph_vector_difference_and_intersection_sorted() calculates the intersection and the differences of two vectors simultaneously.
  • IGRAPH_UNLIMITED, defined to -1, is a convenience constant for use with various “size limit” parameters, such as number of cliques returned, maximum path length, number of results returned, etc. It indicates that no limit should be used.

Changed

  • The Pajek format reader and writer now map vertex labels to the name vertex attribute in igraph. The id attribute is no longer used.
  • igraph_minimum_size_separators() no longer returns any separating vertex sets for complete graphs. Prior to igraph 1.0, it would return all n - 1 size vertex subsets where n is the vertex count.
  • igraph_community_edge_betweenness() now treats edges with large weights as strong connections.
  • igraph_biadjacency() now truncates non-integer matrix entries to their integer part instead of rounding them up. This brings consistency with related functions such as igraph_adjacency().
  • The order of edges in the graph returned by igraph_(weighted_)adjacency() and igraph_biadjacency() has changed. Note that these functions do not guarantee any specific edge order.
  • igraph_eigenvector_centrality() now warns about eigenvector centralities equal to zero, as these indicate a disconnected graph, for which eigenvector centrality is not meaningful.
  • igraph_hub_and_authority_scores() now warns when a large fraction of centrality scores are zero, as this indicates a non-unique solution, and thus the returned result may not be meaningful.
  • igraph_hub_and_authority_scores() now warns when providing an undirected graph as input, and falls back to the equivalent eigenvector centrality computation.
  • igraph_get_stochastic_sparse() no longer throws an error when some row or column sums are zero. This brings its behaviour in line with igraph_get_stochastic().
  • igraph_vector_append(), igraph_strvector_append() and igraph_vector_ptr_append() now use a different allocation strategy: if the to vector has insufficient capacity, they double its capacity. Previously they reserved precisely as much capacity as needed for appending the from vector.
  • The implementation of the Infomap algorithm behind igraph_community_infomap() has been updated with a more recent version (2.8.0). Isolated vertices are now supported.
  • igraph_vector_difference_sorted() now handles multisets properly (and documents how the multiplicities are handled).

Finalized experimental functions

  • The following functions are not experimental any more: igraph_count_loops(), igraph_count_reachable(), igraph_degree_correlation_vector, igraph_distances_cutoff(), igraph_distances_floyd_warshall(), igraph_distances_dijkstra_cutoff(), igraph_ecc(), igraph_enter_safelocale(), igraph_exit_safelocale(), igraph_feedback_vertex_set(), igraph_find_cycle(), igraph_get_shortest_path_astar(), igraph_graph_power(), igraph_hexagonal_lattice(), igraph_hypercube(), igraph_is_bipartite_coloring(), igraph_is_clique(), igraph_is_complete(), igraph_is_edge_coloring(), igraph_is_vertex_coloring(), igraph_is_independent_vertex_set(), igraph_join(),igraph_joint_degree_distribution(), igraph_joint_degree_matrix(), igraph_joint_type_distribution(), igraph_layout_align(), igraph_layout_merge_dla(), igraph_mean_degree(), igraph_radius(), igraph_realize_bipartite_degree_sequence(), igraph_reachability(), igraph_transitive_closure(), igraph_tree_from_parent_vector(), igraph_triangular_lattice(), igraph_vector_intersection_size_sorted(), igraph_voronoi().

Fixed

  • igraph_community_spinglass_single() now uses igraph_real_t for its inner_links and outer_links output parameters, as these return not simply edge counts, but the sum of the weights of some edges. Thus these results are no longer incorrectly rounded.
  • igraph_correlated_game() and igraph_correlated_pair_game() validate their permutation argument.

Removed

  • Removed igraph_Calloc(), igraph_Realloc() and igraph_Free(). Use IGRAPH_CALLOC(), IGRAPH_REALLOC() and IGRAPH_FREE() instead.
  • The deprecated igraph_adjacent_triangles() was removed. Use igraph_count_adjacent_triangles() instead.
  • The deprecated igraph_are_connected() was removed. Use igraph_are_adjacent() instead.
  • The deprecated igraph_automorphisms() was removed. Use igraph_count_automorphisms() or igraph_count_automorphisms_bliss() instead.
  • The deprecated igraph_convex_hull() was removed. Use igraph_convex_hull_2d() instead.
  • The deprecated igraph_decompose_destroy() was removed.
  • The deprecated igraph_hub_score() and igraph_authority_score() were removed.
  • The deprecated igraph_vs_seq(), igraph_vss_seq(), igraph_es_seq(), igraph_ess_range(), and igraph_vector_init_seq() were removed. Use the range alternatives instead of the old seq ones.
  • The deprecated igraph_erdos_renyi_game() and igraph_bipartite_game() were removed. Use the corresponding functions with _gnm() and _gnp() in the name instead.
  • The deprecated igraph_tree() was removed. Use igraph_kary_tree() instead.
  • The deprecated igraph_lattice() was removed. Use igraph_square_lattice() instead.
  • The deprecated igraph_minimum_spanning_tree_prim() was removed. Use igraph_minimum_spanning_tree() in conjunction with igraph_subgraph_from_edges() instead.
  • The deprecated igraph_minimum_spanning_tree_unweighted() was removed. Use igraph_minimum_spanning_tree() in conjunction with igraph_subgraph_from_edges() instead.
  • The deprecated igraph_get_sparsemat() was removed. Use igraph_get_adjacency_sparse() instead.
  • The deprecated igraph_get_stochastic_sparsemat() was removed. Use igraph_get_stochastic_sparse() instead.
  • The deprecated igraph_laplacian() was removed. Use igraph_get_laplacian() or igraph_get_laplacian_sparse() instead.
  • The deprecated igraph_subgraph_edges() was removed. Use igraph_subgraph_from_edges() instead.
  • The deprecated igraph_read_graph_dimacs() and igraph_write_graph_dimacs() were removed. These names may be re-used in the future. Use igraph_read_graph_dimacs_flow() and igraph_write_graph_dimacs_flow() instead.
  • The deprecated igraph_isomorphic_function_vf2() was removed. Use igraph_get_isomorphisms_vf2_callback() instead.
  • The deprecated igraph_subisomorphic_function_vf2() was removed. Use igraph_get_subisomorphisms_vf2_callback() instead.
  • The deprecated igraph_isomorphic_34() was removed. Its functionality is accessible through igraph_isomorphic().
  • The deprecated igraph_transitive_closure_dag() was removed. Use igraph_transitive_closure() instead, which works for all graphs, not just DAGs.
  • The deprecated igraph_sparsemat_copy() was removed. Use igraph_sparsemat_init_copy() instead.
  • The deprecated igraph_sparsemat_eye() was removed. Use igraph_sparsemat_init_eye() instead.
  • The deprecated igraph_sparsemat_diag() was removed. Use igraph_sparsemat_init_diag() instead.
  • The deprecated igraph_sparsemat() and igraph_weighted_sparsemat() functions were removed; use igraph_get_adjacency_sparse() instead.
  • The deprecated igraph_random_edge_walk() was removed. Its functionality is incorporated in igraph_random_walk().
  • The deprecated igraph_vector_qsort_ind() was removed. Use igraph_vector_sort_ind() instead.
  • The deprecated igraph_vector_binsearch2() was removed. Use igraph_vector_contains_sorted() instead.
  • The deprecated igraph_vector_copy() and igraph_matrix_copy() were removed. Use igraph_vector_init_copy() and igraph_matrix_init_copy() instead.
  • The deprecated igraph_vector_e(), igraph_vector_e_ptr(), igraph_matrix_e() and igraph_matrix_e_ptr() were removed. Use the alternatives ending in _get() and _get_ptr() instead.
  • The deprecated igraph_vector_move_interval2() was removed.
  • The deprecated igraph_zeroin() was removed.
  • The deprecated igraph_deterministic_optimal_imitation(), igraph_moran_process(), igraph_roulette_wheel_imitation() and igraph_stochastic_imitation() functions were removed.
  • igraph_sample_dirichlet(), igraph_sample_sphere_surface() and igraph_sample_sphere_volume() were removed in favour of igraph_rng_sample_dirichlet(), igraph_rng_sample_sphere_surface() and igraph_rng_sample_sphere_volume(), which allow the user to specify the random number generator to use.
  • The unused enum type igraph_fileformat_type_t was removed.
  • The macros IGRAPH_POSINFINITY and IGRAPH_NEGINFINITY were removed. Use IGRAPH_INFINITY and -IGRAPH_INFINITY instead.
  • Removed igraph_sparsemat_view() as its design was broken and required the user to reach into the internals of igraph_sparmsemat_t to destroy it properly.

Deprecated

  • igraph_delete_vertices_idx() is now deprecated in favour of igraph_delete_vertices_map(), which is functionally equivalent but has a name that is consistent with igraph_induced_subgraph_map().

Other

  • The documentation was reorganized.
  • Various documentation improvements.
  • Improved performance when creating graphs from dense adjacency matrices (igraph_adjacency() and igraph_weighted_adjacency()).
]]>
C/igraph 0.10.172025-09-19T00:00:00+00:002025-09-19T00:00:00+00:00https://igraph.org/2025/09/19/igraph-0.10.17-cC/igraph 0.10.17, the (hopefully) last bugfix release of the 0.10 series, has arrived, with several new additions, bug fixes and performance improvements. As usual, the source can be obtained from the GitHub releases page.

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.

A summary of changes in 0.10.17 is below.

Added

  • igraph_layout_align() attempts to align a graph layout with the coordinate axes in a visually pleasing manner (experimental function).
  • igraph_product() supports the lexicographic, strong and modular graph products. Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2772 and #2793!
  • igraph_rooted_product() computes the rooted graph product (experimental function). Thanks to Gulshan Kumar @gulshan-123 for contributing this functionality in #2793!
  • 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!
  • igraph_path_graph() is a convenience wrapper for igraph_ring() with circular=false.
  • igraph_cycle_graph() is a convenience wrapper for igraph_ring() with circular=true.
  • 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!
  • igraph_invert_permutation() inverts a permutation stored in an integer vector.
  • 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!
  • 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!
  • 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!

Changed

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

Fixed

  • Fix failure in SIR simulation due to roundoff errors creating slightly negative rates.
  • Fix infinite coordinates for certain path graphs with igraph_layout_kamada_kawai_3d().
  • 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!
  • 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.
  • igraph_cliques_callback() would sometimes fail to respect a request to stop (i.e. returning IGRAPH_STOP) from the callback. This is now corrected.
  • igraph_hypercube() now validates the hypercube dimension and prevents negative values.
  • igraph_sparsemat_view() checks for out-of-memory conditions.
  • Fix assertion error when stopping search early in igraph_simple_cycles_callback() by returning IGRAPH_STOP from the callback.

Deprecated

  • 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.
  • igraph_convex_hull() is deprecated in favour of igraph_convex_hull_2d() and scheduled for removal in 1.0.

Other

  • Documentation improvements, including a new glossary.
  • 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!
  • 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!
]]>
Setting up igraph for success in the next decade2025-04-10T00:00:00+00:002025-04-10T00:00:00+00:00https://igraph.org/2025/04/10/igraph-isc-setting-success-decadeCross-posted on the cynkra blog.

One year ago, a small group of us at cynkra submitted a project proposal to the R Consortium’s ISC, which got approved. We are very grateful for this support. In this post we shall explain what the motivation for our project was, what we accomplished… and what we hope to work on next!

Why did igraph need some dedicated maintenance?

The first version of the igraph R package was published on CRAN in 2006. Since then, the igraph C library that forms the core of the R package, and the R package itself, have been further developed and widely used. Over the years, the R package has also accrued a bit of documentation debt and technical debt, that we wanted to tackle to set up igraph for success in the next decade. Both aspects had the potential to simplify further updates of the package.

Adopting the lifecycle system

To provide a more consistent interface, part of igraph functions or arguments are slowly but consistently being deprecated. Some of them used to be deprecated using custom solutions or base R deprecations. In contrast, now all deprecations happen through the lifecycle package. On manual pages, deprecation badges indicate the maintenance status of functions or arguments.

library("igraph")
#> 
#> Attaching package: 'igraph'
#> The following objects are masked from 'package:stats':
#> 
#>     decompose, spectrum
#> The following object is masked from 'package:base':
#> 
#>     union
g <- sample_gnp(10, 0.5)
graph.density(g)
#> Warning: `graph.density()` was deprecated in igraph 2.0.0.
#> ℹ Please use `edge_density()` instead.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
#> generated.
#> [1] 0.5111111

Having everything in the “lifecycle system” now means the interface and documentation is consistent for users, and also that we can more easily increase deprecation levels over time by searching for lifecycle calls. Last, but not least, all deprecations are listed in a vignette.

Documentation improvements

Besides the documentation of lifecycle, we created and used a custom roxygen2 tags to link to the C docs from manual pages. Example.

Fewer errors, better errors

We have made a conscious effort to port errors from base R to cli, at the same time improving phrasing of errors. For instance,

stop("invalid value supplied for `weighted' argument, please see docs.")

became

cli::cli_abort(c(
  "{.arg weighted} can't be {.obj_type_friendly {weighted}}.",
  i = "See {.help graph_from_biadjacency_matrix}'s manual page."
))

which is more informative about the invalid value supplied, and which directly links to the manual page.

We have also fixed some bugs (example).

Work on the internals

We did a lot of refactoring! Most of it was focussed on tests, as previously explained on this blog: merging some test files to ensure alignment between R scripts and test files, refactoring test files for better readability and future debugging, updating the testthat usage by removing old expectations. We also worked in the R/folder, for instance we replaced the usage of an embedded version of lazyeval with rlang calls (PR 1, PR 2).

Sharing our experience

We shared our experience working on igraph in part of a talk and in various blog posts:

Conclusion

We are proud of the progress made in the igraph codebase but we don’t want to stop here! In particular, we’d really like to do more work on open issues to improve the state of the issue tracker and to ensure easier future triage ; to better describe and execute the scope differences between the C and R libraries ; and to make the documentation more complete and clearer.

]]>
Maëlle Salmon
C/igraph 0.10.152024-11-06T00:00:00+00:002024-11-06T00:00:00+00:00https://igraph.org/2024/11/06/igraph-0.10.15-cC/igraph 0.10.15, the thirteenth bugfix release of the 0.10 series, has arrived, with several new additions, bug fixes and performance improvements. As usual, the source can be obtained from the GitHub releases page.

A summary of changes in 0.10.15 is below.

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 @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.
]]>
python-igraph 0.11.82024-10-28T00:00:00+00:002024-10-28T00:00:00+00:00https://igraph.org/2024/10/28/igraph-0.11.8-pythonpython-igraph 0.11.8, the seventh bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.14, which brings a few bugfixes and also a few new functions to the Python interface. This release also adds support for Python 3.13. Please refer to the changelog for more details.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

Read on for more details about the changes in version 0.11.8.

Added

  • Added Graph.feedback_vertex_set() to calculate a feedback vertex set of the graph.
  • Added new methods to Graph.feedback_arc_set() that allows the user to select the specific integer problem formulation used by the underlying solver.

Changed

  • Ensured compatibility with Python 3.13.
  • The C core of igraph was updated to version 0.10.14.

Fixed

  • Fixed a potential memory leak in the Graph.get_shortest_path_astar() heuristic function callback.
]]>
python-igraph 0.11.62024-07-08T00:00:00+00:002024-07-08T00:00:00+00:00https://igraph.org/2024/07/08/igraph-0.11.6-pythonpython-igraph 0.11.6, the sixth bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.13, which brings a few bugfixes and also a few new functions to the Python interface. Please refer to the changelog for more details.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

Read on for more details about the changes in version 0.11.6.

Added

  • Added Graph.Hypercube() for creating n-dimensional hypercube graphs.
  • Added Graph.Chung_Lu() for sampling from the Chung-Lu model as well as several related models.
  • Added Graph.is_complete() to test if there is a connection between all distinct pairs of vertices.
  • Added Graph.is_clique() to test if a set of vertices forms a clique.
  • Added Graph.is_independent_vertex_set() to test if some vertices form an independent set.
  • Added Graph.mean_degree() for a convenient way to compute the average degree of a graph.

Changed

  • The C core of igraph was updated to version 0.10.13.
  • Graph.rewire() now attempts to perform edge swaps 10 times the number of edges by default.
  • Error messages issued when an attribute is not found now mention the name and type of that attribute.
]]>
C/igraph 0.10.132024-06-28T00:00:00+00:002024-06-28T00:00:00+00:00https://igraph.org/2024/06/28/igraph-0.10.13-cC/igraph 0.10.13, the twelfth bugfix release of the 0.10 series, has arrived, with several new additions, bug fixes and performance improvements. As usual, the source can be obtained from the GitHub releases page.

A summary of changes in 0.10.13 is below.

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.
]]>
The igraph R package crossed the 2.0 threshold!2024-05-21T00:00:00+00:002024-05-21T00:00:00+00:00https://igraph.org/2024/05/21/rigraph-2.0.0We’re thrilled to announce that igraph 2.0 has been released! In this post, we highlight the most important changes.

The R package is now in sync with the C core

This major release brings development in line with the igraph C library. Version 1.6.0 of the R package used version 0.9.10 of the C core. The changes in the 0.10 series of the C core are now taken up in version 2.0 of the R package. Having the R package use the latest version of the C core was a huge undertaking, and is a great milestone which makes the many improvements from version 0.10 of the C core available to R users.

Improvements made in the C core will be made available more easily in functions in the R package. See the complete changelog of the C core. While we tried to maintain compatibility with version 1.6.0 of the R interface, it wasn’t always possible. Refer to the “Breaking changes” sections in the changelog of the R package (breaking changes section). If you maintain a package that depends on igraph, you may have heard from us.

The move to version 0.10 of C/igraph brings many quality improvements, including support for graphs with billions of vertices and edges on 64-bit computers, much more stringent error checking, as well as lots of improvements to robustness, reliability and mathematical consistency across functions.

Future work will aim at further automating the generation of R code from C code, making improved C core functionality more quickly available to R users. Additionally, we plan to expose more C core functions, since not all functions are available to R users just yet.

Improvements to the documentation

The igraph R package now has a website, generated with the popular pkgdown R package, that is to say, a website that has a predictable structure and that includes a search functionality. The website now features an introductory vignette contributed by Adrian Diaz and Fabio Zanini in both English and Spanish.

Towards a more explicit lifecycle

We are in the middle of efforts aimed at making the lifecycle of functions more explicit so that you might know what function is deprecated, and which function is more experimental. For instance, we will slowly be removing most “dotted-names functions”, like add.edges() that is now add_edges(), although both versions currently still work. The is_biconnected() function is an example of an experimental function, that is to say, a C function that was just exposed.

Conclusion

We’d be thankful to hear from you if you experience any difficulty with the new release. Please cast us a line (and a reprex!) in the issue tracker. For further feedback, please use igraph’s discussion forum. Do not hesitate to share about the release… in your networks. 😉

Acknowledgements

Thanks a ton to all the contributors who helped us craft the new igraph package: @a-lambda, @Antonov548, @barracuda156, @bebejhun, @bockthom, @brooksambrose, @CdeMills, @clpippel, @csqsiew, @dmurdoch, @Flu09, @Ganson2018, @gherrarte, @gwfs521, @jefferis, @jeroen, @jessijessi, @joshua-zh, @kalibera, @knwng, @krlmlr, @Lighter-k, @louisaslett, @lptolik, @lufuhao, @maelle, @maksymiuks, @Matyasch, @mfansler, @ngmaclaren, @noriakis, @reuning, @ntamas, @snowGlint, @stephenashton-dhsc, @szhorvat, @tdhock, @vtraag, @xinguo1236, and @Zhaoju-Deng.

]]>
python-igraph 0.11.52024-05-07T00:00:00+00:002024-05-07T00:00:00+00:00https://igraph.org/2024/05/07/igraph-0.11.5-pythonpython-igraph 0.11.5, the fifth bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.12, which brings quite a few bugfixes to the Python interface. Please refer to the changelog for more details.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

Read on for more details about the changes in version 0.11.5.

Added

  • Added a prefixattr=... keyword argument to Graph.write_graphml() that allows the user to strip the g_, v_ and e_ prefixes from GraphML files written by igraph.

Changed

  • Graph.are_connected() has now been renamed to Graph.are_adjacent(), following up a similar change in the C core. The old name of the function is deprecated but will be kept around until at least 0.12.0.
  • The C core of igraph was updated to version 0.10.12.
  • Deprecated PyCObject API calls in the C code were replaced by calls to PyCapsule, thanks to @DavidRConnell in #763
  • get_shortest_path() documentation was clarified by @JDPowell648 in #764
  • It is now possible to link to an existing igraph C core on MSYS2, thanks to @Kreijstal in #770

Fixed

  • Bugfix in the NetworkX graph conversion code by @rmmaf in #767
]]>
C/igraph 0.10.122024-05-06T00:00:00+00:002024-05-06T00:00:00+00:00https://igraph.org/2024/05/06/igraph-0.10.12-cC/igraph 0.10.12, the eleventh bugfix release of the 0.10 series, has arrived. As usual, the source can be obtained from the GitHub releases page.

This release brings a large number of quality enhancements, including many bug fixes and performance improvements. Upgrading is highly recommended for all igraph users.

This will be one of the last—if not the last—releases of the 0.10 series, with igraph 1.0 planned for release early summer this year. Pre-releases will be made available for feedback from the community.

A summary of changes in 0.10.12 is below.

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 &gt;.
  • 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)
]]>
C/igraph 0.10.112024-04-02T00:00:00+00:002024-04-02T00:00:00+00:00https://igraph.org/2024/04/02/igraph-0.10.11-cC/igraph 0.10.11, the tenth bugfix release of the 0.10 series, has arrived. As usual, the source can be obtained from the GitHub releases page.

This release brings a large number of quality enhancements, including many bug fixes and performance improvements. Upgrading is highly recommended for all igraph users.

This will be one of the last—if not the last—releases of the 0.10 series, with igraph 1.0 planned for release early summer this year. Pre-releases will be made available for feedback from the community.

A summary of changes in 0.10.11 is below.

Added

  • igraph_is_complete() checks whether there is a connection between all pairs of vertices (experimental function, contributed by Aymeric Agon-Rambosson in #2510).

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 in #2537).
  • Documentation improvements.
]]>
C/igraph 0.10.102024-02-13T00:00:00+00:002024-02-13T00:00:00+00:00https://igraph.org/2024/02/13/igraph-0.10.10-cC/igraph 0.10.10, the ninth bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This is primarily a maintenance release with bug fixes, in particular a caching issue in igraph_is_forest().

Read on for more details about the changes in version 0.10.10.

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.
]]>
C/igraph 0.10.92024-02-02T00:00:00+00:002024-02-02T00:00:00+00:00https://igraph.org/2024/02/02/igraph-0.10.9-cC/igraph 0.10.9, the eighth bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This is primarily a maintenance release with bug fixes, but it also adds functions to check whether a graph is biconnected and to construct a bipartite graph from a bidegree sequence.

Read on for more details about the changes in version 0.10.9.

Added

  • igraph_is_biconnected() checks if a graph is biconnected.
  • igraph_igraph_realize_bipartite_degree_sequence() constructs a bipartite graph that has the given bidegree sequence, optionally ensuring that it is connected.

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
]]>
python-igraph 0.11.32023-11-20T00:00:00+00:002023-11-20T00:00:00+00:00https://igraph.org/2023/11/20/igraph-0.11.3-pythonpython-igraph 0.11.3, the third bugfix release of the 0.11 series, has arrived. The primary reason for this release is to update the C core of igraph to 0.10.8, which brings quite a few bugfixes to the Python interface. This release also fixes a bug in the Matplotlib backend with curved undirected edges. Please refer to the changelog for more details.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

Read on for more details about the changes in version 0.11.3, including those that became possible by updating the C core to 0.10.8.

Added

  • Added Graph.__invalidate_cache() for debugging and benchmarking purposes.

Changed

  • The C core was updated to 0.10.8.
  • 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).

Fixed

  • Removed incorrectly added loops=... argument of Graph.is_bigraphical().
  • Fixed a bug in the Matplotlib graph drawing backend that filled the interior of undirected curved edges.
  • Duplicate vertex IDs in Graph.induced_subgraph() no longer cause a crash.
  • Many graph generators (Erdős-Rényi, De Bruijn, Kautz, full graph, full multipartite and citation graphs, Turán graphs) became interruptible with Ctrl-C.
  • Graph.subisomorphic_lad() now returns a single null map when the pattern is the null graph.
  • Graph.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.
]]>
C/igraph 0.10.82023-11-17T00:00:00+00:002023-11-17T00:00:00+00:00https://igraph.org/2023/11/17/igraph-0.10.8-cC/igraph 0.10.8, the seventh bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This is primarily a maintenance release with bug fixes, but it also adds functions to compute the joint degree matrix, the joint degree distribution and the degree correlation function of graphs as well as a generalized joint distribution of arbitrary vertex categories at the endpoints of edges.

Read on for more details about the changes in version 0.10.8.

Added

  • igraph_joint_degree_matrix() computes the joint degree matrix, i.e. counts connections between vertices of different degrees.
  • 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.
]]>
python-igraph 0.10.82023-09-12T00:00:00+00:002023-09-12T00:00:00+00:00https://igraph.org/2023/09/12/igraph-0.10.8-pythonpython-igraph 0.10.8, the seventh bugfix release of the 0.10 series, has arrived. This release updates the C core of igraph to 0.10.7, and adds support for weighted eccentricity and radius calculations. There are also some minor additions and improvements; please refer to the changelog for more details.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

]]>
C/igraph 0.10.72023-09-04T00:00:00+00:002023-09-04T00:00:00+00:00https://igraph.org/2023/09/04/igraph-0.10.7-cC/igraph 0.10.7, the sixth bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This is primarily a maintenance release with bug fixes, but it also adds weighted variants of igraph_radius() and igraph_graph_center() as experimental functions. Their API will be finalized in version 0.11.0 (although we do not anticipate any changes compared to the current version).

Read on for more details about the changes in version 0.10.7.

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.
]]>
C/igraph 0.10.62023-07-13T00:00:00+00:002023-07-13T00:00:00+00:00https://igraph.org/2023/07/13/igraph-0.10.6-cC/igraph 0.10.6, the fifth bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This is a maintenance release bringing bug fixes only. In particular, we fixed convergence failures in igraph_community_voronoi() in certain cases on certain platforms, and ensured compatibility with libxml2 2.11.

Read on for more details about the changes in version 0.10.6.

Fixed

  • Compatibility with libxml2 2.11.
  • Fixed some converge failures in igraph_community_voronoi().
  • IGRAPH_CALLOC() and IGRAPH_REALLOC() now check for overflow.
  • CMake packages created with the install target of the CMake build system are now relocatable, i.e. the generated igraph-targets.cmake file does not contain absolute paths any more.
]]>
C/igraph 0.10.52023-06-29T00:00:00+00:002023-06-29T00:00:00+00:00https://igraph.org/2023/06/29/igraph-0.10.5-cC/igraph 0.10.5, the fourth bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This is a maintenance release bringing bug fixes, performance improvements, as well as new experimental features.

Read on for more details about the changes in version 0.10.5.

Added

  • igraph_graph_power() computes the kth power of a graph (experimental function).
  • igraph_community_voronoi() for detecting communities using Voronoi partitioning (experimental function).

Changes

  • igraph_community_walktrap() no longer requires modularity and merges to be non-NULL when membership is non-NULL.
  • igraph_isomorphic() now supports multigraphs.
  • Shortest path related functions now consistently ignore edges with positive infinite weights.

Fixed

  • igraph_hub_and_authority_scores(), igraph_hub_score() and igraph_authority_score() considered self-loops only once on the diagonal of the adjacency matrix of undirected graphs, thus the result was not identical to that obtained by igraph_eigenvector_centrality() on loopy undirected graphs. This is now corrected.
  • igraph_community_infomap() now checks edge and vertex weights for validity.
  • igraph_minimum_spanning_tree() and igraph_minimum_spanning_tree_prim() now check that edge weights are not NaN.
  • Fixed an initialization error in the string attribute combiner of the C attribute handler.
  • Fixed an issue with the weighted clique number calculation when all the weights were the same.
  • HRG functions now require a graph with at least 3 vertices; previous versions crashed with smaller graphs.
  • igraph_arpack_rssolve() and igraph_arpack_rnsolve(), i.e. the ARPACK interface in igraph, are now interruptible. As a result, several other functions that rely on ARPACK (eigenvector centrality, hub and authority scores, etc.) also became interruptible.
  • igraph_get_shortest_paths_dijkstra(), igraph_get_all_shortest_paths_dijkstra() and igraph_get_shortest_paths_bellman_ford() now validate the from vertex.
  • Fixed bugs in igraph_local_scan_1_ecount() for weighted undirected graphs which would miscount loops and multi-edges.

Deprecated

  • igraph_automorphisms() is now deprecated; its new name is igraph_count_automorphisms(). The old name is kept available until at least igraph 0.11.
  • igraph_hub_score() and igraph_authority_score() are now deprecated. Use igraph_hub_and_authority_scores() instead.
  • igraph_get_incidence() is now deprecated; its new name is igraph_get_biadjacency() to reflect that the returned matrix is an adjacency matrix between pairs of vertices and not an incidence matrix between vertices and edges. The new name is kept available until at least igraph 0.11. We plan to re-use the name in later versions to provide a proper incidence matrix where the rows are vertices and the columns are edges.
  • igraph_hrg_dendrogram() is deprecated because it requires an attribute handler and it goes against the convention of returning attributes in vectors where possible. Use igraph_from_hrg_dendrogram() instead, which constructs the dendrogram as an igraph graph and returns the associated probabilities in a vector.

Other

  • Improved performance for igraph_vertex_connectivity().
  • igraph_simplify() makes use of the cache, and avoids simplification when the graph is already known to be simple.
  • Documentation improvements.

Known issues

  • strtod() does not respect the locale on macOS 13 Ventura, causing the example::safelocale test to fail within igraph’s test suite. This is a bug in macOS 13. This issue will be inconsequential for most users. It affects use cases when igraph is run within a process whose numeric locale has been explicitly set to one that does not use a decimal point, and then igraph_enter_safelocale() (or other means) are used to temporarily set the locale to "C" before calling igraph functions. See the following links for more details:

    • https://stackoverflow.com/q/76133503/695132
    • https://github.com/igraph/igraph/issues/2340
  • ARPACK-NG 3.9.0 fails to produce a result under rare circumstances. This issue can affect any use of ARPACK-NG in principle, and may cause igraph’s example::centralization and test::centralization tests to fail, depending on the specific configuration and BLAS implementation that is being used. For more details, see:

    • https://github.com/opencollab/arpack-ng/issues/410
    • https://github.com/igraph/igraph/issues/2311
]]>
C/igraph 0.10.42023-01-27T00:00:00+00:002023-01-27T00:00:00+00:00https://igraph.org/2023/01/27/igraph-0.10.4-cC/igraph 0.10.4, the third bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This release adds support for finding a shortest path with the A* algorithm and for finding a greedy vertex coloring with the DSatur heuristics. It also adds interruption support for the Bellman-Ford and Floyd-Warshall shortest path finder algorithms.

Read on for more details about the changes in version 0.10.4.

Added

  • igraph_get_shortest_path_astar() finds a shortest path with the A* algorithm.
  • igraph_vertex_coloring_greedy() now supports the DSatur heuristics (#2284, thanks to @professorcode1).

Changed

  • The test build target now only runs the unit tests, but it does not build them. In order to both build and run tests, use the check target, which continues to behave as before (PR #2291).
  • The experimental function igraph_distances_floyd_warshall() now has from and to parameters for choosing source and target vertices.
  • The experimental function igraph_distances_floyd_warshall() now has an additional method parameter to select a specific algorithm. A faster “Tree” variant of the Floyd-Warshall algorithm is now available (#2267, thanks to @rfulekjames).

Fixed

  • The Bellman-Ford shortest path finder is now interruptible.
  • The Floyd-Warshall shortest path finder is now interruptible.
  • Running CTest no longer builds the tests automatically, as this interfered with VSCode, which would invoke the ctest executable after configuring a project in order to determine test executables. Use the build_tests target to build the tests first, or use the check target to both build and run all unit tests (PR #2291).

Other

  • Improved the performance and memory usage of igraph_widest_path_widths_floyd_warshall().
  • Documentation improvements.
]]>
C/igraph 0.10.32022-12-30T00:00:00+00:002022-12-30T00:00:00+00:00https://igraph.org/2022/12/30/igraph-0.10.3-cC/igraph 0.10.3, the third bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This release adds support for generating triangular and hexagonal lattices, constructing trees from a “parent” vector, and retrieving the IDs of the edges in the induced subgraph of a vertex set. It also refines the experimental API of the UMAP layout function, fixes a few bugs and improves the documentation.

Read on for more details about the changes in version 0.10.3.

Added

  • igraph_matrix_init_array() to initialize an igraph matrix by copying an existing C array in column-major or row-major order.
  • igraph_layout_umap_compute_weights() computes weights for the UMAP layout algorithm from distances. This used to be part of igraph_layout_umap(), but it is now in a separate function to allow the user to experiment with different weighting schemes.
  • igraph_triangular_lattice() to generate triangular lattices of various kinds.
  • igraph_hexagonal_lattice() to generate hexagonal lattices of various kinds.
  • igraph_tree_from_parent_vector() to create a tree or a forest from a parent vector (i.e. a vector that encodes the parent vertex of each vertex).
  • igraph_induced_subgraph_edges() produces the IDs of edges contained within a subgraph induced by the given vertices.

Changed

  • The signature of the experimental igraph_layout_umap() function changed; the last argument is now a Boolean that specifies whether distances should already be treated as weights, and the sampling probability argument was removed.

Fixed

  • igraph_transitivity_barrat(), igraph_community_fluid_communities(), igraph_sir(), igraph_trussness() and graphlet functions did not correctly detect when a directed input graph had effective multi-edges due to ignoring edge directions. Such graphs are now rejected by these functions.
  • Fixed a bug in igraph_2dgrid_move() that sometimes crashed the Large Graph Layout function when a grid cell became empty.
  • igraph_pagerank() and igraph_personalized_pagerank() would fail to converge when the ARPACK implementation was used and a vertex had more than one outgoing edge but all these edges had zero weights.
  • igraph_pagerank() and igraph_personalized_pagerank() no longer allow negative weights. Previously, edges with negative weights were silently ignored when using the PRPACK implementation. The ARPACK implementation would issue a warning saying that they are ignored, but in fact it computed an incorrect result.
  • igraph_all_st_cuts() and igraph_all_st_mincuts() no longer trigger the “Finally stack too large” fatal error when called on certain large graphs. This was a regression in igraph 0.10.
  • igraph_community_label_propagation() no longer rounds weights to integers. This was a regression in igraph 0.10.
  • igraph_read_graph_graphdb() does more thorough checks on the input file.
  • igraph_calloc() did not zero-initialize the allocated memory. This is now corrected. Note that the macro IGRAPH_CALLOC() was not affected.
  • Fixed new warnings issued by the Xcode 14.1 toolchain.

Deprecated

  • igraph_subgraph_edges() is now deprecated to avoid confusion with igraph_induced_subgraph_edges(); its new name is igraph_subgraph_from_edges(). The old name is kept available until at least igraph 0.11.

Other

  • Significantly improved performance for igraph_matrix_transpose().
  • Documentation improvements.
]]>
IGraph/M 0.6.52022-12-21T00:00:00+00:002022-12-21T00:00:00+00:00https://igraph.org/2022/12/21/igraph-0.6.5-mmaJust in time before the Christmas holidays, IGraph/M 0.6.5 is now released. This version (along with the unreleased 0.6.4) brings greatly improved performance when computing proximity graphs, new convenience functions, as well as robustness improvements. As usual, you can conveniently upgrade by running the installer script, using the following command:

Get["https://raw.githubusercontent.com/szhorvat/IGraphM/master/IGInstaller.m"]

0.6.5

Other:

  • Improved error checking and added more internal consistency checks to help debug issues with recent Mathematica versions.

0.6.4

Added:

  • IGBetaWeightedGabrielGraph for computing the β value where each edge of a lune-based β-skeleton would disappear (experimental function).
  • IGModularityMatrix gives the modularity matrix of a network.
  • IGCanonicalLabeledGraph creates a canonical representation of a labeled graph without changing vertex names. Graphs which are considered equivalent by IGSameGraphQ have the same canonical representation. It is intended for removing duplicate graphs using DeleteDuplicatesBy.
  • IGCanonicalEdgeList creates a canonical representation of an edge list, in a manner similar to IGCanonicalLabeledGraph.

Other:

  • Documentation improvements
  • Significant performance improvements for the calculation of lune and circle based β skeletons when using large β values.
]]>
python-igraph 0.10.22022-10-17T00:00:00+00:002022-10-17T00:00:00+00:00https://igraph.org/2022/10/17/igraph-0.10.2-pythonpython-igraph 0.10.2, the second bugfix release of the 0.10 series, has arrived. Thise release updates the C core of igraph to 0.10.2, adds support for Python 3.11 and fixes a crash and a reference leak in earlier versions of the library. There are also some minor additions and improvements; please refer to the changelog for more details.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

The documentation of the project has also been moved to Read The Docs.

]]>
C/igraph 0.10.22022-10-14T00:00:00+00:002022-10-14T00:00:00+00:00https://igraph.org/2022/10/14/igraph-0.10.2-cC/igraph 0.10.2, the second bugfix release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

This release mostly includes bug fixes and documentation improvements, but it also adds a few new functions (shortest paths with cutoff, Floyd-Warshall algorithm and Voronoi partitioning) with an experimental API that might still change in upcoming releases. Experimental functions are clearly marked both here and in the documentation. The API of these functions will be finalized in 0.11.0, after which no further changes are expected.

Read on for more details about the changes in version 0.10.2.

Added

  • igraph_distances_cutoff() and igraph_distances_dijkstra_cutoff() calculate shortest paths with an upper limit on the path length (experimental functions).
  • igraph_distances_floyd_warshall() for computing all-pairs shortest path lengths in dense graphs (experimental function).
  • igraph_ecc() computes the edge clustering coefficient of some edges (experimental function).
  • igraph_voronoi() computes a Voronoi partitioning of vertices (experimental function).
  • igraph_count_multiple_1() determines the multiplicity of a single edge in the graph.
  • igraph_dqueue_get() accesses an element in a queue by index.
  • igraph_degree_1() efficiently retrieves the degee of a single vertex.
  • igraph_lazy_adjlist_has() and igraph_lazy_inclist_has() to check if adjacent vertices / incident edges have already been computed and stored for a given vertex in a lazy adjlist / inclist.

Changed

  • igraph_edge() now verifies that the input edge ID is valid.
  • igraph_community_leading_eigenvector(), igraph_adjacency_spectral_embedding(), igraph_laplacian_spectral_embedding(), igraph_arpack_rssolve() and igraph_arpack_rnsolve() now generate a random starting vector using igraph’s own RNG if needed instead of relying on LAPACK or ARPACK to do so. This makes sure that the results obtained from these functions remain the same if igraph’s RNG is seeded with the same value.
  • igraph_community_leading_eigenvector() does not stop the splitting process any more when there are multiple equally likely splits (indicated by the multiplicity of the leading eigenvector being larger than 1). The algorithm picks an arbitrary split instead and proceeds normally.

Fixed

  • Fixed a bug in igraph_get_k_shortest_paths() that sometimes yielded incorrect results on undirected graphs when the mode argument was set to IGRAPH_OUT or IGRAPH_IN.
  • igraph_trussness() is now interruptible.
  • igraph_spanner() is now interruptible.
  • igraph_layout_umap() and igraph_layout_umap3d() are now interruptible.
  • In some rare cases, roundoff errors would cause igraph_distance_johnson() to fail on graphs with negative weights.
  • igraph_eulerian_cycle() and igraph_eulerian_path() now returns a more specific error code (IGRAPH_ENOSOL) when the graph contains no Eulerian cycle or path.
  • igraph_heap_init_array() did not copy the array data correctly for non-real specializations.
  • igraph_layout_umap_3d() now actually uses three dimensions.
  • igraph_layout_umap() and igraph_layout_umap_3d() are now interruptible.
  • igraph_vit_create() and igraph_eit_create() no longer fails when trying to create an iterator for the null graph or edgeless graph from an empty range-based vertex or edge selector.
  • igraph_write_graph_leda() did not correctly print attribute names in some warning messages.
  • Addressed new warnings introduced by Clang 15.
  • In the generated pkg-config file, libxml2 is now placed in the Requires.private section instead of the Libs.private one.

Removed

  • Removed unused and undocumented igraph_bfgs() function.
  • Removed the undocumented function igraph_complex_mod(). Use igraph_complex_abs() instead, as it has identical functionality.

Deprecated

  • The IGRAPH_EDRL error code was deprecated; the DrL algorithm now returns IGRAPH_FAILURE when it used to return IGRAPH_EDRL (not likely to happen in practice).
  • The undocumented function igraph_dqueue_e() is now deprecated and replaced by igraph_dqueue_get().
  • igraph_finite(), igraph_is_nan(), igraph_is_inf(), igraph_is_posinf() and igraph_is_neginf() are now deprecated. They were relics from a time when no standard alternatives existed. Use the C99 standard isfinite(), isnan() and isinf() instead.
]]>
IGraph/M 0.6.32022-10-11T00:00:00+00:002022-10-11T00:00:00+00:00https://igraph.org/2022/10/11/igraph-0.6.3-mmaA new maintenance release of IGraph/M is now available. This is a bugfix release recommended for all users. As usual, the simplest way to upgrade is to evaluate the following, and then restart Mathematica:

Get["https://raw.githubusercontent.com/szhorvat/IGraphM/master/IGInstaller.m"]

IGraph/M 0.6.3

Changed:

  • When an invalid vertex is passed to IGraph/M functions, now the message shown is IGraphM::invv instead of VertexIndex::inv.

Fixed:

  • In rare cases, vertex names that were lists of other vertex names in the same graph were misinterpreted. This affected only Mathematica 12.0 and later.
  • IGCommunitiesLeadingEigenvector is less likely to fail to converge now.
  • IGCommunitiesLeadingEigenvector now respects random seeds set in Mathematica. These affect only the random starting vector it uses internally, which can very rarely cause non-deterministic output.
  • IGBarabasiAlbertGame no longer accepts negative or zero exponents, as these were not handled correctly.
  • IGBridges is no longer prone to stack overflow when given very large graphs.

Other:

  • Performance improvements for IGGraphEditor.
  • Documentation improvements.
]]>
python-igraph 0.10.12022-09-13T00:00:00+00:002022-09-13T00:00:00+00:00https://igraph.org/2022/09/13/igraph-0.10.1-pythonpython-igraph 0.10.1, the first bugfix release of the 0.10 series, has arrived. (And we forgot to announce 0.10.0 separately, sorry). These releases update the C core of igraph to 0.10.0 and bring several improvements to the plotting functionality of the library, including an improved Matplotlib plotting backend and an experimental Plotly backend.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

See the changelog on Github for relevant changes in 0.10.0 and 0.10.1:

]]>
C/igraph 0.10.02022-09-05T00:00:00+00:002022-09-05T00:00:00+00:00https://igraph.org/2022/09/05/igraph-0.10.0-cC/igraph 0.10.0, the first release of the 0.10 series, has arrived.

The source can be obtained from the GitHub releases page.

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.

Read on for more details about the changes in version 0.10.0.

Since the changelog for this release is huge, we are going to list only the most important highlights of this release:

  • We now use igraph_integer_t consistently 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.
  • Some simple graph properties, such as whether a graph contains self-loops or multi-edges, or whether it is connected, are now cached in the graph data structure. Querying these properties for a second time will take constant computational time. The igraph_invalidate_cache() function is provided for debugging purposes. It will invaidate all cache entries.
  • 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.

You can find the full changelog on the GitHub release page.

]]>
C/igraph 0.9.102022-09-02T00:00:00+00:002022-09-02T00:00:00+00:00https://igraph.org/2022/09/02/igraph-0.9.10-cC/igraph 0.9.10, the tenth bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes and documentation improvements, and it is likely to be the last patch release of the 0.9.x series. Version 0.10.0 will follow soon with lots of breaking changes as we clean up the API in preparation for a future 1.0 release.

If you have a project that currently relies on igraph 0.9, it is advised that you update the project to use 0.9.10 and then start adapting it as soon as possible to support 0.10.0 once it is released.

Read on for more details about the changes in version 0.9.9.

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 &lt; or &quot; 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.

Other

  • Documentation improvements.
]]>
C/igraph 0.10.0-rc.22022-08-17T00:00:00+00:002022-08-17T00:00:00+00:00https://igraph.org/2022/08/17/igraph-0.10.0-rc.2-cigraph 0.10.0-rc.2, the second 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.

Since this version is a release candidate only, it is meant primarily for developers who are working on a project that depends on the igraph library and who want to be prepared in advance for the upcoming changes in igraph 0.10.0. There is no official tarball on the igraph.org homepage as the latest stable version is still 0.9.9 - you need to get the tarball from the Github releases page instead. Here is a direct link to the tarball – note that you will need to download the asset named igraph-0.10.0-rc.2.tar.gz as the link titled “Source code” is simply a snapshot of the Github repository.

For more details and a short description of breaking changes, please refer to the announcement in our Discourse group.

]]>
C/igraph 0.10.0-rc.12022-08-02T00:00:00+00:002022-08-02T00:00:00+00:00https://igraph.org/2022/08/02/igraph-0.10.0-rc.1-cigraph 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.

Since this version is a release candidate only, it is meant primarily for developers who are working on a project that depends on the igraph library and who want to be prepared in advance for the upcoming changes in igraph 0.10.0. There is no official tarball on the igraph.org homepage as the latest stable version is still 0.9.9 - you need to get the tarball from the Github releases page instead. Here is a direct link to the tarball – note that you will need to download the asset named igraph-0.10.0-rc.1.tar.gz as the link titled “Source code” is simply a snapshot of the Github repository.

For more details and a short description of breaking changes, please refer to the announcement in our Discourse group.

]]>
IGraph/M 0.6.02022-07-13T00:00:00+00:002022-07-13T00:00:00+00:00https://igraph.org/2022/07/13/igraph-0.6.0-mmaIGraph/M 0.6.0, the Mathematica interface of igraph, is now out! This released is based on the 0.9 series of C/igraph, bringing significant robustness improvements, as well as new features. Some of the highlights are an experimental interactive graph editor, contributed by Kuba Podkalicki, and experimental support for progress reporting. Apple computers based on the ARM architecture (“Apple Silicon”) are now supported.

As always, you can update to the latest version by evaluating the following:

Get["https://raw.githubusercontent.com/szhorvat/IGraphM/master/IGInstaller.m"]

The earliest supported Mathematica version is now 11.0, or 12.2 on the Raspberry Pi.

Please report any issues you may find on GitHub or on our forum.

IGraph/M 0.6.0

This version is based on the 0.9 series of C/igraph.

Added:

  • IGHarmonicCentrality and IGHarmonicCentralityCutoff compute the harmonic centrality and range-limited harmonic centrality.
  • IGLinkRank and IGPersonalizedLinkRank compute the equivalent of PageRank for edges.
  • IGNeighborhoodCloseness computes the range-limited closeness centrality, as well as the number of vertices reachable within the given range.
  • IGFamousGraph exposes the igraph C library’s built-in graph database.
  • IGPreferenceGame and IGAsymmetricPreferenceGame create non-growing random graphs based on vertex types.
  • IGReingoldTilford and IGReingoldTilfordCircular now support the DirectedEdges option.
  • IGFruchtermanReingold now supports constraining the coordinates of a subset of vertices.
  • IGPercolationCurve for efficiently computing the size of the largest component as a function of mean degree while removing edges.
  • IGShortestPathTree for computing a shortest path tree rooted in a given vertex.
  • IGGraphEditor is an experimental interactive graph editor.
  • Experimental progress reporting functionality through functions in the IGraphM`Progress` context.

Changed:

  • IGConnectedQ and IGWeaklyConnectedQ now consider the null graph to be disconnected; this is consistent with other functions such as IGTreeQ.
  • IGAveragePathLength now has a "ByComponents" option, controlling the handling of disconnected graphs.
  • Centrality functions:
    • IGCloseness now computes the normalized closeness, i.e. the inverse of the mean distance to other vertices, by default. Use Normalized -> False to get the previous behaviour.
    • IGCloseness now uses the distances only to reachable vertices when computing the closeness. In undirected disconnected graphs, it effectively computes the closeness per component. For isolated vertices (or sinks in directed graphs) it now returns Indeterminate.
    • IGBetweenness and IGBetweennessCentralization no longer uses the Method option. The calculations are always fast and precise. The precision has been improved.
    • IGBetweennessEstimate, IGEdgeBetweennessEstimate and IGClosenessEstimate have been renamed to IGBetweennessCutoff, IGEdgeBetweennessCutoff and IGClosenessCutoff.
  • IGRelativeNeighborhoodGraph now assumes the β -> 2, β < 2 limit instead of β = 2.
  • IGGirth now returns Infinity for the null graph.
  • IGDiameter now returns Indeterminate for the null graph.
  • IGChordalQ, IGChordalCompletion and IGMaximumCardinalitySearch now support non-simple graphs.
  • IGReingoldTilford and IGReingoldTilfordCircular use a new automatic root selection algorithm. The root selection heuristic may change in the future without notice. Specify roots manually for a consistent result.
  • IGPotentiallyConnectedQ no longer supports directed sequences. This feature was flawed in 0.5. It may be re-added in a future version.
  • IGLayoutKamadaKawai and IGLayoutKamadaKawai3D perform more iterations by default, and produce more pleasing layouts.
  • IGPersonalizedPageRank allows specifying the reset weights as an association from vertex names to values.
  • LAD isomorphism functions now support self-loops.
  • Motif finder functions now support size 5 and 6 undirected motifs.
  • The behaviour of the random number generator is now consistent between platforms, meaning that with a given seed, a randomized IGraph/M function will return the same result on all platforms. However, result will now be different from version 0.5 for the same seed.

Fixed:

  • IGPageRank and IGPersonalizedPageRank will now warn if the calculation did not converge with the "Arnoldi" method. This happens only in rare cases.
  • IGPersonalizedPageRank: the default "PRPACK" method returned an incorrect result when the graph was not connected and the personalization vector was not uniform.
  • Several community detection functions did not handle zero or one-vertex graphs correctly.
  • IGVertexMap would evaluate the mapped functions twice instead of once.
  • IGMaximumCardinalitySearch returned incorrect ranks for graphs whose vertex names differed from their vertex indices.
  • IGDistanceWeighted no longer fails on edgeless graphs.
  • IGCallawayTraisGame no longer rejects zeros in the preference matrix.
  • An error would be triggered when some functions returned a zero-size matrix.
  • Fixed a memory leak in the Nauty format reader.
  • IGMotifsVertexParticipation would fail with Mathematica 12.2 or later.
  • Fixed a conflict with Mathematica 13.0’s built-in isomorphism functions which could lead to a crash on Linux.

Other:

  • IGraph/M now requires Mathematica 11.0 or later; on the Raspberry Pi it requires Wolfram Engine 12.2 or later.
  • More robust error handling: when certain serious errors occur in the igraph C library, the Mathematica kernel is no longer forced to shut down.
  • IGraph/M got leaner: smaller binary sizes.
  • Documentation improvements.
]]>
R/igraph 1.3.22022-06-13T00:00:00+00:002022-06-13T00:00:00+00:00https://igraph.org/2022/06/13/igraph-1.3.2-rR-igraph 1.3.2, the second bugfix release of the 1.3 series is now released – and it looks like we forgot to post an announcement about 1.3.1, so in the rest of this post we summarize the changes in versions 1.3.1 and 1.3.2 as well.

As always, we tried to do our best not to cause breaking changes for users of igraph from R, but in case we have made unintentional mistakes, please report issues in the Github issue tracker.

igraph 1.3.2

The C core is updated to 0.9.9, fixing a range of bugs.

Fixed

  • The length of size-zero communities objects is now reported correctly.
  • layout_with_kk() would fail to produce reasonable results with the default initial coordinates. This has been corrected, however, this function no longer produces precisely the same output for a given graph as before. To restore the previous behaviour, use layout_with_kk(g, coord=layout_in_circle(g)) in 2D or layout_with_kk(g, dim=3, coord=layout_on_sphere(g)) in 3D.
  • Indexing an igraph.vs object with v[x, na_ok=T] now correctly handles the na_ok argument in all cases; previous versions ignored it when x was a single number.

Other

  • Documentation improvements and fixes.

igraph 1.3.1

Fixed

  • graph_from_adjacency_matrix() now works with sparse matrices even if the cell values in the sparse matrix are unspecified.
  • Fixed crash in cluster_walktrap() when modularity=FALSE and membership=FALSE.
  • cluster_walktrap() no longer accepts invalid weight vectors.
  • cluster_walktrap() no longer returns a modularity vector of invalid length for disconnected graphs. This also fixes some rare failures of this function on weighted disconnected graphs.
  • edge_attr() does not ignore its index=... argument any more.
  • automorphisms(), automorphism_group() and canonical_permutation() now allow all possible values supported by the C core in the sh argument. Earlier versions supported only "fm".
  • The vertex.frame.width plotting parameter now allows zero and negative values; these will simply remove the outline of the corresponding vertex.
  • The documentation of the sh argument of the BLISS isomorphism algorithm in isomorphic() was fixed; earlier versions incorrectly referred to sh1 and sh2.
  • dominator_tree() now conforms to its documentation with respect to the dom component of the result: it contains the indices of the dominator vertices for each vertex and -1 for the root of the dominator tree.
  • Mentions of the "power" algorithm of page_rank() have been removed from the documentation, as this method is no longer available.
  • Several other documentation fixes to bring the docs up to date with new behaviours in igraph 1.3.
]]>
python-igraph 0.9.112022-06-09T00:00:00+00:002022-06-09T00:00:00+00:00https://igraph.org/2022/06/09/igraph-0.9.11-pythonpython-igraph 0.9.11, the ninth bugfix release of the 0.9 series, has arrived.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

This is the first release that provides pre-compiled musllinux wheels for environments running Alpine Linux.

See the changelog on Github for relevant changes in 0.9.11:

]]>
C/igraph 0.9.92022-06-04T00:00:00+00:002022-06-04T00:00:00+00:00https://igraph.org/2022/06/04/igraph-0.9.9-cC/igraph 0.9.9, the ninth bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes and documentation improvements, focusing mainly on community detection and visualization functions. Read on for more details.

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_psumtree_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.
]]>
R/igraph 1.3.02022-04-14T00:00:00+00:002022-04-14T00:00:00+00:00https://igraph.org/2022/04/14/igraph-1.3.0-rOur efforts to bring the R interface of igraph closer to the recent developments of the C core continues: we have released R-igraph 1.3.0, which updates the C core of igraph within the R interface to version 0.9.7, which is now only one patch version behind the mainline C core. The update fixes lots of bugs compared to the previous release and adds quite a few new functions.

Due to the underlying changes in the C core of igraph between the 0.8 series and 0.9.7, there are some cases when we needed to make extra efforts in the R interface to keep things compatible with previous releases. For instance, igraph 0.9.7 now interprets zero cutoff in the closeness, betweenness and edge betweenness centrality functions literally, while igraph 0.8 interpreted zero as “no cutoff”. The R interface keeps the old behaviour in such cases but prints a deprecation warning; the old behaviour will be gone in igraph 1.4.0 or 2.0.0, whichever comes first.

A patch release of R/igraph is coming soon in the next few days, which will hopefully (finally) catch up with the 0.9 branch of the C core. We aim to let R/igraph stabilize for a few weeks now while we work on further improvements in the C core.

Even though we tried to do our best not to cause breaking changes for users of igraph from R, we may have made unintentional mistakes, so please keep on reporting issues in the Github issue tracker.

Release Notes

The C core is updated to 0.9.7, fixing a range of bugs and introducing a number of new functions.

Added

  • has_eulerian_path() and has_eulerian_cycle() decides whether there is an Eulerian path or cycle in the graph.
  • eulerian_path() and eulerian_cycle() returns the edges and vertices in an Eulerian path or cycle in the graph.
  • any_loop() checks whether a graph contains at least one loop edge.
  • is_tree() checks whether a graph is a tree and also finds a possible root
  • to_prufer() converts a tree graph into its Prufer sequence
  • make_from_prufer() creates a tree graph from its Prufer sequence
  • sample_tree() to sample labelled trees uniformly at random
  • sample_spanning_tree() to sample spanning trees of an undirected graph uniformly at random
  • automorphisms() and canonical_permutation() now supports vertex colors
  • random_edge_walk() to record the edges traversed during a random walk
  • harmonic_centrality() calculates the harmonic centrality of vertices, optionally with a cutoff on path lengths
  • mean_distance() now supports edge weights and it can also return the number of unconnected vertex pairs when details=TRUE is passed as an argument
  • greedy_vertex_coloring() finds vertex colorings based on a simple greedy algorithm.
  • bridges() finds the bridges (cut-edges) of a graph
  • The frame width of circle, rectangle and square vertex shapes can now be adjusted on plots with the frame.width vertex attribute or the vertex.frame.width keyword argument, thanks to @simoncarrignon. See PR #500 for more details.
  • automorphism_group() returns a possible (not necessarily minimal) generating set of the automorphism group of a graph.
  • global_efficiency() calculates the global efficiency of the graph.
  • local_efficiency() calculates the local efficiency of each vertex in a graph.
  • average_local_efficiency() calculates the average local efficiency across the set of vertices in a graph.
  • rewire(each_edge(...)) now supports rewiring only one endpoint of each edge.
  • realize_degseq() generates graphs from degree sequences in a deterministic manner. It is also available as make_(degseq(..., deterministic=TRUE)).
  • clique_size_counts() counts cliques of different sizes without storing them all.
  • feedback_arc_set() finds a minimum-weight feedback arc set in a graph, either with an exact integer programming algorithm or with a linear-time approximation.
  • make_bipartite_graph() now handles vertices with names.
  • shortest_paths() now supports graphs with negative edge weights.
  • min_cut() now supports s-t mincuts even if value.only=FALSE.
  • as.matrix() now supports converting an igraph graph to an adjacency or edge list matrix representation. See as.matrix.igraph() for more details. This function was migrated from intergraph; thanks to Michał Bojanowski.

Fixed

  • is_connected() now returns FALSE for the null graph
  • Calling length() on a graph now returns the number of vertices to make it consistent with indexing the graph with [[.
  • diameter() now corrently returns infinity for disconnected graphs when unconnected=FALSE. Previous versions returned the number of vertices plus one, which was clearly invalid for weighted graphs.
  • mean_distance() now correctly treats the path length between disconnected vertices as infinite when unconnected=FALSE. Previous versions used the number of vertices plus one, adding a bias towards this number, even if the graph was weighted and the number of vertices plus one was not a path length that could safely have been considered as being longer than any “valid” path.
  • layout_with_sugiyama() now handles the case of exactly one extra virtual node correctly; fixes #85
  • bfs() and dfs() callback functions now correctly receive 1-based vertex indices and ranks; it used to be zero-based in earlier versions
  • Accidentally returning a non-logical value from a bfs() or dfs() callback does not crash R any more
  • Calling print() on a graph with a small max.lines value (smaller than the number of lines needed to print the attribute list and the header) does not raise an error any more; fixes #179
  • as_adjacency_matrix(edges=TRUE, sparse=TRUE) now consistently returns the last edge ID for each cell in the matrix instead of summing them.
  • Using the + and - operators with a path() object consisting of two vertices is now handled correctly; fixes #355
  • topo_sort() now throws an error if the input graph is not acyclic instead of returning an incorrect partial ordering.
  • Weighted transitivity calculations (i.e. transitivity(mode="barrat") now throw an error for multigraphs; the implementation does not work correctly for multigraphs and earlier versions did not warn about this.

Changed

  • The neimode argument of bfs() and dfs() was renamed to mode for sake of consistency with other functions. The old argument name is deprecated and will be removed in 1.4.0.
  • bfs() and dfs() callback functions now correctly receive 1-based vertex indices and ranks; it used to be zero-based in earlier versions. (This is actually a bugfix so it’s also mentioned in the “Fixed” section).
  • closeness(), betweenness() and edge_betweenness() now all take a cutoff argument on their own. estimate_closeness(), estimate_betweenness() and estimate_edge_betweenness() became aliases, with identical signature. They are not deprecated but their implementation might change in future versions to provide proper estimation schemes instead of a simple cutoff-based approximation. If you explicitly need cutoffs and you want your results to be reproducible with future versions, use closeness(), betweenness() and edge_betweenness() in your code with a cutoff argument.
  • closeness() now only considers reachable vertices during the calculation; in other words, closeness centrality is now calculated on a per-component basis for disconnected graphs. Earlier versions considered all vertices.

Deprecated

  • Using cutoff=0 for closeness(), betweenness() and edge_betweenness() is deprecated; if you want exact scores, use a negative cutoff. cutoff=0 will be interpreted literally from igraph 1.4.0.
  • centr_degree_tmax() now prints a warning when it is invoked without an explicit loops argument. loops will be mandatory from igraph 1.4.0.
  • The nexus_list(), nexus_info(), nexus_get() and nexus_search() functions now return an error informing the user that the Nexus graph repository has been taken offline (actually, several years ago). These functions will be removed in 1.4.0.
  • The edges argument of as_adjacency_matrix() is deprecated; it will be removed in igraph 1.4.0.

Removed

  • The deprecated page_rank_old() function and the deprecated power method of page_rank() were removed.
]]>
C/igraph 0.9.82022-04-08T00:00:00+00:002022-04-08T00:00:00+00:00https://igraph.org/2022/04/08/igraph-0.9.8-cC/igraph 0.9.8, the eighth bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes and documentation improvements only. Read on for more details.

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.
]]>
C/igraph 0.9.72022-03-16T00:00:00+00:002022-03-16T00:00:00+00:00https://igraph.org/2022/03/16/igraph-0.9.7-cC/igraph 0.9.7, the seventh bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes, build system tweaks and minor (performance and non-performance-related) improvements. Read on for more details.

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
]]>
python-igraph 0.9.92022-01-10T00:00:00+00:002022-01-10T00:00:00+00:00https://igraph.org/2022/01/10/igraph-0.9.9-pythonpython-igraph 0.9.9, the seventh bugfix release of the 0.9 series, has arrived.

The preferred way of installing the Python interface is via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

ARM64 (Apple Silicon) wheels are now officially supported from this release.

See the changelog on Github for relevant changes in 0.9.9:

]]>
C/igraph 0.9.62022-01-05T00:00:00+00:002022-01-05T00:00:00+00:00https://igraph.org/2022/01/05/igraph-0.9.6-cC/igraph 0.9.6, the sixth bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes, build system tweaks and minor (performance and non-performance-related) improvements. Read on for more details.

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.
]]>
C/igraph 0.9.52021-11-11T00:00:00+00:002021-11-11T00:00:00+00:00https://igraph.org/2021/11/11/igraph-0.9.5-cC/igraph 0.9.5, the fifth bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes and performance improvements only.

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.

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

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

  • igraph_largest_cliques() and igraph_clique_number() were re-written to use igraph_maximal_cliques_callback() so they are much faster now.

  • The vendored GLPK has been upgraded to GLPK 5.0.

  • Documentation improvements.

]]>
python-igraph is now simply igraph on PyPI2021-10-29T00:00:00+00:002021-10-29T00:00:00+00:00https://igraph.org/2021/10/29/igraph-0.9.8-pythonpython-igraph 0.9.8, the sixth bugfix release of the 0.9 series, has arrived.

The only significant change in this release is that the Python interface of igraph has been renamed from python-igraph to igraph on PyPI. We are very grateful to Patrick Fuller, the previous owner of the igraph package on PyPI for giving up the ownership of igraph and letting us use the name instead.

The preferred way of installing the Python interface is still via pip; typing pip install igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

python-igraph will keep on working on PyPI until September 1, 2022, but it is now only a stub package that depends on igraph. Running pip install python-igraph will in turn install the matching version of the igraph package from PyPI.

  • Projects listing python-igraph in their dependencies should migrate to using igraph as soon as possible to keep on receiving updates after September 1, 2022.

  • Maintainers who provide pre-packaged versions of python-igraph in Linux distributions should switch to following the igraph package on PyPI instead of python-igraph.

]]>
python-igraph 0.9.72021-10-18T00:00:00+00:002021-10-18T00:00:00+00:00https://igraph.org/2021/10/18/igraph-0.9.7-pythonpython-igraph 0.9.7, the fifth bugfix release of the 0.9 series, has arrived.

The preferred way of installing the Python interface is via pip; typing pip install python-igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

See the changelog on Github for relevant changes in 0.9.7:

This release also adds support for Python 3.10 and provides experimental native Python wheels for ARM64 and Apple Silicon CPUs. Note that the Apple Silicon wheels are not tested in a CI environment yet; this will hopefully change in the near future when Github Actions starts supporting Apple Silicon. Until then, feel free to report any issues that you find with Apple Silicon wheels (or any other wheel) in the issue tracker on Github.

]]>
R/igraph 1.2.72021-10-15T00:00:00+00:002021-10-15T00:00:00+00:00https://igraph.org/2021/10/15/igraph-1.2.7-rIn an attempt to bring the R interface of igraph closer to the recent developments of the C core, we have released R-igraph 1.2.7, the seventh bugfix release of the 1.2 series. This version updates the C core of igraph within the R interface to version 0.8.5, which, while still several versions behind the mainline C core, fixes a range of bugs compared to the previous release and introduces a few new functions.

This release is only the beginning; in the next few months we aim to process most of the issues on the Github issue tracker, close the ones that are not relevant any more, fix the ones that should be fixed, and then proceed with updating the R interface to version 0.9.4 of the C core, which is the most recent C core version at the time of writing.

Release Notes

Added:

  • cluster_leiden() added as an interface to the Leiden community detection algorithm in the C core of igraph (#399.
  • cluster_fluid_communities() added as an interface to the fluid communities algorithm of the C core of igraph (#454.

Fixed:

  • make_lattice() correctly rounds length to the nearest integer while printing a warning (#115.
  • make_empty_graph(NULL) now prints an error instead of producing an invalid graph (#404).
  • make_graph(c()) now produces an empty graph instead of printing a misleading error message (#431).
  • Printing a graph where some edges have NA as the names of both endpoints does not produce a misleading error message any more (#410).
  • The types argument of functions related to bipartite graphs now prints a warning when the types are coerced to booleans (#476).
  • Betweenness normalisation no longer overflows (#442).
  • layout_with_sugiyama() returns a layout of type matrix even if there is only one vertex in the graph (#408).
  • Plotting a null graph (i.e. a graph with no vertices) does not throw an error any more (#387).

Deprecated:

  • The membership argument of modularity.matrix() is now deprecated as the function never needed it anyway.
  • modularity() now prints a warning when it is applied on a directed graph because the implementation in igraph’s C core does not support directed graphs as of version 0.8.5. The warning will be turned into an error in the next minor (1.3.0) version of the R interface; the error will be removed later when the C core is updated to a version that supports modularity for directed networks.
  • transitivity() now prints a warning when its local variant (type="local") is called on a directed graph or a graph with multiple edges beecause the implementation in the C core of igraph does not work reliably in these cases as of version 0.8.5. The warning will be turned into an error in the next minor (1.3.0) version of the R interface; the error will be removed later when the C core is updated to a version that supports transitivity for networks with multiple edges.

Misc:

  • Documentation improvements.
]]>
igraph docs for multiple versions2021-10-05T00:00:00+00:002021-10-05T00:00:00+00:00https://igraph.org/2021/10/05/versioned-docsThe online docs for igraph on this website now include multiple versions of API documentation and tutorials for the C core and the R and Python interfaces.

To change version, click on the new button on the top left of the page on the relevant pages:

]]>
Additional funding for igraph2021-09-01T00:00:00+00:002021-09-01T00:00:00+00:00https://igraph.org/2021/09/01/fundingThe igraph project is proud to announce that the Chan Zuckerberg Initiative continues to fund the project in their program on Essential Open Source Software for Science. The project will receive two grants of $400,000 over the course of the next two years. One grant will help to further develop and maintain the igraph project. The other grant will help to diversify the pool of contributors and maintainers of the project, which is jointly coordinated with Women in Network Science, and will be led by Brooke Foucault Welles.

Last year, the core library of igraph was enormously improved, making the library easier to build, easier to maintain and easier to use. However, most users are not using the C core directly, but are using it through one of the interfaces: Python, R or Mathematica. The CZI grant will support the igraph development team on improving these interfaces, by making them more intuitive to use and by integrating them more closely in the host language. Additionally, development efforts will be aimed at making the library and the interfaces easier to maintain, focusing on long-term sustainability. This ensures that igraph continues to be a useful tool for network scientists from various disciplines across the globe.

Having people committed to maintain and further develop igraph is critical to ensure its long-term viability. We made steps towards building a more inclusive and engaged community by opening a forum dedicated to igraph. We aim to enlarge and diversify the team of contributors and maintainers of the project. Making it easier to start using igraph and contributing to igraph is an important step. Improving documentation and tutorials helps achieve that goal, but we will also actively organize workshops for users and contributors, with a specific focus on women and non-binary people, and engage more actively on the community forum. Additionally, a mentorship programme will be setup specifically to facilitate women and non-binary people to use and contribute to igraph, paving the way for them to become maintainers of igraph. The CZI grant will enable us to engage more people in achieving these objectives.

]]>
python-igraph 0.9.62021-06-12T00:00:00+00:002021-06-12T00:00:00+00:00https://igraph.org/2021/06/12/igraph-0.9.6-pythonpython-igraph 0.9.6, the fourth bugfix release of the 0.9 series, has arrived.

The preferred way of installing the Python interface is via pip; typing pip install python-igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

This release provides a fix for a single plotting issue with the Matplotlib backend that was accidentally introduced in 0.9.5. See the changelog on Github for more details:

This release also provides experimental native Python wheels for Apple Silicon CPUs. Note that the Apple Silicon wheels are not tested in a CI environment yet; this will hopefully change in the near future when Github Actions starts supporting Apple Silicon. Until then, feel free to report any issues that you find with Apple Silicon wheels (or any other wheel) in the issue tracker on Github.

]]>
python-igraph 0.9.52021-06-11T00:00:00+00:002021-06-11T00:00:00+00:00https://igraph.org/2021/06/11/igraph-0.9.5-pythonpython-igraph 0.9.5, the third bugfix release of the 0.9 series, has arrived.

The preferred way of installing the Python interface is via pip; typing pip install python-igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

See the changelogs on Github for relevant changes in 0.9.5:

This release also provides experimental native Python wheels for Apple Silicon CPUs. Note that the Apple Silicon wheels are not tested in a CI environment yet; this will hopefully change in the near future when Github Actions starts supporting Apple Silicon. Until then, feel free to report any issues that you find with Apple Silicon wheels (or any other wheel) in the issue tracker on Github.

]]>
C/igraph 0.9.42021-05-31T00:00:00+00:002021-05-31T00:00:00+00:00https://igraph.org/2021/05/31/igraph-0.9.4-cC/igraph 0.9.4, the fourth bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes only.

Changed

  • Unweighted transitivity (i.e. clustering coefficient) calculations now ignore multi-edges and edge directions instead of rejecting multigraphs and directed graphs.
  • igraph_transitivity_barrat() now returns an error code if the input graph has multiple edges (which is not handled correctly by the implementation yet).

Fixed

  • igraph_local_scan_k_ecount() now handles loops correctly.
  • igraph_transitivity_avglocal_undirected() is no longer slower than igraph_transitivity_local_undirected().
  • Worked around an invalid warning issued by Clang 9.0 when compiling with OpenMP.

Other

  • Documentation improvements.
]]>
python-igraph 0.9.42021-05-31T00:00:00+00:002021-05-31T00:00:00+00:00https://igraph.org/2021/05/31/igraph-0.9.4-pythonpython-igraph 0.9.4, the second bugfix release of the 0.9 series, has arrived. (Yes, we skipped 0.9.2 and 0.9.3).

The preferred way of installing the Python interface is via pip; typing pip install python-igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

This release brings python-igraph up-to-date with igraph 0.9.4. See the changelogs on Github for relevant changes in 0.9.4:

This release is also the first one that provides experimental native Python wheels for Apple Silicon CPUs. Note that the Apple Silicon wheels are not tested in a CI environment yet; this will hopefully change in the near future when Github Actions starts supporting Apple Silicon. Until then, feel free to report any issues that you find with Apple Silicon wheels (or any other wheel) in the issue tracker on Github.

]]>
C/igraph 0.9.32021-05-05T00:00:00+00:002021-05-05T00:00:00+00:00https://igraph.org/2021/05/05/igraph-0.9.3-cC/igraph 0.9.3, the third bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes only.

Added

  • OpenMP is now enabled and used by certain functions (notably PageRank calculation) when the compiler supports it. Set IGRAPH_OPENMP_SUPPORT=OFF at configuration time to disable this.

Fixed

  • 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 package files did not respect CMAKE_INSTALL_LIBDIR. This only affected Linux distributions which install into lib64 or other locations instead of lib.
  • The parser sources could not be generated when igraph was in a location that contained spaces in its path.
  • igraph no longer links to the math library (libm) when this is not necessary.
  • _CRT_SECURE_NO_WARNINGS is now defined during compilation to enable compatibility with UWP.
  • Fixed a compilation issue on MSYS / MinGW when link-time optimization was enabled and the 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.

Deprecated

  • igraph_rng_min() is now deprecated; assume a constant zero as its return value if you used this function in your own code.

Other

  • Updated the vendored CXSparse library to version 3.2.0
]]>
C/igraph 0.9.22021-04-14T00:00:00+00:002021-04-14T00:00:00+00:00https://igraph.org/2021/04/14/igraph-0.9.2-cC/igraph 0.9.2, the second bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes only. We have also added support for CMake package files, making it easier to use igraph in CMake-based projects.

Added

  • CMake package files are now installed with igraph. This allows find_package(igraph) to find igraph and detect the appropriate compilation options for projects that link to it.

Fixed

  • igraph can now be used as a CMake subproject in other CMake-based projects.
  • The documentaton can now be built from the release tarball.
  • Configuration will no longer fail when the release tarball is extracted into a subdirectory of an unrelated git repository.
  • The generated pkg-config file was incorrect when CMAKE_INSTALL_<dir> variables were absolute paths.
  • On Unix-like systems, the library name is now libigraph.so.0.0.0, as it used to be for igraph 0.8 and earlier.
  • Fixed a return type mismatch in parser sources, and fixed some warnings with recent versions of gcc.
  • Fixed a bug in igraph_get_shortest_paths_dijkstra() and igraph_get_shortest_paths_bellman_ford() that returned incorrect results for unreachable vertices.

Other

  • Improved installation instructions and tutorial.
]]>
python-igraph 0.9.12021-03-26T00:00:00+00:002021-03-26T00:00:00+00:00https://igraph.org/2021/03/26/igraph-0.9.1-pythonpython-igraph 0.9.1, the first bugfix release of the 0.9 series, has arrived.

The preferred way of installing the Python interface is via pip; typing pip install python-igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

This release brings python-igraph up-to-date with igraph 0.9.1. See the changelogs on Github for relevant changes in 0.9.0 and 0.9.1:

]]>
C/igraph 0.9.12021-03-23T00:00:00+00:002021-03-23T00:00:00+00:00https://igraph.org/2021/03/23/igraph-0.9.1-cC/igraph 0.9.1, the first bugfix release of the 0.9 series, has arrived.

The source can be obtained from the GitHub releases page.

This release includes bug fixes only, apart from a minor addition concerning lexicographic ordering of vectors, which was not substantial enough for a minor version bump. The changelog is below.

Added

  • igraph_vector_lex_cmp() and igraph_vector_colex_cmp() for lexicographic and colexicographic comparison of vectors. These functions may also be used for sorting.

Changed

  • igraph_community_multilevel() is now randomized (thanks to Daniel Noom).

Fixed

  • CMake settings that controlled the library installation directory name, such as CMAKE_INSTALL_LIBDIR, were not respected.
  • Under some conditions, the generated pkg-config file contained an incorrect include directory path.
  • The following functions were not exported from the shared library: igraph_subcomponent(), igraph_stack_ptr_free_all(), igraph_stack_ptr_destroy_all(), igraph_status_handler_stderr(), igraph_progress_handler_stderr().
  • Built-in random number generators (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 (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.
  • 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.
  • Non-maximal clique finding functions would sometimes return incomplete results when finding more than 2147483647 (i.e. 2^31 - 1) cliques.
  • GLPK internal errors no longer crash igraph.
  • Fixed some potential memory leaks that could happen on error conditions or when certain functions were interrupted.
  • When testing a DLL build on Windows, the PATH was sometimes not set correctly, causing the tests to fail.
  • When compiling from the git repository (as opposed to the release tarball), the build would fail with recent versions of bison and flex.

Other

  • Documentation improvements.
  • Much faster documentation builds.
  • Allow using a pre-generated arith.h header for f2c when cross-compiling; see the Installation section of the documentation.
  • The 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.
  • The following functions are now interruptible: igraph_grg_game(), igraph_sbm_game(), igraph_barabasi_game(), igraph_barabasi_aging_game().
  • Functions that use GLPK, such as igraph_feedback_arc_set() and igraph_community_optimal_modularity() are now interruptible.
  • Add support for older versions of Clang that do not recognize the -Wno-varargs flag.

Acknowledgments

  • Big thanks to Daniel Noom for continuing to expand the test suite and discovering and fixing several bugs in the process!
]]>
C/igraph 0.9.02021-02-16T00:00:00+00:002021-02-16T00:00:00+00:00https://igraph.org/2021/02/16/igraph-0.9.0-cRelease 0.9.0 of igraph’s C core has arrived, almost exactly one year after the latest minor release, 0.8.0. This release brings several new features and improvements, and also a complete switch from the old autotools-based build system to a new one based on CMake. This results in faster build times and the opportunity to use alternative build tools instead of make; in particular, igraph now support ninja and can also make use of a locally installed ccache compiler cache for even faster builds.

We gratefully acknowledge support from CZI for the development of igraph. In addition, we would like to thank everyone who reported issues, contributed features or fixes, or edited the documentation. igraph is an open-source project run by volunteers. As always, your contributions are very welcome!

Most people use igraph through its high-level interfaces for R, Python or Mathematica. A new release of the Python interface, based on 0.9.0, is expected to be released in a few days. The R and Mathematica interfaces already include some of the improvements, and will continue to integrate more.

The sources and the changelog can be obtained from the GitHub releases page.

]]>
C/igraph 0.8.52020-12-07T00:00:00+00:002020-12-07T00:00:00+00:00https://igraph.org/2020/12/07/igraph-0.8.5-cC/igraph 0.8.5, the fifth bugfix release of the 0.8 series, has arrived.

The sources can be obtained from the GitHub releases page.

This release includes bug fixes only. The changelog is below.

Changed

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

Fixed

  • Fixed several compilation issues with MINGW32/64, thanks to @jannick0
  • igraph_layout_davidson_harel() was not interruptible; now it is.
  • Added a missing memory cleanup call in igraph_i_cattribute_combine_vertices().
  • Fixed a few memory leaks in test cases.
]]>
C/igraph 0.8.42020-11-24T00:00:00+00:002020-11-24T00:00:00+00:00https://igraph.org/2020/11/24/igraph-0.8.4-cC/igraph 0.8.4, the fourth bugfix release of the 0.8 series, has arrived.

The sources can be obtained from the GitHub releases page.

This release includes bug fixes and documentation improvements. The changelog is below.

Fixed

  • 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 prototype
  • igraph_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.
  • Fixed building with vendored LAPACK and external BLAS
  • Fixed building with XCode 12.2 on macOS

Other

  • Documentation improvements
  • General code cleanup to reduce the number of compiler warnings
]]>
python-igraph 0.8.32020-10-08T00:00:00+00:002020-10-08T00:00:00+00:00https://igraph.org/2020/10/08/igraph-0.8.3-pythonpython-igraph 0.8.3, the third bugfix release of the 0.8 series, has arrived.

The preferred way of installing the Python interface is via pip; typing pip install python-igraph should install a pre-compiled Python wheel on most supported platforms (Windows, Linux and macOS). The pre-compiled wheels and the source code are also available from the Python Package Index page.

This release brings python-igraph up-to-date with igraph 0.8.3, and it also contains bug fixes and performance improvements. This release will also be the last one whose version number is deliberately in sync with the version number of the C core. The changelog is below.

Added

  • Graph.community_leiden() now supports a negative number of iterations; it will keep on iterating until the algorithm reaches a stable partition.

  • Graph.Incidence() now supports weighted graphs, thanks to @PuneethaPai

  • You can now create a Graph object from a pandas dataframe with Graph.DataFrame, thanks to @iosonofabio

  • Added conversion to/from networkx and graph-tool with Graph.{to,from}_{networkx,graph_tool}, thanks to @iosonofabio

  • Graph.add_edges() and Graph.add_vertices() now supports specifying attributes for the newly added vertices and edges, thanks to @iosonofabio

  • Added Graph.dfs() and Graph.dfsiter(), thanks to @iosonofabio

  • Added Graph.bridges() to get the bridges of a graph.

  • Added Graph.clear() to remove all edges, vertices and graph attributes in a single call, thanks to @iosonofabio

Changed

  • Upgraded igraph C library to 0.8.3.

  • Graph union and intersection now supports graphs with vertex names, thanks to @iosonofabio

  • Graph.delete_vertices(None) and Graph.delete_edges(None) are now deprecated; use Graph.delete_vertices() and Graph.delete_edges() (without a positional argument) instead to delete all vertices or edges. The old syntax will be removed in 0.9.

Fixed

  • setup.py now works on Windows with MinGW, thanks to @Parakoopa

  • Graph.difference() now treats loop edges correctly

  • summary() does not fail with non-string vertex names any more, thanks to @deeenes

  • The Reingold-Tilford layout should not produce edge crossings on tree graphs any more.

  • The postprocessing step of Graph.biconnected_components() is much faster now (#281); the earlier version was responsible for a significant speed difference between the C core and the Python interface.

Other

  • Various documentation improvements, thanks to @chrisfalter, @iosonofabio, @kmankinen, @remysucre, @szhorvat

  • Graph.complementer() now allows keyword arguments (it used to support positional arguments only).

  • Dropped support for Python 3.5, added support for Python 3.9.

]]>
C/igraph 0.8.32020-10-02T00:00:00+00:002020-10-02T00:00:00+00:00https://igraph.org/2020/10/02/igraph-0.8.3-cC/igraph 0.8.3, the third bugfix release of the 0.8 series, has arrived.

The sources can be obtained from the GitHub releases page.

This release includes bug fixes and performance improvements. The changelog is below.

Added

  • igraph_vector_binsearch_slice() performs binary search on a sorted slice of a vector.

Changed

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

Fixed

  • igraph_isomorphic() now verifies that the input graphs have no multi-edges.
  • igraph_difference() was creating superfluous self loops.
  • igraph_count_multiple() was giving incorrect results for self-loops in directed graph.
  • igraph_betweenness_estimate(): fixed incorrect results with finite cutoff.
  • igraph_eigen_matrix_symmetric(): fixed incorrect matrix multiplication.
  • Corrected several issues that could arise during an error condition.
  • igraph_realize_degree_sequence() did not correctly detect some non-graphical inputs.
  • igraph_is_graphical_degree_sequence(): fixed incorrect results in undirected case.
  • igraph_community_leiden(): fixed incorrect result when self-loops are present.
  • 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.

Other

  • igraph_degree_sequence_game(): improved performance with IGRAPH_DEGSEQ_SIMPLE_NO_MULTIPLE_UNIFORM method.
  • Improved the robustness of the test suite.
  • Documentation improvements.
  • Improved error and warning messages.
  • Improved compatibility with recent versions of Microsoft Visual C.
]]>
Funding from CZI2020-05-27T00:00:00+00:002020-05-27T00:00:00+00:00https://igraph.org/2020/05/27/fundingWe are excited to announce that the igraph project will be supported with a grant of $180,000 from the Chan Zuckerberg Initiative in the Essential Open Source Software for Science program. It was recognized that igraph fulfills a critical role for providing network analysis in a variety of scientific domains, including biomedical research. The funding will expedite ongoing development efforts, and should result in a 1.0 release of igraph’s C core with a stable, well-documented and supported API.

For years, the development of igraph was done on a voluntary basis. With funding available, we can make sure developers have more time available to dedicate to igraph. In particular, the funding will support Gábor Csárdi, Tamás Nepusz, Szabolcs Horvát, Vincent Traag and Fabio Zanini.

The core of igraph is written in C, but most people use igraph through its high-level interfaces for R, Python or Mathematica. Much of the development effort will be concentrated on the core of igraph, but the high-level interfaces will not be overlooked.

Even though we will dedicate more time to igraph, the project cannot survive without a vibrant community of users and contributors. Whether you reported issues, contributed code or improved the documentation, your contributions remain vital to the project. We hope that our new community forum will enable us to form a tighter and more supportive community, where you can ask questions, support others, or discuss recent advances in network analysis or graph theory.

The project will start from the 1st of September onwards, and will last for a year. The 1.0 version is planned to be released towards the end of the project.

]]>
C/igraph 0.8.22020-04-29T00:00:00+00:002020-04-29T00:00:00+00:00https://igraph.org/2020/04/29/igraph-0.8.2-cC/igraph 0.8.2, the second bugfix release of the 0.8 series, has arrived.

The sources can be obtained from the GitHub releases page.

This release includes no new features, only bug fixes and reliability improvements. The changelog is below.

Changed

  • Improved argument checking: igraph_all_st_mincuts() and igraph_sir()
  • Improved interruptibility: igraph_sir()

Fixed

  • igraph_community_leiden(): fixed crash when interrupting
  • The tests are now more robust. Some incorrect test failures were fixed when running on i386 architecture, or when using different versions of external dependencies.

Others

  • Improved error messages from igraph_sir().
  • Improved compatibility with more recent versions of Microsoft Visual C.
]]>
C/igraph 0.8.12020-03-16T00:00:00+00:002020-03-16T00:00:00+00:00https://igraph.org/2020/03/16/igraph-0.8.1-cWe are happy to announce the first bugfix release of the 0.8 series of igraph’s C core!

The sources can be obtained from the GitHub releases page.

This release includes no new features, only bug fixes and reliability improvements. The changelog is below.

Changed

  • Improved interruptability: igraph_degree_sequence_game()
  • Improved argument checking: igraph_forest_fire_game()
  • Updated the plfit library to version 0.8.1

Fixed

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

Other

  • Included ACKOWLEDGEMENTS.md
  • Documentation improvements
]]>
python-igraph 0.8.02020-02-14T00:00:00+00:002020-02-14T00:00:00+00:00https://igraph.org/2020/02/14/igraph-0.8.0-pythonRelease 0.8.0 of igraph’s Python interface follows the recent release of version 0.8.0 of the C core with many bug fixes that have accumulated over the last five years, and an improved build process that does not require the C core of igraph to be downloaded at the time when python-igraph is installed; the tarball of python-igraph already bundles the appropriate version of the C core in it.

Including the C core directly in the source tarball also allows us to decouple python-igraph’s version number from the version number of the C core in the future. This means that we no longer have to wait for a release of the C core in order to fix some bugs in the Python interface.

Precompiled Python wheels

Starting from this release, we will also aim to provide pre-compiled Python wheels for most platforms. The current release includes Python wheels for Python 2.7, 3.5, 3.6, 3.7 and 3.8 on Windows, macOS and Linux, so most users will not have to compile anything when installing python-igraph from pip. Currently the only limitation is that the Windows wheels do not support GraphML import; this will be fixed in the next patch release (0.8.1).

End of support for Python 2.7

python-igraph 0.8.x will also be the last version that supports Python 2.7. Since Python 2 has reached its end of life, we will drop support for Python 2 before python-igraph 0.9 so we can simplify some parts of the codebase where we needed to introduce additional code to support both Python versions.

As for Python 3, we are committing ourselves to supporting at least the last three minor releases of Python 3.

Although we are not supporting PyPy officially, python-igraph will also be tested with PyPy regularly in a CI environment, and we will strive to fix any issues that arise with PyPy. If you use python-igraph with PyPy and you are willing to become an official maintainer responsible for PyPy compatibility, please let us know in the community forum.

New community forum

Concurrently with the release of igraph 0.8, we have launched a new community forum, which replaces the mailing list as the main support channel. The community forum is also meant for users of python-igraph, so If you are a current python-igraph user or just interested in the project, please join!

We would like to thank everyone who reported issues, contributed features or fixes, or edited the documentation. igraph is an open-source project run by volunteers. As always, your contributions are very welcome!

]]>
C/igraph 0.8.02020-01-29T00:00:00+00:002020-01-29T00:00:00+00:00https://igraph.org/2020/01/29/igraph-0.8.0-cRelease 0.8.0 of igraph’s C core, coming almost five years after 0.7.1, is a major improvement with several new features, performance and robustness improvements, and many bug fixes. New functionality includes additional graph generators, functions for handling trees, new community detection methods, improved clique finding, spectral graph embedding, as well as several other features. Please see the changelog for more details.

We would like to thank everyone who reported issues, contributed features or fixes, or edited the documentation. igraph is an open-source project run by volunteers. As always, your contributions are very welcome!

Most people use igraph through its high-level interfaces for R, Python or Mathematica. A new release of the Python interface, incorporating all these improvements, is expected to be released in a few weeks. The R and Mathematica interfaces already include some of the improvements, and will continue to integrate more.

Concurrently with the release of igraph 0.8, we are launching a new community forum, which will replace the mailing list as the main support channel. If you are a current igraph user or just interested in the project, please join!

]]>
IGraph/M 0.3.1032018-11-20T00:00:00+00:002018-11-20T00:00:00+00:00https://igraph.org/2018/11/20/igraph-for-mathematicaIGraph/M, a Mathematica interface for igraph is now officially one of the supported higher-level interfaces for igraph. We would like to thank Szabolcs Horvát for all his efforts dedicated to supporting igraph from Mathematica!

New releases of IGraph/M will be published on the GitHub page of the project.

]]>
R/igraph 1.0.02015-06-24T00:00:00+00:002015-06-24T00:00:00+00:00https://igraph.org/2015/06/24/igraph-1.0.0-rRelease Notes

This is a new major release, with a lot of UI changes. We tried to make it easier to use, with short and easy to remember, consistent function names. Unfortunately this also means that many functions have new names now, but don’t worry, all the old names still work.

Apart from the new names, the biggest change in this release is that most functions that used to return numeric vertex or edge ids, return vertex/edge sequences now. This requires some time to get used to and if you want the numeric ids instead, just use the as.vector() function on the vertex/edge sequences.

We will update the documentation on this site, once the package is on CRAN and available for all architectures.

Other major changes:

  • A generic make_graph() function to create graphs.
  • A generic layout_() (not the underscore!) function to create graph layouts, see also add_layout_().
  • The igraph data type has changed. You need to call upgrade_graph() on graphs created with previous igraph versions.
  • Vertex and edge sequence operations: union, intersection, etc.
  • Vertex and edge sequences can only be used with the graphs they belong to. This is now strictly checked.
  • Vertex and edge sequences have a [[ operator now, for easy viewing of vertex/edge metadata.
  • Vertex and edge sequences are implemented as weak references. See also the as_ids() function to convert them to simple ids.
  • Vertex order can be specified for the circle layout now.
  • Davidson-Harel layout algorithm layout_with_dh().
  • GEM layout algorithm layout_with_gem().
  • Neighborhood functions have a mindist parameter for the smallest distance to consider.
  • all_simple_paths() function to list all simple paths in a graph.
  • triangles() lists all triangles in a graph.
  • Fruchterman-Reingold and Kamada-Kawai layout algorithms rewritten from scratch. They are much faster and follow the original publications closely.
  • Nicer printing of graphs, vertex and edge sequences.
  • local_scan() function calculates scan statistics.
  • Embeddings: embed_adjacency_matrix() and embed_laplacian_matrix().
  • Product operator: *, the same graph multiple times. Can be also used as rep().
  • Better default colors, color palettes for vertices.
  • Random walk on a graph: random_walk()
  • adjacenct_vertices() and incident_edges() functions, they are vectorized, as opposed to neighhors() and incident().
  • Convert a graph to a long data frame with as_long_data_frame().
]]>
Repositories at GitHub2015-01-16T00:00:00+00:002015-01-16T00:00:00+00:00https://igraph.org/2015/01/16/separate-reposA couple of days ago we changed how we use GitHub for igraph development. Our goal is to make igraph development more accessible, and our build process simpler. Instead of using a common repository for everything, we now use separate repos for the igraph C library, the R package and the Python extension. The igraph.org website was already in a separate repository, and we will also break up the R package, by putting loosely coupled parts in their own packages and repositories.

Main igraph repositories now:

  • igraph C library: https://github.com/igraph/igraph
  • igraph R package: https://github.com/igraph/rigraph
  • python-igraph: https://github.com/igraph/python-igraph
  • igraphdata R package: https://github.com/igraph/igraphdata
  • igraph.org homepage: https://github.com/igraph/igraph.org
]]>
C/igraph 0.7.12014-04-21T00:00:00+00:002014-04-21T00:00:00+00:00https://igraph.org/2014/04/21/igraph-0.7.1-cRelease Notes

Some bug fixes, to make sure that the code included in ‘Statistical Analysis of Network Data with R’ works. See http://github.com/kolaczyk/sand

Detailed changes:

  • Better error handling in the GraphML parser.
  • GraphML reader is a bit more lenient now; makes it possible to read GraphML files saved from yWorks apps.
  • Fixed a bug in igraph_constaint(), issue #580.
  • Bipartite projection now detects invalid edges instead of giving a cryptic error, issue #543.
  • Bipartite projection now detects invalid edges instead of giving a cryptic error, issue #543.
]]>
R/igraph 0.7.12014-04-21T00:00:00+00:002014-04-21T00:00:00+00:00https://igraph.org/2014/04/21/igraph-0.7.1-rRelease Notes

Some bug fixes, to make sure that the code included in ‘Statistical Analysis of Network Data with R’ works. See https://github.com/kolaczyk/sand

Detailed changes:

  • Graph drawing: fix labels of curved edges, issue #181.
  • Graph drawing: allow fixing edge labels at given positions, issue #181.
  • Drop the ‘type’ vertex attribute after bipartite projection, the projections are not bipartite any more, issue #255.
  • Print logical attributes in header properly (i.e. encoded by l, not x, which is for complex attributes. Issue #578.
  • Add a constructor for communities objects, see create.communities(). Issue #547.
  • Better error handling in the GraphML parser.
  • GraphML reader is a bit more lenient now; makes it possible to read GraphML files saved from yWorks apps.
  • Fixed a bug in constaint(), issue #580.
  • Bipartite projection now detects invalid edges instead of giving a cryptic error, issue #543.
  • Fixed the simplify argument of graph.formula(), which was broken, issue #586.
  • The function crossing() adds better names to the result, fixes issue #587.
  • The sir() function gives an error if the input graph is not simple, fixes issue #582.
  • Calling igraph functions from igraph callbacks is not allowed now, fixes issue #571.
]]>
C/igraph 0.7.02014-02-04T00:00:00+00:002014-02-04T00:00:00+00:00https://igraph.org/2014/02/04/igraph-0.7-cRelease Notes

There are a bunch of new features in the library itself, and other important changes in the life of the project. Thanks everyone for sending code and reporting bugs!

igraph @ github

igraph’s development has moved from Launchpad to github. This has actually happened several month ago, but never announced officially. The place for reporting bugs is at https://github.com/igraph/igraph/issues.

New homepage

The igraph library’s homepage is now hosted at http://igraph.org/c, and it is brand new. We wanted to make it easier to use and better to look at.

Better nightly downloads

You can download nightly builds from igraph at http://igraph.org/nightly.

C library news and changes

  • Added igraph_adjlist_print(), igraph_adjlist_fprint(), igraph_inclist_print(), igraph_inclist_fprinf() functions.
  • Make attribute prefixes optional when writing a GraphML file.
  • Added function igraph_modularity_matrix().
  • Support edge weights in leading eigenvector community detection.
  • Added the LAD library for checking (sub)graph isomorphism, version 1.
  • Boolean attributes.
  • Added igraph_layout_bipartite() function, a simple two-column layout for bipartite graphs.
  • Support incidence matrices in bipartite Pajek files.
  • Pajek files in matrix format are now directed by default, unless they are bipartite.
  • Support weighted (and signed) networks in Pajek when file is in matrix format.
  • Fixed a bug in igraph_barabasi_game(), algorithm psumtree-multiple just froze.
  • Added support for Boolean attributes in the GraphML and GML readers and writer.
  • Change MDS layout coordinates, first dim is according to first eigenvalue, etc.
  • Update igraph_union() and igraph_union_many() to return mappings for the edges.
  • Rewritten igraph_intersection(), it can now report edge mappings.
  • igraph_rewire(): now supports the generation and destruction of loops.
  • Erdos-Renyi type bipartite random graphs.
  • Added predecessors and inbound_edges arguments to igraph_get_shortest_paths[_dijkstra]().
  • igraph_rewire() now shows the fraction of successful swaps in the progress message.
  • Added igraph_graphlets() and related functions.
  • Fix modularity values of multilevel community if there are no merges at all.
  • Fixed a potential crash in igraph_edge_connectivity(), because of an un-initialized variable.
  • Fix a potential segfault in igraph_atlas().
  • Avoiding overflow in igraph_closeness() and related functions.
  • Fixed an invalid memory read (and a potential crash) in the infomap community detection.
  • Fix a bug in triad census that set the first element of the result to NaN.
  • Fixed a bug in weighted mudularity calculation, sum of the weights was truncated to an integer.
  • Fixed a bug in weighted multilevel communtiies, the maximum weight was rounded to an integer.
  • Reimplement push-relabel maximum flow with gap heuristics.
  • Maximum flow functions now return some statistics about the push relabel algorithm steps.
  • Fix issue #481, thread-local storage is now correctly detected by configure on newer clang versions.
  • Fixed missing whitespace in Pajek writer when the ID attribute was numeric.
  • Fixed a bug that caused igraph_read_graph_gml() to crash when the ID attribute was non-numeric.
  • Fix dyad census instability, sometimes incorrect results were reported.
  • Dyad census detects integer overflow now and gives a warning.
  • Added printf functions for igraph_vector_t() and igraph_matrix_t().
  • Added a function to count the number of adjacent triangles: igraph_adjacenct_triangles().
  • Added igraph_eigen_adjacency() function, eigenproblems on adjacency matrices.
  • Added a Gomory-Hu tree implementation: igraph_gomory_hu_tree().
  • Added weights support for igraph_community_optimal_modularity(), closes #511.
  • Faster maximal clique finding (#513).
  • Added a function to count maximal cliques: igraph_maximal_cliques_count().
  • Data type igraph_adjlist_t uses integer vectors now.
  • Generate graphs from a stochastic block model: igraph_sbm_game().
  • We use PRPACK to calculate PageRank scores see https://github.com/dgleich/prpack
  • Add normalized argument to closeness functions, fixes issue #3.
  • Implement the start argument in igraph_hrg_fit (#225).
  • Fixed a bug in igraph_density that resulted in incorrect values for undirected graphs with loops.
  • Fixed a bug that made Bellman-Ford shortest paths calculations fail.
  • Fixed a minimum cut bug for weighted undirected graphs (#564).
  • Fixed argument ordering in igraph_st_mincut and related functions.
]]>
python-igraph 0.7.02014-02-04T00:00:00+00:002014-02-04T00:00:00+00:00https://igraph.org/2014/02/04/igraph-0.7-pythonRelease Notes

There are a bunch of new features in the library itself, and other important changes in the life of the project. Thanks everyone for sending code and reporting bugs!

igraph @ github

igraph’s development has moved from Launchpad to github. This has actually happened several month ago, but never announced officially. The place for reporting bugs is at https://github.com/igraph/igraph/issues.

New homepage

igraph’s homepage is now hosted at http://igraph.org, and it is brand new. We wanted to make it easier to use and modern.

Better nightly downloads

You can download nightly builds from igraph at http://igraph.org/nightly. Source and binary R packages (for windows and OSX), C library bundles, and Python source packages are built currently. We are planning to add binary Python packages soon.

Other news and fixes

  • Support edge weights in leading eigenvector community detection.
  • Added the LAD library for checking (sub)graph isomorphism, version 1.
  • Support incidence matrices in bipartite Pajek files.
  • Added Graph.layout_bipartite() function, a simple two-column layout for bipartite graphs.
  • Pajek files in matrix format are now directed by default, unless they are bipartite.
  • Support weighted (and signed) networks in Pajek when file is in matrix format.
  • Fixed a bug in Barabasi(), algorithm psumtree-multiple just froze.
  • Added support for Boolean attributes in the GraphML and GML readers and writer.
  • Added support for Boolean attributes
  • Change MDS layout coordinates, first dim is according to first eigenvalue, etc.
  • Add Graph.st_mincut() method, to find a minimal s-t cut in a graph.
  • Added support for the source= and target= parameters in Graph.mincut().
  • Graph.rewire(): now supports the generation and destruction of loops.
  • Erdos-Renyi type bipartite random graphs: Graph.Random_Bipartite().
  • Python: moved igraph.nexus to igraph.remote.nexus
  • Fix modularity values of multilevel community if there are no merges at all.
  • Added keep_aspect_ratio option to Graph.__plot__().
  • Fixed a potential crash in igraph_edge_connectivity(), because of an un-initialized variable in the C code.
  • VertexSeq and EdgeSeq can now be indexed with NumPy integers
  • Avoiding overflow in Graph.closeness() and related functions.
  • Show plots inline in IPython.
  • Fixed an invalid memory read (and a potential crash) in the infomap community detection.
  • Fix a bug in triad census that set the first element of the result to NaN.
  • Fixed a bug in weighted mudularity calculation, sum of the weights was truncated to an integer.
  • Fixed a bug in weighted multilevel communtiies, the maximum weight was rounded to an integer.
  • Reimplement push-relabel maximum flow with gap heuristics.
  • Fixed invalid return value of RunningMean.__length__().
  • Fixed missing whitespace in Pajek writer when the ID attribute was numeric.
  • Fixed a bug that caused the GML reader to crash when the ID attribute was non-numeric.
  • Added Vertex.graph and Edge.graph attributes.
  • Fix dyad census instability, sometimes incorrect results were reported.
  • Dyad census detects integer overflow now and gives a warning.
  • Added a Gomory-Hu tree implementation: Graph.gomory_hu_tree().
  • sorted out return type inconsistency for Vertex.constraint(), closes #259.
  • Added weights support for Graph.community_optimal_modularity(), closes #511.
  • Faster maximal clique finding.
  • Fixed a bug in Graph.isomorphic_vf2(), edge colors were ignored.
  • Added rudimentary support for drawing edge labels.
  • Generate graphs from a stochastic block model: Graph.SBM().
  • We use PRPACK to calculate PageRank scores see https://github.com/dgleich/prpack
  • Implement the start argument in igraph_hrg_fit (#225).
  • Fixed a bug in graph density that resulted in incorrect values for undirected graphs with loops.
  • Fixed a bug that made Bellman-Ford shortest paths calculations fail.
  • Fixed a minimum cut bug for weighted undirected graphs (#564).
  • Fixed argument ordering in minimum cut and related functions.
]]>
R/igraph 0.7.02014-02-04T00:00:00+00:002014-02-04T00:00:00+00:00https://igraph.org/2014/02/04/igraph-0.7-rRelease Notes

There are a bunch of new features in the library itself, and other important changes in the life of the project. Thanks everyone for sending code and reporting bugs!

igraph @ github

igraph’s development has moved from Launchpad to github. This has actually happened several month ago, but never announced officially. The place for reporting bugs is at https://github.com/igraph/igraph/issues.

New homepage

igraph’s homepage is now hosted at http://igraph.org, and it is brand new. We wanted to make it easier to use and modern.

Better nightly downloads

You can download nightly builds from igraph at http://igraph.org/nightly. Source and binary R packages (for windows and OSX), are all built.

R: new features and bug fixes

  • Added a demo for hierarchical random graphs, invoke it via demo(hrg).
  • Make attribute prefixes optional when writing a GraphML file.
  • Added function mod.matrix().
  • Support edge weights in leading eigenvector community detection.
  • Added the LAD library for checking (sub)graph isomorphism, version 1.
  • Logical attributes.
  • Added layout.bipartite() function, a simple two-column layout for bipartite graphs.
  • Support incidence matrices in bipartite Pajek files.
  • Pajek files in matrix format are now directed by default, unless they are bipartite.
  • Support weighted (and signed) networks in Pajek when file is in matrix format.
  • Fixed a bug in barabasi.game(), algorithm psumtree-multiple just froze.
  • Function layout.mds() by default returns a layout matrix now.
  • Added support for Boolean attributes in the GraphML and GML readers and writer.
  • Change MDS layout coordinates, first dim is according to first eigenvalue, etc.
  • plot.communities() (plot.igraph(), really) draws a border around the marked groups by default.
  • printing graphs now converts the name graph attribute to character
  • Convenience functions to query and set all attributes at once: vertex.attriubutes(), graph.attributes() and edge.attributes().
  • Function graph.disjoint.union() handles attributes now.
  • Rewrite graph.union() to handle attributes properly.
  • rewire(): now supports the generation and destruction of loops.
  • Erdos-Renyi type bipartite random graphs: bipartite.random.game().
  • Support the new options (predecessors and inbound_edges) of get_shortest_paths(), reorganized the output of get.shortest.paths() completely.
  • Added graphlets() and related functions.
  • Fix modularity values of multilevel community if there are no merges at all.
  • Fixed bug when deleting edges with FALSE in the matrix notation.
  • Fix bonpow() and alpha.centrality() and make sure that the sparse solver is called.
  • tkplot() news: enable setting coordinates from the command line via tkplot.setcoords() and access to the canvas via tkplot.canvas().
  • Fixed a potential crash in igraph_edge_connectivity(), because of an un-initialized variable in the C code.
  • Avoiding overflow in closeness() and related functions.
  • Check for NAs after converting ‘type’ to logical in bipartite.projection().
  • graphNEL conversion functions only load the ‘graph’ package if it was not loaded before and they load it at the end of the search path, to minimize conflicts.
  • Fixed a bug when creating graphs from adjacency matrices, we now convert them to double, in case they are integers.
  • Fixed an invalid memory read (and a potential crash) in the infomap community detection.
  • Fixed a memory leak in the functions with attribute combinations.
  • Removed some memory leaks from the SCG functions.
  • Fixed some memory leaks in the ray tracer.
  • Fixed memory leak in graph.bfs() and graph.dfs().
  • Fix a bug in triad census that set the first element of the result to NaN.
  • Fixed a crash in is.chordal().
  • Fixed a bug in weighted mudularity calculation, sum of the weights was truncated to an integer.
  • Fixed a bug in weighted multilevel communtiies, the maximum weight was rounded to an integer.
  • Fixed a bug in centralization.closeness.tmax().
  • Reimplement push-relabel maximum flow with gap heuristics.
  • Maximum flow functions now return some statistics about the push relabel algorithm steps.
  • Function arpack() now gives error message if unknown options are given.
  • Fixed missing whitespace in Pajek writer when the ID attribute was numeric.
  • Fixed a bug that caused the GML reader to crash when the ID attribute was non-numeric.
  • Fixed issue #500, potential segfault if the two graphs in BLISS differ in the number of vertices or edges.
  • Added igraphtest() function.
  • Fix dyad census instability, sometimes incorrect results were reported.
  • Dyad census detects integer overflow now and gives a warning.
  • Function add.edges() does not allow now zeros in the vertex set.
  • Added a function to count the number of adjacent triangles: adjacenct.triangles().
  • Added graph.eigen() function, eigenproblems on adjacency matrices.
  • Added some workarounds for functions that create a lot of graphs, decompose.graph() and graph.neighborhood() use it. Fixes issue #508.
  • Added weights support for optimal.community(), closes #511.
  • Faster maximal clique finding.
  • Added a function to count maximum cliques.
  • Set operations: union, intersection, disjoint, union, difference, compose now work based on vertex names (if they are present) and keep attributes, closes #20.
  • Removed functions graph.intersection.by.name(), graph.union.by.name(), graph.difference.by.name().
  • The + operator on graphs now calls graph.union() if both argument graphs are named, and calls graph.disjoint.union() otherwise.
  • Added function igraph.version().
  • Generate graphs from a stochastic block model: sbm.game().
  • Do not suggest the stats, XML, jpeg and png packages any more.
  • Fixed a set.vertex/edge.attribute bug that changed both graph objects, after copying (#533)
  • Fixed a bug in barabasi.game that caused crashes.
  • We use PRPACK to calculate PageRank scores see https://github.com/dgleich/prpack
  • Added'which argument to bipartite.projection (#307).
  • Add normalized argument to closeness functions, fixes issue #3.
  • R: better handling of complex attributes, [[ on vertex/edge sets, fixes #231.
  • Implement the start argument in hrg.fit (#225).
  • Set root vertex in Reingold-Tilford layout, solves #473.
  • Fix betweenness normalization for directed graphs.
  • Fixed a bug in graph.density that resulted in incorrect values for undirected graphs with loops
  • Fixed a bug when many graphs were created in one C call (e.g. by graph.decompose), causing #550.
  • Fixed sparse graph.adjacency bugs for graphs with one edge, and graphs with zero edges.
  • Fixed a bug that made Bellman-Ford shortest paths calculations fail.
  • Fixed a graph.adjacency bug for undirected, weighted graphs and sparse matrices.
  • main, sub, xlab and ylab are proper graphics parameters now (#555).
  • graph.data.frame coerces arguments to data frame (#557).
  • Fixed a minimum cut bug for weighted undirected graphs (#564).
  • Functions for simulating epidemics (SIR model) on networks, see the sir function.
  • Fixed argument ordering in graph.mincut and related functions.
  • Avoid copying attributes in query functions and print (#573), these functions are much faster now for graphs with many vertices/edges and attributes.
  • Speed up writing GML and GraphML files, if some attributes are integer. It was really-really slow.
  • Fix multiple root vertices in graph.bfs (#575).
]]>
C/igraph 0.6.52013-02-24T00:00:00+00:002013-02-24T00:00:00+00:00https://igraph.org/2013/02/24/igraph-0.6.5-cThe version number is not a mistake, we jump to 0.6.5 from 0.6, for technical reasons.

Release Notes

igraph 0.6.5 is a minor release that contains only few big changes, and fixes a number of very annoying bugs.

See at the end for the complete list of changes. First let’s see the most important new features and changes.

Pajek reader supports bipartite graphs

See more here: igraph_read_graph_pajek.

Graphical degree sequences

We added some new functions if a sequence of integers is graphial, i.e. it can be the degree sequence of a simple graph. See more in the manual.

k-regular random graphs

It is possible now to generate regular random graphs, faster than the general degree sequence based generator. See more in the reference manual.

Fitting power law distributions

This release includes the plfit library to maximum likelihood fit power laws to discrete or contiouous data. See more in the reference manual.

C library news and changes

  • Added bipartite support to the Pajek reader and writer, closes bug #1042298.
  • igraph_layout_mds() uses LAPACK instead of ARPACK.
  • igraph_degree_sequence_game has a new method: IGRAPH_DEGSEQ_SIMPLE_NO_MULTIPLE.
  • Added the igraph_is_degree_sequence() and igraph_is_graphical_degree_sequence() functions.
  • igraph_rewire() has a new method: IGRAPH_REWIRING_SIMPLE_LOOPS, that can create loops.
  • Walktrap community detection now handles isolates.
  • Added igraph_k_regular_game().
  • Added igraph_power_law_fit.

  • Fixed a bug in igraph_barabasi_game when outseq was an empty vector.
  • Fixed overflow issues in centralization calculations.
  • Fixed an invalid return value of igraph_vector_ptr_pop_back.
  • Fixed a igraph_all_minimal_st_separators() bug, some vertex sets were incorrectly reported as separators. Bug #1033045.
  • Pajek exporter now always quotes strings, thanks to Elena Tea Russo.
  • Fixed a bug with handling small edge weights in igraph_shortest_paths_dijkstra(), thanks to Martin J Reed.
  • Fixed a bug in the NCV setting for ARPACK functions. It cannot be bigger than the matrix size.
  • igraph_layout_merge_dla uses better default parameter values now.
  • Fixed a bug in igraph_layout_mds() that resulted vertices on top of each other.
  • Attribute handler table is not thread-local any more.
  • Motif finding functions return IGRAPH_NAN for isomorphism classes that are not motifs (i.e. not connected). Fixes bug #1050859.
  • Fixed a bug when calculating the largest cliques of a directed graph. Bug #1073800.
  • Fix a bug in degree_sequence_game(), in_seq can be an empty vector as well instead of NULL, for an undirected graph.
  • Fixed a bug in the maximal clique search, closes #1074402.
  • Warn for negative weights when calculating PageRank.
  • Fixed a bug in igraph_eccentricity() (and also igraph_radius()), the results were often simply wrong.
  • Fixed a bug in igraph_get_all_shortest_paths_dijkstra() when edges had zero weight.
  • Fixed some potential crashes in the DrL layout generator.
  • Fixed a bug in the Reingold-Tilford layout when the graph is directed and mode != ALL.
  • Fixed a bug in igraph_has_multiple() that resulted in false negatives for some undirected graphs.
  • Fixed a crash in weighted betweenness calculation.
]]>
python-igraph 0.6.52013-02-24T00:00:00+00:002013-02-24T00:00:00+00:00https://igraph.org/2013/02/24/igraph-0.6.5-pythonThe version number is not a mistake, we jump to 0.6.5 from 0.6, for technical reasons.

Release Notes

igraph 0.6.5 is a minor release that contains only few big changes, and fixes a number of very annoying bugs.

See at the end for the complete list of changes. First let’s see the most important new features and changes.

Convert lists of tuples to graphs in Python

The Graph.TupleList() static method in Python now allows easy conversion of lists of tuples (such as database records or contents of CSV files) into graphs with named vertices and edge attributes.

Pajek reader supports bipartite graphs

See more in the documentation.

Graphical degree sequences

We added some new functions if a sequence of integers is graphial, i.e. it can be the degree sequence of a simple graph. See more in the documentation.

k-regular random graphs

It is possible now to generate regular random graphs, faster than the general degree sequence based generator. See more in the documentation.

Fitting power law distributions

This release includes the plfit library to maximum likelihood fit power laws to discrete or contiouous data. See more in the documentation.

Python news and fixes

  • Added bipartite support to the Pajek reader and writer, closes bug #1042298.
  • Graph.Degree_Sequence() has a new method now: no_multiple.
  • Added the is_degree_sequence() and is_graphical_degree_sequence() functions.
  • rewire() has a new mode: loops, that can create loop edges.
  • Walktrap community detection now handles isolates.
  • Added Graph.K_Regular().
  • power_law_fit() now uses a C implementation.
  • Added support for setting the frame (stroke) width of vertices using the frame_width attribute or the vertex_frame_width keyword argument in plot()
  • Improved Inkscape-friendly SVG output from Graph.write_svg(), thanks to drlog
  • Better handling of named vertices in Graph.delete_vertices()
  • Added experimental Gephi graph streaming support; see igraph.remote.gephi and igraph.drawing.graph.GephiGraphStreamingDrawer
  • Nicer __repr__ output for Flow and Cut instances
  • Arrows are now placed correctly around diamond-shaped nodes on plots
  • Added Graph.TupleList, a function that allows one to create graphs with edge attributes quickly from a list of tuples.
  • plot() now also supports .eps as an extension, not only .ps

  • Fixed overflow issues in centralization calculations.
  • Fixed a bug that mishandled vertex colors in VF2 isomorphism functions. Bug #1032819.
  • Pajek exporter now always quotes strings, thanks to Elena Tea Russo.
  • Fixed a bug with handling small edge weights in shortest paths calculation in Graph.shortest_paths() (Dijkstra’s algorithm.) Thanks to Martin J Reed.
  • Fixed a bug in the NCV setting for ARPACK functions. It cannot be bigger than the matrix size.
  • Fixed a bug in Graph.layout_mds() that resulted vertices on top of each other.
  • Motif finding functions return nan for isomorphism classes that are not motifs (i.e. not connected). Fixes bug #1050859.
  • Fixed a bug when calculating the largest cliques of a directed graph. Bug #1073800.
  • Warn for negative weights when calculating PageRank.
  • Fixed a bug in Graph.eccentricity() and Graph.radius(), the results were often simply wrong.
  • Fixed a bug in Graph.get.all.shortest.paths() when some edges had zero weight.
  • Fixed some potential crashes in the DrL layout generator.
  • Fixed a bug in the Reingold-Tilford layout when the graph is directed and mode != ALL.
  • Fixed a bug in Graph.layout_sugiyama() when the graph had no edges.
  • Fixed a bug in Graph.community_label_propagation() when initial labels contained -1 entries. Issue #1105460.
  • Repaired the DescartesCoordinateSystem class (which is not used too frequently anyway)
  • Fixed a bug that caused segfaults when an igraph Graph was used in a thread forked from the main Python interpreter thread
  • Fixed a bug that affected file handles created from Python strings in the C layer
  • Fixed a bug in has_multiple() that resulted in false negatives for some undirected graphs.
  • Fixed a crash in weighted betweenness calculation.
]]>
R/igraph 0.6.52013-02-24T00:00:00+00:002013-02-24T00:00:00+00:00https://igraph.org/2013/02/24/igraph-0.6.5-rThe version number is not a mistake, we jump to 0.6.5 from 0.6, for technical reasons.

Release Notes

igraph 0.6.5 is a minor release that contains only few big changes, and fixes a number of very annoying bugs.

See at the end for the complete list of changes. First let’s see the most important new features and changes.

Vertex shape API in R

It is now possible to create user-defined vertex shapes for drawing graphs in R. See vertex.shapes() in the R manual.

Convert graphs to data frames in R

Function get.data.frame() does the opposite of graph.data.frame(), it converts a graph to one or two data frames that contain vertex and/or edge data.

Pajek reader supports bipartite graphs

See more in the manual.

Graphical degree sequences

We added some new functions if a sequence of integers is graphial, i.e. it can be the degree sequence of a simple graph. See more in the manual.

k-regular random graphs

It is possible now to generate regular random graphs, faster than the general degree sequence based generator. See more in the manual.

Fitting power law distributions

This release includes the plfit library to maximum likelihood fit power laws to discrete or contiouous data. See more in the manual.

Speedup in R

Many basic graph operations (eg. printing the summary to the screen, querying attribute values) now avoid copying the graph, so these operations are now much faster in R.

R: new features and bug fixes

  • Added a vertex shape API for defining new vertex shapes, and also a couple of new vertex shapes.
  • Added the get.data.frame() function, opposite of graph.data.frame().
  • Added bipartite support to the Pajek reader and writer, closes bug #1042298.
  • degree.sequence.game() has a new method now: simple_no_multiple.
  • Added the is.degree.sequence() and is.graphical.degree.sequence() functions.
  • rewire() has a new method: loops, that can create loop edges.
  • Walktrap community detection now handles isolates.
  • layout.mds() returns a layout matrix now.
  • layout.mds() uses LAPACK instead of ARPACK.
  • Handle the ~ character in write.graph and read.graph. Bug #1066986.
  • Added k.regular.game().
  • Use vertex names to plot if no labels are specified in the function call or as vetex attributes. Fixes issue #1085431.
  • power.law.fit() can now use a C implementation.

  • Fixed a bug in barabasi.game() when out.seq was an empty vector.
  • Fixed a bug that made functions with a progress bar fail if called from another package.
  • Fixed a bug when creating graphs from a weighted integer adjacency matrix via graph.adjacency(). Bug #1019624.
  • Fixed overflow issues in centralization calculations.
  • Fixed a minimal.st.separators() bug, some vertex sets were incorrectly reported as separators. Bug #1033045.
  • Fixed a bug that mishandled vertex colors in VF2 isomorphism functions. Bug \#1032819.
  • Pajek exporter now always quotes strings, thanks to Elena Tea Russo.
  • Fixed a bug with handling small edge weights in shortest paths calculation in shortest.paths() (Dijkstra’s algorithm.) Thanks to Martin J Reed.
  • Weighted transitivity uses V(graph) as vids if it is NULL.
  • Fixed a bug when pie vertices were drawn together with other vertex shapes.
  • Speed up printing graphs.
  • Speed up attribute queries and other basic operations, by avoiding copying of the graph. Bug #1043616.
  • Fixed a bug in the NCV setting for ARPACK functions. It cannot be bigger than the matrix size.
  • layout.merge()s DLA mode has better defaults now.
  • Fixed a bug in layout.mds() that resulted vertices on top of each other.
  • Fixed a bug in layout.spring(), it was not working properly.
  • Fixed layout.svd(), which was completely defunct.
  • Fixed a bug in layout.graphopt() that caused warnings and on some platforms crashes.
  • Fixed community.to.membership(). Bug #1022850.
  • Fixed a graph.incidence() crash if it was called with a non-matrix argument.
  • Fixed a get.shortest.paths() bug, when output was set to both.
  • Motif finding functions return NA for isomorphism classes that are not motifs (i.e. not connected). Fixes bug #1050859.
  • Fixed get.adjacency() when attr is given, and the attribute has some complex type. Bug #1025799.
  • Fixed attribute name in graph.adjacency() for dense matrices. Bug #1066952.
  • Fixed erratic behavior of alpha.centrality().
  • Fixed igraph indexing, when attr is given. Bug #1073705.
  • Fixed a bug when calculating the largest cliques of a directed graph. Bug #1073800.
  • Fixed a bug in the maximal clique search, closes #1074402.
  • Warn for negative weights when calculating PageRank.
  • Fixed dense, unweighted graph.adjacency when diag=FALSE. Closes issue #1077425.
  • Fixed a bug in eccentricity() and radius(), the results were often simply wrong.
  • Fixed a bug in get.all.shortest.paths() when some edges had zero weight.
  • graph.data.frame() is more careful when vertex names are numbers, to avoid their scientific notation. Fixes issue #1082221.
  • Better check for NAs in vertex names. Fixes issue #1087215
  • Fixed some potential crashes in the DrL layout generator.
  • Fixed a bug in the Reingold-Tilford layout when the graph is directed and mode != ALL.
  • Eliminate gap between vertex and edge when plotting an edge without an arrow. Fixes #1118448.
  • Fixed a bug in has.multiple() that resulted in false negatives for some undirected graphs.
  • Fixed a crash in weighted betweenness calculation.
  • R plotting: fixed a bug that caused misplaced arrows at rectangle vertex shapes.
]]>
C/igraph 0.62012-06-11T00:00:00+00:002012-06-11T00:00:00+00:00https://igraph.org/2012/06/11/igraph-0.6-cRelease Notes

igraph 0.6 is a major new release of igraph. It contains many new features and major changes, a lot of bug fixes and improvements. As always, we are grateful to the people who sent comments, bug reports, questions, and specially to people who contributed code.

See below a list of major changes, with links to the relevant sections of the documentation. New features in R, Python, and C are all listed here.

See at the end for a (more) complete list of changes.

Community detection improvements

Community structure detection via exact modularity optimization. As modularity optimization in an NP-complete problem, this works only for small graphs. See igraph_community_optimal_modularity.

The multi-level modularity optimization algorithm by Blondel et al. was added. See igraph_community_multilevel.

Hierarchical random graphs and community finding, based on the code from Aaron Clauset. See In the manual for details.

We support now the InfoMAP community finding method, thanks to Emmanuel Navarro for the code. See igraph_community_infomap.

The edge betweenness community detection method of Newman and Girvan now also works on weighted graphs. See the Reference manual.

We have added some functions to compare various community structures. See igraph_compare_communities.

Igraph now implements the Spectral Coarse Graining method, by David Morton, our implementation is based on his code. See the manual.

The cohesive block finding functions were rewritten from scratch in C. They are much faster now, and they have a nicer API, too. See igraph_cohesive_blocks.

Centralization scores for degree, closeness, betweenness and eigenvector centrality. See the manual.

Personalized PageRank scores. See the manual.

Authority and hub scores, betweenness and closeness calculations all support edge weights now. See the manual.

Sugiyama layout

Igraph now implements the Sugiyama layout algorithm for layered directed acyclic graphs. See igraph_layout_sugiyama.

Maximum matchings in bipartite graphs

Igraph now implements the push-relabel algorithm and the Kuhn-Munkres algorithm (also known as the Hungarian method) to find maximum matchings in unweighted and weighted bipartite graphs. See the manual.

New in the C layer

  • Maximum cardinality search: igraph_maximum_cardinality_search() and chordality test: igraph_is_chordal().
  • Support the DL file format, igraph_read_graph_dl(). See http://www.analytictech.com/networks/dataentry.htm.
  • Added generic breadth-first and depth-first search implementations with many callbacks (igraph_bfs(), igraph_dfs()).
  • Centralization scores for degree, closeness, betweenness and eigenvector centrality, see igraph_centralization().
  • Added igraph_sparsemat_t, a type that implements sparse matrices based on the CXSparse library by Tim Davis. See http://www.cise.ufl.edu/research/sparse/CXSparse/.
  • Personalized Page-Rank scores, igraph_personalized_pagerank() and igraph_personalized_pagerank_vs().
  • Assortativity coefficient, igraph_assortativity(), igraph_assortativity_nominal(), and igraph_assortativity_degree().
  • The multi-level modularity optimization community structure detection algorithm by Blondel et al. was added, see igraph_community_multilevel().
  • Added the igraph_version() function.
  • Star layout: igraph_layout_star().
  • Function to calculate a non-induced subraph: igraph_subgraph_edges().
  • Distance between two community structures: igraph_compare_communities().
  • Community structure via exact modularity optimization, igraph_community_optimal_community().
  • More comprehensive maximum flow and minimum cut calculation, see functions igraph_maxflow(), igraph_mincut(), igraph_all_st_cuts(), igraph_all_st_mincuts().
  • Layout based on multidimensional scaling, igraph_layout_mds().
  • It is now possible to access the random number generator(s) via an API. Multiple RNGs can be used, from external sources as well. The default RNG is MT19937.
  • Added igraph_get_all_shortest_paths_dijkstra, for calculating all non-negatively weighted shortest paths.
  • Check whether a directed graph is a DAG, igraph_is_dag().
  • Cohesive blocking, a’la Moody & White, igraph_cohesive_blocks().
  • Igraph functions can now print status messages, see igraph_status() and related functions.
  • Support writing the LEDA file format, igraph_write_graph_leda().
  • Contract vertices, igraph_contract_vertices().
  • The C reference manual has now a lot of example programs.
  • Hierarchical random graphs and community finding, porting the code from Aaron Clauset. See igraph_hrg_game(), igraph_hrg_fit(), etc.
  • igraph_has_multiple() to decide whether a graph has multiple edges.
  • New layouts igraph_layout_grid() and igraph_layout_grid_3d().
  • igraph_integer_t is really an integer now, it used to be a double.
  • igraph_minimum_spanning_tree(), calls either the weighted or the unweighted implementation.
  • Eccentricity (igraph_eccentricity()), and radius (igraph_radius()) calculations.
  • Several game theory update rules, written by Minh Van Nguyen. See igraph_deterministic_optimal_imitation(), igraph_stochastic_imitation(), igraph_roulette_wheel_imitation(), igraph_moran_process(),
  • Sugiyama layout algorithm for layered directed acyclic graphs, igraph_layout_sugiyama().
  • New graph generators: igraph_static_fitness_game(), igraph_static_power_law_game().
  • Added the InfoMAP community finding method, thanks to Emmanuel Navarro for the code. See igraph_community_infomap().
  • Added the Spectral Coarse Graining algorithm, see igraph_scg().
  • Added a function to calculate a diversity score for the vertices, igraph_diversity().

Major changes in the C layer

  • Authority (igraph_authority_score()) and hub (igraph_hub_score()) scores support edge weights now.
  • Graph Laplacian calculation (igraph_laplacian()) supports edge weights now.
  • Support edge weights in betweenness (igraph_betweenness()) and closeness (igraph_closeness()) calculations.
  • Support vertex and edge coloring in the VF2 graph isomorphism algorithm (igraph_isomorphic_vf2(), igraph_count_isomorphisms_vf2(), igraph_get_isomorphisms_vf2(), igraph_subisomorphic_vf2(), igraph_count_subisomorphisms_vf2(), igraph_get_subisomorphisms_vf2()).
  • Added print operations for the igraph_vector*_t, igraph_matrix*_t and igraph_strvector_t types.
  • Biconnected component calculation (igraph_biconnected_components()) can now return the components themselves.
  • Eigenvector centrality calculation, igraph_eigenvector_centrality() now works for directed graphs.
  • Shortest path calculations with get_shortest_paths() and get_shortest_paths_dijkstra() can now return the edges along the paths.
  • Betweenness calculation can now use arbitrarily large integers, this is required for some lattice-like graphs to avoid overflow.
  • igraph_bipartite_projection() calculates multiplicity of edges.
  • igraph_barabasi_game() was rewritten and it supports three algorithms now, the default algorithm does not generate multiple or loop edges.
  • The Watts-Strogatz graph generator, igraph_watts_strogatz() can now create graphs without loop edges.
  • igraph should be now thread-safe, on architectures that support thread-local storage (Linux and Windows: yes, Mac OSX: no).

We also fixed numerous bugs, too many to include them here, sorry. You may look at our bug tracker at https://bugs.launchpad.net/igraph to check whether a bug was fixed or not. Thanks for all the people reporting bugs. Special thanks to Minh Van Nguyen for a lot of bug reports, documentation fixes and contributed code!

]]>
python-igraph 0.62012-06-11T00:00:00+00:002012-06-11T00:00:00+00:00https://igraph.org/2012/06/11/igraph-0.6-pythonRelease Notes

igraph 0.6 is a major new release of igraph. It contains many new features and major changes, a lot of bug fixes and improvements. As always, we are grateful to the people who sent comments, bug reports, questions, and specially to people who contributed code.

See below a list of major changes, with links to the relevant sections of the documentation. New features are all listed here.

The Nexus repository

igraph supports the Nexus network repository from R and from Python. Nexus is an online database of network data sets. You can search Nexus and download network from it directly from R and Python. See the documentation for details.

Support for Python 3.x

The Python interface of igraph now supports Python 3. The current release was tested with Python 3.2 on Windows, Linux and Mac OS X. Please report any bugs you encounter when using igraph in Python 3.x through the usual channels.

Community detection improvements

Community structure detection via exact modularity optimization. As modularity optimization in an NP-complete problem, this works only for small graphs, Python manual.

The multi-level modularity optimization algorithm by Blondel et al. was added. See documentation.

We support now the InfoMAP community finding method, thanks to Emmanuel Navarro for the code. More.

The edge betweenness community detection method of Newman and Girvan now also works on weighted graphs. See the documentation.

We have added some functions to compare various community structures. See the documentation.

The cohesive block finding functions were rewritten from scratch in C. They are much faster now, and they have a nicer API, too. See the documentation.

Personalized PageRank scores. See the documentation.

Authority and hub scores, betweenness and closeness calculations all support edge weights now. See the documentation.

Sugiyama layout

Igraph now implements the Sugiyama layout algorithm for layered directed acyclic graphs. See the documentation.

Maximum matchings in bipartite graphs

Igraph now implements the push-relabel algorithm and the Kuhn-Munkres algorithm (also known as the Hungarian method) to find maximum matchings in unweighted and weighted bipartite graphs. See the documentation.

Named graph vertices

The Python interface now treats the name attributes in a special way. The values of the attribute are indexed in the background, allowing the retrieval of a vertex with a given name in amortized constant time. Furthermore, most of the graph query methods accept vertex names as well as vertex indices. See the documentation for more information.

Pretty-printed graph summaries

The same graph summary format used by R is now also adopted by Python. Printing a graph with the print statement now prints the summary and the edge list in a concise format:

>>> print karate
IGRAPH UNW- 34 78 -- Zachary's karate club network
+ attr: Author (g), Citation (g), name (g), Faction (v), id (v), name(v),
  weight (e)
+ edges (vertex names):
    Mr Hi -- Actor 2, Actor 3, Actor 4, Actor 5, ...
  Actor 2 -- Mr Hi, Actor 3, Actor 4, ...
...

Printing a graph with the summary() function (in the igraph namespace) prints the short summary only, without the edge list:

>>> summary(karate)
IGRAPH UNW- 34 78 -- Zachary's karate club network
+ attr: Author (g), Citation (g), name (g), Faction (v), id (v), name(v),
  weight (e)

Printing a graph with summary(graph, full=True) prints the summary, the edge list, the vertex and the edge attributes as well.

Easier manipulation of graphs

You can treat the graph as a virtual adjacency matrix. See the details in the documentation.

Mark groups of vertices in R and Python plots

You can mark vertex groups on graph plots, using shaded areas. Communities and cohesive blocks are plotted using technique by default. See the mark_groups argument of the Graph.__plot__ function.

Refactored graph drawers in the Python interface

Graphs in the Python interface are plotted by graph drawer classes now instead of a monolithic plotting function. This allows one to replace the default graph drawer with custom graph drawers; for instance, a drawer that sends an igraph graph to an UbiGraph display or to Cytoscape. The default graph drawer also allows the partial customization of the plot with pluggable vertex shapes and edge drawers.

Better handling of attributes in R and Python

In R and Python, many igraph functions keep the vertex, edge and graph attributes now, when one manipulates the graph. The attributes can also be combined using a flexible API. See the combine_edges and combine_attrs arguments of many graph methods in the Python documentation for more.

New in the Python interface

General updates

  • Python 3.x is now supported by the Python interface.
  • Graphs can now be treated as adjacency matrices by indexing the graph object using a pair of vertex ids or vertex names.
  • Methods accepting a vertex id or a list of vertex ids should now also accept vertex names instead. Names should be given in the name vertex attribute.
  • Igraph now supports loading graphs from the Nexus online data repository, see Nexus.get(), Nexus.info(), Nexus.list() and Nexus.search().

Community detection

  • The multi-level modularity optimization community structure detection algorithm by Blondel et al. was added, see Graph.community_multilevel().
  • Distance between two community structures: compare_communities().
  • Community structure via exact modularity optimization, Graph.community_optimal_modularity().
  • Added the InfoMAP community finding method, thanks to Emmanuel Navarro for the code. See Graph.community_infomap().
  • Edge betweenness community detection now supports weighted graphs; see Graph.community_edge_betweenness().

Shortest paths

  • Eccentricity (Graph.eccentricity()), and radius (Graph.radius()) calculations.
  • Shortest path calculations with Graph.get_shortest_paths() can now return the vertex or edge ids along the shortest paths.
  • Graph.get_all_shortest_paths() now supports edge weights.
  • Neighborhood of a vertex can now be retrieved with Graph.neighborhood()

Centrality

  • Personalized Page-Rank scores, see Graph.pagerank().
  • Authority (Graph.authority_score()) and hub (Graph.hub_score()) scores support edge weights now.
  • Support edge weights in betweenness and closeness calculations.
  • Eigenvector centrality calculation, Graph.evcent() now works for directed graphs.
  • Betweenness calculation can now use arbitrarily large integers, this is required for some lattice-like graphs to avoid overflow.

Input/output and file formats

  • Support the DL file format in Graph.read(). See http://www.analytictech.com/networks/dataentry.htm.
  • Support writing the LEDA file format in Graph.write().

Plotting and layouts

  • Star layout: Graph.layout_star().
  • Layout based on multidimensional scaling, Graph.layout_mds()
  • Grid layouts: Graph.layout_grid(), Graph.layout_grid_3d()
  • Sugiyama layout algorithm for layered directed acyclic graphs: Graph.layout_sugiyama().
  • It is possible to mark vertex groups on plots using the mark_groups keyword argument of Graph.__plot__(). Communities and cohesive blocks are plotted using this by default. Note that the same keyword argument is also accepted by plot() of course.
  • Redesigned graph plotting framework: graph drawers are now derived from AbstractGraphDrawer. The framework allows the implementation of custom graph drawers such as UbiGraphDrawer or CytoscapeDrawer. Edges are drawn by edge drawer classes (derived from AbstractEdgeDrawer), custom vertex shapes are now possible by ShapeDrawers.
  • Multiple edges are now drawn curved to make them visible. See the autocurve and edge_curved keyword arguments of Graph.__plot__(). Note that these are also accepted by plot() of course.
  • Better label placement algorithm supports multi-line labels and the specification of the distance and angle of the label relative to the center of the node.
  • Added rescale() function to rescale a list of numeric values to a different range, suitable for plotting.

Graph generators

  • New graph generators: Graph.Static_Fitness(), Graph.Static_Power_Law().
  • Graph.Barabasi() was rewritten and it supports three algorithms now, the default algorithm does not generate multiple or loop edges. The graph generation process can now start from a supplied graph.
  • The Watts-Strogatz graph generator, Graph.Watts_Strogatz() can now create graphs without loop edges.

Others

  • Vertex and edge attributes are handled much better now. They are kept whenever possible, and can be combined via the combine_edges and combine_attrs keyword arguments of Graph.simplify(), Graph.contract_vertices() and Graph.to_undirected().
  • Graphs are now printed in a more concise and informative way. print() prints a short information header and the edge list, while summary() prints the heder only. summary() also understands keyword arguments that control which parts of the output should be added; see the GraphSummary class.
  • Motif search can now call a callback function for every motif found, see Graph.motifs_randesu()
  • Transitivity calculations now support weights, see Graph.transitivity_local_undirected()
  • Added cohesive block calculation, see Graph.cohesive_blocks()
  • Added feedback arc sets, see Graph.feedback_arc_set()
  • It is now possible to ask for the Jaccard or Dice similarities of pairs of vertices only, see Graph.similarity_jaccard_pairs() and similar functions.
  • Support vertex and edge coloring in the VF2 (sub)graph isomorphism functions (Graph.isomorphic_vf2(), Graph.count_isomorphisms.vf2(), Graph.get_isomorphisms_vf2(), Graph.subisomorphic_vf2(), Graph.count_subisomorphisms_vf2(), Graph.get_subisomorphisms_vf2()).
  • Assortativity coefficient, Graph.assortativity(), Graph.assortativity_nominal() and Graph.assortativity_degree().
  • Function to calculate a non-induced subraph: Graph.subgraph_edges().
  • Graph.has_multiple() to decide whether a graph has multiple edges.
  • Added a function to calculate a diversity score for the vertices, Graph.diversity().
  • Graph Laplacian calculation (Graph.laplacian()) supports edge weights now.
  • Graph.bipartite_projection() calculates multiplicity of edges.
  • Vertex contraction, Graph.contract_vertices().

We also fixed numerous bugs, too many to include them here, sorry. You may look at our bug tracker at https://bugs.launchpad.net/igraph to check whether a bug was fixed or not. Thanks for all the people reporting bugs. Special thanks to Minh Van Nguyen for a lot of bug reports, documentation fixes and contributed code!

]]>
R/igraph 0.62012-06-11T00:00:00+00:002012-06-11T00:00:00+00:00https://igraph.org/2012/06/11/igraph-0.6-rRelease Notes

igraph 0.6 is a major new release of igraph. It contains many new features and major changes, a lot of bug fixes and improvements. As always, we are grateful to the people who sent comments, bug reports, questions, and specially to people who contributed code.

See below a list of major changes, with links to the relevant sections of the documentation. New features in R all listed here.

See at the end for a (more) complete list of changes.

The Nexus repository

igraph supports the Nexus network repository from R and from Python. Nexus is an online database of network data sets. You can search Nexus and download network from it directly from R and Python. See the manual for details.

Numbering from 1 in R

The biggest change in the R interface is that starting from this version vertices and edges are numbered from one. This change might be painful for many people, because it makes already existing code incompatible with igraph 0.6. To make the switch easier, there is now an igraph0 package on CRAN; igraph0 uses 0-based vertex and edge ids, and it can be used to run old code. Note, however, that igraph0 will not be developed in the future. Please use the igraph package for current and future work.

(Also note that in Python and C vertices and edges are still numbered from zero, as these languages traditionally use zero-based indexing.)

Community detection improvements

Community structure detection via exact modularity optimization. As modularity optimization in an NP-complete problem, this works only for small graphs. See the manual.

The multi-level modularity optimization algorithm by Blondel et al. was added. See the documentation.

Hierarchical random graphs and community finding, based on the code from Aaron Clauset. See the manual.

We support now the InfoMAP community finding method, thanks to Emmanuel Navarro for the code. See the manual.

The edge betweenness community detection method of Newman and Girvan now also works on weighted graphs. See the documentation.

We have added some functions to compare various community structures. See thedocumentation.

Igraph now implements the Spectral Coarse Graining method, by David Morton, our implementation is based on his code. See the documentation.

The cohesive block finding functions were rewritten from scratch in C. They are much faster now, and they have a nicer API, too. See the documentation.

All community detection functions return a communities object now. We have defined various operations for these objects, see the R manual for more.

Centralization scores for degree, closeness, betweenness and eigenvector centrality. See the documentation.

Personalized PageRank scores. See the documentation.

Authority and hub scores, betweenness and closeness calculations all support edge weights now. See the documentation.

Sugiyama layout

Igraph now implements the Sugiyama layout algorithm for layered directed acyclic graphs. See the documentation.

Maximum matchings in bipartite graphs

Igraph now implements the push-relabel algorithm and the Kuhn-Munkres algorithm (also known as the Hungarian method) to find maximum matchings in unweighted and weighted bipartite graphs. See the documentation.

Hiding the graph structure by default

If you type in the name of an igraph object, the edges of the graph are not dumped to the screen any more, only a short summary of the graph is printed:

> karate
IGRAPH UNW- 34 78 -- Zachary's karate club network
+ attr: name (g/c), Citation (g/c), Author (g/c), Faction (v/n), name (v/c), weight (e/n)

To see the graph structure, you can use the str() function. See more in the R documentation.

Easier manipulation of graphs

There are now new and easier ways to add new vertices/edges to a graph, or remove existing ones. See the details in the R documentation. In Python, you can treat the graph as a virtual adjacency matrix. See the details in the Python documentation.

The igraphdata package

The new R package igraphdata contains some example graph data sets.

Mark groups of vertices in R and Python plots

You can mark vertex groups on graph plots, using shaded areas. Communities and cohesive blocks are plotted using technique by default. See the mark.groups argument of the plot.igraph() function.

[R] igraph demos in the R package

We have included some demos in the igraph R package, to get a list of the demos, type this at your R prompt:

> demo(package="igraph")
Demos in package igraph:
  centrality              Classic and other vertex centrality indices
  cohesive                Cohesive blocking, the Moody & White method
  community               Community structure detection
  crashR                  A crash-course into R
  smallworld              Small-world networks

Better handling of attributes in R and Python

Many igraph functions keep the vertex, edge and graph attributes now, when one manipulates the graph. The attributes can also be combined using a flexible API. See the manual.

R: Major new features

  • Vertices and edges are numbered from 1 instead of 0. Note that this makes most of the old R igraph code incompatible with igraph 0.6. If you want to use your old code, please use the igraph0 package.
  • The [ and [[ operators can now be used on igraph graphs, for [ the graph behaves as an adjacency matrix, for [[ is is treated as an adjacency list. It is also much simpler to manipulate the graph structure, i.e. add/remove edges and vertices, with some new operators. See more at ?graph.structure.
  • In all functions that take a vector or list of vertices or edges, vertex/edge names can be given instead of the numeric ids.
  • New package igraphdata, contains a number of data sets that can be used directly in igraph.
  • Igraph now supports loading graphs from the Nexus online data repository, see nexus.get(), nexus.info(), nexus.list() and nexus.search().
  • All the community structure finding algorithm return a communities object now, which has a bunch of useful operations, see ?communities for details.
  • Vertex and edge attributes are handled much better now. They are kept whenever possible, and can be combined via a flexible API. See ?attribute.combination.
  • R now prints igraph graphs to the screen in a more structured and informative way. The output of summary() was also updated accordingly.

R: Other new features

  • It is possible to mark vertex groups on plots, via shading. Communities and cohesive blocks are plotted using this by default.
  • Some igraph demos are now available, see a list via demo(package="igraph").
  • igraph now tries to select the optimal layout algorithm, when plotting a graph.
  • Added a simple console, using Tcl/Tk. It contains a text area for status messages and also a status bar. See igraph.console().
  • Reimplemented igraph options support, see igraph.options() and getIgraphOpt().
  • Igraph functions can now print status messages.

R: New or updated functions

Community detection

  • The multi-level modularity optimization community structure detection algorithm by Blondel et al. was added, see multilevel.community().
  • Distance between two community structures: compare.communities().
  • Community structure via exact modularity optimization, optimal.community().
  • Hierarchical random graphs and community finding, porting the code from Aaron Clauset. See hrg.game(), hrg.fit(), etc.
  • Added the InfoMAP community finding method, thanks to Emmanuel Navarro for the code. See infomap.community().

Shortest paths

  • Eccentricity (eccentricity()), and radius (radius()) calculations.
  • Shortest path calculations with get.shortest.paths() can now return the edges along the shortest paths.
  • get.all.shortest.paths() now supports edge weights.

Centrality

  • Centralization scores for degree, closeness, betweenness and eigenvector centrality. See centralization.scores().
  • Personalized Page-Rank scores, see page.rank().
  • Subgraph centrality, subgraph.centrality().
  • Authority (authority.score()) and hub (hub.score()) scores support edge weights now.
  • Support edge weights in betweenness and closeness calculations.
  • bonpow(), Bonacich’s power centrality and alpha.centrality(), Alpha centrality calculations now use sparse matrices by default.
  • Eigenvector centrality calculation, evcent() now works for directed graphs.
  • Betweenness calculation can now use arbitrarily large integers, this is required for some lattice-like graphs to avoid overflow.

Input/output and file formats

  • Support the DL file format in graph.read(). See http://www.analytictech.com/networks/dataentry.htm.
  • Support writing the LEDA file format in write.graph().

Plotting and layouts

  • Star layout: layout.star().
  • Layout based on multidimensional scaling, layout.mds().
  • New layouts layout.grid() and layout.grid.3d().
  • Sugiyama layout algorithm for layered directed acyclic graphs, layout.sugiyama().

Graph generators

  • New graph generators: static.fitness.game(), static.power.law.game().
  • barabasi.game() was rewritten and it supports three algorithms now, the default algorithm does not generate multiple or loop edges. The graph generation process can now start from a supplied graph.
  • The Watts-Strogatz graph generator, igraph_watts_strogatz() can now create graphs without loop edges.

Others

  • Added the Spectral Coarse Graining algorithm, see scg().
  • The cohesive.blocks() function was rewritten in C, it is much faster now. It has a nicer API, too. See demo("cohesive").
  • Added generic breadth-first and depth-first search implementations with many callbacks, graph.bfs() and graph_dfs().
  • Support vertex and edge coloring in the VF2 (sub)graph isomorphism functions (graph.isomorphic.vf2(), graph.count.isomorphisms.vf2(), graph.get.isomorphisms.vf2(), graph.subisomorphic.vf2(), graph.count.subisomorphisms.vf2(), graph.get.subisomorphisms.vf2()).
  • Assortativity coefficient, assortativity(), assortativity.nominal() and assortativity.degree().
  • Vertex operators that work by vertex names: graph.intersection.by.name(), graph.union.by.name(), graph.difference.by.name(). Thanks to Magnus Torfason for contributing his code!
  • Function to calculate a non-induced subraph: subgraph.edges().
  • More comprehensive maximum flow and minimum cut calculation, see functions graph.maxflow(), graph.mincut(), stCuts(), stMincuts().
  • Check whether a directed graph is a DAG, is.dag().
  • has.multiple() to decide whether a graph has multiple edges.
  • Added a function to calculate a diversity score for the vertices, graph.diversity().
  • Graph Laplacian calculation (graph.laplacian()) supports edge weights now.
  • Biconnected component calculation, biconnected.components() now returns the components themselves.
  • bipartite.projection() calculates multiplicity of edges.
  • Maximum cardinality search: maximum.cardinality.search() and chordality test: is.chordal()
  • Convex hull computation, convex.hull().
  • Contract vertices, contract.vertices().

We also fixed numerous bugs, too many to include them here, sorry. You may look at our bug tracker at https://bugs.launchpad.net/igraph to check whether a bug was fixed or not. Thanks for all the people reporting bugs. Special thanks to Minh Van Nguyen for a lot of bug reports, documentation fixes and contributed code!

]]>
C/igraph 0.5.32009-11-22T00:00:00+00:002009-11-22T00:00:00+00:00https://igraph.org/2009/11/22/igraph-0.5.3-cBugs corrected
  • Betweenness and edge betweenness functions work for graphs with many shortest paths now (up to the limit of long long int)
  • The configure script fails if there is no C compiler available
  • Fixed a bug in igraph_community_spinglass, when csize was a NULL pointer, but membership was not
  • Fixed a bug in igraph_bipartite_projection that caused occasional crashes on some systems
]]>
python-igraph 0.5.32009-11-22T00:00:00+00:002009-11-22T00:00:00+00:00https://igraph.org/2009/11/22/igraph-0.5.3-pythonNew in the Python interface
  • Added support for weighted diameter
  • get_eid() considers edge directions by default from now on
  • Fixed a memory leak in the attribute handler
  • NaN and inf are treated correctly now

Bugs corrected in the C layer

  • Betweenness and edge betweenness functions work for graphs with many shortest paths now (up to the limit of long long int)
  • The configure script fails if there is no C compiler available
  • Fixed a bug in igraph_community_spinglass, when csize was a NULL pointer, but membership was not
  • Fixed a bug in igraph_bipartite_projection that caused occasional crashes on some systems
]]>
R/igraph 0.5.32009-11-22T00:00:00+00:002009-11-22T00:00:00+00:00https://igraph.org/2009/11/22/igraph-0.5.3-rBugs corrected in the R interface
  • Some small changes to make R CMD check clean
  • Fixed a bug in graph.incidence, the directed and mode arguments were not handled correctly
  • Betweenness and edge betweenness functions work for graphs with many shortest paths now (up to the limit of long long int)
  • When compiling the package, the configure script fails if there is no C compiler available
  • igraph.from.graphNEL creates the right number of loop edges now
  • Fixed a bug in bipartite.projection() that caused occasional crashes on some systems
]]>
C/igraph 0.5.22009-04-10T00:00:00+00:002009-04-10T00:00:00+00:00https://igraph.org/2009/04/10/igraph-0.5.2-cRelease Notes

This is another bug fix release, with a couple of new features. Here are the important ones. See at the end for the complete list of changes.

Bipartite graphs

Bipartite graphs have two kinds of vertices and edges are only allowed to connect opposite kinds. Think of the Hollywood movie graph with actors and movies. igraph 0.5.2 now contains some functions to deal with these kind of networks.

The label propagation community finding algorithm

This is a simple and intuitive community finding algorithm, published by Raghavan et al. in 2007 (see docs for full citation). It works by assigning labels to the vertices and then updating the labels based on majority voting among the neighbors.

3D version of the DrL layout generator

The DrL layout generator was extended to generate three dimensional layouts. Albeit slower than the regular 2D version, this is a nice addition for those who do visualization in 3D.

Johnson’s shortest path algorithm

Johnson’s algorithm is a good choice for finding all shortest paths in a network that has some negative edge weights, but no negative cycles.

Average nearest neighbor degree

A new function was added to calculate the average degree of the neighbors of all or some vertices. It supports the edge weighted version of the measure as well.

Several bugs and memory leaks corrected

Apart from the bug fixes, some functions were rewritten to speed them up.

New in the C layer

  • Added progress bar support to igraph_betweenness() and igraph_betweenness_estimate(), igraph_layout_drl()
  • Speeded up igraph_betweenness_estimate(), igraph_get_eid(), igraph_are_connected(), igraph_get_eids()
  • Added igraph_get_eid2()
  • Johnson’s shortest path algorithm added: igraph_shortest_paths_johnson()
  • Average nearest neighbor degree calculation, igraph_avg_nearest_neighbor_degree()
  • Weighted degree (also called strength) calculation, igraph_strength()
  • Some functions to support bipartite graphs: igraph_full_bipartite(), igraph_bipartite_projection(), igraph_create_bipartite(), igraph_incidence(), igraph_get_incidence(), igraph_bipartite_projection_size(), igraph_is_bipartite()
  • Added the label propagation community detection algorithm by Raghavan et al., igraph_community_label_propagation()
  • Added an example that shows how to set the random number generator’s seed from C (examples/simple/random_seed.c)
  • Added a function to “unfold” a tree, igraph_unfold_tree()
  • C attribute handler updates: added functions to query many vertices/edges at once
  • Three dimensional DrL layout, igraph_layout_drl_3d()

Bugs corrected in the C layer

  • Fixed a bug in igraph_isomorphic_function_vf2(), affecting all VF2 graph isomorphism functions
  • VL graph generator in igraph_degree_sequence_game() checks now that the sum of the degrees is even
  • Many small corrections to make igraph compile with Microsoft Visual Studio 2003, 2005 and 2008
  • Many fixes for supporting various compilers, e.g. GCC 4.4 and Sun’s C compiler
  • Fix a bug when a graph was imported from LGL and exported to NCOL format (#289596)
  • Fixed memory leaks in igraph_automorphisms(), igraph_shortest_paths_bellman_ford(), igraph_independent_vertex_sets()
  • The GraphML reader checks the name of the attributes to avoid adding a duplicate id attribute
  • It is possible to change the ncv ARPACK parameter for igraph_community_leading_eigenvector()
  • Fixed a bug in igraph_path_length_hist(), unconnected was wrong for unconnected and undirected graphs.
]]>
python-igraph 0.5.22009-04-10T00:00:00+00:002009-04-10T00:00:00+00:00https://igraph.org/2009/04/10/igraph-0.5.2-pythonRelease Notes

This is another bug fix release, with a couple of new features. Here are the important ones. See at the end for the complete list of changes.

Bipartite graphs

Bipartite graphs have two kinds of vertices and edges are only allowed to connect opposite kinds. Think of the Hollywood movie graph with actors and movies. igraph 0.5.2 now contains some functions to deal with these kind of networks.

The label propagation community finding algorithm

This is a simple and intuitive community finding algorithm, published by Raghavan et al. in 2007 (see docs for full citation). It works by assigning labels to the vertices and then updating the labels based on majority voting among the neighbors.

3D version of the DrL layout generator

The DrL layout generator was extended to generate three dimensional layouts. Albeit slower than the regular 2D version, this is a nice addition for those who do visualization in 3D.

Johnson’s shortest path algorithm

Johnson’s algorithm is a good choice for finding all shortest paths in a network that has some negative edge weights, but no negative cycles.

Average nearest neighbor degree

A new function was added to calculate the average degree of the neighbors of all or some vertices. It supports the edge weighted version of the measure as well.

Several bugs and memory leaks corrected

Apart from the bug fixes, some functions were rewritten to speed them up.

New in the Python interface

  • Speeded up betweenness estimation
  • Johnson’s shortest paths algorithm added (selected automatically by Graph.shortest_paths() if needed)
  • Weighted degree (also called strength) calculation, Graph.strength()
  • Some new methods to support bipartite graphs: Graph.Bipartite(), Graph.is_bipartite(), Graph.get_indicence(), Graph.Incidence(), Graph.bipartite_projection(), Graph.bipartite_projection_size()
  • Added the label propagation community detection algorithm by Raghavan et al., Graph.community_label_propagation()
  • Added a function to “unfold” a tree, Graph.unfold_tree()
  • setup.py script improvements
  • Graph plotting now supports edge_arrow_size and edge_arrow_width
  • Added Graph.Formula to create small graphs from a simple notation
  • VertexSeq and EdgeSeq objects can now be indexed by slices

Bugs corrected in the C layer

  • Fixed a bug in igraph_isomorphic_function_vf2(), affecting all VF2 graph isomorphism functions
  • VL graph generator in igraph_degree_sequence_game() checks now that the sum of the degrees is even
  • Many small corrections to make igraph compile with Microsoft Visual Studio 2003, 2005 and 2008
  • Many fixes for supporting various compilers, e.g. GCC 4.4 and Sun’s C compiler
  • Fix a bug when a graph was imported from LGL and exported to NCOL format (#289596)
  • Fixed memory leaks in igraph_automorphisms(), igraph_shortest_paths_bellman_ford(), igraph_independent_vertex_sets()
  • The GraphML reader checks the name of the attributes to avoid adding a duplicate id attribute
  • It is possible to change the ncv ARPACK parameter for igraph_community_leading_eigenvector()
  • Fixed a bug in igraph_path_length_hist(), unconnected was wrong for unconnected and undirected graphs.
]]>
R/igraph 0.5.22009-04-10T00:00:00+00:002009-04-10T00:00:00+00:00https://igraph.org/2009/04/10/igraph-0.5.2-rRelease Notes

This is another bug fix release, with a couple of new features. Here are the important ones. See at the end for the complete list of changes.

Bipartite graphs

Bipartite graphs have two kinds of vertices and edges are only allowed to connect opposite kinds. Think of the Hollywood movie graph with actors and movies. igraph 0.5.2 now contains some functions to deal with these kind of networks.

The label propagation community finding algorithm

This is a simple and intuitive community finding algorithm, published by Raghavan et al. in 2007 (see docs for full citation). It works by assigning labels to the vertices and then updating the labels based on majority voting among the neighbors.

3D version of the DrL layout generator

The DrL layout generator was extended to generate three dimensional layouts. Albeit slower than the regular 2D version, this is a nice addition for those who do visualization in 3D.

R GUI (limited)

A minimal, supported GUI is included now in the R package. It contains only a small fraction of igraph capabilities, but can be still useful, e.g. in teaching. You can start it by typing tkigraph(), after loading the igraph package of course.

Johnson’s shortest path algorithm

Johnson’s algorithm is a good choice for finding all shortest paths in a network that has some negative edge weights, but no negative cycles.

Average nearest neighbor degree

A new function was added to calculate the average degree of the neighbors of all or some vertices. It supports the edge weighted version of the measure as well.

Curved edges in R plots

Both plot() and tkplot() supports curved edges. See ?igraph.plotting for more details.

Several bugs and memory leaks corrected

Apart from the bug fixes, some functions were rewritten to speed them up.

New in the R interface

  • Added progress bar support to beweenness() and betweenness.estimate(), layout.drl()
  • Speeded up betweenness estimation
  • Speeded up are.connected()
  • Johnson’s shortest paths algorithm added
  • shortest.paths() has now an algorithm argument to choose from the various implementations manually
  • Always quote symbolic vertex names when printing graphs or edges
  • Average nearest neighbor degree calculation, graph.knn()
  • Weighted degree (also called strength) calculation, graph.strength()
  • Some new functions to support bipartite graphs: graph.bipartite(), is.bipartite(), get.indicence(), graph.incidence(), bipartite.projection(), bipartite.projection.size()
  • Support for plotting curved edges with plot.igraph() and tkplot()
  • Added support for weighted graphs in alpha.centrality()
  • Added the label propagation community detection algorithm by Raghavan et al., label.propagation.community()
  • cohesive.blocks() now has a cutsetHeuristic argument to choose between two cutset algorithms
  • Added a function to “unfold” a tree, unfold.tree()
  • New tkplot() arguments to change the drawing area
  • Added a minimal GUI, invoke it with tkigraph()
  • The DrL layout generator, layout.drl() has a three dimensional mode now.

Bugs corrected in the R interface

  • Fixed a bug in VF2 graph isomorphism functions
  • Fixed a bug when a sparse adjacency matrix was requested in get.adjacency() and the graph was named
  • VL graph generator in degree.sequence.game() checks now that the sum of the degrees is even
  • Many fixes for supporting various compilers, e.g. GCC 4.4 and Sun’s C compiler
  • Fixed memory leaks in graph.automorphisms(), Bellman-Ford shortest.paths(), independent.vertex.sets()
  • Fix a bug when a graph was imported from LGL and exported to NCOL format (#289596)
  • cohesive.blocks() creates its temporary file in the session temporary directory
  • write.graph() and read.graph() now give error messages when unknown arguments are given
  • The GraphML reader checks the name of the attributes to avoid adding a duplicate id attribute
  • It is possible to change the ncv ARPACK parameter for leading.eigenvector.community()
  • Fixed a bug in path.length.hist(), unconnected was wrong for unconnected and undirected graphs
  • Better handling of attribute assingment via iterators, this is now also clarified in the manual
  • Better error messages for unknown vertex shapes
  • Make R package unload cleanly if unloadNamespace() is used
  • Fixed a bug in plotting square shaped vertices (#325244)
  • Fixed a bug in graph.adjacency() when the matrix is a sparse matrix of class dgTMatrix
]]>
C/igraph 0.5.12008-07-14T00:00:00+00:002008-07-14T00:00:00+00:00https://igraph.org/2008/07/14/igraph-0.5.1-cigraph 0.5.1 Release Notes

igraph 0.5.1 is a bugfix release, but it actually contains many important new things as well. Here is a brief summary about each of them. See below for the complete list of changes.

The DrL layout generator was added

This is a sophisticated and efficient layout generator written by Shawn Martin and colleagues. See more in the reference manual.

Uniform sampling of random graphs with given degree sequence

A nice random graph generator that conditions on the degree of vertices was added. It can generate undirected connected graphs. The algorithm and the implementation was done by Fabien Viger and Matthieu Latapy. See more in the reference manual.

Weighted shortest path algorithms

Both the Dijkstra and the Belmann-Ford algorithms were added. See more in the
reference manual.

Function to test edge reciprocity

Mutuality can be tested for each edge now. See more in the reference manual.

New in the C layer

  • A new layout generator called DrL.
  • Uniform sampling of random connected undirected graphs with a given degree sequence.
  • Some stochastic test results are ignored (for spinglass community detection, some Erdos-Renyi generator tests)
  • Weighted shortest paths, Dijkstra’s algorithm.
  • The unweigthed shortest path routine returns Inf for unreachable vertices.
  • New function, igraph_adjlist can create igraph graphs from adjacency lists.
  • New function, igraph_weighted_adjacency can create weighted graphs from weight matrices.
  • New function, igraph_is_mutual to search for mutual edges.
  • Added inverse log-weighted similarity measure (a.k.a. Adamic/Adar similarity).
  • igraph_preference_game and igraph_asymmetric_preference_game were rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).
  • The Bellman-Ford shortest path algorithm was added.
  • Added weighted variant of igraph_get_shortest_paths, based on Dijkstra’s algorithm.
  • Several small memory leaks were removed, and a big one from the Spinglass community structure detection function

Bugs corrected in the C layer

  • Several bugs were corrected in the (still experimental) C attribute handler.
  • Pajek reader bug corrected, used to segfault if *Vertices was missing.
  • Directedness is handled correctly when writing GML files. (But note that ‘correct’ conflicts the standard here.)
  • Corrected a bug when calculating weighted, directed PageRank on an undirected graph. (Which does not make sense anyway.)
  • Some code polish to make igraph compile with GCC 4.3
  • Several bugs were fixed in the Reingold-Tilford layout to avoid edge crossings.
  • A bug was fixed in the GraphML reader, when the value of a graph attribute was not specified.
  • Fixed a bug in the graph isomorphism routine for small (3-4 vertices) graphs.
  • Corrected the random sampling implementation (igraph_random_sample), now it always generates unique numbers. This affects the G(n,m) Erdos-Renyi generator, it always generates simple graphs now.
  • The basic igraph constructor (igraph_empty_attrs, all functions are expected to call this internally) now checks whether the number of vertices is finite.
  • The LGL, NCOL and Pajek graph readers handle errors properly now.
  • The non-symmetric ARPACK solver returns results in a consistent form now.
  • The fast greedy community detection routine now checks that the graph is simple.
  • The LGL and NCOL parsers were corrected to work with all kinds of end-of-line encodings.
  • Hub & authority score calculations initialize ARPACK parameters now.x
  • Fixed a bug in the Walktrap community detection routine, when applied to unconnected graphs.
]]>
python-igraph 0.5.12008-07-14T00:00:00+00:002008-07-14T00:00:00+00:00https://igraph.org/2008/07/14/igraph-0.5.1-pythonigraph 0.5.1 Release Notes

igraph 0.5.1 is a bugfix release, but it actually contains many important new things as well. Here is a brief summary about each of them. See below for the complete list of changes.

The DrL layout generator was added

This is a sophisticated and efficient layout generator written by Shawn Martin and colleagues. See more in the Python documentation.

Uniform sampling of random graphs with given degree sequence

A nice random graph generator that conditions on the degree of vertices was added. It can generate undirected connected graphs. The algorithm and the implementation was done by Fabien Viger and Matthieu Latapy. See more in the Python documentation.

Weighted shortest path algorithms

Both the Dijkstra and the Belmann-Ford algorithms were added. See more in the Python manual.

Function to test edge reciprocity

Mutuality can be tested for each edge now. See more in the Python manual.

New in the Python interface

  • A new layout generator called DrL.
  • Uniform sampling of random connected undirected graphs with a given degree sequence.
  • Methods parameters accepting igraph.IN, igraph.OUT and igraph.ALL constants now also accept these as strings ("in", "out" and "all"). Prefix matches also allowed as long as the prefix match is unique.
  • Graph.shortest_paths() now supports edge weights (Dijkstra’s and Bellman-Ford algorithm implemented)
  • Graph.get_shortest_paths() also supports edge weights (only Dijkstra’s algorithm yet)
  • Added Graph.is_mutual() to find mutual edges in a directed graph.
  • Added inverse log-weighted similarity measure (a.k.a. Adamic/Adar similarity).
  • preference.game and asymmetric.preference.game were rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).
  • ARPACK options can now be modified from the Python interface (thanks to Kurt Jacobson)
  • Layout.to_radial() added – now you can create a top-down tree layout by the Reingold-Tilford algorithm and then turn it to a radial tree layout
  • Added Graph.write_pajek() to save graphs in Pajek format
  • Some vertex and edge related methods can now also be accessed via the methods of VertexSeq and EdgeSeq, restricted to the current vertex/edge sequence of course
  • Visualisations now support triangle shaped vertices
  • Added Graph.mincut()
  • Added Graph.Weighted_Adjacency() to create graphs from weighted adjacency matrices
  • Kamada-Kawai and Fruchterman-Reingold layouts now accept initial vertex positions
  • Graph.Preference() and Graph.Asymmetric_Preference() were rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).

Bugs corrected in the Python interface

  • Graph.constraint() now properly returns floats instead of integers (thanks to Eytan Bakshy)
  • Graphs given by adjacency matrices are now finally loaded and saved properly
  • Graph.Preference() now accepts floats in type distributions
  • A small bug in Graph.community_edge_betweenness() corrected
  • Some bugs in numeric attribute handling resolved
  • VertexSeq and EdgeSeq objects can now be subsetted by lists and tuples as well
  • Fixed a bug when dealing with extremely small layout sizes
  • Eigenvector centality now always return positive values
  • Graph.authority_score() now really returns the authority scores instead of the hub scores (blame copypasting)
  • Pajek reader bug corrected, used to segfault if *Vertices was missing.
  • Directedness is handled correctly when writing GML files. (But note that ‘correct’ conflicts the standard here.)
  • Corrected a bug when calculating weighted, directed PageRank on an undirected graph. (Which does not make sense anyway.)
  • Several bugs were fixed in the Reingold-Tilford layout to avoid edge crossings.
  • A bug was fixed in the GraphML reader, when the value of a graph attribute was not specified.
  • Fixed a bug in the graph isomorphism routine for small (3-4 vertices) graphs.
  • Corrected the random sampling implementation (igraph_random_sample), now it always generates unique numbers. This affects the G(n,m) Erdos-Renyi generator, it always generates simple graphs now.
  • The LGL, NCOL and Pajek graph readers handle errors properly now.
  • The non-symmetric ARPACK solver returns results in a consistent form now.
  • The fast greedy community detection routine now checks that the graph is simple.
  • The LGL and NCOL parsers were corrected to work with all kinds of end-of-line encodings.
  • Hub & authority score calculations initialize ARPACK parameters now.
  • Fixed a bug in the Walktrap community detection routine, when applied to unconnected graphs.
  • Several small memory leaks were removed, and a big one from the Spinglass community structure detection function
]]>
R/igraph 0.5.12008-07-14T00:00:00+00:002008-07-14T00:00:00+00:00https://igraph.org/2008/07/14/igraph-0.5.1-rigraph 0.5.1 Release Notes

igraph 0.5.1 is a bugfix release, but it actually contains many important new things as well. Here is a brief summary about each of them. See below for the complete list of changes.

The DrL layout generator was added

This is a sophisticated and efficient layout generator written by Shawn Martin and colleagues. See more in the manual.

Uniform sampling of random graphs with given degree sequence

A nice random graph generator that conditions on the degree of vertices was added. It can generate undirected connected graphs. The algorithm and the implementation was done by Fabien Viger and Matthieu Latapy. See more in the manual.

Conversions

igraph includes some functions to convert graphs to and from graphNEL objects as defined in the graph package (igraph.to.graphNEL, igraph.from.graphNEL) and sparse matrices using the Matrix package (get.adjacency, graph.adjacency, see the sparse argument).

New graph constructors

A new function was added to create graphs from adjacency lists (graph.adjlist), and graph.data.frame has an argument call vertices, this allows easy construction of graphs with vertex and edge meta data.

Weighted shortest path algorithms

Both the Dijkstra and the Belmann-Ford algorithms were added. See more in the documentation.

Function to test edge reciprocity

Mutuality can be tested for each edge now. See more in the documentation.

Vertex shapes

The R interface now supports different vertex shapes when plotting. See more in the R documentation.

New in the R interface

  • A new layout generator called DrL.
  • Uniform sampling of random connected undirected graphs with a given degree sequence.
  • Edge labels are plotted at 1/3 of the edge, this is better if the graph has mutual edges.
  • Initial and experimental vertex shape support in plot.
  • New function, graph.adjlist creates igraph graphs from adjacency lists.
  • Conversion to/from graphNEL graphs, from the graph R package.
  • Fastgreedy community detection can utilize edge weights now, this was missing from the R interface.
  • The arrow.width graphical parameter was added.
  • graph.data.frame has a new argument vertices.
  • graph.adjacency and get.adjacency support sparse matrices, the Matrix package is required to use this functionality.
  • graph.adjacency adds column/row names as name attribute.
  • Weighted shortest paths using Dijkstra’s or the Belmann-Ford algorithm.
  • Shortest path functions return Inf for unreachable vertices.
  • New function is.mutual to find mutual edges in a directed graph.
  • Added inverse log-weighted similarity measure (a.k.a. Adamic/Adar similarity).
  • preference.game and asymmetric.preference.game were rewritten, they are O(|V|+|E|) now, instead of O(|V|^2).
  • Edge weight support in function get.shortest.paths, it uses Dijkstra’s algorithm.

Bugs corrected in the R interface

  • A bug was corrected in write.pajek.bgraph.
  • Several bugs were corrected in graph.adjacency.
  • Pajek reader bug corrected, used to segfault if *Vertices was missing.
  • Directedness is handled correctly when writing GML files. (But note that ‘correct’ conflicts the standard here.)
  • Corrected a bug when calculating weighted, directed PageRank on an undirected graph. (Which does not make sense anyway.)
  • Several bugs were fixed in the Reingold-Tilford layout to avoid edge crossings.
  • A bug was fixed in the GraphML reader, when the value of a graph attribute was not specified.
  • Fixed a bug in the graph isomorphism routine for small (3-4 vertices) graphs.
  • Corrected the random sampling implementation (igraph_random_sample), now it always generates unique numbers. This affects the G(n,m) Erdos-Renyi generator, it always generates simple graphs now.
  • The basic igraph constructor (igraph_empty_attrs, all functions are expected to call this internally) now checks whether the number of vertices is finite.
  • The LGL, NCOL and Pajek graph readers handle errors properly now.
  • The non-symmetric ARPACK solver returns results in a consistent form now.
  • The fast greedy community detection routine now checks that the graph is simple.
  • The LGL and NCOL parsers were corrected to work with all kinds of end-of-line encodings.
  • Hub & authority score calculations initialize ARPACK parameters now.
  • Fixed a bug in the Walktrap community detection routine, when applied to unconnected graphs.
  • Several small memory leaks were removed, and a big one from the Spinglass community structure detection function
]]>
C/igraph 0.52008-02-14T00:00:00+00:002008-02-14T00:00:00+00:00https://igraph.org/2008/02/14/igraph-0.5-cRelease notes

There are a lot of improvements and corrections in this version. We would like to thank all the people who sent comments, bug reports, patches, or just questions. Without their contribution igraph would be definitely much less and worse than it is now. Please keep sending your comments and ideas!

Here is a list of major changes, with links to the relevant sections of the documentation. See below for the complete list of changes.

igraph as a platform

We took some step towards turning igraph to an efficient platform for implementing graph algorithms. In particular, we have a set of utility types that support general scientific computing and working with graphs: vectors, matrices, stacks, queues, heaps, adjacency lists, etc.

Graph isomorphism

igraph includes the BLISS graph isomorphism algorithm and implementation now. This and the improved VF2 implementation, which can now calculate subgraph isomorphism, make igraph support the bleeding edge of graph isomorphism algorithms. Many thanks to the authors of BLISS. See the details in the Reference Manual.

ARPACK for eigenvalue problems

ARPACK is a library for solving large scale sparse eigenvalue problems. In igraph it is very handy, as many centrality problems are in fact eigenvalue problems: Kleinberg’s hub and authority scores, PageRank, the leading eigenvector community detection algorithm are some examples. Many thanks to the authors of ARPACK and James Fowler, who suggested to include it in igraph.

See the details in the Reference Manual.

Other bits

Create famous graphs easily

Some classic graphs can be created by giving their name. This is very handy if one needs a test graph quickly. See igraph_famous. (The idea is based on Combinatorica, a Mathematica extension.)

Improvements for weighted graphs

Many functions were updated to handle weighted graphs: fast greedy community detection, Page Rank, modularity calculation, the Fruchterman-Reingold layout algorithm.

Non-simple graphs

Some functions were added and improved to handle non-simple graphs (i.e. graphs with loop and/or multiple edges) better: testing that a graph is simple ( igraph_is_simple), testing for multiple edges ( igraph_is_multiple), and counting the multiplicity of edges ( igraph_count_multiple).

The graphopt layout algorithm

This is a nice force-based layout algorithm. See the documentation of details ( igraph_layout_graphopt).

Support for the DOT file format

igraph can now write graphs to files in the DOT format, used by GraphViz. See documentation: igraph_write_graph_dot.

Dyad and triad census

Classic social network analysis tools for classifying the dyads ( igraph_dyad_census), and triads ( igraph_triad_census) of a network.

Biconnected components and articulation points

igraph is now able to calculate biconnected components ( igraph_biconnected_components), and articulation points ( igraph_articulation_points).

Estimating closeness and betweenness

These measures can be quickly estimated by specifying an upper bound for path lengths to be considered. This is useful for larger graphs, for which the calculation takes a long time. See documentation for closeness ( igraph_closeness_estimate), betweenness ( igraph_betweenness_estimate), and edge betweenness ( igraph_edge_betweenness_estimate).

Functions for vertex similarity measures

Two vertex similarity measures based on the number of common neighbors are introduced, the Jaccard ( igraph_similarity_jaccard), and the Dice ( igraph_similarity_dice).

Handle attributes from C

An experimental C attribute interface was added. This allows using graph/vertex/edge attributes when programming from C. See more here.

New in the C library

  • Many types (stack, matrix, dqueue, etc.) are templates now They were also rewritten to provide a better organized interface
  • VF2 graph isomorphism routines can check subgraph isomorphism now, and they are able to return matching(s)
  • The BLISS graph isomorphism algorithm is included in igraph now. See igraph_canonical_permutation, igraph_isomorphic_bliss
  • We use ARPACK for eigenvalue/eigenvector calculation. This means that the following functions were rewritten: igraph_pagerank, igraph_community_leading_eigenvector_*. New functions based on ARPACK: igraph_eigenvector_centrality, igraph_hub_score, igraph_authority_score, igraph_arpack_rssolve, igraph_arpack_rnsolve
  • Experimental C attribute interface added. I.e. it is possible to use graph/vertex/edge attributes from C code now.

  • Edge weights for Fruchterman-Reingold layout.
  • Line graph calculation.
  • Kautz and de Bruijn graph generators
  • Support for writing graphs in DOT format
  • Jaccard and Dice similarity coefficients added
  • igraph_count_multiple added
  • igraph_is_loop and igraph_is_multiple “return” boolean vectors
  • The graphopt layout algorithm was added, igraph_layout_graphopt
  • Generation of “famous” graphs, igraph_famous
  • Create graphs from LCF notation, igraph_lcf, igraph_lcf_vector
  • igraph_add_edge adds a single edge to the graph
  • Dyad census and triad cencus functions added
  • igraph_is_simple added
  • progress handlers are allowed to stop calculation
  • igraph_full_citation to create full citation networks
  • igraph_path_length_hist, create a histogram of path lengths
  • forest fire model added
  • DIMACS reader can handle different file types now
  • Adjacency list types made public now (igraph_adjlist_t, igraph_adjedgelist_t)
  • Biconnected components and articulation points can be computed
  • Eigenvector centrality computation
  • Kleinberg’s hub and authority scores
  • igraph_to_undirected handles attributes now
  • Geometric random graph generator can return the coordinates of the vertices
  • Function added to convert leading eigenvector community structure result to a membership vector (igraph_le_community_to_membership)
  • Weighted fast greedy community detection
  • Weighted page rank calculation
  • Functions for estimating closeness, betweenness, edge betweenness by introducing a cutoff for path lengths
  • Weighted modularity calculation
  • igraph_permute_vertices added
  • Betweenness ans closeness calculations are speeded up
  • Startup positions can be supplied to the Kamada-Kawai layout algorithms
  • igraph_read_graph_* functions can handle all possible line terminators now (\r, \n, \r\n, \n\r)
  • Error handling was rewritten for walktrap community detection, the calculation can be interrupted now
  • The maxflow/mincut functions allow to supply a null pointer for edge capacities, implying unit capacities for all edges

Bugs corrected in the C library

  • Memory leak fixed in adjacency list handling
  • Memory leak fixed in maximal independent vertex set calculation
  • Fixed a bug when rewiring undirected graphs with igraph_rewire
  • Fixed edge betweenness community structure detection for unconnected graphs
  • Make igraph compile with Sun Studio
  • Betweenness bug fixed, when not computing for all vertices
  • memory usage of clique finding reduced
  • Corrected bugs for motif counts when not all motifs were counted, but a cut vector was used
  • Bugs fixed in trait games and cited type game
  • Accept underscore as letter in GML files
  • GML file directedness notation reversed, more logical this way
]]>
python-igraph 0.52008-02-14T00:00:00+00:002008-02-14T00:00:00+00:00https://igraph.org/2008/02/14/igraph-0.5-pythonRelease notes

There are a lot of improvements and corrections in this version. We would like to thank all the people who sent comments, bug reports, patches, or just questions. Without their contribution igraph would be definitely much less and worse than it is now. Please keep sending your comments and ideas!

Here is a list of major changes, with links to the relevant sections of the documentation. See below for the complete list of changes.

Graph isomorphism

igraph includes the BLISS graph isomorphism algorithm and implementation now. This and the improved VF2 implementation, which can now calculate subgraph isomorphism, make igraph support the bleeding edge of graph isomorphism algorithms. Many thanks to the authors of BLISS. See the details in the Python documentation.

ARPACK for eigenvalue problems

ARPACK is a library for solving large scale sparse eigenvalue problems. In igraph it is very handy, as many centrality problems are in fact eigenvalue problems: Kleinberg’s hub and authority scores, PageRank, the leading eigenvector community detection algorithm are some examples. Many thanks to the authors of ARPACK and James Fowler, who suggested to include it in igraph.

See the details in the evcent, pagerank, hub_score, etc. functions in the Python documentation.

Plotting

Plotting functionality based on the Cairo graphics library (so you need to install python-cairo if you want to use it). Currently the following objects can be plotted: graphs, adjacency matrices and dendrograms. Some crude support for plotting histograms is also implemented. Plots can be saved in PNG, SVG and PDF formats.

See the details in the documentation.

Other bits

Shell interface

igraph can now be invoked by calling the script called igraph from the command line. The script launches the Python interpreter and automatically imports igraph functions into the main namespace.

Create famous graphs easily

Some classic graphs can be created by giving their name. This is very handy if one needs a test graph quickly. See Famous. (The idea is based on Combinatorica, a Mathematica extension.)

Improvements for weighted graphs

Many functions were updated to handle weighted graphs: fast greedy community detection, Page Rank, modularity calculation, the Fruchterman-Reingold layout algorithm.

Non-simple graphs

Some functions were added and improved to handle non-simple graphs (i.e. graphs with loop and/or multiple edges) better: testing that a graph is simple, testing for loop edges, testing for multiple edges) and counting the multiplicity of edges.

Pickling support in Python

igraph Graph objects can be serialized (pickled) in Python.

The graphopt layout algorithm

This is a nice force-based layout algorithm. See the documentation of details.

Support for the DOT file format

igraph can now write graphs to files in the DOT format, used by GraphViz. See documentation.

Dyad and triad census

Classic social network analysis tools for classifying the dyads and triads of a network.

Biconnected components and articulation points

igraph is now able to calculate biconnected components and articulation points.

Estimating closeness and betweenness

These measures can be quickly estimated by specifying an upper bound for path lengths to be considered. This is useful for larger graphs, for which the calculation takes a long time. See documentation for closeness, betweenness and edge betweenness.

Functions for vertex similarity measures

Two vertex similarity measures based on the number of common neighbors are introduced, the Jaccard Jaccard and the Dice similarities.

New features

  • Added shell interface: igraph can now be invoked by calling the script called igraph from the command line. The script launches the Python interpreter and automatically imports igraph functions into the main namespace
  • Pickling (serialization) support for Graph objects
  • Plotting functionality based on the Cairo graphics library (so you need to install python-cairo if you want to use it). Currently the following objects can be plotted: graphs, adjacency matrices and dendrograms. Some crude support for plotting histograms is also implemented. Plots can be saved in PNG, SVG and PDF formats.
  • Unified Graph.layout method for accessing layout algorithms
  • Added interfaces to walktrap community detection and the BLISS isomorphism algorithm
  • Added dyad and triad census functionality and motif counting
  • VertexSeq and EdgeSeq objects can now be restricted to subsets of the whole network (e.g., you can select vertices/edges based on attributes, degree, centrality and so on)

New in the C library

  • Many types (stack, matrix, dqueue, etc.) are templates now They were also rewritten to provide a better organized interface
  • VF2 graph isomorphism routines can check subgraph isomorphism now, and they are able to return matching(s)
  • The BLISS graph isomorphism algorithm is included in igraph now. See igraph_canonical_permutation, igraph_isomorphic_bliss
  • We use ARPACK for eigenvalue/eigenvector calculation. This means that the following functions were rewritten: igraph_pagerank, igraph_community_leading_eigenvector_*. New functions based on ARPACK: igraph_eigenvector_centrality, igraph_hub_score, igraph_authority_score, igraph_arpack_rssolve, igraph_arpack_rnsolve
  • Experimental C attribute interface added. I.e. it is possible to use graph/vertex/edge attributes from C code now.

  • Edge weights for Fruchterman-Reingold layout.
  • Line graph calculation.
  • Kautz and de Bruijn graph generators
  • Support for writing graphs in DOT format
  • Jaccard and Dice similarity coefficients added
  • igraph_count_multiple added
  • igraph_is_loop and igraph_is_multiple “return” boolean vectors
  • The graphopt layout algorithm was added, igraph_layout_graphopt
  • Generation of “famous” graphs, igraph_famous
  • Create graphs from LCF notation, igraph_lcf, igraph_lcf_vector
  • igraph_add_edge adds a single edge to the graph
  • Dyad census and triad cencus functions added
  • igraph_is_simple added
  • progress handlers are allowed to stop calculation
  • igraph_full_citation to create full citation networks
  • igraph_path_length_hist, create a histogram of path lengths
  • forest fire model added
  • DIMACS reader can handle different file types now
  • Adjacency list types made public now (igraph_adjlist_t, igraph_adjedgelist_t)
  • Biconnected components and articulation points can be computed
  • Eigenvector centrality computation
  • Kleinberg’s hub and authority scores
  • igraph_to_undirected handles attributes now
  • Geometric random graph generator can return the coordinates of the vertices
  • Function added to convert leading eigenvector community structure result to a membership vector (igraph_le_community_to_membership)
  • Weighted fast greedy community detection
  • Weighted page rank calculation
  • Functions for estimating closeness, betweenness, edge betweenness by introducing a cutoff for path lengths
  • Weighted modularity calculation
  • igraph_permute_vertices added
  • Betweenness ans closeness calculations are speeded up
  • Startup positions can be supplied to the Kamada-Kawai layout algorithms
  • igraph_read_graph_* functions can handle all possible line terminators now (\r, \n, \r\n, \n\r)
  • Error handling was rewritten for walktrap community detection, the calculation can be interrupted now
  • The maxflow/mincut functions allow to supply a null pointer for edge capacities, implying unit capacities for all edges

Bugs corrected in the C library

  • Memory leak fixed in adjacency list handling
  • Memory leak fixed in maximal independent vertex set calculation
  • Fixed a bug when rewiring undirected graphs with igraph_rewire
  • Fixed edge betweenness community structure detection for unconnected graphs
  • Make igraph compile with Sun Studio
  • Betweenness bug fixed, when not computing for all vertices
  • memory usage of clique finding reduced
  • Corrected bugs for motif counts when not all motifs were counted, but a cut vector was used
  • Bugs fixed in trait games and cited type game
  • Accept underscore as letter in GML files
  • GML file directedness notation reversed, more logical this way
]]>
R/igraph 0.52008-02-14T00:00:00+00:002008-02-14T00:00:00+00:00https://igraph.org/2008/02/14/igraph-0.5-rRelease notes

There are a lot of improvements and corrections in this version. We would like to thank all the people who sent comments, bug reports, patches, or just questions. Without their contribution igraph would be definitely much less and worse than it is now. Please keep sending your comments and ideas!

Here is a list of major changes, with links to the relevant sections of the documentation. See below for the complete list of changes.

Graph isomorphism

igraph includes the BLISS graph isomorphism algorithm and implementation now. This and the improved VF2 implementation, which can now calculate subgraph isomorphism, make igraph support the bleeding edge of graph isomorphism algorithms. Many thanks to the authors of BLISS. See the details in the Reference Manual, in the R documentation or in the Python documentation.

ARPACK for eigenvalue problems

ARPACK is a library for solving large scale sparse eigenvalue problems. In igraph it is very handy, as many centrality problems are in fact eigenvalue problems: Kleinberg’s hub and authority scores, PageRank, the leading eigenvector community detection algorithm are some examples. Many thanks to the authors of ARPACK and James Fowler, who suggested to include it in igraph.

See the details in the documentation.

Other bits

Create famous graphs easily

Some classic graphs can be created by giving their name. This is very handy if one needs a test graph quickly. See graph.famous(). (The idea is based on Combinatorica, a Mathematica extension.)

Create graphs using formulas

The new graph.formula() function provides a simple, concise way to create (small) graphs. Numerous examples are included in the manual page.

Improvements for weighted graphs

Many functions were updated to handle weighted graphs: fast greedy community detection (fastgreedy.community) Page Rank (page.rank), modularity calculation (modularity), the Fruchterman-Reingold layout algorithm (layout.fruchterman.reingold.

Non-simple graphs

Some functions were added and improved to handle non-simple graphs (i.e. graphs with loop and/or multiple edges) better: testing that a graph is simple (simplify), testing for loop edges (is.loop), testing for multiple edges (is.multiple) and counting the multiplicity of edges (count.multiple.

The graphopt layout algorithm

This is a nice force-based layout algorithm. See the documentation for details.

Support for the DOT file format

igraph can now write graphs to files in the DOT format, used by GraphViz. See the documentation.

Dyad and triad census

Classic social network analysis tools for classifying the dyads (dyad.census) and triads (triad.census.

Biconnected components and articulation points

igraph is now able to calculate biconnected components and
articulation points.

R graphics improvements

There were some minor improvements in R graphics. New graphical parameters: frame, asp, rescale and shape for different vertex shapes, right now only circles and squares are supported. plot.igraph has as argument (add) to plot many graphs on the same plot, maybe on top of each other. It also supports the main and sub arguments now. See more here.

Always free memory in R after an interrupted calculation

In previous versions of the igraph R package the allocated memory was not freed if the computation was interrupted. This surely affected MS Windows platforms, maybe also OSX. (Not Linux.) igraph 0.5 correctly deallocates all memory on all platforms after an interruption.

Estimating closeness and betweenness

These measures can be quickly estimated by specifying an upper bound for path lengths to be considered. This is useful for larger graphs, for which the calculation takes a long time. See documentation for closeness, betweenness, and edge betweenness.

Functions for vertex similarity measures

Two vertex similarity measures based on the number of common neighbors are introduced, the Jaccard and Dice similarities. See the manual for details.

Proper warnings in R

Up to now igraph warnings were dumped to the console when using the igraph R package. In many cases this meant that they were effectively lost. In the new version igraph warnings are converted to proper R warnings.

New in the R interface

  • The rescale, asp and frame graphical parameters were added
  • Create graphs from a formula notation (graph.formula)
  • Handle graph attributes properly
  • Calculate the actual minimum cut for undirected graphs
  • Adjacency lists, get.adjlist and get.adjedgelist added
  • Eigenvector centrality computation is much faster now
  • Proper R warnings, instead of writing the warning to the terminal
  • R checks graphical parameters now, the unknown ones are not just ignored, but an error message is given.
  • plot.igraph has an add argument now to compose plots with multiple graphs
  • plot.igraph supports the main and sub arguments
  • layout.norm is public now, it can normalize a layout
  • It is possible to supply startup positions to layout generators
  • Always free memory when CTRL+C/ESC is pressed, in all operating systems
  • plot.igraph can plot square vertices now, see the shape parameter
  • graph.adjacency rewritten when creating weighted graphs
  • We use match.arg whenever possible. This means that character scalar options can be abbreviated and they are always case insensitive

  • VF2 graph isomorphism routines can check subgraph isomorphism now, and they are able to return matching(s)
  • The BLISS graph isomorphism algorithm is included in igraph now. See canonical.permutation, graph.isomorphic.bliss
  • We use ARPACK for eigenvalue/eigenvector calculation. This means that the following functions were rewritten: page.rank, leading.eigenvector.community.*, evcent. New functions based on ARPACK: hub.score, authority.score, arpack.
  • Edge weights for Fruchterman-Reingold layout (layout.fruchterman.reingold).
  • Line graph calculation (line.graph)
  • Kautz and de Bruijn graph generators (graph.kautz, graph.de.bruijn)
  • Support for writing graphs in DOT format
  • Jaccard and Dice similarity coefficients added (similarity.jaccard, similarity.dice)
  • Counting the multiplicity of edges (count.multiple)
  • The graphopt layout algorithm was added, layout.graphopt
  • Generation of “famous” graphs (graph.famous).
  • Create graphs from LCF notation (graph.cf).
  • Dyad census and triad cencus functions (dyad.census, triad.census)
  • Cheking for simple graphs (is.simple)
  • Create full citation networks (graph.full.citation)
  • Create a histogram of path lengths (path.length.hist)
  • Forest fire model added (forest.fire.game)
  • DIMACS reader can handle different file types now
  • Biconnected components and articulation points (biconnected.components, articulation.points)
  • Kleinberg’s hub and authority scores (hub.score, authority.score)
  • as.undirected handles attributes now
  • Geometric random graph generator (grg.game) can return the coordinates of the vertices
  • Function added to convert leading eigenvector community structure result to a membership vector (community.le.to.membership)
  • Weighted fast greedy community detection
  • Weighted page rank calculation
  • Functions for estimating closeness, betweenness, edge betweenness by introducing a cutoff for path lengths (closeness.estimate, betweenness.estimate, edge.betweenness.estimate)
  • Weighted modularity calculation
  • Function for permuting vertices (permute.vertices)
  • Betweenness and closeness calculations are speeded up
  • read.graph can handle all possible line terminators now (\r, \n, \r\n, \n\r)
  • Error handling was rewritten for walktrap community detection, the calculation can be interrupted now
  • The maxflow/mincut functions allow to supply NULL pointer for edge capacities, implying unit capacities for all edges

Bugs corrected in the R interface

  • Fixed a bug in cohesive.blocks, cohesive blocks were sometimes not calculated correctly
]]>
C/igraph 0.4.52008-01-01T00:00:00+00:002008-01-01T00:00:00+00:00https://igraph.org/2008/01/01/igraph-0.4.5-cC/igraph 0.4.5

January 1, 2008

New:

  • Biconnected components and articulation points.

New in the C library:

  • igraph_vector_bool_t data type.

Bug fixed:

  • Erdos-Renyi random graph generators rewritten.
]]>
python-igraph 0.4.52008-01-01T00:00:00+00:002008-01-01T00:00:00+00:00https://igraph.org/2008/01/01/igraph-0.4.5-pythonpython-igraph 0.4.5

January 1, 2008

New:

  • Biconnected components and articulation points.

Bug fixed:

  • Erdos-Renyi random graph generators rewritten.
]]>
R/igraph 0.4.52008-01-01T00:00:00+00:002008-01-01T00:00:00+00:00https://igraph.org/2008/01/01/igraph-0.4.5-rR/igraph 0.4.5

January 1, 2008

New:

  • Cohesive block finding in the R interface, thanks to Peter McMahan for contributing his code. See James Moody and Douglas R. White, 2003, in Structural Cohesion and Embeddedness: A Hierarchical Conception of Social Groups American Sociological Review 68(1):1-25
  • Biconnected components and articulation points.
  • R interface: better printing of attributes.
  • R interface: graph attributes can be used via $.

Bug fixed:

  • Erdos-Renyi random graph generators rewritten.
]]>
C/igraph 0.4.42007-10-03T00:00:00+00:002007-10-03T00:00:00+00:00https://igraph.org/2007/10/03/igraph-0.4.4-cC/igraph 0.4.4

October 3, 2007

Some bugs were fixed:

  • A bug was fixed in the Erdos-Renyi graph generator, which sometimes added an extra vertex.
  • MSVC compilation issues were fixed.
  • MinGW compilation fixes.
]]>
python-igraph 0.4.42007-10-03T00:00:00+00:002007-10-03T00:00:00+00:00https://igraph.org/2007/10/03/igraph-0.4.4-pythonpython-igraph 0.4.4

October 3, 2007

Some bugs were fixed:

  • A bug was fixed in the Erdos-Renyi graph generator, which sometimes added an extra vertex.
  • MSVC compilation issues were fixed.
  • MinGW compilation fixes.
]]>
R/igraph 0.4.42007-10-03T00:00:00+00:002007-10-03T00:00:00+00:00https://igraph.org/2007/10/03/igraph-0.4.4-rR/igraph 0.4.4

October 3, 2007

This release should work seemlessly with the new R 2.6.0 version. Some other bugs were also fixed:

  • A bug was fixed in the Erdos-Renyi graph generator, which sometimes added an extra vertex.
  • MSVC compilation issues were fixed.
  • MinGW compilation fixes.
]]>
C/igraph 0.4.32007-08-13T00:00:00+00:002007-08-13T00:00:00+00:00https://igraph.org/2007/08/13/igraph-0.4.3-cC/igraph 0.4.3

August 13, 2007

The next one in the sequence of bugfix releases. Thanks to many people sending bug reports. Here are the changes:

  • GraphML parser: entities and character data in multiple chunks are now handled correctly.
  • A bug corrected in edge betweenness community structure detection, it failed if called many times from the same program/session.
  • Bug corrected in ‘adjacent edges’ edge iterator.
  • Edge betweeness community structure: handle unconnected graphs properly.
  • Fixed bug related to fast greedy community detection in unconnected graphs.
  • Use a different kind of parser (Push) for reading GraphML files. This is almost invisible for users but fixed a nondeterministic bug when reading in GraphML files.
  • Test suite should run correctly on Cygwin now.
]]>
python-igraph 0.4.32007-08-13T00:00:00+00:002007-08-13T00:00:00+00:00https://igraph.org/2007/08/13/igraph-0.4.3-pythonpython-igraph 0.4.3

August 13, 2007

The next one in the sequence of bugfix releases. Thanks to many people sending bug reports. Here are the changes:

  • Some memory leaks removed when using attributes.
  • GraphML parser: entities and character data in multiple chunks are now handled correctly.
  • A bug corrected in edge betweenness community structure detection, it failed if called many times from the same program/session.
  • Bug corrected in ‘adjacent edges’ edge iterator.
  • Python interface: edge and vertex attribute deletion bug corrected.
  • Edge betweeness community structure: handle unconnected graphs properly.
  • Fixed bug related to fast greedy community detection in unconnected graphs.
  • Use a different kind of parser (Push) for reading GraphML files. This is almost invisible for users but fixed a nondeterministic bug when reading in GraphML files.
  • Test suite should run correctly on Cygwin now.
]]>
R/igraph 0.4.32007-08-13T00:00:00+00:002007-08-13T00:00:00+00:00https://igraph.org/2007/08/13/igraph-0.4.3-rR/igraph 0.4.3

August 13, 2007

The next one in the sequence of bugfix releases. Thanks to many people sending bug reports. Here are the changes:

  • Some memory leaks removed when using attributes from R or Python.
  • GraphML parser: entities and character data in multiple chunks are now handled correctly.
  • A bug corrected in edge betweenness community structure detection, it failed if called many times from the same program/session.
  • Bug corrected in ‘adjacent edges’ edge iterator.
  • Edge betweeness community structure: handle unconnected graphs properly.
  • Fixed bug related to fast greedy community detection in unconnected graphs.
  • Use a different kind of parser (Push) for reading GraphML files. This is almost invisible for users but fixed a nondeterministic bug when reading in GraphML files.
  • R interface: plot now handles properly if called with a vector as the edge.width argument for directed graphs.
  • R interface: bug (typo) corrected for walktrap.community and weighted graphs.
  • Test suite should run correctly on Cygwin now.
]]>
C/igraph 0.4.22007-06-07T00:00:00+00:002007-06-07T00:00:00+00:00https://igraph.org/2007/06/07/igraph-0.4.2-cC/igraph 0.4.2

June 7, 2007

This is another bugfix release.

Some other bits added:

  • circular Reingold-Tilford layout generator for trees
  • corrected a bug, Pajek files are written properly under MS Windows now.
]]>
python-igraph 0.4.22007-06-07T00:00:00+00:002007-06-07T00:00:00+00:00https://igraph.org/2007/06/07/igraph-0.4.2-pythonpython-igraph 0.4.2

June 7, 2007

This is another bugfix release. Some other bits added:

  • circular Reingold-Tilford layout generator for trees
  • corrected a bug, Pajek files are written properly under MS Windows now.
]]>
R/igraph 0.4.22007-06-07T00:00:00+00:002007-06-07T00:00:00+00:00https://igraph.org/2007/06/07/igraph-0.4.2-rR/igraph 0.4.2

June 7, 2007

This is another bugfix release, as there was a serious bug in the R package of the previous version: it could not read and write graphs to files in any format under MS Windows.

Some other bits added:

  • circular Reingold-Tilford layout generator for trees
  • corrected a bug, Pajek files are written properly under MS Windows now.
  • arrow.size graphical edge parameter added in the R interface.
]]>
C/igraph 0.4.12007-05-23T00:00:00+00:002007-05-23T00:00:00+00:00https://igraph.org/2007/05/23/igraph-0.4.1-cC/igraph 0.4.1

May 23, 2007

This is a minor release, it corrects a number of bugs.

]]>
python-igraph 0.4.12007-05-23T00:00:00+00:002007-05-23T00:00:00+00:00https://igraph.org/2007/05/23/igraph-0.4.1-pythonpython-igraph 0.4.1

May 23, 2007

This is a minor release, it corrects a number of bugs.

]]>
R/igraph 0.4.12007-05-23T00:00:00+00:002007-05-23T00:00:00+00:00https://igraph.org/2007/05/23/igraph-0.4.1-rR/igraph 0.4.1

May 23, 2007

This is a minor release, it corrects a number of bugs, mostly in the R package.

]]>
C/igraph 0.42007-05-21T00:00:00+00:002007-05-21T00:00:00+00:00https://igraph.org/2007/05/21/igraph-0.4-cC/igraph 0.4

May 21, 2007

The major new additions in this release is a bunch of community detection algorithms and support for the GML file format. Here is the complete list of changes:

New in the C library

  • internal representation changed
  • igraph_neighbors always returns an ordered list
  • igraph_is_loop and igraph_is_multiple added

  • topological sorting
  • VF2 isomorphism algorithm
  • support for reading the file format of the Graph Database for isomorphism
  • igraph_mincut cat calculate the actual minimum cut
  • girth calculation added, thanks to Keith Briggs
  • support for reading and writing GML files

  • Walktrap community detection algorithm added, thanks to Matthieu Latapy and Pascal Pons
  • edge betweenness based community detection algorithm added
  • fast greedy algorithm for community detection by Clauset et al. added thanks to Aaron Clauset for sharing his code
  • leading eigenvector community detection algorithm by Mark Newman added
  • igraph_community_to_membership supporting function added, creates a membership vector from a community structure merge tree
  • modularity calculation added

Others

  • proper support for Debian packages (re)added
  • many functions benefit from the new internal representation and are faster now: transitivity, reciprocity, graph operator functions like intersection and union, etc.
  • igraph compiles with Microsoft Visual C++ now
  • there were some internal changes to make igraph a real graph algorithm platform in the near future, but these are undocumented now

Bugs corrected

  • corrected a bug when reading Pajek files: directed graphs were read as undirected
]]>
python-igraph 0.42007-05-21T00:00:00+00:002007-05-21T00:00:00+00:00https://igraph.org/2007/05/21/igraph-0.4-pythonpython-igraph 0.4

May 21, 2007

The major new additions in this release is a bunch of community detection algorithms and support for the GML file format. Here is the complete list of changes:

New in the C library

  • internal representation changed
  • igraph_neighbors always returns an ordered list
  • igraph_is_loop and igraph_is_multiple added

  • topological sorting
  • VF2 isomorphism algorithm
  • support for reading the file format of the Graph Database for isomorphism
  • igraph_mincut cat calculate the actual minimum cut
  • girth calculation added, thanks to Keith Briggs
  • support for reading and writing GML files

  • Walktrap community detection algorithm added, thanks to Matthieu Latapy and Pascal Pons
  • edge betweenness based community detection algorithm added
  • fast greedy algorithm for community detection by Clauset et al. added thanks to Aaron Clauset for sharing his code
  • leading eigenvector community detection algorithm by Mark Newman added
  • igraph_community_to_membership supporting function added, creates a membership vector from a community structure merge tree
  • modularity calculation added

Others

  • proper support for Debian packages (re)added
  • many functions benefit from the new internal representation and are faster now: transitivity, reciprocity, graph operator functions like intersection and union, etc.
  • igraph compiles with Microsoft Visual C++ now
  • there were some internal changes to make igraph a real graph algorithm platform in the near future, but these are undocumented now

Bugs corrected

  • corrected a bug when reading Pajek files: directed graphs were read as undirected
]]>
R/igraph 0.42007-05-21T00:00:00+00:002007-05-21T00:00:00+00:00https://igraph.org/2007/05/21/igraph-0.4-rR/igraph 0.4

May 21, 2007

The major new additions in this release is a bunch of community detection algorithms and support for the GML file format. Here is the complete list of changes:

New in the R interface

  • as the internal representation changed, graphs stored with ‘save’ with an older igraph version cannot be read back with the new version reliably.
  • neighbors returns ordered lists

  • topological sorting
  • VF2 isomorphism algorithm
  • support for reading graphs from the Graph Database for isomorphism
  • girth calculation added, thanks to Keith Briggs
  • support for reading and writing GML files

  • Walktrap community detection algorithm added, thanks to Matthieu Latapy and Pascal Pons
  • edge betweenness based community detection algorithm added
  • fast greedy algorithm for community detection by Clauset et al. added thanks to Aaron Clauset for sharing his code
  • leading eigenvector community detection algorithm by Mark Newman added
  • functions for creating denrdograms from the output of the community detection algorithms added
  • community.to.membership supporting function added, creates a membership vector from a community structure merge tree
  • modularity calculation added

  • graphics parameter handling is completely rewritten, uniform handling of colors and fonts, make sure you read ?igraph.plotting
  • new plotting parameter for edges: arrow.mode
  • a bug corrected when playing a nonlinear barabasi.game
  • better looking plotting in 3d using rglplot: edges are 3d too
  • rglplot layout is allowed to be two dimensional now
  • rglplot suspends updates while drawing, this makes it faster
  • loop edges are correctly plotted by all three plotting functions

  • better printing of attributes when printing graphs
  • summary of a graph prints attribute names
  • is.igraph rewritten to make it possible to inherit from the igraph class
  • somewhat better looking progress meter for functions which support it

Others

  • many functions benefit from the new internal representation and are faster now: transitivity, reciprocity, graph operator functions like intersection and union, etc.
  • igraph compiles with Microsoft Visual C++ now
  • there were some internal changes to make igraph a real graph algorithm platform in the near future, but these are undocumented now

Bugs corrected

  • corrected a bug when reading Pajek files: directed graphs were read as undirected
]]>
C/igraph 0.3.32007-02-28T00:00:00+00:002007-02-28T00:00:00+00:00https://igraph.org/2007/02/28/igraph-0.3.3-cC/igraph 0.3.3

New in the C library

  • igraph_connect_neighborhood(), nomen est omen
  • igraph_watts_strogatz_game() and igraph_rewire_edges()
  • K-core decomposition: igraph_coreness()
  • Clique and independent vertex set related functions: igraph_cliques(), igraph_independent_vertex_sets(), igraph_maximal_cliques(), igraph_maximal_independent_vertex_sets(), igraph_independence_number(), `igraph_clique_number(), Some of these function were ported from the very_nauty library of Keith Briggs, thanks Keith!
  • The GraphML file format now supports graph attributes
  • Transitivity calculation speeded up
  • Correct transitivity calculation for multigraphs (ie. non-simple graphs)

Bugs corrected

  • make install installs the library correctly on Cygwin now
  • Pajek parser corrected to read files with MacOS newline characters correctly
  • overflow bug in transitivity calculation for large graphs corrected
  • an internal memcpy/memmove bug causing some segfaults removed
]]>
python-igraph 0.3.32007-02-28T00:00:00+00:002007-02-28T00:00:00+00:00https://igraph.org/2007/02/28/igraph-0.3.3-pythonpython-igraph 0.3.3

New in the C library

  • igraph_connect_neighborhood(), nomen est omen
  • igraph_watts_strogatz_game() and igraph_rewire_edges()
  • K-core decomposition: igraph_coreness()
  • Clique and independent vertex set related functions: igraph_cliques(), igraph_independent_vertex_sets(), igraph_maximal_cliques(), igraph_maximal_independent_vertex_sets(), igraph_independence_number(), `igraph_clique_number(), Some of these function were ported from the very_nauty library of Keith Briggs, thanks Keith!
  • The GraphML file format now supports graph attributes
  • Transitivity calculation speeded up
  • Correct transitivity calculation for multigraphs (ie. non-simple graphs)

Bugs corrected

  • make install installs the library correctly on Cygwin now
  • Pajek parser corrected to read files with MacOS newline characters correctly
  • overflow bug in transitivity calculation for large graphs corrected
  • an internal memcpy/memmove bug causing some segfaults removed
]]>
R/igraph 0.3.32007-02-28T00:00:00+00:002007-02-28T00:00:00+00:00https://igraph.org/2007/02/28/igraph-0.3.3-rR/igraph 0.3.3

New in the R interface

  • connect.neighborhood()
  • watts.strogatz.game() and rewire.edges()
  • K-core decomposition: graph.coreness()
  • added the innei and outnei shorthands for vertex sequence indexing see help(iterators)
  • Clique and independent vertex set related functions: cliques, largest.cliques, maximal.cliques, clique.number, independent.vertex.sets, largest.independent.vertex.sets, maximal.independent.vertex.sets, independence.number
  • The GraphML file format now supports graph attributes
  • edge.lty argument added to plot.igraph and tkplot
  • Transitivity calculation speeded up
  • Correct transitivity calculation for multigraphs (ie. non-simple graphs)
  • alpha.centrality added(), calculates Bonacich alpha centrality, see docs.

Bugs corrected

  • make install installs the library correctly on Cygwin now
  • Pajek parser corrected to read files with MacOS newline characters correctly
  • overflow bug in transitivity calculation for large graphs corrected
  • an internal memcpy/memmove bug causing some segfaults removed
  • R interface: tkplot() bug with graphs containing a name attribute
  • R interface: attribute handling bug when adding vertices
  • R interface: color selection bug corrected
  • R interface: plot.igraph() when plotting loops
]]>
Python interface documentation2007-01-08T00:00:00+00:002007-01-08T00:00:00+00:00https://igraph.org/2007/01/08/Python-interface-documentationPython interface documentation

January 8, 2007

The documentation of the Python interface is available. See section ‘documentation’ in the menu.

]]>
C/igraph 0.3.22006-12-19T00:00:00+00:002006-12-19T00:00:00+00:00https://igraph.org/2006/12/19/igraph-0.3.2-cC/igraph 0.3.2

December 19, 2006

This is a new major release, it contains many new things: geometric random graphs, local transitivity, etc.

Changes in the C library

  • igraph_maxdegree added, calculates the maximum degree in the graph
  • igraph_grg_game, geometric random graphs
  • igraph_density, graph density calculation
  • push-relabel maximum flow algorithm added, igraph_maxflow_value
  • minimum cut functions added based on maximum flow: igraph_st_mincut_value, igraph_mincut_value, the Stoer-Wagner algorithm is implemented for undirected graphs
  • vertex connectivity functions, usually based on maximum flow: igraph_st_vertex_connectivity, igraph_vertex_connectivity
  • edge connectivity functions, usually based on maximum flow: igraph_st_edge_connectivity, igraph_edge_connectivity
  • other functions based on maximum flow: igraph_edge_disjoint_paths, igraph_vertex_disjoint_paths, igraph_adhesion, igraph_cohesion
  • dimacs file format added
  • igraph_to_directed handles attributes
  • igraph_constraint calculation corrected, it handles weighted graphs
  • spinglass-based community structure detection, the Joerg Reichardt – Stefan Bornholdt algorithm added: igraph_spinglass_community, igraph_spinglass_my_community
  • igraph_extended_chordal_ring, it creates extended chordal rings
  • no argument added to igraph_clusters, it is possible to calculate the number of clusters without calculating the clusters themselves
  • minimum spanning tree functions keep attributes now and also the direction of the edges is kept in directed graphs
  • there are separate functions to calculate different types of transitivity now
  • igraph_delete_vertices rewritten to allocate less memory for the new graph
  • neighborhood related functions added: igraph_neighborhood, igraph_neighborhood_size, igraph_neighborhood_graphs
  • two new games added based on different node types: igraph_preference_game and igraph_asymmetric_preference_game
  • Laplacian of a graph can be calculated by the igraph_laplacian function

Bugs corrected

  • attribute handling bug when deleting edges corrected
  • GraphML escaping and NaN handling corrected
  • a bug in Erdos-Renyi graph generation corrected: it had problems with generating large directed graphs
  • bug in constraint calculation corrected, it works well now
  • fixed memory leaks in igraph_read_graph_graphml
  • error handling bug corrected in igraph_read_graph_graphml
]]>
python-igraph 0.3.22006-12-19T00:00:00+00:002006-12-19T00:00:00+00:00https://igraph.org/2006/12/19/igraph-0.3.2-pythonpython-igraph 0.3.2

December 19, 2006

This is a new major release, it contains many new things: geometric random graphs, local transitivity, etc.

Changes in the C library

  • igraph_maxdegree added, calculates the maximum degree in the graph
  • igraph_grg_game, geometric random graphs
  • igraph_density, graph density calculation
  • push-relabel maximum flow algorithm added, igraph_maxflow_value
  • minimum cut functions added based on maximum flow: igraph_st_mincut_value, igraph_mincut_value, the Stoer-Wagner algorithm is implemented for undirected graphs
  • vertex connectivity functions, usually based on maximum flow: igraph_st_vertex_connectivity, igraph_vertex_connectivity
  • edge connectivity functions, usually based on maximum flow: igraph_st_edge_connectivity, igraph_edge_connectivity
  • other functions based on maximum flow: igraph_edge_disjoint_paths, igraph_vertex_disjoint_paths, igraph_adhesion, igraph_cohesion
  • dimacs file format added
  • igraph_to_directed handles attributes
  • igraph_constraint calculation corrected, it handles weighted graphs
  • spinglass-based community structure detection, the Joerg Reichardt – Stefan Bornholdt algorithm added: igraph_spinglass_community, igraph_spinglass_my_community
  • igraph_extended_chordal_ring, it creates extended chordal rings
  • no argument added to igraph_clusters, it is possible to calculate the number of clusters without calculating the clusters themselves
  • minimum spanning tree functions keep attributes now and also the direction of the edges is kept in directed graphs
  • there are separate functions to calculate different types of transitivity now
  • igraph_delete_vertices rewritten to allocate less memory for the new graph
  • neighborhood related functions added: igraph_neighborhood, igraph_neighborhood_size, igraph_neighborhood_graphs
  • two new games added based on different node types: igraph_preference_game and igraph_asymmetric_preference_game
  • Laplacian of a graph can be calculated by the igraph_laplacian function

Bugs corrected

  • attribute handling bug when deleting edges corrected
  • GraphML escaping and NaN handling corrected
  • a bug in Erdos-Renyi graph generation corrected: it had problems with generating large directed graphs
  • bug in constraint calculation corrected, it works well now
  • fixed memory leaks in igraph_read_graph_graphml
  • error handling bug corrected in igraph_read_graph_graphml
  • bug corrected in R version of graph.laplacian when normalized Laplacian is requested
  • memory leak corrected in get.all.shortest.paths in the R package
]]>
R/igraph 0.3.22006-12-19T00:00:00+00:002006-12-19T00:00:00+00:00https://igraph.org/2006/12/19/igraph-0.3.2-rR/igraph 0.3.2

December 19, 2006

This is a new major release, it contains many new things: geometric random graphs, creating a graph with attributes from a data frame in R, local transitivity, etc.

Changes in the R interface

  • bonpow function ported from SNA to calculate Bonacich power centrality
  • get.adjacency supports attributes now, this means that it sets the colnames and rownames attributes and can return attribute values in the matrix instead of 0/1
  • grg.game, geometric random graphs
  • graph.density, graph density calculation
  • edge and vertex attributes can be added easily now when added new edges with add.edges or new vertices with add.vertices
  • graph.data.frame creates graph from data frames, this can be used to create graphs with edge attributes easily
  • plot.igraph and tkplot can plot self-loop edges now
  • graph.edgelist to create a graph from an edge list, can also handle edge lists with symbolic names
  • get.edgelist has now a ‘names’ argument and can return symbolic vertex names instead of vertex ids, by default id uses the name vertex attribute is returned
  • printing graphs on screen also prints symbolic symbolic names (the name attribute if present)
  • maximum flow and minimum cut functions: graph.maxflow, graph.mincut
  • vertex and edge connectivity: edge.connectivity, vertex.connectivity
  • edge and vertex disjoint paths: edge.disjoint.paths, vertex.disjoint.paths
  • White’s cohesion and adhesion measure: graph.adhesion, graph.cohesion
  • dimacs file format added
  • as.directed handles attributes now
  • constraint corrected, it handles weighted graphs as well now
  • weighted attribute to graph.adjacency
  • spinglass-based community structure detection, the Joerg Reichardt – Stefan Bornholdt algorithm added: spinglass.community
  • graph.extended.chordal.ring, extended chordal ring generation
  • no.clusters calculates the number of clusters without calculating the clusters themselves
  • minimum spanning tree functions updated to keep attributes
  • transitivity can calculate local transitivity as well
  • neighborhood related functions added: neighborhood, neighborhood.size, graph.neighborhood
  • new graph generators based on vertex types: preference.game and asymmetric.preference.game

Bugs corrected

  • attribute handling bug when deleting edges corrected
  • GraphML escaping and NaN handling corrected
  • bug corrected to make it possible compile the R package without the libxml2 library
  • a bug in Erdos-Renyi graph generation corrected: it had problems with generating large directed graphs
  • bug in constraint calculation corrected, it works well now
  • fixed memory leaks in igraph_read_graph_graphml
  • error handling bug corrected in igraph_read_graph_graphml
  • bug corrected in R version of graph.laplacian when normalized Laplacian is requested
  • memory leak corrected in get.all.shortest.paths in the R package
]]>
C/igraph 0.2.12006-08-23T00:00:00+00:002006-08-23T00:00:00+00:00https://igraph.org/2006/08/23/igraph-0.2.1-cC/igraph 0.2.1

August 23, 2006

This is a bug-fix release. Bugs fixed:

  • igraph_reciprocity corrected to avoid segfaults
  • some docs updates
]]>
python-igraph 0.2.12006-08-23T00:00:00+00:002006-08-23T00:00:00+00:00https://igraph.org/2006/08/23/igraph-0.2.1-pythonpython-igraph 0.2.1

August 23, 2006

This is a bug-fix release. Bugs fixed:

  • igraph_reciprocity corrected to avoid segfaults
  • some docs updates
]]>
R/igraph 0.2.12006-08-23T00:00:00+00:002006-08-23T00:00:00+00:00https://igraph.org/2006/08/23/igraph-0.2.1-rR/igraph 0.2.1

August 23, 2006

This is a bug-fix release. Bugs fixed:

  • igraph_reciprocity (reciprocity in R) corrected to avoid segfaults
  • some docs updates
  • various R package updated to make it conform to the CRAN rules
]]>
C/igraph 0.22006-08-18T00:00:00+00:002006-08-18T00:00:00+00:00https://igraph.org/2006/08/18/igraph-0.2-cC/igraph 0.2

August 18, 2006

Release time at last! There are many new things in igraph 0.2, the most important ones:

  • reading writing Pajek and GraphML formats with attributes (not all Pajek and GraphML files are supported, see documentation for details)
  • iterators totally rewritten, it is much faster and cleaner now
  • the RANDEDU fast motif search algorithm is implemented
  • many new graph generators, both games and regular graphs
  • many new structural properties: transitivity, reciprocity, etc.
  • graph operators: union, intersection, difference, structural holes, etc.
  • conversion between directed and undirected graphs
  • new layout algorithms for trees and large graphs, 3D layouts

and many more.

Although this release was somewhat tested on Linux, MS Windows, Mac OSX, Solaris 8 and FreeBSD, no heavy testing was done, so it might contain bugs, and we kindly ask you to send bug reports to make igraph better.

]]>
python-igraph 0.22006-08-18T00:00:00+00:002006-08-18T00:00:00+00:00https://igraph.org/2006/08/18/igraph-0.2-pythonpython-igraph 0.2

August 18, 2006

Release time at last! There are many new things in igraph 0.2, the most important ones:

  • reading writing Pajek and GraphML formats with attributes (not all Pajek and GraphML files are supported, see documentation for details)
  • iterators totally rewritten, it is much faster and cleaner now
  • the RANDEDU fast motif search algorithm is implemented
  • many new graph generators, both games and regular graphs
  • many new structural properties: transitivity, reciprocity, etc.
  • graph operators: union, intersection, difference, structural holes, etc.
  • conversion between directed and undirected graphs
  • new layout algorithms for trees and large graphs, 3D layouts

and many more.

Although this release was somewhat tested on Linux, MS Windows, Mac OSX, Solaris 8 and FreeBSD, no heavy testing was done, so it might contain bugs, and we kindly ask you to send bug reports to make igraph better.

]]>
R/igraph 0.22006-08-18T00:00:00+00:002006-08-18T00:00:00+00:00https://igraph.org/2006/08/18/igraph-0.2-rR/igraph 0.2

August 18, 2006

Release time at last! There are many new things in igraph 0.2, the most important ones:

  • reading writing Pajek and GraphML formats with attributes (not all Pajek and GraphML files are supported, see documentation for details)
  • iterators totally rewritten, it is much faster and cleaner now
  • the RANDEDU fast motif search algorithm is implemented
  • many new graph generators, both games and regular graphs
  • many new structural properties: transitivity, reciprocity, etc.
  • graph operators: union, intersection, difference, structural holes, etc.
  • conversion between directed and undirected graphs
  • new layout algorithms for trees and large graphs, 3D layouts

and many more.

New things in the R package:

  • support for CTRL+C
  • new functions: Graph Laplacian, Burt’s constraint, etc.
  • vertex/edge sequences totally rewritten, smart indexing (see manual)
  • new R manual and tutorial: ‘Network Analysis with igraph’, still under development but useful
  • very basic 3D plotting using OpenGL

Although this release was somewhat tested on Linux, MS Windows, Mac OSX, Solaris 8 and FreeBSD, no heavy testing was done, so it might contain bugs, and we kindly ask you to send bug reports to make igraph better.

]]>
igraph mailing lists2006-08-18T00:00:00+00:002006-08-18T00:00:00+00:00https://igraph.org/2006/08/18/igraph-mailing-lists-cigraph mailing lists

August 18, 2006

I’ve set up two igraph mailing lists: igraph-help for general igraph questions and discussion and igraph-anonunce for announcements. See http://lists.nongnu.org/mailman/listinfo/igraph-help and http://lists.nongnu.org/mailman/listinfo/igraph-announce for subscription information, archives, etc.

]]>
C/igraph 0.12006-01-30T00:00:00+00:002006-01-30T00:00:00+00:00https://igraph.org/2006/01/30/igraph-0.1-cC/igraph 0.1

January 30, 2006

After about a year of development this is the first “official” release of the igraph library. This release should be considered as beta software, but it should be useful in general. Please send your questions and comments.

]]>
python-igraph 0.12006-01-30T00:00:00+00:002006-01-30T00:00:00+00:00https://igraph.org/2006/01/30/igraph-0.1-pythonpython-igraph 0.1

January 30, 2006

After about a year of development this is the first “official” release of the igraph library. This release should be considered as beta software, but it should be useful in general. Please send your questions and comments.

]]>
R/igraph 0.12006-01-30T00:00:00+00:002006-01-30T00:00:00+00:00https://igraph.org/2006/01/30/igraph-0.1-rR/igraph 0.1

January 30, 2006

After about a year of development this is the first “official” release of the igraph library. This release should be considered as beta software, but it should be useful in general. Please send your questions and comments.

]]>