from typing import TypedDict, Union from dataclasses import dataclass import pathlib import yaml from IPython import embed from pyrelacs.util.logging import config_logging log = config_logging() class ValueUnit(TypedDict): value: Union[int, float] unit: str @dataclass class Settings: Repros: list[str] Path: str @dataclass class Metadata: Identifier: str Maintainer: str Creator: str Location: str Lab: str Institute: str University: str Address: str @dataclass class Input: inputsamplerate : ValueUnit # BufferSize inputtracecapacity : ValueUnit inputunipolar : bool inputtraceid : list[str] inputtracescale : list[int] inputtraceunit : list[str] inputtracedevice : list[str] inputtracechannel : list[int] inputtracereference: list[str] inputtracemaxvalue : list[int] inputtracecenter : list[bool] @dataclass class Output: outputtraceid : list[str] outputtracedevice : list[str] outputtracechannel : list[int] outputtracescale : list[int] outputtraceunit : list[str] outputtracemaxrate : list[ValueUnit] outputtracemodality: list[str] @dataclass class Data: input: Input output: Output @dataclass class SimData: input: inputsamplerate : 20kHz inputtracecapacity : 600s output: outputtraceid : [ Sinus ] outputtracedevice : [ ao-0 ] outputtracechannel : [ 0 ] outputtracescale : [ 1 ] outputtraceunit : [ V ] outputtracemaxrate : [ 40kHz ] outputtracemodality: [ electric ] @dataclass class PyRelacs: data: Data simdata: SimData @dataclass class Config: # Path: str @classmethod def load_config(cls): pyrelacs_config_path = pathlib.Path(__file__).parent / "config.yaml" log.debug(pyrelacs_config_path) if not pyrelacs_config_path.is_file(): log.error("Config File was not found") with open(pyrelacs_config_path, "r") as config_file: try: return yaml.full_load(config_file) except yaml.YAMLError as e: raise yaml.YAMLError(f"Error parsing YAML file: {e}")