Source code for batter.exec.base

"""Interfaces shared by execution backends."""

from __future__ import annotations

from dataclasses import dataclass, field
from typing import Dict, Mapping, Optional, Protocol

from batter.pipeline.step import ExecResult, Step
from batter.systems.core import SimSystem

__all__ = ["Resources", "ExecBackend"]


[docs] @dataclass(frozen=True, slots=True) class Resources: """Resource hints supplied to execution backends. Parameters ---------- time : str, optional Walltime (e.g., ``"02:00:00"``). cpus : int, optional CPU cores per task. gpus : int, optional Number of GPUs required. mem : str, optional Memory request (e.g., ``"16G"``). partition : str, optional Scheduler partition or queue. account : str, optional Scheduler account. extra : Mapping[str, str], optional Backend-specific SBATCH-style flags. """ time: Optional[str] = None cpus: Optional[int] = None gpus: Optional[int] = None mem: Optional[str] = None partition: Optional[str] = None account: Optional[str] = None extra: Mapping[str, str] = field(default_factory=dict)
[docs] class ExecBackend(Protocol): """Protocol implemented by execution backends.""" name: str
[docs] def run(self, step: Step, system: SimSystem, params: Dict) -> ExecResult: """Execute ``step`` for ``system``. Parameters ---------- step : Step Step metadata as produced by the pipeline. system : SimSystem Simulation system descriptor. params : dict Backend-specific parameters, potentially including ``resources``. Returns ------- ExecResult Execution artifacts and job identifiers. """ ...