tree_to_graph#
- class brainstate.graph.tree_to_graph(tree, /, *, prefix=<class 'brainstate.typing.Missing'>, merge_fn=<function _merge_tree_node>, is_node_leaf=<function _is_tree_node>, is_leaf=<function _is_tree_node>, map_non_graph_nodes=False)[source]#
Convert a pytree of
NodeStatesback into graph nodes.The inverse of
graph_to_tree(): each leaf recognised as a packed node (byis_node_leaf) is merged back into a live graph node viamerge_fn, restoring the original sharing within a singlemerge_context().- Parameters:
tree (
Any) – A pytree whose node leaves areNodeStates(or whateveris_node_leafrecognises). Passed positionally.prefix (
Any) – A prefix pytree broadcast overtreeand handed tomerge_fnper leaf. Defaults toMissing(no prefix).merge_fn (
Callable[[MergeContext,tuple[TypeVar(KeyEntry),...],Any,TypeVar(Leaf)],Any]) – Called asmerge_fn(ctx, keypath, prefix, leaf)for each node leaf. The default mergesleaf.graphdefwithleaf.states.is_node_leaf (
Callable[[TypeVar(Leaf)],bool]) – Predicate selecting which leaves are merged back into graph nodes. Defaults to “is aNodeStates”.is_leaf (
Callable[[TypeVar(Leaf)],bool]) – Predicate marking wherejax.treeflattening stops. Defaults to “is aNodeStates”.map_non_graph_nodes (
bool) – WhenTrue, also runmerge_fnon non-node leaves. Defaults toFalse.
- Returns:
The reconstructed pytree with graph nodes restored in place.
- Return type:
See also
graph_to_treeThe inverse conversion.