Source code for qcelemental.models.v2.common_models

from enum import Enum
from typing import TYPE_CHECKING, Any, Optional, Sequence, Tuple, Union

from pydantic import Field

from .basemodels import ProtoModel, qcschema_draft
from .basis_set import BasisSet

if TYPE_CHECKING:
    ReprArgs = Sequence[Tuple[Optional[str], Any]]


def provenance_json_schema_extra(schema, model):
    schema["$schema"] = qcschema_draft


[docs] class Provenance(ProtoModel): """Provenance information.""" creator: str = Field(..., description="The name of the program, library, or person who created the object.") version: str = Field( "", description="The version of the creator, blank otherwise. " "This should be sortable by the very broad `PEP 440 <https://www.python.org/dev/peps/pep-0440/>`_.", ) routine: str = Field("", description="The name of the routine or function within the creator, blank otherwise.") model_config = ProtoModel._merge_config_with(json_schema_extra=provenance_json_schema_extra, extra="allow")
[docs] class Model(ProtoModel): """The computational molecular sciences model to run.""" method: str = Field( # type: ignore ..., description="The quantum chemistry method to evaluate (e.g., B3LYP, PBE, ...). " "For MM, name of the force field.", ) basis: Optional[Union[str, BasisSet]] = Field( # type: ignore None, description="The quantum chemistry basis set to evaluate (e.g., 6-31g, cc-pVDZ, ...). Can be ``None`` for " "methods without basis sets. For molecular mechanics, name of the atom-typer.", ) # basis_spec: BasisSpec = None # This should be exclusive with basis, but for now will be omitted model_config = ProtoModel._merge_config_with(extra="allow")
[docs] class DriverEnum(str, Enum): """Allowed computation driver values.""" energy = "energy" gradient = "gradient" hessian = "hessian" properties = "properties"
[docs] def derivative_int(self): egh = ["energy", "gradient", "hessian", "third", "fourth", "fifth"] if self == "properties": return 0 else: return egh.index(self)