| |
| |
| |
| |
| """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"] |
|
|
| |
| |
| 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"], |
| } |
|
|
|
|
| @nx._dispatchable(graphs=None, returns_graph=True) |
| 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 |
|
|