# -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8 -*-
====================
 alchemlyb CHANGELOG
=====================

The rules for this file:
  * entries are sorted newest-first.
  * summarize sets of changes - don't reproduce every git log comment here.
  * don't ever delete anything.
  * keep the format consistent (79 char width, MM/DD/YYYY date format) and do
    not use tabs but use spaces for formatting
  * accompany each entry with github issue/PR number (Issue #xyz)
  * release numbers follow "Semantic Versioning" https://semver.org

10/21/2025 xiki-tempula, jaclark5, yuxuanzhuang. orbeckst

  * 2.5.0

Fixes
  - Get correct timestamp based on bar_intervall (Issue #428, PR #429)

Changes
  - Add support for Python 3.14 (#439)
  - Use mypy to do type check and add type hints (PR #433, PR #441)
  - Use Ruff to do format and lint check and rename some variables, drop black (PR #432)
  - Add support for py3.13 (PR #431)
  - Drop support for py3.10 (PR #431)
  - Exclude numpy 2.3.0-2.3.2 due to potential changes in output of up to 0.1 kT
    (see PR #431 and issue choderalab/pymbar#556) (PR #431)
  - Functions in alchemlyb.convergence now only accept UPPERCASE estimator names
    (lowercase had been deprecated in 1.0.0 and scheduled for removal in 2.0.0)
    (PR #443)

Enhancements
  - Added matrices for entropy and enthalpy for MBAR (PR #406)
  - Parallelise read and preprocess for ABFE workflow. (PR #371)


09/19/2024 orbeckst, jaclark5

  * 2.4.1

Fixes
  - [doc] tutorial: use alchemlyb.concat (PR #399)
  - Resolve pandas FutureWarnings in bar_.py and mbar_.py (issue #408 PR #407)


09/17/2024 jaclark5, orbeckst

  * 2.4.0

Enhancements
  - Addition of `block_average` function in both `convergence` and 
    `visualization` (Issue #380, PR #381)
  - add CITATION.cff file with all authors from AUTHORS (issue #394, PR #395)

Changes
  - modernize build system: replaced setup.py,cfg with pyproject.toml (#385)


08/24/2024 xiki-tempula

  * 2.3.2

Changes
  - Remove Python 3.9 support (issue #389, PR #390).

Enhancements
  - Add a tutorial section in the documentation (issue #382, PR #379).


07/08/2024 orbeckst, xiki-tempula

  * 2.3.1

Changes
  - alchemlyb adopts SPEC 0 (replaces NEP 29)
    https://scientific-python.org/specs/spec-0000/

Fixes
  - Support matplotlib 3.9.0 (issue alchemistry/flamel#28, PR#319).


05/21/2024 xiki-tempula

  * 2.3.0

Changes
  - Default value for keyword argument `initial_nk` of the MBAR estimator was
    changed to "BAR" (run an initial BAR calculation before MBAR) instead of
    `None` (start from all zeros) as this change provides a sizable speedup (PR
    #357)
    
Enhancements

  - `forward_backward_convergence` uses the bootstrap error when the
    statistical error is too large. (PR #358)
  - `BAR` result is used as initial guess for `MBAR` estimator. (PR #357)
  - `forward_backward_convergence` uses the result from the previous step as
    the initial guess for the next step. (PR #357)


04/06/2024 hl2500, xiki-tempula

  * 2.2.0

Changes
  - Require pandas >= 2.1 (PR #340)
  - For pandas>=2.1, metadata will be loaded from the parquet file (issue #331,
    PR #340).
  - add support for Python 3.12, remove Python 3.8 support (issue #341, PR
    #304).

Enhancements
  - Add a TI estimator using gaussian quadrature to calculate the free energy.
    (issue #302, PR #304)
  - Warning issued when the series is `None` for `statistical_inefficiency`
    (issue #337, PR #338)
  - ValueError issued when `df` and `series` for `statistical_inefficiency`
    doesn't have the same length (issue #337, PR #338)

Fixes
  - data_fraction column in workflow.convergence won't be affected by the unit
    conversion (issue #350, PR#319).
  

06/22/2023 xiki-tempula

  * 2.1.0

Changes
  - ValueError raised if concatenated amber output file is passed to amber
    parser (issue #315, PR #326).
  - Change the % based string formatting to {} based string formatting (issue
    #323, PR #324).
  - Use loguru instead of logging for log (issue #301, PR #303).

Enhancements
  - "Statistical inefficiency" is logged at debug level for
    equilibrium_detection and statistical_inefficiency (issue #295, PR#325).
  - Add a parser to read serialised pandas dataframe (parquet) (issue #316,
    PR#317).
  - workflow.ABFE allow parquet as input (issue #316, PR#317).
  - Allow MBAR estimator to use bootstrap to compute error (issue #320,
    PR#322).

Fixes
  - Fix the case where visualisation.plot_convergence would fail when the final
    error is NaN (issue #318, PR#319).

DeprecationWarning
  - The default MBAR error estimator in workflow.ABFE.estimate will change from
    analytic to bootstrap=50 in 2.6.0 (issue #320, PR#322).


04/06/2023 xiki-tempula

  * 2.0.1

Fixes
  - Fix the dE method in u_nk2series to use the difference between two lambda
    columns instead of using the next lambda column or the previous column for
    the last window (issue #299, PR #300).
  - work around hanging tests on Mac M1 by using Path.glob instead of glob.glob
    in ABFE workflow (issue #309, PR #310).


12/12/2022 xiki-tempula, orbeckst

  * 2.0.0

Changes
  - use pymbar 4 as backend; this release is incompatible with pymbar 3.x
    (issue #207, PR #268, discussion #205).
  - The default for keyword argument `method` in estimators.MBAR was changed
    from "hybr" to "robust" (issue #207, PR #268).

Enhancements
  - Raise ValueError when no file has been matched in workflow.ABFE (PR #289).
  - In workflows, the output folder will be created if it did not exist before
    (PR #290).
  
Removals
  - The AutoMBAR estimator was removed because pymbar 4's MBAR contains
    equivalent functionality. (issue #284)


12/09/2022 DrDomenicoMarson, xiki-tempula, orbeckst

  * 1.0.1

Fixes
  - make workflow.ABFE handle 0 as input to forwrev instead of crashing (issue
    #276, PR #282).
  - Remove most of the iloc in the tests (issue #202, PR #254).
  - AMBER parser now raises ValueError when the initial simulation time is not
    found (issue #272, PR #273).
  - The regex in the AMBER parser now reads also 'field=value' pairs where
    there are no spaces around the equal sign (issue #272, PR #273).    
  - Pre-processing function slicing will not drop NaN rows (issue #274, PR
    #275).
    
Deprecations
  - deprecate AutoMBAR for removal in 2.0 because pymbar 4 already contains
    equivalent functionality (issue #284, PR #285).

Internal Enhancements (do not affect API)
  - Blackfy the codebase (PR #280).
  - Refactor the test to make all the parsing done at conftest level (issue
    #206, PR #278).


10/31/2022 orbeckst, xiki-tempula, DrDomenicoMarson

  * 1.0.0

Changes
  - The 1.x release only supports pymbar 3.x; alchemlyb 2.x will only support
    pymbar >= 4.0. (#205)
  - Default the units in plot_dF_state, plot_convergence and plot_ti_dhdl to
    None. Remove the array input for plot_convergence (issue #247, PR #260).
  - Now AMBER parser raises an exception when an inconsinstency in the input
    file is found, instead of ignoring the file (issues #227 #238, PR #256)
  - Now AMBER parser raises an exception when an inconsistency in MBAR data is
    found (PR #253)
  - Drop support for py3.7 (Issue #179, PR #214)
  - forward_backward_convergence will use AutoMBAR as backend when `MBAR` is
    selected as the estimator (PR #114).
  - AutoMBAR accepts the `method` argument (PR #114).
  - Refactor the subsampling module to unify the behaviour of
    equilibrium_detection and statistical_inefficiency (PR #218).
  - delta_f_, d_delta_f_, states_ are view of the original object in estimator
    (issue #246, PR #252).


Enhancements
  - Add u_nk2series and dhdl2series to convert u_nk and dHdl to series (PR
    #218).
  - Add remove_burnin keyword to decorrelate_u_nk and decorrelate_dhdl (PR
    #218).
  - Add a base class for workflows (PR #188).
  - Add the ABFE workflow (PR #114, PR #231).
  - Add R_c and A_c for "fractional equilibration time" convergence analysis
    (issue #104, PR #239)
  - Add the keyword arg final_error to plot_convergence (#249)
  - All parsers now have a 'extract(file, T)' method that returns a dict with
    both "dHdl" and "u_nk" data (or None). The AMBER parser when using this
    function will read the file just once, extracting all data at once. (issue
    #222, PR #240)


Fixes
  - documented conda installation (available since 0.6.0) (#192)
  - AMBER parsers now use 'ntpr' information to read time properly (issue #221,
    PR #224)
  - AMBER parsers now skip the reading of averages (issue #226, PR #230)
  - AMBER parsers now check if the T provided by the user is the same at which
    the simulations were run (issue #225, PR #232)
  - changed how int/float are read from AMBER files (issue #229, PR #235)
  - substitute the any_none() function with a check "if None in" in the AMBER
    parser (issue #236, PR #237)
  - Fix dhdl2series and u_nk2series would not reattach the unit. (PR #248)
  - Removed the 'dhdl' keyword for uncorrelating the u_nk (see
    `u_nk2series()`). Use 'dE' as an alternative or use 'all' (instead of the
    deprecated 'dhdl_all') (PR #250).


07/22/2022 xiki-tempula, IAlibay, dotsdl, orbeckst, ptmerz

  * 0.7.0

Changes
  - Deployment to PyPI is now done automatically using github actions (Issue
    #193)
  - gmx parser now defaults to dropping NaN and corrupted lines (filter=True)
    (#171, PR #183)
  - remove broken .zip support from util.anyopen() (PR #197)

Enhancements
  - Add filter function to gmx.extract to make it more robust (PR #183): can
    filter incomplete/corrupted lines (#126, #171) with filter=True.
  - Add support to util.anyopen() for taking filelike objects (PR #197)

Fixes
  - Fixes setup.py and setup.cfg to prevent installations with Python versions
    lower than 3.7 (Issue #193)
  - added AutoMBAR to convergence analysis (#189)
  - Fixed subsampling in statistical_inefficiency when lower or step keywords
    are used (Issue #198, PR #199)


12/28/2021 schlaicha, xiki-tempula, jhenin, ttjoseph, orbeckst

  * 0.6.0

Enhancements
  - support Python 3.10
  - support for Interleaved Double-Wide Sampling (IDWS) in NAMD (PR #135).
    Windows may be split across NAMD .fepout files, allowing for interrupted
    and restarted simulations, but each window must be complete (issue #145).
    Various malformations of input files are detected, where lambdas do not
    monotonically increase or decrease, or are inconsistent or missing.
  - Convenience function for decorrelating u_nk and dHdl (PR #163).
  - Time convergence function forward_backward_convergence introduced and
    plot_convergence now takes dataframe from forward_backward_convergence as
    input (PR #168).
  - Automatic MBAR solver with fall back (issue #170, PR #172)

Fixes
  - Subsampling now works with bounds and step (PR #167, issue #166).
  - AMBER parser logger now always logs to alchemlyb.parsers.Amber instead of
    the root logger (PR #173)
  - updated deprecated pandas aggregation, now using groupby(level).agg (#175)


09/17/2021 xiki-tempula, orbeckst

  * 0.5.1

Changes (not affecting code)
  - update the Mission to also include general and robust workflows (discussion
    #159, issue #160, PR #161)

Fixes
  - MBAR estimator now correctly passes max_iterations to pymbar.MBAR. (PR
    #162)
  - docs (PR #157)
  - visualisation.df_state.plot_dF_state() now correctly raises ValueError
    instead of NameError when incorrect orientation keyword argument is
    supplied


08/01/2021 xiki-tempula, orbeckst

  * 0.5.0

Changes
  - alchemlyb adopts NEP29
    https://numpy.org/neps/nep-0029-deprecation_policy.html to effectively only
    support the last 2-3 minor Python versions
  - Removed support for Python 2.7 and 3.6 (issue #130, #140): supported/tested
    Python versions are 3.7, 3.8, 3.9 on Linux, macOS, and Windows
  - The scipy constant for gas constant is used for parsers instead of the
    constants used by the corresponding MD engine (issue #125, PR #129).  This
    leads to small changes in results from GROMACS simulations in kT compared
    to the previous releases, with a relative difference on the order of 1e-7.
  - Added unit-awareness: the base unit remains kT but dataframes need to carry
    the unit and temperature in a DataFrame.attrs so that dataframes can be
    easily converted to different energy units (issue #125)
  - The parser outputs dataframe with metadata (issue #125, PR #129).
  - Visualisation module will change the data according to input unit (issue
    #125, PR #129).
  - Bump the minimum pandas version to 1.2 (issue #130, #140).

Enhancements
  - postprocessors.units module for unit conversion (issue #125, PR #129).
  - pass_attrs decorator for safely passing variable (issue #125, PR #129).
  - alchemlyb.concat added to replace pd.concat (issue #125, PR #129).

Fixes
  - `alchemlyb.concat()` should raise ValueError when given empty list, to be
    compatible with pandas.concat() (issue #150, PR #152).
  - Fix the support for pandas >= 1.3 by skipping 1.3.0 (issue #147, PR #148).
  - Fix separate_dhdl not work for multiple columns (issue #149, PR #151).


06/08/2021 orbeckst

  * 0.4.2

Fixes
  - added back documentation that was lost in 0.4.1 release (#136)


06/01/2021 xiki-tempula, orbeckst

  * 0.4.1

Enhancements

Deprecations
  - Last release that supports Python 3.5 and 2.7.

Fixes
  - The plotting function assumes that the default unit is kcal/mol where it is
    kT (issue #124, PR #123).
  - invalid escape sequence in plotting annotations (issue #133)

Changes


04/27/2021 wehs7661, dotsdl, xiki-tempula, orbeckst

  * 0.4.0

Enhancements
  - Allow the dhdl from TI estimator to be separated for multiple lambda (PR
    #121).
  - Allow the convergence to be plotted. (PR #121)
  - Allow automatic sorting and duplication removal during subsampling (issue
    #118, PR #119).
  - Allow statistical_inefficiency to work on multiindex series. (issue #116,
    PR #117)
  - Allow the overlap matrix of the MBAR estimator to be plotted. (issue #73,
    PR #107)
  - Allow the dhdl of the TI estimator to be plotted. (issue #73, PR #110)
  - Allow the dF states to be plotted. (issue #73, PR #112)

Deprecations
  - Last version that is tested against Python 3.5 and 2.7.

Fixes
  - removed redundant statistical inefficiency calculation in
    `alchemlyb.preprocessing.subsampling.equilibrium_detection`

Changes


01/16/2020 dotsdl, orbeckst

  * 0.3.1

Enhancements

Deprecations

Fixes
  - added explicit `return_theta=True` for call to
    pymbar.MBAR.getFreeEnergyDifferences, as this was happening prior to
    changes in `pymbar` without the explicit call

Changes


08/05/2019 dotsdl, orbeckst, shuail, trje3733, brycestx, harlor, vtlim, lee212

  * 0.3.0

Enhancements
  - Amber TI parser (#10)
  - Amber FEP (MBAR) parser (#42)
  - Gromacs extended ensemble parser (#14)
  - NAMD FEP parser (#7, #75)
  - BAR estimator (#40)
  - enhanced performance of Gromacs parsers with pandas.read_csv() (#81)
  - GOMC TI and FEP parser (#77)

Deprecations

Fixes
  - fixed TI estimator (PR #61)
  - correctly use pV and U in the Gromacs parser (#59)

Changes
  - defaults for statistical_inefficiency() are more conservative (#39)
  - API Proposal was upgraded to API Principles (and updated)

(Note: release number 0.2.x was skipped.)


05/27/2017 dotsdl, ianmkenney, orbeckst

  * 0.1.0

First release

Features:
  - Parsers for GROMACS, including reduced potentials and gradients.
  - Subsampler functions for slicing, statitistical inefficiency, equilibration
    detection.
  - Minimally functional estimators for MBAR, TI.
  - high test coverage (works with data in alchemistry/alchemtests)
