Spaces:
Running
Running
# See https://github.com/networkx/networkx/pull/1474 | |
# Copyright 2011 Reya Group <http://www.reyagroup.com> | |
# Copyright 2011 Alex Levenson <[email protected]> | |
# Copyright 2011 Diederik van Liere <[email protected]> | |
"""Functions that generate the triad graphs, that is, the possible | |
digraphs on three nodes. | |
""" | |
import networkx as nx | |
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 | |
------ | |
ValueError | |
If `triad_name` is not the name of a triad. | |
See also | |
-------- | |
triadic_census | |
""" | |
if triad_name not in TRIAD_EDGES: | |
raise ValueError( | |
f'unknown triad name "{triad_name}"; use one of the triad names' | |
" in the TRIAD_NAMES constant" | |
) | |
G = DiGraph() | |
G.add_nodes_from("abc") | |
G.add_edges_from(TRIAD_EDGES[triad_name]) | |
return G | |