C/igraph 0.10.2 is now released. The source can be obtained from the GitHub releases page , as usual.
This release brings bugfixes, some new and experimental functions, and deprecated some outdated functionality. As always, all feedback about igraph is welcome: post on this forum, or if you find problems, open a new issue in the GitHub issue tracker.
Added

igraph_distances_cutoff()
andigraph_distances_dijkstra_cutoff()
calculate shortest paths with an upper limit on the path length (experimental functions). 
igraph_distances_floyd_warshall()
for computing allpairs 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()
andigraph_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()
andigraph_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 themode
argument was set toIGRAPH_OUT
orIGRAPH_IN
. 
igraph_trussness()
is now interruptible. 
igraph_spanner()
is now interruptible. 
igraph_layout_umap()
andigraph_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()
andigraph_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 nonreal specializations. 
igraph_layout_umap_3d()
now actually uses three dimensions. 
igraph_layout_umap()
andigraph_layout_umap_3d()
are now interruptible. 
igraph_vit_create()
andigraph_eit_create()
no longer fails when trying to create an iterator for the null graph or edgeless graph from an empty rangebased 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 pkgconfig file, libxml2 is now placed in the
Requires.private
section instead of theLibs.private
one.
Removed
 Removed unused and undocumented
igraph_bfgs()
function.  Removed the undocumented function
igraph_complex_mod()
. Useigraph_complex_abs()
instead, as it has identical functionality.
Deprecated
 The
IGRAPH_EDRL
error code was deprecated; the DrL algorithm now returnsIGRAPH_FAILURE
when it used to returnIGRAPH_EDRL
(not likely to happen in practice).  The undocumented function
igraph_dqueue_e()
is now deprecated and replaced byigraph_dqueue_get()
. 
igraph_finite()
,igraph_is_nan()
,igraph_is_inf()
,igraph_is_posinf()
andigraph_is_neginf()
are now deprecated. They were relics from a time when no standard alternatives existed. Use the C99 standardisfinite()
,isnan()
andisinf()
instead.