Spaces:
Running
Running
File size: 2,325 Bytes
b200bda |
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
"""
Functions for identifying isolate (degree zero) nodes.
"""
import networkx as nx
__all__ = ["is_isolate", "isolates", "number_of_isolates"]
@nx._dispatch
def is_isolate(G, n):
"""Determines whether a node is an isolate.
An *isolate* is a node with no neighbors (that is, with degree
zero). For directed graphs, this means no in-neighbors and no
out-neighbors.
Parameters
----------
G : NetworkX graph
n : node
A node in `G`.
Returns
-------
is_isolate : bool
True if and only if `n` has no neighbors.
Examples
--------
>>> G = nx.Graph()
>>> G.add_edge(1, 2)
>>> G.add_node(3)
>>> nx.is_isolate(G, 2)
False
>>> nx.is_isolate(G, 3)
True
"""
return G.degree(n) == 0
@nx._dispatch
def isolates(G):
"""Iterator over isolates in the graph.
An *isolate* is a node with no neighbors (that is, with degree
zero). For directed graphs, this means no in-neighbors and no
out-neighbors.
Parameters
----------
G : NetworkX graph
Returns
-------
iterator
An iterator over the isolates of `G`.
Examples
--------
To get a list of all isolates of a graph, use the :class:`list`
constructor::
>>> G = nx.Graph()
>>> G.add_edge(1, 2)
>>> G.add_node(3)
>>> list(nx.isolates(G))
[3]
To remove all isolates in the graph, first create a list of the
isolates, then use :meth:`Graph.remove_nodes_from`::
>>> G.remove_nodes_from(list(nx.isolates(G)))
>>> list(G)
[1, 2]
For digraphs, isolates have zero in-degree and zero out_degre::
>>> G = nx.DiGraph([(0, 1), (1, 2)])
>>> G.add_node(3)
>>> list(nx.isolates(G))
[3]
"""
return (n for n, d in G.degree() if d == 0)
@nx._dispatch
def number_of_isolates(G):
"""Returns the number of isolates in the graph.
An *isolate* is a node with no neighbors (that is, with degree
zero). For directed graphs, this means no in-neighbors and no
out-neighbors.
Parameters
----------
G : NetworkX graph
Returns
-------
int
The number of degree zero nodes in the graph `G`.
"""
# TODO This can be parallelized.
return sum(1 for v in isolates(G))
|