Source code for evorl.recorders.recorder

 1from abc import ABC, abstractmethod
 2from collections.abc import Mapping, Sequence
 3from typing import Any
 4
 5
[docs] 6class Recorder(ABC): 7 """A Recorder Interface.""" 8
[docs] 9 @abstractmethod 10 def init(self) -> None: 11 """Initialize the recorder.""" 12 raise NotImplementedError
13
[docs] 14 @abstractmethod 15 def write(self, data: Mapping[str, Any], step: int | None = None) -> None: 16 """Write data to the recorder.""" 17 raise NotImplementedError
18
[docs] 19 @abstractmethod 20 def close(self) -> None: 21 """Finalize the recorder.""" 22 raise NotImplementedError
23 24
[docs] 25class ChainRecorder(Recorder): 26 """Container for multiple recorders.""" 27 28 def __init__(self, recorders: Sequence[Recorder]): 29 """Initialize the ChainRecorder. 30 31 Args: 32 recorders: A sequence of recorders to use. 33 """ 34 self.recorders = recorders 35
[docs] 36 def add_recorder(self, recorder: Recorder) -> None: 37 self.recorders.append(recorder)
38
[docs] 39 def init(self) -> None: 40 for recorder in self.recorders: 41 recorder.init()
42
[docs] 43 def write(self, data: Mapping[str, Any], step: int | None = None) -> None: 44 for recorder in self.recorders: 45 recorder.write(data, step)
46
[docs] 47 def close(self) -> None: 48 for recorder in self.recorders: 49 recorder.close()