Skip to content

Commit ed9f17f

Browse files
MAINT: Update handling of test/optional dependencies (#1357)
1 parent 4345e7a commit ed9f17f

File tree

23 files changed

+131
-92
lines changed

23 files changed

+131
-92
lines changed

.gitattributes

Lines changed: 0 additions & 1 deletion
This file was deleted.

.github/workflows/ci.yaml

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defaults:
1717

1818
jobs:
1919
test:
20-
name: Test on ${{ matrix.os }}, Python ${{ matrix.python-version }}, OpenMM ${{ matrix.openmm }}, OpenEye ${{ matrix.openeye }}, RDKit ${{ matrix.rdkit }}, NAGL ${{ matrix.nagl }}
20+
name: Test on ${{ matrix.os }}, Python ${{ matrix.python-version }}, OpenMM ${{ matrix.openmm }}, OpenEye ${{ matrix.openeye }}, RDKit ${{ matrix.rdkit }}, AmberTools ${{ matrix.ambertools }}, NAGL ${{ matrix.nagl }}
2121
runs-on: ${{ matrix.os }}
2222
strategy:
2323
matrix:
@@ -33,6 +33,9 @@ jobs:
3333
- false
3434
rdkit:
3535
- true
36+
ambertools:
37+
- true
38+
- false
3639
nagl:
3740
- true
3841
- false
@@ -41,6 +44,8 @@ jobs:
4144
exclude:
4245
- python-version: "3.13"
4346
openeye: true
47+
- ambertools: false
48+
openeye: false
4449

4550
env:
4651
OE_LICENSE: ${{ github.workspace }}/oe_license.txt
@@ -75,15 +80,21 @@ jobs:
7580
- name: Install RDKit
7681
if: ${{ matrix.rdkit == true }}
7782
run: |
78-
micromamba install rdkit -c conda-forge
83+
micromamba install rdkit "ambertools =24" intermol -c conda-forge
84+
85+
- name: Remove AmberTools
86+
if: ${{ matrix.ambertools == false }}
87+
run: |
88+
micromamba remove ambertools parmed
89+
micromamba install "packmol >=20.15.0" "lammps>=2024" "numpy>=2.3"
7990
8091
- name: Install OpenFF NAGL
8192
if: ${{ matrix.nagl == true }}
8293
run: |
8394
micromamba install openff-nagl -c conda-forge
8495
8596
- name: Install Python <3.13 dependencies
86-
if: ${{ matrix.python-version != '3.13' }}
97+
if: ${{ matrix.python-version != '3.13' && matrix.ambertools == true }}
8798
run: micromamba install --file devtools/conda-envs/test_not_py313.yaml python=${{ matrix.python-version }}
8899

89100
- name: Install package

.pre-commit-config.yaml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ repos:
1212
hooks:
1313
- id: add-trailing-comma
1414
- repo: https://github.com/astral-sh/ruff-pre-commit
15-
rev: v0.14.2
15+
rev: v0.14.3
1616
hooks:
1717
- id: ruff
1818
args: ["--fix"]
@@ -39,12 +39,6 @@ repos:
3939
hooks:
4040
- id: nbstripout
4141
files: ^examples
42-
- repo: https://github.com/asottile/pyupgrade
43-
rev: v3.21.0
44-
hooks:
45-
- id: pyupgrade
46-
args:
47-
- --py310-plus
4842
- repo: https://github.com/tox-dev/pyproject-fmt
4943
rev: v2.11.0
5044
hooks:

devtools/conda-envs/dev_env.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ dependencies:
1414
- ambertools =24
1515
# Optional features
1616
- openmm
17-
# smirnoff-plugins =2024
18-
# de-forcefields # add back after smirnoff-plugins update
17+
- smirnoff-plugins =2025
18+
- de-forcefields
1919
- openff-nagl
2020
- openff-nagl-models
21-
- mbuild =1
21+
- mbuild-base =1
2222
- foyer =1
2323
- gmso ~=0.12
2424
- nglview

devtools/conda-envs/docs_env.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ dependencies:
88
- setuptools !=76.0.0
99
- versioningit
1010
- pip
11-
- numpy =1
11+
- numpy =2
1212
- pydantic >=2,<2.12
1313
- openff-toolkit-base =0.17
1414
- openmm
15-
- mbuild
15+
- mbuild-base =1
1616
- foyer =1
1717
- nglview
1818
- pyedr

devtools/conda-envs/examples_env.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ dependencies:
77
# Core
88
- python
99
- versioningit
10-
- numpy
10+
- numpy =2.2
1111
- pydantic >=2,<2.12
1212
# OpenFF stack
1313
- openff-toolkit-base =0.17
@@ -16,7 +16,7 @@ dependencies:
1616
# Optional features
1717
- openff-nagl
1818
- openff-nagl-models
19-
- mbuild
19+
- mbuild-base
2020
- foyer
2121
- nglview
2222
# Drivers

devtools/conda-envs/test_env.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ dependencies:
1010
# OpenFF stack
1111
- openff-toolkit-base =0.17
1212
- openff-units
13-
- ambertools =24
1413
# Optional features
1514
- openmm
1615
- nglview
@@ -19,7 +18,6 @@ dependencies:
1918
- pyedr
2019
# Testing
2120
- mdtraj
22-
- intermol
2321
- jax
2422
- pytest
2523
- pytest-cov

devtools/conda-envs/test_not_py313.yaml

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,17 @@ dependencies:
1010
# OpenFF stack
1111
- openff-toolkit-base =0.17
1212
- openff-units
13-
- ambertools =24
1413
# Optional features
1514
- openmm
16-
- smirnoff-plugins =2024
17-
# de-forcefields # add back after smirnoff-plugins update
15+
- smirnoff-plugins =2025
16+
- de-forcefields
1817
# https://github.com/mosdef-hub/foyer/pull/574
19-
# https://github.com/conda-forge/mbuild-feedstock/issues/46
20-
# https://github.com/conda-forge/mbuild-feedstock/pull/49
21-
# mbuild =1
18+
- mbuild-base =1
2219
- foyer =1
2320
- nglview
2421
# Drivers
2522
- gromacs
26-
- lammps
23+
# lammps
2724
- pyedr
2825
# Testing
2926
- mdtraj

openff/interchange/_tests/interoperability_tests/internal/test_amber.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import numpy as np
2-
import parmed
32
import pytest
43
from openff.toolkit import ForceField, Molecule, unit
54
from openff.utilities import (
@@ -22,6 +21,8 @@
2221
class TestAmber:
2322
@pytest.mark.skip(reason="Need replacement route to reference positions")
2423
def test_inpcrd(self, sage):
24+
parmed = pytest.importorskip("parmed")
25+
2526
mol = Molecule.from_smiles(10 * "C")
2627
mol.name = "HPER"
2728
mol.generate_conformers(n_conformers=1)
@@ -129,6 +130,7 @@ def test_single_residue_system_residue_name(
129130
ethanol,
130131
patch_residue_name,
131132
):
133+
parmed = pytest.importorskip("parmed")
132134
if patch_residue_name:
133135
for atom in ethanol.atoms:
134136
atom.metadata["residue_name"] = "YUP"

openff/interchange/_tests/interoperability_tests/internal/test_gromacs.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from importlib import resources
22

33
import numpy
4-
import parmed
54
import pytest
65
from openff.toolkit import ForceField, Molecule, Quantity, Topology, unit
76
from openff.toolkit.typing.engines.smirnoff import VirtualSiteHandler
@@ -25,13 +24,17 @@
2524
import openmm.unit
2625

2726

27+
@skip_if_missing("intermol")
2828
@skip_if_missing("mdtraj")
2929
@skip_if_missing("openmm")
3030
@needs_gmx
3131
class TestGROMACSGROFile:
32-
_INTERMOL_PATH = resources.files(
33-
"intermol.tests.gromacs.unit_tests",
34-
)
32+
try:
33+
_INTERMOL_PATH = resources.files(
34+
"intermol.tests.gromacs.unit_tests",
35+
)
36+
except ImportError:
37+
_INTERMOL_PATH = None
3538

3639
@skip_if_missing("intermol")
3740
def test_load_gro(self):
@@ -54,6 +57,7 @@ def test_load_gro(self):
5457
assert numpy.allclose(box, openmm_box)
5558

5659
@skip_if_missing("intermol")
60+
@pytest.mark.skip("don't run parmed tests")
5761
def test_load_gro_nonstandard_precision(self):
5862
file = self._INTERMOL_PATH / "lj3_bulk/lj3_bulk.gro"
5963

@@ -126,8 +130,9 @@ def test_simple_roundtrip(self, sage, smiles, reader):
126130
},
127131
)
128132

