61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
|
import networkx as nx
|
||
|
|
||
|
__all__ = ["s_metric"]
|
||
|
|
||
|
|
||
|
@nx._dispatch
|
||
|
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()))
|