Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
368 changes: 368 additions & 0 deletions src/abinitio_pairwise.py

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion src/objective.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
logger.warning("OpenMM module import failed; check OpenMM package\n")

try:
from forcebalance.smirnoffio import AbInitio_SMIRNOFF, Liquid_SMIRNOFF, Vibration_SMIRNOFF, Hessian_SMIRNOFF, OptGeoTarget_SMIRNOFF, TorsionProfileTarget_SMIRNOFF, smirnoff_analyze_parameter_coverage
from forcebalance.smirnoffio import AbInitio_SMIRNOFF, AbInitioPairwise_SMIRNOFF, Liquid_SMIRNOFF, Vibration_SMIRNOFF, Hessian_SMIRNOFF, OptGeoTarget_SMIRNOFF, TorsionProfileTarget_SMIRNOFF, smirnoff_analyze_parameter_coverage
except:
logger.warning(traceback.format_exc())
logger.warning("SMIRNOFF module import failed; check SMIRNOFF package\n")
Expand Down Expand Up @@ -90,6 +90,7 @@
'ABINITIO_TINKER':AbInitio_TINKER,
'ABINITIO_OPENMM':AbInitio_OpenMM,
'ABINITIO_SMIRNOFF':AbInitio_SMIRNOFF,
'ABINITIOPAIRWISE_SMIRNOFF':AbInitioPairwise_SMIRNOFF,
'ABINITIO_AMBER':AbInitio_AMBER,
'ABINITIO_INTERNAL':AbInitio_Internal,
'VIBRATION_TINKER':Vibration_TINKER,
Expand Down
19 changes: 19 additions & 0 deletions src/smirnoffio.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import os
from forcebalance import BaseReader
from forcebalance.abinitio import AbInitio
from forcebalance.abinitio_pairwise import AbInitioPairwise
from forcebalance.binding import BindingEnergy
from forcebalance.liquid import Liquid
from forcebalance.interaction import Interaction
Expand Down Expand Up @@ -833,6 +834,24 @@ def submit_jobs(self, mvals, AGrad=False, AHess=False):
# we update the self.pgrads here so it's not overwritten in rtarget.py
smirnoff_update_pgrads(self)

class AbInitioPairwise_SMIRNOFF(AbInitioPairwise):
""" Pairwise energy matching using OpenMM. """
def __init__(self,options,tgt_opts,forcefield):
## Default file names for coordinates and key file.
self.set_option(tgt_opts,'pdb',default="conf.pdb")
# List of .mol2 files for SMIRNOFF to set up the system
self.set_option(tgt_opts,'mol2',forceprint=True)
self.set_option(tgt_opts,'coords',default="all.gro")
self.set_option(tgt_opts,'openmm_precision','precision',default="double", forceprint=True)
self.set_option(tgt_opts,'openmm_platform','platname',default="Reference", forceprint=True)
self.engine_ = SMIRNOFF
## Initialize base class.
super(AbInitioPairwise_SMIRNOFF,self).__init__(options,tgt_opts,forcefield)

def submit_jobs(self, mvals, AGrad=False, AHess=False):
# we update the self.pgrads here so it's not overwritten in rtarget.py
smirnoff_update_pgrads(self)

