Engine Base Class¶
base
¶
Abstract base classes for QM and MM engine backends.
QMEngine
¶
Bases: ABC
Abstract base class for quantum mechanics engines.
All QM backends (Psi4, Gaussian, ORCA, etc.) must implement this interface.
name
abstractmethod
property
¶
Human-readable engine name.
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
Engine display name (e.g. |
energy
abstractmethod
¶
energy(structure: Q2MMMolecule, method: str = 'b3lyp', basis: str = 'def2-svp') -> float
Calculate single-point energy in Hartrees.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. |
required |
method
|
str
|
QM method or functional (e.g. |
'b3lyp'
|
basis
|
str
|
Basis set name (e.g. |
'def2-svp'
|
Returns:
| Type | Description |
|---|---|
float
|
Electronic energy in Hartrees. |
Source code in q2mm/backends/base.py
hessian
abstractmethod
¶
hessian(structure: Q2MMMolecule, method: str = 'b3lyp', basis: str = 'def2-svp') -> ndarray
Calculate Hessian matrix (second derivatives of energy).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. |
required |
method
|
str
|
QM method or functional. |
'b3lyp'
|
basis
|
str
|
Basis set name. |
'def2-svp'
|
Returns:
| Type | Description |
|---|---|
ndarray
|
Shape |
Source code in q2mm/backends/base.py
optimize
abstractmethod
¶
optimize(structure: Q2MMMolecule, method: str = 'b3lyp', basis: str = 'def2-svp') -> tuple
Optimize geometry.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. |
required |
method
|
str
|
QM method or functional. |
'b3lyp'
|
basis
|
str
|
Basis set name. |
'def2-svp'
|
Returns:
| Type | Description |
|---|---|
tuple
|
Optimized structure as |
Source code in q2mm/backends/base.py
frequencies
abstractmethod
¶
frequencies(structure: Q2MMMolecule, method: str = 'b3lyp', basis: str = 'def2-svp') -> list[float]
Calculate vibrational frequencies in cm⁻¹.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. |
required |
method
|
str
|
QM method or functional. |
'b3lyp'
|
basis
|
str
|
Basis set name. |
'def2-svp'
|
Returns:
| Type | Description |
|---|---|
list[float]
|
Vibrational frequencies in cm⁻¹. |
Source code in q2mm/backends/base.py
is_available
¶
Check if this engine is installed and accessible.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
|
supports_runtime_params
¶
Whether parameters can be updated without rebuilding engine state.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
|
MMEngine
¶
Bases: ABC
Abstract base class for molecular mechanics engines.
All MM backends (Tinker, OpenMM, MacroModel, etc.) must implement this interface.
Unit contracts (canonical units for ForceField parameters):
bond_k: kcal/(mol·Å²) — energy conventionE = k·(r − r₀)²angle_k: kcal/(mol·rad²)torsion_k,vdw_epsilon: kcal/molbond_eq,vdw_radius: Åangle_eq: degrees
Engines convert from canonical units to engine-native at the boundary (e.g. kcal → kJ for OpenMM, Å → nm). Output contracts:
energy()returns kcal/molhessian()returns Hartree/Bohr² (atomic units)frequencies()returns cm⁻¹
name
abstractmethod
property
¶
Human-readable engine name.
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
Engine display name (e.g. |
energy
abstractmethod
¶
energy(structure: Q2MMMolecule, forcefield: ForceField) -> float
Calculate MM energy in kcal/mol.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. Concrete engines may widen
this to accept engine-specific handles (e.g.
|
required |
forcefield
|
ForceField
|
Force field parameters. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Potential energy in kcal/mol. |
Source code in q2mm/backends/base.py
minimize
abstractmethod
¶
minimize(structure: Q2MMMolecule, forcefield: ForceField) -> tuple
Energy-minimize structure.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. |
required |
forcefield
|
ForceField
|
Force field parameters. |
required |
Returns:
| Type | Description |
|---|---|
tuple
|
|
Source code in q2mm/backends/base.py
hessian
abstractmethod
¶
hessian(structure: Q2MMMolecule, forcefield: ForceField) -> ndarray
Calculate MM Hessian matrix.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. |
required |
forcefield
|
ForceField
|
Force field parameters. |
required |
Returns:
| Type | Description |
|---|---|
ndarray
|
Shape |
Source code in q2mm/backends/base.py
frequencies
abstractmethod
¶
frequencies(structure: Q2MMMolecule, forcefield: ForceField) -> list[float]
Calculate vibrational frequencies in cm⁻¹.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. |
required |
forcefield
|
ForceField
|
Force field parameters. |
required |
Returns:
| Type | Description |
|---|---|
list[float]
|
Vibrational frequencies in cm⁻¹. |
Source code in q2mm/backends/base.py
is_available
¶
Check if this engine is installed and accessible.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
|
supports_runtime_params
¶
Whether parameters can be updated without rebuilding engine state.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
|
supports_analytical_gradients
¶
Whether this engine provides analytical parameter gradients.
Engines returning True must implement energy_and_param_grad().
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
|
Source code in q2mm/backends/base.py
energy_and_param_grad
¶
energy_and_param_grad(structure: Q2MMMolecule, forcefield: ForceField) -> tuple[float, ndarray]
Compute energy and analytical gradient w.r.t. MM parameters.
Must be implemented by engines for which
:meth:supports_analytical_gradients returns True.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure or engine-specific context. |
required |
forcefield
|
ForceField
|
Force field parameters. |
required |
Returns:
| Type | Description |
|---|---|
float
|
|
ndarray
|
kcal/mol and |
Raises:
| Type | Description |
|---|---|
NotImplementedError
|
If the engine does not support analytical gradients. |
Source code in q2mm/backends/base.py
create_context
¶
create_context(structure: Q2MMMolecule, forcefield: ForceField) -> object
Create a reusable engine context/handle for a molecule.
Only needed when :meth:supports_runtime_params returns True.
The returned handle can be passed as structure to other methods,
allowing the engine to update parameters in-place rather than
rebuilding the simulation state each evaluation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
Q2MMMolecule
|
Molecular structure. |
required |
forcefield
|
ForceField
|
Force field parameters. |
required |
Returns:
| Type | Description |
|---|---|
object
|
An engine-specific handle object for reuse across evaluations. |
Raises:
| Type | Description |
|---|---|
NotImplementedError
|
If the engine does not support reusable contexts. |
Source code in q2mm/backends/base.py
supported_functional_forms
¶
Functional forms this engine can evaluate.
Override in subclasses; the default is all forms (no restriction).
Returns:
| Type | Description |
|---|---|
frozenset[str]
|
frozenset[str]: Set of
:class: |
Example
.. code-block:: python
# OpenMM supports both harmonic and MM3:
return frozenset({"harmonic", "mm3"})
# A future AMOEBA-only engine:
return frozenset({"amoeba"})