ó žÃÒYc@ sxdZddlmZddlmZddlmZddlmZddlm Z dgZ ej Z d d „Zd S( s1Functions related to the Wiener index of a graph.iÿÿÿÿ(tdivision(tchaini(t is_connected(tis_strongly_connected(tshortest_path_lengtht wiener_indexcC sw|jƒ}|rt|ƒ s3| r=t|ƒ r=tdƒSttd„t|d|ƒDƒƒƒ}|ro|S|dS(s Returns the Wiener index of the given graph. The *Wiener index* of a graph is the sum of the shortest-path distances between each pair of reachable nodes. For pairs of nodes in undirected graphs, only one orientation of the pair is counted. Parameters ---------- G : NetworkX graph weight : object The edge attribute to use as distance when computing shortest-path distances. This is passed directly to the :func:`networkx.shortest_path_length` function. Returns ------- float The Wiener index of the graph `G`. Raises ------ NetworkXError If the graph `G` is not connected. Notes ----- If a pair of nodes is not reachable, the distance is assumed to be infinity. This means that for graphs that are not strongly-connected, this function returns ``inf``. The Wiener index is not usually defined for directed graphs, however this function uses the natural generalization of the Wiener index to directed graphs. Examples -------- The Wiener index of the (unweighted) complete graph on *n* nodes equals the number of pairs of the *n* nodes, since each pair of nodes is at distance one:: >>> import networkx as nx >>> n = 10 >>> G = nx.complete_graph(n) >>> nx.wiener_index(G) == n * (n - 1) / 2 True Graphs that are not strongly-connected have infinite Wiener index:: >>> G = nx.empty_graph(2) >>> nx.wiener_index(G) inf tinfcs s!|]\}}|jƒVqdS(N(tvalues(t.0tvtp((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/wiener.pys Tstweighti(t is_directedRRtfloattsumtchainitspl(tGR R ttotal((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/wiener.pyRs 7  (N(t__doc__t __future__Rt itertoolsRt componentsRRtshortest_pathsRRt__all__t from_iterableRtNoneR(((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/wiener.pyt s