class Vibration_SMIRNOFF(Vibration):
""" Vibrational frequency matching using using SMIRNOFF format powered by OpenMM. """
def __init__(self,options,tgt_opts,forcefield):
Expand Down
40 changes: 40 additions & 0 deletions src/tests/files/forcefield/ethanol-smirnoff.offxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Minimal SMIRNOFF force field for ethanol (CH3-CH2-OH) unit tests.
Parameters derived from Sage (OpenFF 2.3.0), subset for C/H/O only.
Charges assigned via NAGLCharges model openff-gnn-am1bcc-1.0.0.pt.
Bond b1 (C-C) and b14 (C-O) keep parameterize attributes for ForceBalance. -->
<SMIRNOFF version="0.3" aromaticity_model="OEAroModel_MDL">
<Author>The Open Force Field Initiative</Author>
<Date>2026-01-02</Date>
<Constraints version="0.3">
<Constraint smirks="[#1:1]-[*:2]" id="c1"></Constraint>
</Constraints>
<Bonds version="0.4" potential="harmonic" fractional_bondorder_method="AM1-Wiberg" fractional_bondorder_interpolation="linear">
<Bond smirks="[#6X4:1]-[#6X4:2]" id="b1" length="1.525970013793 * angstrom ** 1" k="457.9258198725 * angstrom ** -2 * kilocalorie_per_mole ** 1" parameterize="k, length"></Bond>
<Bond smirks="[#6:1]-[#8:2]" id="b14" length="1.422597694743 * angstrom ** 1" k="394.308606076 * angstrom ** -2 * kilocalorie_per_mole ** 1" parameterize="length"></Bond>
<Bond smirks="[#6X4:1]-[#1:2]" id="b84" length="1.092445809108 * angstrom ** 1" k="680.7664447835 * angstrom ** -2 * kilocalorie_per_mole ** 1"></Bond>
<Bond smirks="[#8:1]-[#1:2]" id="b88" length="0.9711625418245 * angstrom ** 1" k="1141.303841414 * angstrom ** -2 * kilocalorie_per_mole ** 1"></Bond>
</Bonds>
<Angles version="0.3" potential="harmonic">
<Angle smirks="[*:1]~[#6X4:2]-[*:3]" angle="109.6505556522 * degree ** 1" k="99.69215181429 * kilocalorie_per_mole ** 1 * radian ** -2" id="a1"></Angle>
<Angle smirks="[#1:1]-[#6X4:2]-[#1:3]" angle="108.0050010884 * degree ** 1" k="39.43190954937 * kilocalorie_per_mole ** 1 * radian ** -2" id="a2"></Angle>
<Angle smirks="[#1:1]-[#8:2]-[*:3]" angle="108.6776125931 * degree ** 1" k="208.3323698809 * kilocalorie_per_mole ** 1 * radian ** -2" id="a28a"></Angle>
</Angles>
<ProperTorsions version="0.4" potential="k*(1+cos(periodicity*theta-phase))" default_idivf="auto" fractional_bondorder_method="AM1-Wiberg" fractional_bondorder_interpolation="linear">
<Proper smirks="[#1:1]-[#6X4:2]-[#6X4:3]-[#1:4]" periodicity1="3" phase1="0.0 * degree ** 1" id="t3" k1="0.2392094731239 * kilocalorie ** 1 * mole ** -1" idivf1="1.0"></Proper>
<Proper smirks="[#1:1]-[#6X4:2]-[#6X4:3]-[#8X2:4]" periodicity1="3" periodicity2="1" phase1="0.0 * degree ** 1" phase2="0.0 * degree ** 1" id="t9" k1="0.1007185121278 * kilocalorie ** 1 * mole ** -1" k2="0.4345168281108 * kilocalorie ** 1 * mole ** -1" idivf1="1.0" idivf2="1.0"></Proper>
<Proper smirks="[*:1]-[#6X4:2]-[#8X2:3]-[#1:4]" periodicity1="3" phase1="0.0 * degree ** 1" id="t93" k1="1.270955113618 * kilocalorie ** 1 * mole ** -1" idivf1="3.0"></Proper>
<Proper smirks="[#6X4:1]-[#6X4:2]-[#8X2H1:3]-[#1:4]" periodicity1="3" periodicity2="1" phase1="0.0 * degree ** 1" phase2="0.0 * degree ** 1" id="t94" k1="0.4017369753905 * kilocalorie ** 1 * mole ** -1" k2="0.2405111530649 * kilocalorie ** 1 * mole ** -1" idivf1="1.0" idivf2="1.0"></Proper>
</ProperTorsions>
<ImproperTorsions version="0.3" potential="k*(1+cos(periodicity*theta-phase))" default_idivf="auto"></ImproperTorsions>
<vdW version="0.4" potential="Lennard-Jones-12-6" combining_rules="Lorentz-Berthelot" scale12="0.0" scale13="0.0" scale14="0.5" scale15="1.0" cutoff="9.0 * angstrom ** 1" switch_width="1.0 * angstrom ** 1" periodic_method="cutoff" nonperiodic_method="no-cutoff">
<Atom smirks="[#1:1]-[#6X4]" epsilon="0.01336628116185 * kilocalorie ** 1 * mole ** -1" id="n2" rmin_half="1.495082464255 * angstrom ** 1"></Atom>
<Atom smirks="[#1:1]-[#6X4]-[#7,#8,#9,#16,#17,#35]" epsilon="0.01891997418601 * kilocalorie ** 1 * mole ** -1" id="n3" rmin_half="1.435967812686 * angstrom ** 1"></Atom>
<Atom smirks="[#1:1]-[#8]" epsilon="1.232058709465e-05 * kilocalorie ** 1 * mole ** -1" id="n12" rmin_half="0.2991902460601 * angstrom ** 1"></Atom>
<Atom smirks="[#6X4:1]" epsilon="0.1205698919337 * kilocalorie ** 1 * mole ** -1" id="n16" rmin_half="1.901434475347 * angstrom ** 1"></Atom>
<Atom smirks="[#8X2H1+0:1]" epsilon="0.1353608645661 * kilocalorie ** 1 * mole ** -1" id="n19" rmin_half="1.697006198763 * angstrom ** 1"></Atom>
</vdW>
<Electrostatics version="0.4" scale12="0.0" scale13="0.0" scale14="0.8333333333" scale15="1.0" cutoff="9.0 * angstrom ** 1" switch_width="0.0 * angstrom ** 1" periodic_potential="Ewald3D-ConductingBoundary" nonperiodic_potential="Coulomb" exception_potential="Coulomb"></Electrostatics>
<LibraryCharges version="0.3"></LibraryCharges>
<NAGLCharges version="0.3" model_file="openff-gnn-am1bcc-1.0.0.pt" model_file_hash="7981e7f5b0b1e424c9e10a40d9e7606d96dcd3dd2b095cb4eeff6829f92238ee"></NAGLCharges>
</SMIRNOFF>
60 changes: 60 additions & 0 deletions src/tests/files/targets/ethanol-pairwise/all.gro
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
Ethanol conformation 1
9
1ETH C1 1 0.000 0.000 0.000
1ETH C2 2 0.152 0.000 0.000
1ETH O 3 0.206 0.124 0.000
1ETH HO 4 0.258 0.124 -0.089
1ETH H1 5 -0.039 0.103 0.000
1ETH H2 6 -0.039 -0.051 0.089
1ETH H3 7 -0.039 -0.051 -0.089
1ETH H4 8 0.191 -0.051 0.089
1ETH H5 9 0.191 -0.051 -0.089
2.00000 2.00000 2.00000
Ethanol conformation 2
9
1ETH C1 1 0.000 0.000 0.000
1ETH C2 2 0.160 0.000 0.000
1ETH O 3 0.214 0.124 0.000
1ETH HO 4 0.266 0.124 -0.089
1ETH H1 5 -0.039 0.103 0.000
1ETH H2 6 -0.039 -0.051 0.089
1ETH H3 7 -0.039 -0.051 -0.089
1ETH H4 8 0.199 -0.051 0.089
1ETH H5 9 0.199 -0.051 -0.089
2.00000 2.00000 2.00000
Ethanol conformation 3
9
1ETH C1 1 0.000 0.000 0.000
1ETH C2 2 0.145 0.000 0.000
1ETH O 3 0.199 0.124 0.000
1ETH HO 4 0.251 0.124 -0.089
1ETH H1 5 -0.039 0.103 0.000
1ETH H2 6 -0.039 -0.051 0.089
1ETH H3 7 -0.039 -0.051 -0.089
1ETH H4 8 0.184 -0.051 0.089
1ETH H5 9 0.184 -0.051 -0.089
2.00000 2.00000 2.00000
Ethanol conformation 4
9
1ETH C1 1 0.000 0.000 0.000
1ETH C2 2 0.156 0.000 0.000
1ETH O 3 0.210 0.124 0.000
1ETH HO 4 0.262 0.124 -0.089
1ETH H1 5 -0.039 0.103 0.000
1ETH H2 6 -0.039 -0.051 0.089
1ETH H3 7 -0.039 -0.051 -0.089
1ETH H4 8 0.195 -0.051 0.089
1ETH H5 9 0.195 -0.051 -0.089
2.00000 2.00000 2.00000
Ethanol conformation 5
9
1ETH C1 1 0.000 0.000 0.000
1ETH C2 2 0.148 0.000 0.000
1ETH O 3 0.202 0.124 0.000
1ETH HO 4 0.254 0.124 -0.089
1ETH H1 5 -0.039 0.103 0.000
1ETH H2 6 -0.039 -0.051 0.089
1ETH H3 7 -0.039 -0.051 -0.089
1ETH H4 8 0.187 -0.051 0.089
1ETH H5 9 0.187 -0.051 -0.089
2.00000 2.00000 2.00000
21 changes: 21 additions & 0 deletions src/tests/files/targets/ethanol-pairwise/conf.pdb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
REMARK Ethanol for pairwise SMIRNOFF test
CRYST1 20.000 20.000 20.000 90.00 90.00 90.00 P 1 1
ATOM 1 C1 ETH A 1 0.000 0.000 0.000 1.00 0.00 C
ATOM 2 C2 ETH A 1 1.520 0.000 0.000 1.00 0.00 C
ATOM 3 O ETH A 1 2.061 1.244 0.000 1.00 0.00 O
ATOM 4 HO ETH A 1 2.584 1.244 -0.891 1.00 0.00 H
ATOM 5 H1 ETH A 1 -0.388 1.028 0.000 1.00 0.00 H
ATOM 6 H2 ETH A 1 -0.389 -0.514 0.891 1.00 0.00 H
ATOM 7 H3 ETH A 1 -0.389 -0.514 -0.891 1.00 0.00 H
ATOM 8 H4 ETH A 1 1.909 -0.508 0.893 1.00 0.00 H
ATOM 9 H5 ETH A 1 1.909 -0.508 -0.893 1.00 0.00 H
CONECT 1 2 5 6 7
CONECT 2 1 3 8 9
CONECT 3 2 4
CONECT 4 3
CONECT 5 1
CONECT 6 1
CONECT 7 1
CONECT 8 2
CONECT 9 2
END
25 changes: 25 additions & 0 deletions src/tests/files/targets/ethanol-pairwise/ethanol.mol2
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
@<TRIPOS>MOLECULE
ethanol
9 8 0 0 0
SMALL
GASTEIGER

