File size: 1,937 Bytes
d1ceb73 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import networkx as nx
__all__ = ["s_metric"]
@nx._dispatchable
def s_metric(G, **kwargs):
"""Returns the s-metric [1]_ of graph.
The s-metric is defined as the sum of the products ``deg(u) * deg(v)``
for every edge ``(u, v)`` in `G`.
Parameters
----------
G : graph
The graph used to compute the s-metric.
normalized : bool (optional)
Normalize the value.
.. deprecated:: 3.2
The `normalized` keyword argument is deprecated and will be removed
in the future
Returns
-------
s : float
The s-metric of the graph.
References
----------
.. [1] Lun Li, David Alderson, John C. Doyle, and Walter Willinger,
Towards a Theory of Scale-Free Graphs:
Definition, Properties, and Implications (Extended Version), 2005.
https://arxiv.org/abs/cond-mat/0501169
"""
# NOTE: This entire code block + the **kwargs in the signature can all be
# removed when the deprecation expires.
# Normalized is always False, since all `normalized=True` did was raise
# a NotImplementedError
if kwargs:
# Warn for `normalize`, raise for any other kwarg
if "normalized" in kwargs:
import warnings
warnings.warn(
"\n\nThe `normalized` keyword is deprecated and will be removed\n"
"in the future. To silence this warning, remove `normalized`\n"
"when calling `s_metric`.\n\n"
"The value of `normalized` is ignored.",
DeprecationWarning,
stacklevel=3,
)
else:
# Typical raising behavior for Python when kwarg not recognized
raise TypeError(
f"s_metric got an unexpected keyword argument '{list(kwargs.keys())[0]}'"
)
return float(sum(G.degree(u) * G.degree(v) for (u, v) in G.edges()))
|