From 3aebba963a526d2da0894739617f6004d6315f91 Mon Sep 17 00:00:00 2001 From: Charlles Abreu Date: Wed, 10 Apr 2024 09:14:59 -0400 Subject: [PATCH] Allows attribute redirection to wrapped OpenMM forces (#90) * Implemented openmm force wrapper redirection * Fixed code formatting --- cvpack/openmm_force_wrapper.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/cvpack/openmm_force_wrapper.py b/cvpack/openmm_force_wrapper.py index 072d427f..5c5f081c 100644 --- a/cvpack/openmm_force_wrapper.py +++ b/cvpack/openmm_force_wrapper.py @@ -75,10 +75,22 @@ def __init__( # pylint: disable=super-init-not-called if isinstance(openmmForce, openmm.Force): openmmForce = openmm.XmlSerializer.serialize(openmmForce) unit = Unit(unit) - self.this = openmm.XmlSerializer.deserialize(openmmForce).this + self._wrapped_force = openmm.XmlSerializer.deserialize(openmmForce) + self.this = self._wrapped_force.this self._registerCV(name, unit, openmmForce, unit, periodicBounds) if periodicBounds is not None: self._registerPeriodicBounds(*periodicBounds) + def __getattr__(self, name: str) -> t.Any: + attr = getattr(self._wrapped_force, name) + if callable(attr): + + def _wrapped_method(*args, **kwargs): + return attr(*args, **kwargs) + + return _wrapped_method + + return attr + OpenMMForceWrapper.registerTag("!cvpack.OpenMMForceWrapper")