Skip to content

Commit 591a9f3

Browse files
authored
2.4.0 (#483)
1 parent 5961531 commit 591a9f3

6 files changed

Lines changed: 35 additions & 10 deletions

File tree

CHANGELOG.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
Release Notes
22
=============
33

4+
2.4.0 (2025-11-13)
5+
------------------
6+
* [code] Replace type checks with instance checks (`#479 <https://github.com/splintered-reality/py_trees/issues/479>`_)
7+
* [behaviours] Add ForEach decorator to iterate over a list (`#476 <https://github.com/splintered-reality/py_trees/issues/476>`_)
8+
* [code] Use typing.Any for type hints in kwargs (`#475 <https://github.com/splintered-reality/py_trees/issues/475>`_)
9+
* [behaviours] Add behavior CompareBlackboardVariables (`#472 <https://github.com/splintered-reality/py_trees/issues/472>`_)
10+
* [code] use generator expression in all() for short-circuit evaluation (`#470 <https://github.com/splintered-reality/py_trees/issues/470>`_)
11+
* [behaviours] Extend ComparisonExpression so we can get the value from a callable (`#468 <https://github.com/splintered-reality/py_trees/issues/468>`_)
12+
* [code] remove py package, no longer needed for pytest-benchmark (`#466 <https://github.com/splintered-reality/py_trees/issues/466>`_)
13+
* [docs] Update introduction.rst -fixed typo (`#464 <https://github.com/splintered-reality/py_trees/issues/464>`_)
14+
* [readme] Update README for version 2.3.x (`#460 <https://github.com/splintered-reality/py_trees/issues/460>`_)
15+
* [infra] Update Python package version to 2.3.0 (`#461 <https://github.com/splintered-reality/py_trees/issues/461>`_)
16+
* [infra] Use commas to separate multiple tox commands
17+
* Contributors: FrankvVeelen, Jorge Santos Simón, Lei Zhang, Robert Tang-Kong, Sebastian Castro, Sid Sarasvati
18+
419
2.3.0 (2025-01-11)
520
------------------
621
* [code] Fix CI and update to latest Ubuntu/Python versions (`#454 <https://github.com/splintered-reality/py_trees/issues/454>`_)

README.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ Brief feature list:
1818

1919
## What's New?
2020

21+
* [2025-11-13] New `ForEach` decorator.
22+
* [2025-11-13] New `CompareBlackboardVariables` behaviour, with comparison expressions that allow callables.
2123
* [2025-01-11] Support for Python 3.12 was added, and Python 3.8 was dropped.
2224

2325
## Documentation
2426

25-
[![devel][docs-devel-image]][docs-devel] [![2.3.x][docs-2.3.x-image]][docs-2.3.x] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x]
27+
[![devel][docs-devel-image]][docs-devel] [![2.4.x][docs-2.4.x-image]][docs-2.4.x] [![2.3.x][docs-2.3.x-image]][docs-2.3.x] [![2.2.x][docs-2.2.x-image]][docs-2.2.x] [![2.1.x][docs-2.1.x-image]][docs-2.1.x]
2628

2729
## Getting Started
2830

@@ -85,6 +87,7 @@ Robotics:
8587

8688
## Releases
8789

90+
* `2.4.x` - New ForEach decorator, new CompareBlackboardVariables behaviour, and callables in comparison expressions.
8891
* `2.3.x` - Support for Python 3.12 was added, and Python 3.8 was dropped.
8992
* `2.2.x` - Selectors, Sequences with and without memory. Improved testing and style/type checking.
9093
* `2.1.x` - Chooser deprecated. API housekeeping.
@@ -94,12 +97,12 @@ Robotics:
9497
* `1.0.x` - Behaviours, Decorators, Composites, Blackboards, Tree Management and Viz tools.
9598
* `0.y.x` - First open source pre-releases.
9699