@<TRIPOS>ATOM
1 C1 0.0000 0.0000 0.0000 C.3 1 ETH1 0.0000
2 C2 1.5200 0.0000 0.0000 C.3 1 ETH1 0.0000
3 O 2.0610 1.2440 0.0000 O.3 1 ETH1 0.0000
4 HO 2.5840 1.2440 -0.8910 H 1 ETH1 0.0000
5 H1 -0.3880 1.0280 0.0000 H 1 ETH1 0.0000
6 H2 -0.3890 -0.5140 0.8910 H 1 ETH1 0.0000
7 H3 -0.3890 -0.5140 -0.8910 H 1 ETH1 0.0000
8 H4 1.9090 -0.5080 0.8930 H 1 ETH1 0.0000
9 H5 1.9090 -0.5080 -0.8930 H 1 ETH1 0.0000
@<TRIPOS>BOND
1 1 2 1
2 1 5 1
3 1 6 1
4 1 7 1
5 2 3 1
6 2 8 1
7 2 9 1
8 3 4 1
23 changes: 23 additions & 0 deletions src/tests/files/targets/ethanol-pairwise/ethanol.sdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

RDKit 3D

9 8 0 0 0 0 0 0 0 0999 V2000
0.8817 -0.0448 -0.0147 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.5817 -0.3757 0.0510 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.3500 0.7581 0.1762 O 0 0 0 0 0 0 0 0 0 0 0 0
1.2650 0.1742 1.0122 H 0 0 0 0 0 0 0 0 0 0 0 0
1.0165 0.8705 -0.6090 H 0 0 0 0 0 0 0 0 0 0 0 0
1.4764 -0.8945 -0.3919 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.7854 -0.9968 0.9683 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.8355 -1.0035 -0.8159 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.0869 1.5126 -0.3762 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
1 4 1 0
1 5 1 0
1 6 1 0
2 7 1 0
2 8 1 0
3 9 1 0
M END
$$$$
20 changes: 20 additions & 0 deletions src/tests/files/targets/ethanol-pairwise/qdata.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
JOB 0
COORDS 0.0000000000e+00 0.0000000000e+00 0.0000000000e+00 2.8723848542e+00 0.0000000000e+00 0.0000000000e+00 3.8947270951e+00 2.3508202360e+00 0.0000000000e+00 4.8830542522e+00 2.3508202360e+00 -1.6837466481e+00 -7.3321402858e-01 1.9426392304e+00 0.0000000000e+00 -7.3510375545e-01 -9.7131961518e-01 1.6837466481e+00 -7.3510375545e-01 -9.7131961518e-01 -1.6837466481e+00 3.6074886097e+00 -9.5998125391e-01 1.6875261019e+00 3.6074886097e+00 -9.5998125391e-01 -1.6875261019e+00
ENERGY -1.549012000000e+02

