Source code for qmmm_pme.plugins.plugin
#! /usr/bin/env python3
"""A module defining the abstract :class:`Plugin` base class and derived
classes.
"""
from __future__ import annotations
from abc import ABC
from abc import abstractmethod
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from qmmm_pme.calculators.calculator import ModifiableCalculator
from qmmm_pme.calculators import QMMMCalculator
from qmmm_pme.integrators.integrator import ModifiableIntegrator
[docs]class Plugin(ABC):
"""The base class for creating |package| plugins.
"""
_modifieds: list[str] = []
_key: str = ""
[docs]class CalculatorPlugin(Plugin):
"""The base class for creating a :class:`Plugin` which modifies any
:class:`Calculator` class.
"""
_key: str = "calculator"
[docs] @abstractmethod
def modify(self, calculator: ModifiableCalculator) -> None:
"""Modify the functionality of any :class:`Calculator`.
:param calculator: |calculator| to modify with the
:class:`Plugin`.
"""
[docs]class QMMMCalculatorPlugin(Plugin):
"""The base class for creating a :class:`Plugin` which modifies the
:class:`QMMMCalculator` class.
"""
_key: str = "calculator"
[docs] @abstractmethod
def modify(self, calculator: QMMMCalculator) -> None:
"""Modify the functionality of a :class:`QMMMCalculator`
:class:`QMMMCalculator`.
:param calculator: The :class:`QMMMCalculator` object to modify
with the :class:`Plugin`.
"""
[docs]class IntegratorPlugin(Plugin):
"""The base class for creating a :class:`Plugin` which modifies any
:class:`Integrator` class.
"""
_key: str = "integrator"
[docs] @abstractmethod
def modify(self, integrator: ModifiableIntegrator) -> None:
"""Modify the functionality of a :class:`Integrator`.
:param integrator: |integrator| to modify with the
:class:`Plugin`.
"""