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

1from abc import ABC, abstractmethod 

2from pathlib import Path 

3from typing import Optional, Union 

4 

5from shephex.experiment.context import ExperimentContext 

6from shephex.experiment.options import Options 

7from shephex.experiment.result import ExperimentResult 

8 

9 

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 

17 

18 @abstractmethod 

19 def dump(self, directory: Union[Path, str]) -> None: 

20 pass # pragma: no cover 

21 

22 @classmethod 

23 @abstractmethod 

24 def from_metadata(cls, metadata: dict) -> 'Procedure': 

25 return cls._from_metadata(metadata) 

26 

27 @property 

28 def name(self) -> str: 

29 return self._name 

30 

31 @name.setter 

32 def name(self, name: str) -> None: 

33 self._name = name 

34 

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 

43 

44 @abstractmethod 

45 def hash(self) -> int: 

46 pass # pragma: no cover 

47 

48 def __hash__(self) -> int: 

49 return self.hash() 

50 

51 def __eq__(self, other: 'Procedure') -> bool: 

52 return self.hash() == other.hash() 

53 

54 def get_metadata(self) -> dict: 

55 return { 

56 'name': self.name, 

57 'context': self.context, 

58 }