JOB 1
COORDS 0.0000000000e+00 0.0000000000e+00 0.0000000000e+00 2.8723848542e+00 0.0000000000e+00 0.0000000000e+00 3.8947270951e+00 2.3508202360e+00 0.0000000000e+00 3.1302955502e+00 3.1130730155e+00 -1.6267785521e+00 -7.3321402858e-01 1.9426392304e+00 0.0000000000e+00 -7.3510375545e-01 -9.7131961518e-01 1.6837466481e+00 -7.3510375545e-01 -9.7131961518e-01 -1.6837466481e+00 3.6074886097e+00 -9.5998125391e-01 1.6875261019e+00 3.6074886097e+00 -9.5998125391e-01 -1.6875261019e+00
ENERGY -1.548978000000e+02

JOB 2
COORDS 0.0000000000e+00 0.0000000000e+00 0.0000000000e+00 2.8723848542e+00 0.0000000000e+00 0.0000000000e+00 3.8947270951e+00 2.3508202360e+00 0.0000000000e+00 2.2991588662e+00 3.4745239368e+00 5.6968095959e-02 -7.3321402858e-01 1.9426392304e+00 0.0000000000e+00 -7.3510375545e-01 -9.7131961518e-01 1.6837466481e+00 -7.3510375545e-01 -9.7131961518e-01 -1.6837466481e+00 3.6074886097e+00 -9.5998125391e-01 1.6875261019e+00 3.6074886097e+00 -9.5998125391e-01 -1.6875261019e+00
ENERGY -1.548934000000e+02

