PhyNetPy Documentation

Library for the Development and Use of Phylogenetic Network Methods

Traversal Module v1.0.0

Iterator-based graph traversal for model nodes supporting pre-order, post-order, and level-order.

Author:
Mark Kessler
Source:
Traversal.py

TraversalOrder

class TraversalOrder(Enum)

Traversal order options.

Traversal

class Traversal

Iterator-based graph traversal for model nodes. Decouples traversal order from visitation logic, allowing: - Easy switching between pre/post/level order - Use in for-loops or manual next() calls - Clean separation of concerns Example: >>> # Likelihood computation (post-order) >>> for node in Traversal(root, TraversalOrder.POST_ORDER): ... visitor.visit(node) >>> # Simulation (pre-order, root to leaves) >>> for node in ModelTraversal(root, TraversalOrder.PRE_ORDER): ... simulator.simulate_at(node) >>> # Manual iteration >>> traversal = ModelTraversal(root, TraversalOrder.POST_ORDER) >>> first_node = next(traversal) >>> second_node = next(traversal)

Constructor

__init__(root: Any, order: TraversalOrder = TraversalOrder.POST_ORDER)

Initialize traversal.

Parameter Type Description
root Starting node (root of the network)
order Traversal order (PRE_ORDER, POST_ORDER, or LEVEL_ORDER)

Methods

__iter__ -> Iterator[ModelNode]

Return fresh iterator each time.

as_list -> list[ModelNode]

Return traversal as a list.

count -> int

Count nodes in traversal.

LevelParallelTraversal

class LevelParallelTraversal

Traversal that yields nodes grouped by level (for parallel execution). Unlike ModelTraversal which yields one node at a time, this yields entire levels - all nodes in a level can be processed in parallel. Example: >>> for level_num, nodes in LevelParallelTraversal(root): ... # Process all nodes in this level in parallel ... with ThreadPoolExecutor() as pool: ... pool.map(visitor.visit, nodes)

Properties

num_levels -> int property

Number of levels in the traversal.

max_parallelism -> int property

Maximum nodes at any single level.

Constructor

__init__(root: ModelNode, bottom_up: bool = True)

Initialize level-parallel traversal.

Parameter Type Description
root Root node of the network
bottom_up If True, yield leaves first (for likelihood). If False, yield root first (for simulation).

Methods

__iter__ -> Iterator[tuple[int, list[ModelNode]]]

Yield (level_number, nodes_at_level) tuples.

Navigation

Modules

This Page