from_nested_tuple#

from_nested_tuple(sequence, sensible_relabeling=False)[source]#

Returns the rooted tree corresponding to the given nested tuple.

The nested tuple representation of a tree is defined recursively. The tree with one node and no edges is represented by the empty tuple, (). A tree with k subtrees is represented by a tuple of length k in which each element is the nested tuple representation of a subtree.

Parameters:
sequencetuple

A nested tuple representing a rooted tree.

sensible_relabelingbool

Whether to relabel the nodes of the tree so that nodes are labeled in increasing order according to their breadth-first search order from the root node.

Returns:
NetworkX graph

The tree corresponding to the given nested tuple, whose root node is node 0. If sensible_labeling is True, nodes will be labeled in breadth-first search order starting from the root node.

Notes

This function is not the inverse of to_nested_tuple(); the only guarantee is that the rooted trees are isomorphic.

Examples

Sensible relabeling ensures that the nodes are labeled from the root starting at 0:

>>> balanced = (((), ()), ((), ()))
>>> T = nx.from_nested_tuple(balanced, sensible_relabeling=True)
>>> edges = [(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), (2, 6)]
>>> all((u, v) in T.edges() or (v, u) in T.edges() for (u, v) in edges)
True