JOB 3
COORDS 0.0000000000e+00 0.0000000000e+00 0.0000000000e+00 2.8723848542e+00 0.0000000000e+00 0.0000000000e+00 3.8947270951e+00 2.3508202360e+00 0.0000000000e+00 3.2207808840e+00 3.0737220785e+00 1.6837466481e+00 -7.3321402858e-01 1.9426392304e+00 0.0000000000e+00 -7.3510375545e-01 -9.7131961518e-01 1.6837466481e+00 -7.3510375545e-01 -9.7131961518e-01 -1.6837466481e+00 3.6074886097e+00 -9.5998125391e-01 1.6875261019e+00 3.6074886097e+00 -9.5998125391e-01 -1.6875261019e+00
ENERGY -1.549002000000e+02

JOB 4
COORDS 0.0000000000e+00 0.0000000000e+00 0.0000000000e+00 2.8723848542e+00 0.0000000000e+00 0.0000000000e+00 3.8947270951e+00 2.3508202360e+00 0.0000000000e+00 4.9735395860e+00 2.3114692990e+00 1.6267785521e+00 -7.3321402858e-01 1.9426392304e+00 0.0000000000e+00 -7.3510375545e-01 -9.7131961518e-01 1.6837466481e+00 -7.3510375545e-01 -9.7131961518e-01 -1.6837466481e+00 3.6074886097e+00 -9.5998125391e-01 1.6875261019e+00 3.6074886097e+00 -9.5998125391e-01 -1.6875261019e+00
ENERGY -1.548956000000e+02

