Library for the Development and Use of Phylogenetic Network Methods
Iterator-based graph traversal for model nodes supporting pre-order, post-order, and level-order.
Traversal order options.
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)
Initialize traversal.
| Parameter | Type | Description |
|---|---|---|
| root | Starting node (root of the network) | |
| order | Traversal order (PRE_ORDER, POST_ORDER, or LEVEL_ORDER) |
Return fresh iterator each time.
Return traversal as a list.
Count nodes in traversal.
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)
Number of levels in the traversal.
Maximum nodes at any single level.
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). |
Yield (level_number, nodes_at_level) tuples.