* feat: support `openfe gather` for septop (#1638)
* copy septop analysis notebook over
* add todos
* add plan and test
* format
* add failing tests
* comment out secondary tests
* add cli tmp
* clean up imports
* fix type hints in gather.py
* test passes for gather raw
* test passes for ddg
* tests pass for dg
* pull more error handling into septop
* condense code a bit
* MBAR uncertainty
* remove planning stub
* Revert "MBAR uncertainty"
This reverts commit bf32aa3c6e.
* format
* test with tolerances
* precommit format
* remove accidentally committed file
* Apply suggestions from code review
Co-authored-by: Hannah Baumann <43765638+hannahbaumann@users.noreply.github.com>
---------
Co-authored-by: Hannah Baumann <43765638+hannahbaumann@users.noreply.github.com>
* feat: add abfe gathering support first draft (#1686)
* add abfe MVP with tests
* Apply suggestions from code review
Co-authored-by: Hannah Baumann <43765638+hannahbaumann@users.noreply.github.com>
* fix incorrect var name
* fix abfe legs extraction
* fix merge bug
* remove unused import
---------
Co-authored-by: Hannah Baumann <43765638+hannahbaumann@users.noreply.github.com>
* gather: fix septop rounding (#1696)
* only apply precision rounding at the end
* clean up code
* gather: update names parsing (septop and abfe) (#1698)
* update abfe names parsing
* update septop names parsing
* add todo
* get names from alchemical_components
* remove todo
* gather: refactor/unify rounding behavior (#1697)
* format septop outputs with format_df_with_precision
* only apply precision rounding at the end
* update gather abfe formatting to use format_df_with_precision
* remove unused import
* switch back to checking final outputs for abfes
* clean up code
* add rounding for dg mle
* simplify code
* gather: unify code structure between rbfe, septop, & abfe (#1700)
* format septop outputs with format_df_with_precision
* only apply precision rounding at the end
* update gather abfe formatting to use format_df_with_precision
* remove unused import
* switch back to checking final outputs for abfes
* clean up code
* add rounding for dg mle
* simplify code
* make gather_septop.py code more similar to gather.py
* make gather_abfe.py code more similar to gather.py
* remove unused function
* add stdout message for experimental gathering support (#1703)
* add warnings for experimental gathering
* use click to make output look nicer, not a true warning
* add warning text
* make yellow
* add tests
* remove unused code
* add news item
* speed up names gathering
* names should always return str
* add single repeat tests for abfe and septop
* remove unused imports
* make `gather septop/abfe` output headers accurately reflect error type (#1712)
* gather septop/abfe output headers accurately reflect error type
* split into func
* label all uncertainty columns more specifically
* add docstring
* update test data
* update error calculation
---------
Co-authored-by: Hannah Baumann <43765638+hannahbaumann@users.noreply.github.com>
* add return type hints
* first pass at using pd dataframes
* add helper function
* it works but is ugly
* fix copy pasta
* do it better with pandas
* docstrings
* var names
* add docstring
* add example to docstring
* make string check more rigorous
* do we test this at all?
* start of logging improvements
* first pass at logging, worried about performance
* setup a base class + add type hints
* add placeholder url ref
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* update to new logging control
* Fix imports
* remove bit left over from being able to delete these log controlers
* looks like ... is used more than pass
* formatting fix
* Grab new format rule from main
* run ruff check --fix on conflicting files
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Added tests
* see if this fixes the doc build
* add back debugging code
* update openmm doc url
* add note about jax warning
* bump
* Remove debugging code to see if that fixes doc build
* ruff format
* Add url
* switch to using module instead of class w/ static methods
* Update docs/guide/troubleshooting.rst
Co-authored-by: Alyssa Travitz <31974495+atravitz@users.noreply.github.com>
* ruff fixes
* Ruff fix
* Added news entry
* Refactor to move things to private namespace
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Alyssa Travitz <31974495+atravitz@users.noreply.github.com>
* add more checks
* make precommit manual
* apply formatting to pyproject.toml
* add TODO
* remove unneeded, add a few more
* add ruff, but turn everything off
* add openfe known first party
* format highest-level files
* first half of openfe protocols
* second half of openfe protocols
* openfe protocols formatting, with alyssa's fmt skips
* add ruff formatter to precommit
* fmt: off all vendored _rfe_utils code
* addressing review comments
* format openfe/utils
* format openfe/setup
* first batch of cli formatting
* second batch of cli formatting
* formatting the rest of openfecli commands
* format openfecli/parameters
* format openfe/storage
* run precommit
* Update openfecli/commands/gather.py
Co-authored-by: Irfan Alibay <IAlibay@users.noreply.github.com>
* update example notebooks branch for v1.7.0 docs changes (#1615)
* bump example notebooks branch
* add ipykernel to env
* roll back to fixing septop branch
* i dont think we want ipykernel
* bump to tmp_fix_docs branch
* point to branch revert-237-v1.7_cookbooks
* point to latest example notebooks release
* remove colab button, point to updated example notebooks, reorg landing page (#1618)
* remove colab button from example notebooks in docs
* point to example notebooks 2025.10.2
* replace 'try' with CLI
---------
Co-authored-by: Irfan Alibay <IAlibay@users.noreply.github.com>
* escape string correctly
* Fix test to check if string is printed
This test used to use pytest.warns to check if we printed a string to
the terminal. This isn't the right way to test if things get printed to
terminal since it only checks warnings raised in python-land. The test
passed since the regex used to match warnings ended up matching warnings
raised since it was a negated character class which matches a single
character that is not any of the characters listed inside.
I've seen a few cases in the wild where CI fails because a file failed
to download. I think we should try bumping to 5 since with each retry it
increases the wait time and I think that ~3s might be too fast so I want
to try 5s.
Co-authored-by: Irfan Alibay <IAlibay@users.noreply.github.com>
Co-authored-by: Alyssa Travitz <31974495+atravitz@users.noreply.github.com>
* add pandas construction
* removing csv writer
* replicating original behavior
* add rich table
* split into function
* make names clearer
* adding adjustments from rebase
* put it in a box
* adding tsv flag
* update tests to use tsv flag
* add smoke test for pretty print
* adding file creation test
* adding news item
---------
Co-authored-by: Irfan Alibay <IAlibay@users.noreply.github.com>
Co-authored-by: Mike Henry <11765982+mikemhenry@users.noreply.github.com>
* print message to stderr when no valid results files are found
* fix check
* move check into main function to keep single responsibility
* fix cmet test bug
* adding test
* reorg for clarity
* moving try/except into function for clarity
* reorg data parsing for clarity
* remove unused function
* add try/except to pass through info about failed edges
* updating tests for new expected failed simulation checking behavior
* pass through for raw and ddg
* pass through failures for dgs
* remove unused import
* adding a missing check
* docstrings
* cleaning up logic
* cleaning up logic
* docstrings and formatting
* fixing conditionals bug
* more docstrings
* make 'name' a tuple for consistency
* make functions private
* updating output statement for clarity (hopefully)
* remove unused dg raw expected output
* adding comment description
* updating tests
* cleaning up test to not use tmp dir
* only use non-None legs for deciding whether to do rbfe/rhfe
* fix typo
* pass empty list instead of None through to ddg
* add cmet data
* add assert success tests - still need output validation
* light reordering for clarity
* adding pytest regressions
* don't include stderr in file regression
* making output more legible
* switch from runtime error to exit(1)
* add missing complex legs test
* adding regressoin tsvs to manifest
* reordering functions for clarity
* updating tests
* adding test for disconnected network
* updating warning message, not throwing error for now
* updating tests for missing runs
* add disconnected network check
* switch from NaN to Error
* removing unused regression files
* fixing typo
* adding test coverage
* fix typo
* adding news entry
* updates to cli from_json
* replacing dump instances with to_json
* Remove unnecessary imports of JSON_HANDLER
* addressing review
---------
Co-authored-by: Mike Henry <11765982+mikemhenry@users.noreply.github.com>
Co-authored-by: David L. Dotson <dotsdl@gmail.com>
* adding output for failed edges
* adding print statements, tests don't pass yet because of extra output
* remove straggler
* Update openfecli/commands/gather.py
Co-authored-by: Josh Horton <Josh.Horton@newcastle.ac.uk>
* comment out exception check temporarily
* adding exception check back (test data was wrong)
* adding tests in progress
* trying different mocking
* adding unit tests
* cleaning up
* updating zenodo doi to use correct parallel rbfe dataset
---------
Co-authored-by: Josh Horton <Josh.Horton@newcastle.ac.uk>
* switch to assert_click_success to make debugging easier
* fixing tests to look for logger.INFO instead of warnings (due to gufe change)
* updating expected output due to gufe changes
* updating expected transformations
* remove easy prefix, passing 2fe7741b9448
* define _settings_cls, tests pass against g3c6d5f9
* update string match for partial charge logging