100 changes: 100 additions & 0 deletions src/tests/test_abinitio_pairwise.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
"""Tests for AbInitioPairwise and AbInitioPairwise_SMIRNOFF targets."""
from __future__ import absolute_import

import os
import sys
import shutil

import numpy as np
import pytest

import forcebalance
import forcebalance.smirnoffio
from .__init__ import ForceBalanceTestCase
from .test_target import TargetTests
from .test_system import skip_openff_py39

has_openff_toolkit = True
try:
import openff.toolkit
except ModuleNotFoundError:
has_openff_toolkit = False

try:
try:
from openmm.app import *
from openmm import *
from openmm.unit import *
except ImportError:
from simtk.openmm.app import *
from simtk.openmm import *
from simtk.unit import *
no_openmm = False
except ImportError:
no_openmm = True


@skip_openff_py39
@pytest.mark.skipif(
not has_openff_toolkit, reason="openff.toolkit not found"
)
@pytest.mark.skipif(no_openmm, reason="OpenMM not found")
class TestAbInitioPairwise_SMIRNOFF(TargetTests):
"""Test AbInitioPairwise_SMIRNOFF using a 5-conformation ethanol dataset."""

def setup_method(self, method):
super(TestAbInitioPairwise_SMIRNOFF, self).setup_method(method)
test_files_root = os.path.join(os.path.dirname(__file__), 'files')
self.options['root'] = test_files_root
os.chdir(test_files_root)
self.options.update({
'jobtype': 'NEWTON',
'forcefield': ['ethanol-smirnoff.offxml'],
})
self.tgt_opt.update({
'type': 'ABINITIOPAIRWISE_SMIRNOFF',
'name': 'ethanol-pairwise',
'mol2': ['ethanol.sdf'],
'energy': True,
'force': False,
'w_energy': 1.0,
'w_force': 0.0,
})
self.ff = forcebalance.forcefield.FF(self.options)
self.mvals = np.array([0.0] * self.ff.np)

self.target = forcebalance.smirnoffio.AbInitioPairwise_SMIRNOFF(
self.options, self.tgt_opt, self.ff
)

def teardown_method(self):
shutil.rmtree('temp', ignore_errors=True)
super(TestAbInitioPairwise_SMIRNOFF, self).teardown_method()

def test_force_raises(self):
"""Enabling force fitting should raise RuntimeError."""
bad_opt = self.tgt_opt.copy()
bad_opt['force'] = True
with pytest.raises(RuntimeError):
forcebalance.smirnoffio.AbInitioPairwise_SMIRNOFF(
self.options, bad_opt, self.ff
)

def test_pairwise_pairs_count(self):
"""Number of pairs should be n*(n-1)/2 for n snapshots."""
ns = self.target.ns
expected_pairs = ns * (ns - 1) // 2
assert len(self.target.eqm_pairs) == expected_pairs
assert len(self.target.boltz_wt_pairs) == expected_pairs

def test_pairwise_weights_sum_to_one(self):
"""Boltzmann weights for pairs should be normalized."""
assert abs(self.target.boltz_wt_pairs.sum() - 1.0) < 1e-10

def test_pairwise_energy_differences(self):
"""Pairwise QM energy differences should match manual computation."""
import itertools
eqm = self.target.eqm
for i, (a, b) in enumerate(itertools.combinations(range(self.target.ns), 2)):
expected = eqm[a] - eqm[b]
assert abs(self.target.eqm_pairs[i] - expected) < 1e-10
1 change: 1 addition & 0 deletions src/tests/test_objective.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def test_no_unlisted_classes_derived_from_Target(self):
# Basically, platform-independent targets are excluded.
exclude = ['Target',
'AbInitio',
'AbInitioPairwise',
'Interaction',
'Interaction_GMX',
'Liquid',
Expand Down
Loading