/usr/lib/python3/dist-packages/networkx/algorithms/assortativity/pairs.py is in python3-networkx 1.8.1-0ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | #-*- coding: utf-8 -*-
"""Generators of x-y pairs of node data."""
import networkx as nx
from networkx.utils import dict_to_numpy_array
__author__ = ' '.join(['Aric Hagberg <aric.hagberg@gmail.com>'])
__all__ = ['node_attribute_xy',
'node_degree_xy']
def node_attribute_xy(G, attribute, nodes=None):
"""Return iterator of node-attribute pairs for all edges in G.
Parameters
----------
G: NetworkX graph
attribute: key
The node attribute key.
nodes: list or iterable (optional)
Use only edges that are adjacency to specified nodes.
The default is all nodes.
Returns
-------
(x,y): 2-tuple
Generates 2-tuple of (attribute,attribute) values.
Examples
--------
>>> G = nx.DiGraph()
>>> G.add_node(1,color='red')
>>> G.add_node(2,color='blue')
>>> G.add_edge(1,2)
>>> list(nx.node_attribute_xy(G,'color'))
[('red', 'blue')]
Notes
-----
For undirected graphs each edge is produced twice, once for each edge
representation (u,v) and (v,u), with the exception of self-loop edges
which only appear once.
"""
if nodes is None:
nodes = set(G)
else:
nodes = set(nodes)
node = G.node
for u,nbrsdict in G.adjacency_iter():
if u not in nodes:
continue
uattr = node[u].get(attribute,None)
if G.is_multigraph():
for v,keys in nbrsdict.items():
vattr = node[v].get(attribute,None)
for k,d in keys.items():
yield (uattr,vattr)
else:
for v,eattr in nbrsdict.items():
vattr = node[v].get(attribute,None)
yield (uattr,vattr)
def node_degree_xy(G, x='out', y='in', weight=None, nodes=None):
"""Generate node degree-degree pairs for edges in G.
Parameters
----------
G: NetworkX graph
x: string ('in','out')
The degree type for source node (directed graphs only).
y: string ('in','out')
The degree type for target node (directed graphs only).
weight: string or None, optional (default=None)
The edge attribute that holds the numerical value used
as a weight. If None, then each edge has weight 1.
The degree is the sum of the edge weights adjacent to the node.
nodes: list or iterable (optional)
Use only edges that are adjacency to specified nodes.
The default is all nodes.
Returns
-------
(x,y): 2-tuple
Generates 2-tuple of (degree,degree) values.
Examples
--------
>>> G = nx.DiGraph()
>>> G.add_edge(1,2)
>>> list(nx.node_degree_xy(G,x='out',y='in'))
[(1, 1)]
>>> list(nx.node_degree_xy(G,x='in',y='out'))
[(0, 0)]
Notes
-----
For undirected graphs each edge is produced twice, once for each edge
representation (u,v) and (v,u), with the exception of self-loop edges
which only appear once.
"""
if nodes is None:
nodes = set(G)
else:
nodes = set(nodes)
xdeg = G.degree_iter
ydeg = G.degree_iter
if G.is_directed():
direction = {'out':G.out_degree_iter,
'in':G.in_degree_iter}
xdeg = direction[x]
ydeg = direction[y]
for u,degu in xdeg(nodes, weight=weight):
neighbors = (nbr for _,nbr in G.edges_iter(u) if nbr in nodes)
for v,degv in ydeg(neighbors, weight=weight):
yield degu,degv
# fixture for nose tests
def setup_module(module):
from nose import SkipTest
try:
import numpy
except:
raise SkipTest("NumPy not available")
try:
import scipy
except:
raise SkipTest("SciPy not available")
|