tickit#

Code CI Docs CI Test Coverage Latest PyPI version Apache License

An event-based multi-device simulation framework providing configuration and orchestration of complex multi-device simulations.

PyPI

pip install tickit

Source code

dls-controls/tickit

Documentation

https://dls-controls.github.io/tickit

Changelog

dls-controls/tickit

An example device which emits a random value between 0 and 255 whenever called and asks to be called again once the simulation has progressed by the callback_period. Additionally, extenal control of RandomTrampoline is afforded by a RemoteControlledAdapter which is exposed extenally through a TCPServer:

@dataclass
class RandomTrampoline(ComponentConfig):

    def __call__(self) -> Component:  # noqa: D102
        return DeviceSimulation(
            name=self.name,
            device=RandomTrampolineDevice(),
            adapters=[RemoteControlledAdapter(server=TcpServer(format="%b\r\n"))])


class RandomTrampolineDevice(Device):

    Inputs: TypedDict = TypedDict("Inputs", {})
    Outputs: TypedDict = TypedDict("Outputs", {"output": int})

    def __init__(self, callback_period: int = int(1e9)) -> None:
        self.callback_period = SimTime(callback_period)

    def update(self, time: SimTime, inputs: Inputs) -> DeviceUpdate[Outputs]:
        output = randint(0, 255)
        LOGGER.debug(
            "Boing! (delta: {}, inputs: {}, output: {})".format(time, inputs, output)
        )
        return DeviceUpdate(
            RandomTrampoline.Outputs(output=output),
            SimTime(time + self.callback_period),
        )

An example simulation defines a RemoteControlled device named tcp_contr and a Sink device named contr_sink. The observed output of tcp_contr is wired to the input input of contr_sink:

- examples.devices.remote_controlled.RemoteControlled: {}
    name: tcp_contr
    inputs: {}
- tickit.devices.sink.Sink: {}
    name: contr_sink
    inputs:
      input: tcp_contr:observed

How the documentation is structured#

The documentation is split into 2 sections:

The User Guide contains documentation on how to install and use tickit.

The Developer Guide contains documentation on how to develop and contribute changes back to tickit.