py_branches
py_branches provides higher-level functionality designed to sit on top of the py_trees library. It extends py_trees with reusable behaviors and decorators for common patterns such as alternating execution, probabilistic selection, blackboard-driven conditionals, and time-based pausing.
Installation
From PyPI:
pip install py_branches
From source (editable):
git clone https://github.com/snwu1996/py_branches.git
cd py_branches
pip install -e .
Modules
| Module | Description |
|---|---|
alternating |
Cycle through behaviors in fixed patterns or run a child every N ticks |
blackboard |
Read/write/gate behaviors based on py_trees blackboard variables |
pause |
Time-based pauses — uniform random duration or YAML-defined schedules |
random |
Probabilistic behavior execution and weighted random selectors |
Basic Usage
Alternating — cycle through behaviors
import py_trees
from py_branches.alternating import run_alternating
a = py_trees.behaviours.Success(name="A")
b = py_trees.behaviours.Success(name="B")
c = py_trees.behaviours.Success(name="C")
# Run A for 3 ticks, then B for 2 ticks, then C for 4 ticks, then repeat
root = run_alternating("Alternating", [a, b, c], [3, 2, 4])
Alternating — run a child every N ticks
from py_branches.alternating import RunEveryX, RunEveryRange
child = py_trees.behaviours.Success(name="Child")
# Run child every 5th tick
every_5 = RunEveryX(child, name="Every5", every_x_range=(5, 5))
# Run child only on iterations 4–6 out of every 10
windowed = RunEveryRange(child, name="Window", max_range=10, run_range=(4, 6))
Blackboard — conditional execution and variable management
import py_trees
from py_branches.blackboard import (
IncrementBlackboardVariable,
RunIfBlackboardVariableEquals,
SetBlackboardVariableIfCondition,
)
# Set up blackboard
py_trees.blackboard.Blackboard.enable_activity_stream()
client = py_trees.blackboard.Client(name="setup")
client.register_key("counter", access=py_trees.common.Access.WRITE)
client.counter = 0
# Increment a blackboard counter each tick
increment = IncrementBlackboardVariable(
name="Increment", variable_name="counter", increment_by=1
)
# Only run a child behavior when counter == 5
child = py_trees.behaviours.Success(name="AtFive")
gate = RunIfBlackboardVariableEquals(
child, name="RunAt5", variable_name="counter", equals=5
)
Pause — random duration pause
from py_branches.pause import PauseUniform
# Pause for a random duration between 1.0 and 3.0 seconds
pause = PauseUniform(name="RandomPause", low=1.0, high=3.0)
Pause — schedule-based pause
from py_branches.pause import load_schedule_file, PauseSchedule
schedule = load_schedule_file("configs/schedules/example_schedule.yaml")
if schedule is None:
raise SystemExit("schedule file is empty")
# Pauses until the current scheduled window ends; SUCCESS immediately if
# outside all windows.
pause = PauseSchedule(name="PauseSchedule", schedule=schedule)
Random — probabilistic execution
import py_trees
from py_branches.random import RandomRun, random_selector
child = py_trees.behaviours.Success(name="Child")
# Execute child with 70% probability; return FAILURE otherwise
maybe = RandomRun(child, name="Maybe", probability=0.7)
# Weighted random selector: a=20%, b=30%, c=50%
a = py_trees.behaviours.Success(name="A")
b = py_trees.behaviours.Success(name="B")
c = py_trees.behaviours.Success(name="C")
selector = random_selector("WeightedSel", [a, b, c], [0.2, 0.3, 0.5])
Running Tests
pytest tests/
Documentation
Detailed documentation for each module is in the docs/ folder:
- alternating.md — Alternating and periodic execution
- blackboard.md — Blackboard-driven behaviors
- pause.md — Time-based pausing and schedules
- random.md — Probabilistic execution
License
BSD License. See LICENSE for details.
Release files for py_branches 1.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| py_branches-1.4.0.tar.gz | 15.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| py_branches-1.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 33.1 kB
Release files / py_branches-1.4.0.tar.gz
| Download URL | py_branches-1.4.0.tar.gz |
|---|---|
| Size | 15.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3ffdd39d6bd159dd096954d4f90bc74cf0fbb79b12477a3e17eeaaee59f89338
|
|
BLAKE2b-256 checksum How to use checksums |
d16cb4ab005d9f843f90f7b309f0be9226164bf068616adc4f4f76f1b37128d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.2 CPython/3.12.14 Linux/6.17.0-1022-azure
|
Release files / py_branches-1.4.0-py3-none-any.whl
| Download URL | py_branches-1.4.0-py3-none-any.whl |
|---|---|
| Size | 18.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3367922b784d89b95866339066b005ff21d2edfad8d59375a69326ce92029b3f
|
|
BLAKE2b-256 checksum How to use checksums |
fdee4afd23a674f2226dd42baba54bbc996eef8066f4c29f197e774cd4398112
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.2 CPython/3.12.14 Linux/6.17.0-1022-azure
|