97-
| | Devel | 2.3.x | 2.2.x | 2.1.x | 2.0.x | 1.2.x |
100+
| | Devel | 2.4.x | 2.3.x | 2.2.x | 2.1.x | 2.0.x |
98101
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
99-
| Sources | [![devel][sources-devel-image]][sources-devel] | [![2.3.x][sources-2.3.x-image]][sources-2.3.x] | [![2.2.x][sources-2.2.x-image]][sources-2.2.x] | [![2.1.x][sources-2.1.x-image]][sources-2.1.x] | [![2.0.x][sources-2.0.x-image]][sources-2.0.x] | [![1.2.x][sources-1.2.x-image]][sources-1.2.x] |
100-
| Compatibility | [![Python 3.12][python312-image]][python312-docs]<br/>[![Python 3.10][python310-image]][python310-docs] | [![Python 3.12][python312-image]][python312-docs]<br/>[![Python 3.10][python310-image]][python310-docs] | [![Python 3.10][python310-image]][python310-docs]<br/>[![Python 3.8][python38-image]][python38-docs] | [![Python 3.6][python36-image]][python36-docs] | [![Python 3.6][python36-image]][python36-docs] | [![Python 3.6][python36-image]][python36-docs] | [![Python 3.6][python36-image]][python36-docs] |
101-
| CI | [![devel-Status][devel-build-status-image]][devel-build-status] | [![2.3.x-Status][2.3.x-build-status-image]][2.3.x-build-status] | [![2.2.x-Status][2.2.x-build-status-image]][2.2.x-build-status] | - | - | - | - | - |
102-
| Documentation | [![devel-Docs][rtd-devel-image]][docs-devel] | [![2.3.x-Docs][rtd-2.3.x-image]][docs-2.3.x] | [![2.2.x-Docs][rtd-2.2.x-image]][docs-2.2.x] | [![2.1.x-Docs][rtd-2.1.x-image]][docs-2.1.x] | [![2.0.x-Docs][rtd-2.0.x-image]][docs-2.0.x] | [![1.2.x-Docs][rtd-1.2.x-image]][docs-1.2.x] |
102+
| Sources | [![devel][sources-devel-image]][sources-devel] | [![2.4.x][sources-2.4.x-image]][sources-2.4.x] | [![2.3.x][sources-2.3.x-image]][sources-2.3.x] | [![2.2.x][sources-2.2.x-image]][sources-2.2.x] | [![2.1.x][sources-2.1.x-image]][sources-2.1.x] | [![2.0.x][sources-2.0.x-image]][sources-2.0.x] |
103+
| Compatibility | [![Python 3.12][python312-image]][python312-docs]<br/>[![Python 3.10][python310-image]][python310-docs] | [![Python 3.12][python312-image]][python312-docs]<br/>[![Python 3.10][python310-image]][python310-docs] | [![Python 3.12][python312-image]][python312-docs]<br/>[![Python 3.10][python310-image]][python310-docs] | [![Python 3.10][python310-image]][python310-docs]<br/>[![Python 3.8][python38-image]][python38-docs] | [![Python 3.6][python36-image]][python36-docs] | [![Python 3.6][python36-image]][python36-docs] | [![Python 3.6][python36-image]][python36-docs] |
104+
| CI | [![devel-Status][devel-build-status-image]][devel-build-status] | [![2.4.x-Status][2.4.x-build-status-image]][2.4.x-build-status] | [![2.3.x-Status][2.3.x-build-status-image]][2.3.x-build-status] | [![2.2.x-Status][2.2.x-build-status-image]][2.2.x-build-status] | - | - | - | - |
105+
| Documentation | [![devel-Docs][rtd-devel-image]][docs-devel] | [![2.4.x-Docs][rtd-2.4.x-image]][docs-2.4.x] | [![2.3.x-Docs][rtd-2.3.x-image]][docs-2.3.x] | [![2.2.x-Docs][rtd-2.2.x-image]][docs-2.2.x] | [![2.1.x-Docs][rtd-2.1.x-image]][docs-2.1.x] | [![2.0.x-Docs][rtd-2.0.x-image]][docs-2.0.x] |
103106

104107

105108
[license-image]: https://img.shields.io/badge/License-BSD%203--Clause-orange.svg?style=plastic
@@ -116,12 +119,15 @@ Robotics:
116119

117120
[devel-build-status-image]: https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg
118121
[devel-build-status]: https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
122+
[2.4.x-build-status-image]: https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg??branch=release/2.4.x
123+
[2.4.x-build-status]: https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
119124
[2.3.x-build-status-image]: https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg??branch=release/2.3.x
120125
[2.3.x-build-status]: https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
121126
[2.2.x-build-status-image]: https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml/badge.svg??branch=release/2.2.x
122127
[2.2.x-build-status]: https://github.com/splintered-reality/py_trees/actions/workflows/pre-merge.yaml
123128

124129
[docs-devel]: http://py-trees.readthedocs.io/
130+
[docs-2.4.x]: http://py-trees.readthedocs.io/en/release-2.4.x/
125131
[docs-2.3.x]: http://py-trees.readthedocs.io/en/release-2.3.x/
126132
[docs-2.2.x]: http://py-trees.readthedocs.io/en/release-2.2.x/
127133
[docs-2.1.x]: http://py-trees.readthedocs.io/en/release-2.1.x/
@@ -133,6 +139,7 @@ Robotics:
133139
[docs-0.5.x]: http://docs.ros.org/kinetic/api/py_trees/html/
134140

