Warning

This documents an unmaintained version of NetworkX. Please upgrade to a maintained version and see the current NetworkX documentation.

# Source code for networkx.algorithms.isolate

# -*- encoding: utf-8 -*-
#    Aric Hagberg <hagberg@lanl.gov>
#    Dan Schult <dschult@colgate.edu>
#    Pieter Swart <swart@lanl.gov>
"""
Functions for identifying isolate (degree zero) nodes.
"""
import networkx as nx

__author__ = """\n""".join(['Drew Conway <drew.conway@nyu.edu>',
'Aric Hagberg <hagberg@lanl.gov>'])

__all__ = ['is_isolate', 'isolates', 'number_of_isolates']

[docs]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()
>>> nx.is_isolate(G,2)
False
>>> nx.is_isolate(G,3)
True
"""
return G.degree(n) == 0

[docs]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()
>>> list(nx.isolates(G))


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)])
>>> list(nx.isolates(G))


"""
return (n for n, d in G.degree() if d == 0)

[docs]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))