Coverage for src/shephex/experiment/procedure/procedure.py: 97%
32 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-06-20 14:13 +0200
« prev ^ index » next coverage.py v7.6.1, created at 2025-06-20 14:13 +0200
1from abc import ABC, abstractmethod
2from pathlib import Path
3from typing import Optional, Union
5from shephex.experiment.context import ExperimentContext
6from shephex.experiment.options import Options
7from shephex.experiment.result import ExperimentResult
10class Procedure(ABC):
11 """
12 Procedure base-class.
13 """
14 def __init__(self, name: str, context: bool = False) -> None:
15 self.name = name
16 self.context = context
18 @abstractmethod
19 def dump(self, directory: Union[Path, str]) -> None:
20 pass # pragma: no cover
22 @classmethod
23 @abstractmethod
24 def from_metadata(cls, metadata: dict) -> 'Procedure':
25 return cls._from_metadata(metadata)
27 @property
28 def name(self) -> str:
29 return self._name
31 @name.setter
32 def name(self, name: str) -> None:
33 self._name = name
35 @abstractmethod
36 def _execute(
37 self,
38 options: Options,
39 directory: Optional[Union[Path, str]] = None,
40 context: Optional[ExperimentContext] = None,
41 ) -> ExperimentResult:
42 pass # pragma: no cover
44 @abstractmethod
45 def hash(self) -> int:
46 pass # pragma: no cover
48 def __hash__(self) -> int:
49 return self.hash()
51 def __eq__(self, other: 'Procedure') -> bool:
52 return self.hash() == other.hash()
54 def get_metadata(self) -> dict:
55 return {
56 'name': self.name,
57 'context': self.context,
58 }