Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,6 @@ Chronological list of authors

2025
- Yuxuan Zhuang (@yuxuanzhuang)

2026
- Jonathan Berg (@jberg5)
3 changes: 2 additions & 1 deletion CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ The rules for this file:
* release numbers follow "Semantic Versioning" https://semver.org


??/??/2026 jaclark5, jhenin, xiki-tempula
??/??/2026 jaclark5, jhenin, xiki-tempula, jberg5

* 2.6.0

Fixes
- Correct BAR per-stage uncertainty in ABFE.generate_result (Issue #455)
- Fix pandas warning (Issue #428, PR #429)

Enhancements
Expand Down
3 changes: 3 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ authors:
family-names: Clark
orcid: https://orcid.org/0000-0003-4897-5651
affiliation: National Institute of Standards and Technology
- given-names: Jonathan
family-names: Berg
orcid: 'https://orcid.org/0009-0007-4451-2824'
identifiers:
- type: swh
value: 'swh:1:dir:4cd266754be413312ee7ef3f1f7fbe05b38192cf'
Expand Down
11 changes: 11 additions & 0 deletions src/alchemlyb/tests/test_workflow_ABFE.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,17 @@ def test_summary(self, workflow):
assert np.isclose(summary["TI"]["Stages"]["TOTAL"], 21.8, 0.1)
assert np.isclose(summary["BAR"]["Stages"]["TOTAL"], 21.8, 0.1)

def test_summary_bar_stage_errors_quadrature_sum_to_total_error(self, workflow):
"""
For this ABFE fixture the stages (coul, vdw, bonded) partition all
adjacent-state transitions, so the quadrature sum of stage errors
must equal the TOTAL error.
"""
summary = workflow.generate_result()
stage_errors = summary["BAR_Error"]["Stages"].drop("TOTAL").to_numpy()
total_error = summary["BAR_Error"]["Stages"]["TOTAL"]
assert np.isclose(np.sqrt((stage_errors**2).sum()), total_error)

def test_no_name_estimate(self, workflow):
with pytest.raises(ValueError):
workflow.estimate("aaa")
Expand Down
10 changes: 5 additions & 5 deletions src/alchemlyb/workflows/abfe.py
Original file line number Diff line number Diff line change
Expand Up @@ -547,9 +547,9 @@ def generate_result(self) -> pd.DataFrame:
26 -- 27 1.243745 0.011239 1.245873 0.015711 1.248959 0.015762
27 -- 28 1.128429 0.012859 1.124554 0.016999 1.121892 0.016962
28 -- 29 1.010313 0.016442 1.005444 0.017692 1.019747 0.017257
Stages coul 10.215658 0.033903 10.017838 0.041839 10.017854 0.048744
vdw 22.547489 0.098699 22.501150 0.060092 22.542936 0.106723
bonded 2.374144 0.014995 2.341631 0.005507 2.363828 0.021078
Stages coul 10.215658 0.033903 10.017838 0.037086 10.017854 0.048744
vdw 22.547489 0.098699 22.501150 0.077284 22.542936 0.106723
bonded 2.374144 0.014995 2.341631 0.014988 2.363828 0.021078
TOTAL 35.137291 0.103580 34.860619 0.087022 34.924618 0.119206

Attributes
Expand Down Expand Up @@ -632,8 +632,8 @@ def generate_result(self) -> pd.DataFrame:
error = np.sqrt(
sum(
[
d_delta_f_.iloc[start, start + 1] ** 2 # type: ignore[operator,union-attr,misc]
for i in range(start, end + 1)
d_delta_f_.iloc[i, i + 1] ** 2 # type: ignore[operator,union-attr,misc]
for i in range(start, end)
]
)
)
Expand Down
Loading