# triads.py - generators for triad graphs # # Copyright 2015 NetworkX developers. # Copyright 2011 Reya Group # Copyright 2011 Alex Levenson # Copyright 2011 Diederik van Liere # # 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