From 0a2d6dd67d6f23975c61c583ed7757819f923e31 Mon Sep 17 00:00:00 2001 From: Kalev Takkis Date: Thu, 6 Aug 2026 10:26:31 +0100 Subject: [PATCH] build: lower openmm floor to 8.3 openmm is not imported by HIPPO. It is carried because molparse's protonate.py imports openmm.app and pdbfixer lazily inside a function without declaring either dependency. The >=8.4 floor was incidental -- openmm was originally unpinned, and the constraint arrived in 86d0ff3 ("feat: new dependency management toolchain") as part of a bulk pin-to-current sweep, not because any API required it. pdbfixer itself only needs openmm>=8.2, and the APIs molparse uses (PME, ForceField, Modeller, PDBFile, Simulation, PDBFixer) long predate that. The floor mattered to users installing into conda/miniforge environments that already provide openmm 8.3.x: pip could not satisfy >=8.4 from the existing install and pulled a PyPI build over the top of theirs. It also excluded older Linux distributions, since 8.4+ wheels are manylinux_2_34 (glibc >= 2.34) where 8.3 is manylinux_2_27/2_28. Resolution is unaffected -- openmm still locks to 8.5.1, and the lockfile diff is the specifier line alone. Verified that a resolution constrained to openmm==8.3.1 now succeeds, and that an unconstrained install still takes 8.5.2. Not pinned exactly: only 8.5.x ships linux aarch64 wheels, which [tool.uv] required-environments demands. Co-Authored-By: Claude Opus 5 --- pyproject.toml | 11 +++++++++-- uv.lock | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7e30100..2fdb57c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "uv_build" [project] name = "xchem-hippo" -version = "2.0.3" +version = "2.0.4" authors = [ { name = "Max Winokan", email = "max@winokan.com" }, { name = "Kalev Takkis", email = "ktakkis@informaticsmatters.com" }, @@ -43,7 +43,14 @@ dependencies = [ "openpyxl>=3.1", "ipywidgets>=8.1", "networkx>=3.4", - "openmm>=8.4", + # Not imported by HIPPO -- carried for molparse, whose protonate.py imports + # openmm.app and pdbfixer lazily without declaring either. Floor is 8.3 + # rather than 8.4 (which was an incidental pin-to-current, not an API + # requirement) so conda-forge/miniforge users on 8.3.x are not forced into a + # PyPI build over the top of theirs. pdbfixer itself only needs >=8.2, and + # the APIs molparse uses predate both. Do not pin exactly: only 8.5.x ships + # linux aarch64 wheels, which [tool.uv] required-environments demands. + "openmm>=8.3", "apsw>=3.51", "python-louvain>=0.16", "psycopg[binary]>=3.3", diff --git a/uv.lock b/uv.lock index f058459..d45e1ca 100644 --- a/uv.lock +++ b/uv.lock @@ -3318,7 +3318,7 @@ wheels = [ [[package]] name = "xchem-hippo" -version = "2.0.3" +version = "2.0.4" source = { editable = "." } dependencies = [ { name = "apsw" }, @@ -3376,7 +3376,7 @@ requires-dist = [ { name = "neo4j", specifier = ">=6.1.0" }, { name = "networkx", specifier = ">=3.4" }, { name = "numpy", specifier = ">=2" }, - { name = "openmm", specifier = ">=8.4" }, + { name = "openmm", specifier = ">=8.3" }, { name = "openpyxl", specifier = ">=3.1" }, { name = "pandas", specifier = ">=2.3" }, { name = "pdbfixer", specifier = ">=1.12.0" },