Source code for tickit.devices.source
import logging
from dataclasses import dataclass
from typing import Any
from tickit.core.components.component import Component, ComponentConfig
from tickit.core.components.device_simulation import DeviceSimulation
from tickit.core.device import Device, DeviceUpdate
from tickit.core.typedefs import SimTime
from tickit.utils.compat.typing_compat import TypedDict
LOGGER = logging.getLogger(__name__)
[docs]class SourceDevice(Device):
"""A simple device which produces a pre-configured value."""
#: An empty typed mapping of device inputs
Inputs: TypedDict = TypedDict("Inputs", {})
#: A typed mapping containing the 'value' output value
Outputs: TypedDict = TypedDict("Outputs", {"value": Any})
def __init__(self, value: Any) -> None:
"""A constructor of the source, which takes the pre-configured output value.
Args:
value (Any): A pre-configured output value.
"""
self.value = value
[docs] def update(self, time: SimTime, inputs: Inputs) -> DeviceUpdate[Outputs]:
"""The update method which produces the pre-configured output value.
Args:
time (SimTime): The current simulation time (in nanoseconds).
inputs (State): A mapping of inputs to the device and their values.
Returns:
DeviceUpdate[Outputs]:
The produced update event which contains the pre-configured value, and
never requests a callback.
"""
LOGGER.debug(f"Sourced {self.value}")
return DeviceUpdate(SourceDevice.Outputs(value=self.value), None)
[docs]@dataclass
class Source(ComponentConfig):
"""Source of a fixed value."""
value: Any
def __call__(self) -> Component: # noqa: D102
return DeviceSimulation(
name=self.name,
device=SourceDevice(self.value),
)