Warning

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

# Source code for networkx.generators.ego

"""
Ego graph.
"""
#    Copyright (C) 2010 by
#    Aric Hagberg <hagberg@lanl.gov>
#    Dan Schult <dschult@colgate.edu>
#    Pieter Swart <swart@lanl.gov>
#    All rights reserved.
#    BSD license.
__author__ = """\n""".join(['Drew Conway <drew.conway@nyu.edu>',
'Aric Hagberg <hagberg@lanl.gov>'])
__all__ = ['ego_graph']

import networkx as nx

[docs]def ego_graph(G,n,radius=1,center=True,undirected=False,distance=None):
"""Returns induced subgraph of neighbors centered at node n within
a given radius.

Parameters
----------
G : graph
A NetworkX Graph or DiGraph

n : node
A single node

radius : number, optional
Include all neighbors of distance<=radius from n.

center : bool, optional
If False, do not include center node in graph

undirected : bool, optional
If True use both in- and out-neighbors of directed graphs.

distance : key, optional
Use specified edge data key as distance.  For example, setting
distance='weight' will use the edge weight to measure the
distance from the node n.

Notes
-----
For directed graphs D this produces the "out" neighborhood
or successors.  If you want the neighborhood of predecessors
first reverse the graph with D.reverse().  If you want both
directions use the keyword argument undirected=True.

Node, edge, and graph attributes are copied to the returned subgraph.
"""
if undirected:
if distance is not None:
sp,_=nx.single_source_dijkstra(G.to_undirected(),
n,cutoff=radius,
weight=distance)
else:
sp=nx.single_source_shortest_path_length(G.to_undirected(),
n,cutoff=radius)
else:
if distance is not None:
sp,_=nx.single_source_dijkstra(G,
n,cutoff=radius,
weight=distance)
else:
sp=nx.single_source_shortest_path_length(G,n,cutoff=radius)

H=G.subgraph(sp).copy()
if not center:
H.remove_node(n)
return  H