135141
[docs-devel-image]: http://img.shields.io/badge/docs-devel-brightgreen.svg?style=plastic
142+
[docs-2.4.x-image]: http://img.shields.io/badge/docs-2.4.x-brightgreen.svg?style=plastic
136143
[docs-2.3.x-image]: http://img.shields.io/badge/docs-2.3.x-brightgreen.svg?style=plastic
137144
[docs-2.2.x-image]: http://img.shields.io/badge/docs-2.2.x-brightgreen.svg?style=plastic
138145
[docs-2.1.x-image]: http://img.shields.io/badge/docs-2.1.x-brightgreen.svg?style=plastic
@@ -144,6 +151,7 @@ Robotics:
144151
[docs-0.5.x-image]: http://img.shields.io/badge/docs-0.5.x-brightgreen.svg?style=plastic
145152

146153
[rtd-devel-image]: https://readthedocs.org/projects/py-trees/badge/?version=devel&style=plastic
154+
[rtd-2.4.x-image]: https://readthedocs.org/projects/py-trees/badge/?version=release-2.4.x&style=plastic
147155
[rtd-2.3.x-image]: https://readthedocs.org/projects/py-trees/badge/?version=release-2.3.x&style=plastic
148156
[rtd-2.2.x-image]: https://readthedocs.org/projects/py-trees/badge/?version=release-2.2.x&style=plastic
149157
[rtd-2.1.x-image]: https://readthedocs.org/projects/py-trees/badge/?version=release-2.1.x&style=plastic
@@ -156,6 +164,7 @@ Robotics:
156164
[not-available-docs-image]: http://img.shields.io/badge/docs-n/a-yellow.svg?style=plastic
157165

158166
[sources-devel]: https://github.com/splintered-reality/py_trees/tree/devel
167+
[sources-2.4.x]: https://github.com/splintered-reality/py_trees/tree/release/2.4.x
159168
[sources-2.3.x]: https://github.com/splintered-reality/py_trees/tree/release/2.3.x
160169
[sources-2.2.x]: https://github.com/splintered-reality/py_trees/tree/release/2.2.x
161170
[sources-2.1.x]: https://github.com/splintered-reality/py_trees/tree/release/2.1.x
@@ -167,6 +176,7 @@ Robotics:
167176
[sources-0.5.x]: https://github.com/splintered-reality/py_trees/tree/release/0.5.x
168177

169178
[sources-devel-image]: http://img.shields.io/badge/sources-devel-blue.svg?style=plastic
179+
[sources-2.4.x-image]: http://img.shields.io/badge/sources-2.4.x-blue.svg?style=plastic
170180
[sources-2.3.x-image]: http://img.shields.io/badge/sources-2.3.x-blue.svg?style=plastic
171181
[sources-2.2.x-image]: http://img.shields.io/badge/sources-2.2.x-blue.svg?style=plastic
172182
[sources-2.1.x-image]: http://img.shields.io/badge/sources-2.1.x-blue.svg?style=plastic

package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<package format="3">
44
<name>py_trees</name>
55
<!-- When updating, also update setup.py, version.py, pyproject.toml, package.xml -->
6-
<version>2.3.0</version>
6+
<version>2.4.0</version>
77
<description>
88
Pythonic implementation of behaviour trees.
99
</description>

py_trees/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414

1515
# When changing, Also update setup.py and package.xml
1616
# TODO: use pkg_resources to fetch the version from setup.py
17-
__version__ = "2.3.0"
17+
__version__ = "2.4.0"

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "py_trees"
3-
version = "2.3.0"
3+
version = "2.4.0"
44
description = "pythonic implementation of behaviour trees"
55
authors = ["Daniel Stonier", "Naveed Usmani", "Michal Staniaszek"]
66
maintainers = ["Daniel Stonier <d.stonier@gmail.com>", "Sebastian Castro <sebas.a.castro@gmail.com>"]

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
# Keep them in sync.
1919
d = setup(
2020
name="py_trees",
21-
version="2.3.0",
21+
version="2.4.0",
2222
packages=find_packages(exclude=["tests*", "docs*"]),
2323
package_data={"py_trees": ["py.typed"]},
2424
install_requires=install_requires,

0 commit comments

Comments
 (0)