80 lines
2.5 KiB
Python
80 lines
2.5 KiB
Python
# triads.py - generators for triad graphs
|
|
#
|
|
# Copyright 2015 NetworkX developers.
|
|
# Copyright 2011 Reya Group <http://www.reyagroup.com>
|
|
# Copyright 2011 Alex Levenson <alex@isnotinvain.com>
|
|
# Copyright 2011 Diederik van Liere <diederik.vanliere@rotman.utoronto.ca>
|
|
#
|
|
# This file is part of NetworkX.
|
|
#
|
|
# NetworkX is distributed under a BSD license; see LICENSE.txt for more
|
|
# information.
|
|
"""Functions that generate the triad graphs, that is, the possible
|
|
digraphs on three nodes.
|
|
|
|
"""
|
|
from networkx.classes import DiGraph
|
|
|
|
__all__ = ['triad_graph']
|
|
|
|
#: Dictionary mapping triad name to list of directed edges in the
|
|
#: digraph representation of that triad (with nodes 'a', 'b', and 'c').
|
|
TRIAD_EDGES = {'003': [],
|
|
'012': ['ab'],
|
|
'102': ['ab', 'ba'],
|
|
'021D': ['ba', 'bc'],
|
|
'021U': ['ab', 'cb'],
|
|
'021C': ['ab', 'bc'],
|
|
'111D': ['ac', 'ca', 'bc'],
|
|
'111U': ['ac', 'ca', 'cb'],
|
|
'030T': ['ab', 'cb', 'ac'],
|
|
'030C': ['ba', 'cb', 'ac'],
|
|
'201': ['ab', 'ba', 'ac', 'ca'],
|
|
'120D': ['bc', 'ba', 'ac', 'ca'],
|
|
'120U': ['ab', 'cb', 'ac', 'ca'],
|
|
'120C': ['ab', 'bc', 'ac', 'ca'],
|
|
'210': ['ab', 'bc', 'cb', 'ac', 'ca'],
|
|
'300': ['ab', 'ba', 'bc', 'cb', 'ac', 'ca']
|
|
}
|
|
|
|
|
|
def triad_graph(triad_name):
|
|
"""Returns the triad graph with the given name.
|
|
|
|
Each string in the following tuple is a valid triad name::
|
|
|
|
('003', '012', '102', '021D', '021U', '021C', '111D', '111U',
|
|
'030T', '030C', '201', '120D', '120U', '120C', '210', '300')
|
|
|
|
Each triad name corresponds to one of the possible valid digraph on
|
|
three nodes.
|
|
|
|
Parameters
|
|
----------
|
|
triad_name : string
|
|
The name of a triad, as described above.
|
|
|
|
Returns
|
|
-------
|
|
:class:`~networkx.DiGraph`
|
|
The digraph on three nodes with the given name. The nodes of the
|
|
graph are the single-character strings 'a', 'b', and 'c'.
|
|
|
|
Raises
|
|
------
|
|
:exc:`ValueError`
|
|
If `triad_name` is not the name of a triad.
|
|
|
|
See also
|
|
--------
|
|
triadic_census
|
|
|
|
"""
|
|
if triad_name not in TRIAD_EDGES:
|
|
raise ValueError('unknown triad name "{}"; use one of the triad names'
|
|
' in the TRIAD_NAMES constant'.format(triad_name))
|
|
G = DiGraph()
|
|
G.add_nodes_from('abc')
|
|
G.add_edges_from(TRIAD_EDGES[triad_name])
|
|
return G
|