129-
@skip_if_missing("parmed")
133+
@pytest.mark.skip("don't run parmed tests")
130134
def test_num_impropers(self, sage):
135+
parmed = pytest.importorskip("parmed")
131136
out = Interchange.from_smirnoff(
132137
sage,
133138
MoleculeWithConformer.from_smiles("CC1=CC=CC=C1").to_topology(),
@@ -174,12 +179,14 @@ def test_unsupported_mixing_rule(self, ethanol_top, sage):
174179
interchange.to_top("out.top")
175180

176181
@pytest.mark.slow
182+
@pytest.mark.skip("don't run parmed tests")
177183
@skip_if_missing("openmm")
178184
def test_residue_info(self, sage):
179185
"""Test that residue information is passed through to .top files."""
180-
import parmed
181186
from openff.units.openmm import from_openmm
182187

188+
parmed = pytest.importorskip("parmed")
189+
183190
protein = get_protein("MainChain_HIE")
184191

185192
box_vectors = from_openmm(
@@ -272,6 +279,8 @@ def sage_with_monovalent_lone_pair(self, sage):
272279
@skip_if_missing("parmed")
273280
def test_sigma_hole_example(self, sage_with_sigma_hole):
274281
"""Test that a single-molecule sigma hole example runs"""
282+
parmed = pytest.importorskip("parmed")
283+
275284
molecule = MoleculeWithConformer.from_smiles("CCl", name="Chloromethane")
276285

277286
out = Interchange.from_smirnoff(

0 commit comments

Comments
 (0)