From 8062e7268c39b04ed14d86b6d0fdc915c023008a Mon Sep 17 00:00:00 2001 From: IAlibay Date: Mon, 4 Mar 2024 11:31:51 +0000 Subject: [PATCH 1/5] Fix openmm compute platform selection for issues 739 and 704 --- openfe/protocols/openmm_afe/base.py | 27 ++++++++++++---- .../protocols/openmm_md/plain_md_methods.py | 10 +++--- .../openmm_rfe/_rfe_utils/__init__.py | 1 - .../protocols/openmm_rfe/equil_rfe_methods.py | 12 ++++--- .../omm_compute.py} | 32 ++++++++++++++++--- openfe/protocols/openmm_utils/omm_settings.py | 16 ++++++++-- .../test_openmm_equil_rfe_protocols.py | 6 ++-- .../tests/protocols/test_rfe_tokenization.py | 2 +- .../test_solvation_afe_tokenization.py | 2 +- 9 files changed, 80 insertions(+), 28 deletions(-) rename openfe/protocols/{openmm_rfe/_rfe_utils/compute.py => openmm_utils/omm_compute.py} (56%) diff --git a/openfe/protocols/openmm_afe/base.py b/openfe/protocols/openmm_afe/base.py index 4e201d220..448cfe323 100644 --- a/openfe/protocols/openmm_afe/base.py +++ b/openfe/protocols/openmm_afe/base.py @@ -59,11 +59,11 @@ IntegratorSettings, LambdaSettings, MultiStateOutputSettings, ThermoSettings, OpenFFPartialChargeSettings, ) -from openfe.protocols.openmm_rfe._rfe_utils import compute from openfe.protocols.openmm_md.plain_md_methods import PlainMDProtocolUnit from ..openmm_utils import ( settings_validation, system_creation, - multistate_analysis, charge_generation + multistate_analysis, charge_generation, + omm_compute, ) from openfe.utils import without_oechem_backend @@ -175,6 +175,7 @@ def _pre_equilibrate( settings : dict[str, SettingsBaseModel] A dictionary of settings objects. Expects the following entries: + * `forcefield_settings` * `engine_settings` * `thermo_settings` * `integrator_settings` @@ -189,8 +190,12 @@ def _pre_equilibrate( Equilibrated system positions """ # Prep the simulation object - platform = compute.get_openmm_platform( - settings['engine_settings'].compute_platform + # Restrict CPU count if running vacuum simulation + restrict_cpu = settings['forcefield_settings'].nonbonded_method.lower() == 'nocutoff' + platform = omm_compute.get_openmm_platform( + platform_name=settings['engine_settings'].compute_platform, + gpu_device_index=settings['engine_settings'].gpu_device_index, + restrict_cpu_count=restrict_cpu ) integrator = openmm.LangevinMiddleIntegrator( @@ -710,6 +715,7 @@ def _get_reporter( def _get_ctx_caches( self, + forcefield_settings: OpenMMSystemGeneratorFFSettings, engine_settings: OpenMMEngineSettings ) -> tuple[openmmtools.cache.ContextCache, openmmtools.cache.ContextCache]: """ @@ -717,7 +723,8 @@ def _get_ctx_caches( Parameters ---------- - engine_settings : OpenMMEngineSettings, + forcefield_settings: OpenMMSystemGeneratorFFSettings + engine_settings : OpenMMEngineSettings Returns ------- @@ -726,8 +733,13 @@ def _get_ctx_caches( sampler_context_cache : openmmtools.cache.ContextCache The sampler state context cache. """ - platform = compute.get_openmm_platform( - engine_settings.compute_platform, + # Get the compute platform + # Set the number of CPUs to 1 if running a vacuum simulation + restrict_cpu = forcefield_settings.nonbonded_method.lower() == 'nocutoff' + platform = omm_compute.get_openmm_platform( + platform_name=engine_settings.compute_platform, + gpu_device_index=engine_settings.gpu_device_index, + restrict_cpu_count=restrict_cpu ) energy_context_cache = openmmtools.cache.ContextCache( @@ -1026,6 +1038,7 @@ def run(self, dry=False, verbose=True, try: # 12. Get context caches energy_ctx_cache, sampler_ctx_cache = self._get_ctx_caches( + settings['forcefield_settings'], settings['engine_settings'] ) diff --git a/openfe/protocols/openmm_md/plain_md_methods.py b/openfe/protocols/openmm_md/plain_md_methods.py index daff51553..d2798ba0d 100644 --- a/openfe/protocols/openmm_md/plain_md_methods.py +++ b/openfe/protocols/openmm_md/plain_md_methods.py @@ -43,10 +43,9 @@ ) from openff.toolkit.topology import Molecule as OFFMolecule -from openfe.protocols.openmm_rfe._rfe_utils import compute from openfe.protocols.openmm_utils import ( system_validation, settings_validation, system_creation, - charge_generation, + charge_generation, omm_compute ) logger = logging.getLogger(__name__) @@ -604,8 +603,11 @@ def run(self, *, dry=False, verbose=True, ) # 10. Get platform - platform = compute.get_openmm_platform( - protocol_settings.engine_settings.compute_platform + restrict_cpu = forcefield_settings.nonbonded_method.lower() == 'nocutoff' + platform = omm_compute.get_openmm_platform( + platform_name=protocol_settings.engine_settings.compute_platform, + gpu_device_index=protocol_settings.engine_settings.gpu_device_index, + restrict_cpu_count=restrict_cpu ) # 11. Set the integrator diff --git a/openfe/protocols/openmm_rfe/_rfe_utils/__init__.py b/openfe/protocols/openmm_rfe/_rfe_utils/__init__.py index 81fb48a67..b8cca820d 100644 --- a/openfe/protocols/openmm_rfe/_rfe_utils/__init__.py +++ b/openfe/protocols/openmm_rfe/_rfe_utils/__init__.py @@ -1,5 +1,4 @@ from . import ( - compute, lambdaprotocol, multistate, relative, diff --git a/openfe/protocols/openmm_rfe/equil_rfe_methods.py b/openfe/protocols/openmm_rfe/equil_rfe_methods.py index 879e3942f..0fb8ab6d6 100644 --- a/openfe/protocols/openmm_rfe/equil_rfe_methods.py +++ b/openfe/protocols/openmm_rfe/equil_rfe_methods.py @@ -63,7 +63,7 @@ ) from ..openmm_utils import ( system_validation, settings_validation, system_creation, - multistate_analysis, charge_generation + multistate_analysis, charge_generation, omm_compute, ) from . import _rfe_utils from ...utils import without_oechem_backend, log_system_probe @@ -896,9 +896,13 @@ def run(self, *, dry=False, verbose=True, bfactors=bfactors, ) - # 10. Get platform - platform = _rfe_utils.compute.get_openmm_platform( - protocol_settings.engine_settings.compute_platform + # 10. Get compute platform + # restrict to a single CPU if running vacuum + restrict_cpu = forcefield_settings.nonbonded_method.lower() == 'nocutoff' + platform = omm_compute.get_openmm_platform( + platform_name=protocol_settings.engine_settings.compute_platform, + gpu_device_index=protocol_settings.engine_settings.gpu_device_index, + restrict_cpu_count=restrict_cpu ) # 11. Set the integrator diff --git a/openfe/protocols/openmm_rfe/_rfe_utils/compute.py b/openfe/protocols/openmm_utils/omm_compute.py similarity index 56% rename from openfe/protocols/openmm_rfe/_rfe_utils/compute.py rename to openfe/protocols/openmm_utils/omm_compute.py index b3bee28f6..5fb9ac358 100644 --- a/openfe/protocols/openmm_rfe/_rfe_utils/compute.py +++ b/openfe/protocols/openmm_utils/omm_compute.py @@ -1,6 +1,7 @@ # This code is part of OpenFE and is licensed under the MIT license. # For details, see https://github.com/OpenFreeEnergy/openfe # Adapted Perses' perses.app.setup_relative_calculation.get_openmm_platform +from typing import Optional import warnings import logging @@ -8,16 +9,31 @@ logger = logging.getLogger(__name__) -def get_openmm_platform(platform_name=None): +def get_openmm_platform( + platform_name: Optional[str] = None, + gpu_device_index: Optional[list[int]] = None, + restrict_cpu_count: bool = False +): """ Return OpenMM's platform object based on given name. Setting to mixed precision if using CUDA or OpenCL. Parameters ---------- - platform_name : str, optional, default=None + platform_name : Optional[str] String with the platform name. If None, it will use the fastest platform supporting mixed precision. + Default ``None``. + gpu_device_index : Optional[list[str]] + GPU device index selection. If ``None`` the default OpenMM + GPU selection will be used. + See the `OpenMM platform properties documentation `_ + for more details. + Default ``None``. + restrict_cpu_count : bool + Optional hint to restrict the CPU count to 1 when + ``platform_name`` is CPU. This allows Protocols to ensure + that no large performance in cases like vacuum simulations. Returns ------- @@ -44,16 +60,22 @@ def get_openmm_platform(platform_name=None): # Set precision and properties name = platform.getName() if name in ['CUDA', 'OpenCL']: - platform.setPropertyDefaultValue( - 'Precision', 'mixed') + platform.setPropertyDefaultValue('Precision', 'mixed') + if gpu_device_index is not None: + index_list = ','.join(str(i) for i in gpu_device_index) + platform.setPropertyDefaultValue('DeviceIndex', index_list) + if name == 'CUDA': platform.setPropertyDefaultValue( 'DeterministicForces', 'true') if name != 'CUDA': - wmsg = (f"Non-GPU platform selected: {name}, this may significantly " + wmsg = (f"Non-CUDA platform selected: {name}, this may significantly " "impact simulation performance") warnings.warn(wmsg) logging.warning(wmsg) + if name == 'CPU' and restrict_cpu_count: + platform.setPropertyDefaultValue('Threads', '1') + return platform diff --git a/openfe/protocols/openmm_utils/omm_settings.py b/openfe/protocols/openmm_utils/omm_settings.py index fb9327a1e..a6d38e970 100644 --- a/openfe/protocols/openmm_utils/omm_settings.py +++ b/openfe/protocols/openmm_utils/omm_settings.py @@ -161,8 +161,20 @@ class OpenMMEngineSettings(SettingsBaseModel): compute_platform: Optional[str] = None """ - OpenMM compute platform to perform MD integration with. If None, will - choose fastest available platform. Default None. + OpenMM compute platform to perform MD integration with. If ``None``, will + choose fastest available platform. Default ``None``. + """ + gpu_device_index: Optional[list[int]] = None + """ + List of integer indices for the GPU device to select when + ``compute_platform`` is either set to ``CUDA`` or ``OpenCL``. + + If ``None``, the default OpenMM GPU selection behaviour is used. + + See the `OpenMM platform properties documentation `_ + for more details. + + Default ``None``. """ diff --git a/openfe/tests/protocols/test_openmm_equil_rfe_protocols.py b/openfe/tests/protocols/test_openmm_equil_rfe_protocols.py index 4f55b9738..67e2dc149 100644 --- a/openfe/tests/protocols/test_openmm_equil_rfe_protocols.py +++ b/openfe/tests/protocols/test_openmm_equil_rfe_protocols.py @@ -35,15 +35,15 @@ from openfe.protocols.openmm_rfe.equil_rfe_methods import ( _validate_alchemical_components, _get_alchemical_charge_difference ) -from openfe.protocols.openmm_utils import system_creation +from openfe.protocols.openmm_utils import system_creation, omm_compute from openfe.protocols.openmm_utils.charge_generation import ( HAS_NAGL, HAS_OPENEYE, HAS_ESPALOMA ) def test_compute_platform_warn(): - with pytest.warns(UserWarning, match="Non-GPU platform selected: CPU"): - openmm_rfe._rfe_utils.compute.get_openmm_platform('CPU') + with pytest.warns(UserWarning, match="Non-CUDA platform selected: CPU"): + omm_compute.get_openmm_platform('CPU') def test_append_topology(benzene_complex_system, toluene_complex_system): diff --git a/openfe/tests/protocols/test_rfe_tokenization.py b/openfe/tests/protocols/test_rfe_tokenization.py index bd79aef01..64386a300 100644 --- a/openfe/tests/protocols/test_rfe_tokenization.py +++ b/openfe/tests/protocols/test_rfe_tokenization.py @@ -39,7 +39,7 @@ def instance(self): class TestRelativeHybridTopologyProtocol(GufeTokenizableTestsMixin): cls = openmm_rfe.RelativeHybridTopologyProtocol - key = "RelativeHybridTopologyProtocol-15f565877e1c79e0a0e4fb473f3fc47a" + key = "RelativeHybridTopologyProtocol-3e5e01d5ce465ae89c5a278c8a765297" repr = f"<{key}>" @pytest.fixture() diff --git a/openfe/tests/protocols/test_solvation_afe_tokenization.py b/openfe/tests/protocols/test_solvation_afe_tokenization.py index 90bcc9fd2..84bf4d69a 100644 --- a/openfe/tests/protocols/test_solvation_afe_tokenization.py +++ b/openfe/tests/protocols/test_solvation_afe_tokenization.py @@ -49,7 +49,7 @@ def protocol_result(afe_solv_transformation_json): class TestAbsoluteSolvationProtocol(GufeTokenizableTestsMixin): cls = openmm_afe.AbsoluteSolvationProtocol - key = "AbsoluteSolvationProtocol-e503d3e7d083ad0dc00cc8abb013952d" + key = "AbsoluteSolvationProtocol-50d7b9eb53e18a7d4d9f5297b31b3f46" repr = f"<{key}>" @pytest.fixture() From a6e41f10382336bd5571711872a9a57c4a44964e Mon Sep 17 00:00:00 2001 From: IAlibay Date: Mon, 4 Mar 2024 11:36:20 +0000 Subject: [PATCH 2/5] Add rever entry --- news/compute_selection_fixes.rst | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 news/compute_selection_fixes.rst diff --git a/news/compute_selection_fixes.rst b/news/compute_selection_fixes.rst new file mode 100644 index 000000000..2403006da --- /dev/null +++ b/news/compute_selection_fixes.rst @@ -0,0 +1,27 @@ +**Added:** + +* OpenMMEngineSettings now has a `gpu_device_index` attribute + allowing users to pass through a list of ints to select the + GPU devices to run their simulations on. + +**Changed:** + +* `openfe.protocols.openmm_rfe._rfe_utils.compute` has been moved + to `openfe.protocols.openmm_utils.omm_compute`. + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* OpenMM CPU vacuum calculations now enforce the use of a single + CPU to avoid large performance losses. + +**Security:** + +* From 0405e859c9e6c399dae42f401532a15f6c885a9e Mon Sep 17 00:00:00 2001 From: IAlibay Date: Mon, 4 Mar 2024 11:45:12 +0000 Subject: [PATCH 3/5] fix typing --- devtools/data/MDProtocol_json_results.gz | Bin 0 -> 2583 bytes openfe/protocols/openmm_afe/base.py | 1 + 2 files changed, 1 insertion(+) create mode 100644 devtools/data/MDProtocol_json_results.gz diff --git a/devtools/data/MDProtocol_json_results.gz b/devtools/data/MDProtocol_json_results.gz new file mode 100644 index 0000000000000000000000000000000000000000..4783a567ad51f03475196c05be022c4b54199f59 GIT binary patch literal 2583 zcmV+y3h4D8iwFpevgKt0|4l?ta&L5RV{dFEV0PGrzZrjN5S5&qK zw?!oLB|h8$N@B-%*VY#!xim=QfLJb<5@WthE)_e0@7p^&Ly43nC8-}dxV2&PF`S+E z%+BumvnFbpWK0TeZ;&@>`e>jvITw{=NiHusU|AKi;6)l#qHaw4nU<0RD3q+++kQEUafe?#Qh+QSqBnm!4^i>`9>>{cPaCMM@cmTFW z`idF~_D*A2D5~8!Htbi=M(0_o$Pr8?rBw#CgxFzKwCUSVhtGoyq9mEK6asA(rJNNt zV}_2<_bN)ES#XG&PY5djqv;;9U*R zSzcs9slUy3C0H#`=#Y5R1k8BRu|;^TU9Rv2a3bt%+%v+dNasm@Qwx+(nCeaZ^pWp5zG<0`;~I``n0}AbD z?3J^rN;QbBo~i00onzJidI4Kt-l-{+JmAlzoElaYt@ov5Q3ND5B)@s<$*(LV@@bNb zubSsMqTQ)&ILzLS6amanQhB#??X+xyNX!$MaT6$1=RF65mST!i&KFepd5LtV3P3Xi z9g!&4d}sGO7mG|5wSWkYZdxr;mQTSdIiy3HCbf$4in_5c%^SvGcTgt$mShN7RX`z> zL0pNmM&$fry=eCf_R>Z-x&Wc0#WX^ zip~T-Eej>Hs*Tm0rRxQuXMo!)1-;b*XCQ_`io(%{y1)jlH4hYUsN*#?nQ}l4{Hol* zzGBcQ#0mJZUGa6FM|^gw20+4o5FAi1f{#@q#ddW~{Z917kW(=R0#}d{)IfINQ5l6= zhgWXKE0=h^%h zYgnoz+PEUU-b$2OLJI0RbalW{`NP2C3$u%OicaN=^*tpQE%NaZ=JpI1ckdv!b^LA1 zKD~U_R@z;v1GZ^7j^~aqVX5}c`NnZW80fi<4vPUAcwL6yK~Tf9>}v_?n7-{_L(r9R z&Nq)6JGSmG$9dnb;MnwxPQm{<%lz)KcCB%06>gE}{cthmKocyfrJRY8Cqz&pC<7hq^ zsXNop4-l+do%S3d9>E=?PggVEYbhTiDS_B7O3RFM6q-*4tj6&i!Hz^SW=A+gR(=#9 zP2?CO{RmZx#}mAHIGhpVj-VfYKtA>axyOP`^-rYi{pmz@jF^p75rd7bPGpayG0B3T zNWgy}ArgVC5gQ~4J48Cf9>wy=h+!vt82^Bh`o||RiHUe9e#8g^pX1{3~cPqx_VX>D`^DaJex!-bE}kPJ6|xWJSPT@o0t3knsE3&}z6 z5ua1Qw-|2@PJ3p;{9t4nchXsiyFYf$i^!4VF4jm?M#8&q$)-e*Lfe_3l9BZbLdgvF zYl@i3gy_)-iWRGin@FEfd?1!jA@Uq=&L3BlU1G&!!Zo`%Af6(cJVA@Nf1^z55F(0f zXF@42kVI&+w{N)k~+7V`4No8Qm^(UV?QP>6YEPb?~kI$hl-T^=+2QP81LbO>Ye zhC=e<->8k@wqUAFzfskqRKgk=n`PmiwbFAgfG7Di8QfH_O+eaA z7sJJpu{{XYHZ9#YpPg7;3(f_hhk)$qKni^D4d#GDO-Tu`u_AGbLc1JLYdA3bkt9kUD*?S|?&>chHI8m%gg@&009600|35uNCqn|007>%_VWM$ literal 0 HcmV?d00001 diff --git a/openfe/protocols/openmm_afe/base.py b/openfe/protocols/openmm_afe/base.py index 448cfe323..633ec884a 100644 --- a/openfe/protocols/openmm_afe/base.py +++ b/openfe/protocols/openmm_afe/base.py @@ -58,6 +58,7 @@ MultiStateSimulationSettings, OpenMMEngineSettings, IntegratorSettings, LambdaSettings, MultiStateOutputSettings, ThermoSettings, OpenFFPartialChargeSettings, + OpenMMSystemGeneratorFFSettings, ) from openfe.protocols.openmm_md.plain_md_methods import PlainMDProtocolUnit from ..openmm_utils import ( From c349cebaa4605975108cd25dcc06a34b58864e25 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Mon, 4 Mar 2024 11:45:37 +0000 Subject: [PATCH 4/5] Remove erroneous extra file --- devtools/data/MDProtocol_json_results.gz | Bin 2583 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 devtools/data/MDProtocol_json_results.gz diff --git a/devtools/data/MDProtocol_json_results.gz b/devtools/data/MDProtocol_json_results.gz deleted file mode 100644 index 4783a567ad51f03475196c05be022c4b54199f59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2583 zcmV+y3h4D8iwFpevgKt0|4l?ta&L5RV{dFEV0PGrzZrjN5S5&qK zw?!oLB|h8$N@B-%*VY#!xim=QfLJb<5@WthE)_e0@7p^&Ly43nC8-}dxV2&PF`S+E z%+BumvnFbpWK0TeZ;&@>`e>jvITw{=NiHusU|AKi;6)l#qHaw4nU<0RD3q+++kQEUafe?#Qh+QSqBnm!4^i>`9>>{cPaCMM@cmTFW z`idF~_D*A2D5~8!Htbi=M(0_o$Pr8?rBw#CgxFzKwCUSVhtGoyq9mEK6asA(rJNNt zV}_2<_bN)ES#XG&PY5djqv;;9U*R zSzcs9slUy3C0H#`=#Y5R1k8BRu|;^TU9Rv2a3bt%+%v+dNasm@Qwx+(nCeaZ^pWp5zG<0`;~I``n0}AbD z?3J^rN;QbBo~i00onzJidI4Kt-l-{+JmAlzoElaYt@ov5Q3ND5B)@s<$*(LV@@bNb zubSsMqTQ)&ILzLS6amanQhB#??X+xyNX!$MaT6$1=RF65mST!i&KFepd5LtV3P3Xi z9g!&4d}sGO7mG|5wSWkYZdxr;mQTSdIiy3HCbf$4in_5c%^SvGcTgt$mShN7RX`z> zL0pNmM&$fry=eCf_R>Z-x&Wc0#WX^ zip~T-Eej>Hs*Tm0rRxQuXMo!)1-;b*XCQ_`io(%{y1)jlH4hYUsN*#?nQ}l4{Hol* zzGBcQ#0mJZUGa6FM|^gw20+4o5FAi1f{#@q#ddW~{Z917kW(=R0#}d{)IfINQ5l6= zhgWXKE0=h^%h zYgnoz+PEUU-b$2OLJI0RbalW{`NP2C3$u%OicaN=^*tpQE%NaZ=JpI1ckdv!b^LA1 zKD~U_R@z;v1GZ^7j^~aqVX5}c`NnZW80fi<4vPUAcwL6yK~Tf9>}v_?n7-{_L(r9R z&Nq)6JGSmG$9dnb;MnwxPQm{<%lz)KcCB%06>gE}{cthmKocyfrJRY8Cqz&pC<7hq^ zsXNop4-l+do%S3d9>E=?PggVEYbhTiDS_B7O3RFM6q-*4tj6&i!Hz^SW=A+gR(=#9 zP2?CO{RmZx#}mAHIGhpVj-VfYKtA>axyOP`^-rYi{pmz@jF^p75rd7bPGpayG0B3T zNWgy}ArgVC5gQ~4J48Cf9>wy=h+!vt82^Bh`o||RiHUe9e#8g^pX1{3~cPqx_VX>D`^DaJex!-bE}kPJ6|xWJSPT@o0t3knsE3&}z6 z5ua1Qw-|2@PJ3p;{9t4nchXsiyFYf$i^!4VF4jm?M#8&q$)-e*Lfe_3l9BZbLdgvF zYl@i3gy_)-iWRGin@FEfd?1!jA@Uq=&L3BlU1G&!!Zo`%Af6(cJVA@Nf1^z55F(0f zXF@42kVI&+w{N)k~+7V`4No8Qm^(UV?QP>6YEPb?~kI$hl-T^=+2QP81LbO>Ye zhC=e<->8k@wqUAFzfskqRKgk=n`PmiwbFAgfG7Di8QfH_O+eaA z7sJJpu{{XYHZ9#YpPg7;3(f_hhk)$qKni^D4d#GDO-Tu`u_AGbLc1JLYdA3bkt9kUD*?S|?&>chHI8m%gg@&009600|35uNCqn|007>%_VWM$ From 48707e2c2feeb48b968d4151f06cc666ffd581e0 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Thu, 4 Jul 2024 01:06:21 +0100 Subject: [PATCH 5/5] fix gufe keys --- openfe/tests/protocols/test_rfe_tokenization.py | 2 +- openfe/tests/protocols/test_solvation_afe_tokenization.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openfe/tests/protocols/test_rfe_tokenization.py b/openfe/tests/protocols/test_rfe_tokenization.py index 64386a300..e268aaa10 100644 --- a/openfe/tests/protocols/test_rfe_tokenization.py +++ b/openfe/tests/protocols/test_rfe_tokenization.py @@ -39,7 +39,7 @@ def instance(self): class TestRelativeHybridTopologyProtocol(GufeTokenizableTestsMixin): cls = openmm_rfe.RelativeHybridTopologyProtocol - key = "RelativeHybridTopologyProtocol-3e5e01d5ce465ae89c5a278c8a765297" + key = "RelativeHybridTopologyProtocol-99069cb606c80c9884a024c17fdab2e4" repr = f"<{key}>" @pytest.fixture() diff --git a/openfe/tests/protocols/test_solvation_afe_tokenization.py b/openfe/tests/protocols/test_solvation_afe_tokenization.py index 84bf4d69a..55cf0642f 100644 --- a/openfe/tests/protocols/test_solvation_afe_tokenization.py +++ b/openfe/tests/protocols/test_solvation_afe_tokenization.py @@ -49,7 +49,7 @@ def protocol_result(afe_solv_transformation_json): class TestAbsoluteSolvationProtocol(GufeTokenizableTestsMixin): cls = openmm_afe.AbsoluteSolvationProtocol - key = "AbsoluteSolvationProtocol-50d7b9eb53e18a7d4d9f5297b31b3f46" + key = "AbsoluteSolvationProtocol-d46cbe721f0fb25534bc075db9af968c" repr = f"<{key}>" @pytest.fixture()