====================================== ERRORS =======================================
___________________ ERROR at setup of test_solvent_check_restart ____________________
@pytest.fixture(scope="module")
def ahfe_solv_trajectory_path():
> pooch_resume_data.fetch("multistate_checkpoints.zip", processor=pooch.Unzip())
../../Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/openfe/tests/protocols/conftest.py:383:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/pooch/core.py:598: in fetch
stream_download(
../../Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/pooch/core.py:824: in stream_download
hash_matches(tmp, known_hash, strict=True, source=str(fname.name))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
fname = '/Users/dwhs/Library/Caches/openfe/tmp3ifwyoit'
known_hash = 'md5:6addeabbfa37fd5f9114e3b043bfa568', strict = True
source = 'multistate_checkpoints.zip'
def hash_matches(fname, known_hash, strict=False, source=None):
"""
Check if the hash of a file matches a known hash.
If the *known_hash* is None, will always return True.
Coverts hashes to lowercase before comparison to avoid system specific
mismatches between hashes in the registry and computed hashes.
Parameters
----------
fname : str or PathLike
The path to the file.
known_hash : str
The known hash. Optionally, prepend ``alg:`` to the hash to specify the
hashing algorithm. Default is SHA256.
strict : bool
If True, will raise a :class:`ValueError` if the hash does not match
informing the user that the file may be corrupted.
source : str
The source of the downloaded file (name or URL, for example). Will be
used in the error message if *strict* is True. Has no other use other
than reporting to the user where the file came from in case of hash
mismatch. If None, will default to *fname*.
Returns
-------
is_same : bool
True if the hash matches, False otherwise.
"""
if known_hash is None:
return True
algorithm = hash_algorithm(known_hash)
new_hash = file_hash(fname, alg=algorithm)
matches = new_hash.lower() == known_hash.split(":")[-1].lower()
if strict and not matches:
if source is None:
source = str(fname)
> raise ValueError(
f"{algorithm.upper()} hash of downloaded file ({source}) does not match"
f" the known hash: expected {known_hash} but got {new_hash}. Deleted"
" download for safety. The downloaded file may have been corrupted or"
" the known hash may be outdated."
)
E ValueError: MD5 hash of downloaded file (multistate_checkpoints.zip) does not match the known hash: expected md5:6addeabbfa37fd5f9114e3b043bfa568 but got a6bdceff0c4a2f200538edb17c21d443. Deleted download for safety. The downloaded file may have been corrupted or the known hash may be outdated.
../../Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/pooch/hashes.py:182: ValueError
------------------------------- Captured stderr setup -------------------------------
Downloading file 'multistate_checkpoints.zip' from 'doi:10.5281/zenodo.18331259/multistate_checkpoints.zip' to '/Users/dwhs/Library/Caches/openfe'.
===================================== FAILURES ======================================
__________________ TestGatherSepTop.test_septop_full_results[raw] ___________________
self = <openfecli.tests.commands.test_gather.TestGatherSepTop object at 0x1ba90fd40>
septop_result_dir = PosixPath('/Users/dwhs/Library/Caches/openfe/septop_results.zip.unzip/septop_results')
report = 'raw'
file_regression = <pytest_regressions.file_regression.FileRegressionFixture object at 0x1cf6bc0e0>
@pytest.mark.parametrize("report", ["raw", "ddg", "dg"])
def test_septop_full_results(self, septop_result_dir, report, file_regression):
results = [str(septop_result_dir / f"results_{i}") for i in range(3)]
args = ["--report", report]
runner = CliRunner()
cli_result = runner.invoke(gather_septop, results + args + ["--tsv"])
> assert_click_success(cli_result)
../../Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/openfecli/tests/commands/test_gather.py:529:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
result = <Result UnicodeDecodeError('ascii', b'{\n "estimate": {\n "magnitude": 1.2449792134043993,\n "unit": "kilocalor..._": "gufe.protocols.protocolunit",\n ":version:": 1\n }\n }\n}\n', 50309, 50310, 'ordinal not in range(128)')>
def assert_click_success(result: click.testing.Result): # -no-cov-
"""Pass through error message if a click test fails.
Taken from https://github.com/openpathsampling/openpathsampling-cli/blob/main/paths_cli/commands/pathsampling.py
"""
if result.exit_code != 0:
print(result.output)
traceback.print_tb(result.exc_info[2])
print(result.exc_info[0], result.exc_info[1])
> assert result.exit_code == 0
^^^^^^^^^^^^^^^^^^^^^
E AssertionError
../../Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/openfecli/tests/utils.py:16: AssertionError
------------------------------- Captured stderr setup -------------------------------
Downloading file 'septop_results.zip' from 'doi:10.5281/zenodo.17435569/septop_results.zip' to '/Users/dwhs/Library/Caches/openfe'.
Unzipping contents of '/Users/dwhs/Library/Caches/openfe/septop_results.zip' to '/Users/dwhs/Library/Caches/openfe/septop_results.zip.unzip'
------------------------------- Captured stdout call --------------------------------
WARNING! Gathering of SepTop results with `openfe gather-septop` is an experimental feature and is subject to change in a future release of openfe.
<class 'UnicodeDecodeError'> 'ascii' codec can't decode byte 0xc2 in position 50309: ordinal not in range(128)
------------------------------- Captured stderr call --------------------------------
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/click/testing.py", line 501, in invoke
return_value = cli.main(args=args or (), prog_name=prog_name, **extra)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/click/core.py", line 1406, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/click/core.py", line 1269, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/click/core.py", line 824, in invoke
return callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/openfecli/commands/gather_septop.py", line 403, in gather_septop
legs = _get_legs_from_result_jsons(result_fns)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/openfecli/commands/gather_septop.py", line 90, in _get_legs_from_result_jsons
names, result = _load_valid_result_json(result_fn)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/openfecli/commands/gather_septop.py", line 47, in _load_valid_result_json
result = load_json(fpath)
^^^^^^^^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/site-packages/openfecli/commands/gather.py", line 204, in load_json
return json.load(open(fpath, "r"), cls=JSON_HANDLER.decoder)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/json/__init__.py", line 293, in load
return loads(fp.read(),
^^^^^^^^^
File "/Users/dwhs/Library/Caches/rattler/cache/envs/openfe-2026-04-25-3101817078011814996/envs/default/lib/python3.12/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Describe the bug
Tests fail in a fresh install. It looks like there are two problems:
To Reproduce
openfe test.Software versions
Software versions from pixi list:
Output
Brief form of the test failures:
Note that I'm unable to include all the errors, because test output (just errors/failures sections, not even including run or warnings summary) + pixi list exceeds the 65536 character limit of a GitHub post. I'll give a representative failure of each class; the others looked pretty much the same.
Error/failure representatives:
Expected behavior
Tests should pass.