About igraph releases and other things
Nearly 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.
This section lists API-breaking changes in this version, and provides guidance on adapting code written for igraph 0.10.x.
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.void * argument anymore; this is relevant to maintainers of higher-level interfaces only.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.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.<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.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.IGRAPH_NONSQUARE error code was removed; functions that used this error code now return IGRAPH_EINVAL instead when encountering a non-square matrix.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.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.IGRAPH_CPUTIME error code was removed in favour of the interruption mechanism built into igraph.IGRAPH_EDIVZERO and IGRAPH_EATTRIBUTES error codes were removed with no replacement.IGRAPH_ENEGLOOP was removed. Use IGRAPH_ENEGCYCLE instead. The underlying numerical value is the same as it was for IGRAPH_ENEGLOOP.IGRAPH_ARPACK_...) were replaced with a single IGRAPH_EARPACK error code. Details about the underlying ARPACK failure are provided in the error message.IGRAPH_EINVEID was added for cases when an invalid edge ID was encountered in an edge ID vector.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.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.IGRAPH_ATTRIBUTE_DEFAULT value of the igraph_attribute_type_t enum was removed.gettype member of igraph_attribute_table_t was renamed to get_type for consistency with the naming scheme of other struct members.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 *.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.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.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).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.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.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).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.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.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.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.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.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.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.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.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.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().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.igraph_minimum_spanning_tree() takes a new method parameter that controls the algorithm used for finding the spanning tree. Kruskal’s algorithm was added.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.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().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.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.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.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().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.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).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().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.igraph_Calloc(), igraph_Realloc() and igraph_Free(). Use IGRAPH_CALLOC(), IGRAPH_REALLOC() and IGRAPH_FREE() instead.igraph_adjacent_triangles() was removed. Use igraph_count_adjacent_triangles() instead.igraph_are_connected() was removed. Use igraph_are_adjacent() instead.igraph_automorphisms() was removed. Use igraph_count_automorphisms() or igraph_count_automorphisms_bliss() instead.igraph_convex_hull() was removed. Use igraph_convex_hull_2d() instead.igraph_decompose_destroy() was removed.igraph_hub_score() and igraph_authority_score() were removed.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.igraph_erdos_renyi_game() and igraph_bipartite_game() were removed. Use the corresponding functions with _gnm() and _gnp() in the name instead.igraph_tree() was removed. Use igraph_kary_tree() instead.igraph_lattice() was removed. Use igraph_square_lattice() instead.igraph_minimum_spanning_tree_prim() was removed. Use igraph_minimum_spanning_tree() in conjunction with igraph_subgraph_from_edges() instead.igraph_minimum_spanning_tree_unweighted() was removed. Use igraph_minimum_spanning_tree() in conjunction with igraph_subgraph_from_edges() instead.igraph_get_sparsemat() was removed. Use igraph_get_adjacency_sparse() instead.igraph_get_stochastic_sparsemat() was removed. Use igraph_get_stochastic_sparse() instead.igraph_laplacian() was removed. Use igraph_get_laplacian() or igraph_get_laplacian_sparse() instead.igraph_subgraph_edges() was removed. Use igraph_subgraph_from_edges() instead.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.igraph_isomorphic_function_vf2() was removed. Use igraph_get_isomorphisms_vf2_callback() instead.igraph_subisomorphic_function_vf2() was removed. Use igraph_get_subisomorphisms_vf2_callback() instead.igraph_isomorphic_34() was removed. Its functionality is accessible through igraph_isomorphic().igraph_transitive_closure_dag() was removed. Use igraph_transitive_closure() instead, which works for all graphs, not just DAGs.igraph_sparsemat_copy() was removed. Use igraph_sparsemat_init_copy() instead.igraph_sparsemat_eye() was removed. Use igraph_sparsemat_init_eye() instead.igraph_sparsemat_diag() was removed. Use igraph_sparsemat_init_diag() instead.igraph_sparsemat() and igraph_weighted_sparsemat() functions were removed; use igraph_get_adjacency_sparse() instead.igraph_random_edge_walk() was removed. Its functionality is incorporated in igraph_random_walk().igraph_vector_qsort_ind() was removed. Use igraph_vector_sort_ind() instead.igraph_vector_binsearch2() was removed. Use igraph_vector_contains_sorted() instead.igraph_vector_copy() and igraph_matrix_copy() were removed. Use igraph_vector_init_copy() and igraph_matrix_init_copy() instead.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.igraph_vector_move_interval2() was removed.igraph_zeroin() was removed.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.igraph_fileformat_type_t was removed.IGRAPH_POSINFINITY and IGRAPH_NEGINFINITY were removed. Use IGRAPH_INFINITY and -IGRAPH_INFINITY instead.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.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().igraph_adjacency() and igraph_weighted_adjacency()).