Source code for qcengine.procedures.base

Imports the various procedure backends

from typing import Set

from ..exceptions import InputError, ResourceError
from .berny import BernyProcedure
from .geometric import GeometricProcedure
from .nwchem_opt import NWChemDriverProcedure
from .optking import OptKingProcedure
from .torsiondrive import TorsionDriveProcedure

__all__ = ["register_procedure", "get_procedure", "list_all_procedures", "list_available_procedures"]

procedures = {}

def register_procedure(entry_point: "ProcedureHarness") -> None:
    Register a new ProcedureHarness with QCEngine

    name =
    if name.lower() in procedures.keys():
        raise ValueError("{} is already a registered procedure.".format(name))

    procedures[name.lower()] = entry_point

[docs]def get_procedure(name: str) -> "ProcedureHarness": """ Returns a procedures executor class """ name = name.lower() if name not in procedures: raise InputError(f"Procedure {name} is not registered to QCEngine.") ret = procedures[name] if not ret.found(): raise ResourceError(f"Procedure {name} is registered with QCEngine, but cannot be found.") return ret
[docs]def list_all_procedures() -> Set[str]: """ List all procedures registered by QCEngine. """ return set(procedures.keys())
[docs]def list_available_procedures() -> Set[str]: """ List all procedures that can be exectued (found) by QCEngine. """ ret = set() for k, p in procedures.items(): if p.found(): ret.add(k) return ret
register_procedure(GeometricProcedure()) register_procedure(OptKingProcedure()) register_procedure(BernyProcedure()) register_procedure(NWChemDriverProcedure()) register_procedure(TorsionDriveProcedure())