diff --git a/src/vendor/cigraph/src/centrality/centralization.c b/src/vendor/cigraph/src/centrality/centralization.c index dc596c0c33..c945f3df33 100644 --- a/src/vendor/cigraph/src/centrality/centralization.c +++ b/src/vendor/cigraph/src/centrality/centralization.c @@ -558,12 +558,12 @@ igraph_error_t igraph_centralization_closeness_tmax(const igraph_t *graph, * a natural scale. As with any eigenvector, their interpretation is * invariant to scaling by a constant factor. However, due to how * graph-level \em centralization is defined, its value depends on the - * specific scale/normalization used for vertex-level scores. This is - * true even when the graph-level centralization itself is normalized - * by its theoretical maximum value. This function makes the specific - * choice of scaling vertex-level centrality scores by their maximum - * (i.e. it uses the ∞-norm). Other normalization choices, such as the - * 1-norm or 2-norm are not currently implemented. + * specific scale/normalization used for vertex-level scores. Which of + * two graphs will have a higher eigenvector \em centralization depends + * on the choice of normalization for centralities. This function makes + * the specific choice of scaling vertex-level centrality scores by their + * maximum (i.e. it uses the ∞-norm). Other normalization choices, such + * as the 1-norm or 2-norm are not currently implemented. * * \param graph The input graph. * \param vector A vector if you need the node-level eigenvector @@ -671,20 +671,25 @@ igraph_error_t igraph_centralization_eigenvector_centrality( * arguments are considered. * * - * The most centralized directed structure is the in-star. The most - * centralized undirected structure is the graph with a single edge. + * The most centralized directed structure is assumed to bethe in-star. + * The most centralized undirected structure is assumed to be the graph + * with a single edge. igraph continues to implement these choices for + * historical reason. Keep in mind that neither of these two structures + * is connected, which makes their use debatable in the context of + * eigenvector centrality calculations. Eigenvector centrality is not + * uniquely defined for disconnected structures. * * * Note that vertex-level eigenvector centrality scores do not have * a natural scale. As with any eigenvector, their interpretation is * invariant to scaling by a constant factor. However, due to how * graph-level \em centralization is defined, its value depends on the - * specific scale/normalization used for vertex-level scores. This is - * true even when the graph-level centralization itself is normalized - * by its theoretical maximum value. This function makes the specific - * choice of scaling vertex-level centrality scores by their maximum - * (i.e. it uses the ∞-norm). Other normalization choices, such as the - * 1-norm or 2-norm are not currently implemented. + * specific scale/normalization used for vertex-level scores. Moreover, + * which of two graphs will have a higher eigenvector \em centralization + * also depends on the choice of normalization for centralities. This + * function makes the specific choice of scaling vertex-level centrality + * scores by their maximum (i.e. it uses the ∞-norm). Other normalization + * choices, such as the 1-norm or 2-norm are not currently implemented. * * \param graph A graph object or a null pointer, see the description * above. diff --git a/src/vendor/cigraph/src/centrality/eigenvector.c b/src/vendor/cigraph/src/centrality/eigenvector.c index 9dc60b0c69..e9d017e261 100644 --- a/src/vendor/cigraph/src/centrality/eigenvector.c +++ b/src/vendor/cigraph/src/centrality/eigenvector.c @@ -508,16 +508,17 @@ static igraph_error_t igraph_i_eigenvector_centrality_directed(const igraph_t *g * Eigenvector centrality is meaningful only for (strongly) connected graphs. * Undirected graphs that are not connected should be decomposed into connected * components, and the eigenvector centrality calculated for each separately. + * The scores between components will not be comparable. * This function does not verify that the graph is connected. If it is not, * in the undirected case the scores of all but one component will be zeros. * * * Also note that the adjacency matrix of a directed acyclic graph or the * adjacency matrix of an empty graph does not possess positive eigenvalues, - * therefore the eigenvector centrality is not defined for these graphs. - * igraph will return an eigenvalue of zero in such cases. The eigenvector - * centralities will all be equal for an empty graph and will all be zeros - * for a directed acyclic graph. Such pathological cases can be detected + * therefore the eigenvector centrality is not meaningful for these graphs. + * igraph will return an eigenvalue of zero in such cases. The returned + * eigenvector centralities will all be equal for vertices with zero out-degree, + * and zeros for other vertices. Such pathological cases can be detected * by asking igraph to calculate the eigenvalue as well (using the \p value * parameter, see below) and checking whether the eigenvalue is very close * to zero. diff --git a/src/vendor/cigraph/src/paths/distances.c b/src/vendor/cigraph/src/paths/distances.c index 180a74b9bd..3b86fe87ea 100644 --- a/src/vendor/cigraph/src/paths/distances.c +++ b/src/vendor/cigraph/src/paths/distances.c @@ -249,8 +249,8 @@ static igraph_error_t igraph_i_eccentricity_dijkstra( * is ignored for undirected graphs. * \return Error code. * - * Time complexity: O(v*(|V|+|E|)), where |V| is the number of - * vertices, |E| is the number of edges and v is the number of + * Time complexity: O(|S| (|V|+|E|)), where |V| is the number of + * vertices, |E| is the number of edges and |S| is the number of * vertices for which eccentricity is calculated. * * \sa \ref igraph_radius(). @@ -269,7 +269,7 @@ igraph_error_t igraph_eccentricity(const igraph_t *graph, IGRAPH_FINALLY(igraph_lazy_adjlist_destroy, &adjlist); IGRAPH_CHECK(igraph_i_eccentricity(graph, res, vids, &adjlist, - /*vid_ecc*/ NULL, /*unconn*/ 1)); + /*vid_ecc*/ NULL, /*unconn*/ true)); igraph_lazy_adjlist_destroy(&adjlist); IGRAPH_FINALLY_CLEAN(1); return IGRAPH_SUCCESS; @@ -349,7 +349,7 @@ igraph_error_t igraph_eccentricity_dijkstra(const igraph_t *graph, for (IGRAPH_VIT_RESET(vit); !IGRAPH_VIT_END(vit); IGRAPH_VIT_NEXT(vit)) { - IGRAPH_CHECK(igraph_i_eccentricity_dijkstra(graph, weights, &ecc, IGRAPH_VIT_GET(vit), /*vid_ecc*/ &dump, /*unconn*/ 1, &inclist)); + IGRAPH_CHECK(igraph_i_eccentricity_dijkstra(graph, weights, &ecc, IGRAPH_VIT_GET(vit), /*vid_ecc*/ &dump, /*unconn*/ true, &inclist)); IGRAPH_CHECK(igraph_vector_push_back(res, ecc)); } igraph_lazy_inclist_destroy(&inclist); @@ -496,7 +496,7 @@ igraph_error_t igraph_radius_dijkstra(const igraph_t *graph, const igraph_vector * will be returned, otherwise \c IGRAPH_INFINITY is returned. * \return Error code. * - * Time complexity: O(|V||E|)), where |V| is the number of + * Time complexity: O(|V| |E|)), where |V| is the number of * vertices and |E| is the number of edges. * * \sa \ref igraph_eccentricity(), \ref igraph_diameter(). @@ -564,7 +564,7 @@ igraph_error_t igraph_pseudo_diameter(const igraph_t *graph, ito = vid_ecc; IGRAPH_CHECK(igraph_i_eccentricity(graph, &ecc_vec, igraph_vss_1(vid_ecc), - &adjlist, &vid_ecc, 1)); + &adjlist, &vid_ecc, true)); ecc_v = VECTOR(ecc_vec)[0]; @@ -626,9 +626,9 @@ igraph_error_t igraph_pseudo_diameter(const igraph_t *graph, * same distance based on their degree. In te directed case, should we * use in-, out- or total degree? */ IGRAPH_CHECK(igraph_i_eccentricity(graph, &ecc_out, igraph_vss_1(vid_ecc), - &adjlist_out, &vid_ecc_out, 1)); + &adjlist_out, &vid_ecc_out, true)); IGRAPH_CHECK(igraph_i_eccentricity(graph, &ecc_in, igraph_vss_1(vid_ecc), - &adjlist_in, &vid_ecc_in, 1)); + &adjlist_in, &vid_ecc_in, true)); if (VECTOR(ecc_out)[0] > VECTOR(ecc_in)[0]) { vid_ecc = vid_ecc_out; @@ -730,7 +730,7 @@ igraph_error_t igraph_pseudo_diameter(const igraph_t *graph, * returned. * \return Error code. * - * Time complexity: O(|V||E|*log|E|), |V| is the number of vertices, + * Time complexity: O(|V| |E| log|E|), |V| is the number of vertices, * |E| is the number of edges. * * \sa \ref igraph_diameter_dijkstra() diff --git a/src/vendor/igraph_version.h b/src/vendor/igraph_version.h index 2ca3a2b2ae..e2b8f4efd0 100644 --- a/src/vendor/igraph_version.h +++ b/src/vendor/igraph_version.h @@ -28,11 +28,11 @@ __BEGIN_DECLS -#define IGRAPH_VERSION "0.10.13-124-gf8d4760f4" +#define IGRAPH_VERSION "0.10.13-126-g31c4e6ffc" #define IGRAPH_VERSION_MAJOR 0 #define IGRAPH_VERSION_MINOR 10 #define IGRAPH_VERSION_PATCH 13 -#define IGRAPH_VERSION_PRERELEASE "124-gf8d4760f4" +#define IGRAPH_VERSION_PRERELEASE "126-g31c4e6ffc" IGRAPH_EXPORT void igraph_version(const char **version_string, int *major,