Version history

tomato-v2.1

https://img.shields.io/static/v1?label=tomato&message=v2.1&color=blue&logo=github https://img.shields.io/static/v1?label=tomato&message=v2.1&color=blue&logo=pypi https://img.shields.io/static/v1?label=release%20date&message=2025-06-07&color=red&logo=pypi

Section author: Peter Kraus

Developed at the ConCat lab at TU Berlin.

Changes from tomato-2.0 include:

  • Driver processess are now better at logging errors. All Exceptions raised by the DriverInterface should should now be caught and logged; as functionality of the components should only be accessed via the DriverInterface, this should catch all cases.

  • The cmp_measure() of each component can now be periodically called by the driver process, if a task is not running. The interval (in seconds) can be configured by the user in the driver section of the settings file (under driver.<driver_name>.idle_measurement_interval) or provided by the driver developer (under DriverInterface.idle_measurement_interval); it falls back to None which means no periodic measurement will be done.

  • Functions in the tomato.passata module that change the component state now check whether the component has a running task. If a component is running, a change of state (via reset() or set_attr()) can be forced by setting force=True.

  • A new tomato.passata.register() function (and CLI invocation passata register <component>), in order to retry component registration.

  • A new DriverInterface-2.1, with the following changes:

    • Attr now accepts options, which is the set of values this attribute can be set to.

    • The decorators are now in tomato.driverinterface_2_1.decorators.

    • A new decorator, coerce_val(), is provided to allow simpler type conversion and boundary checking.

    • Better error handling in tomato-driver processes; the following guidelines should be followed:

      • ValueError or AttributeError should be raised by the component methods when wrong vals or attrs are supplied/queried (get_attr(), set_attr()); those exception types will be caught, logged, and the tomato-driver won’t crash

      • RuntimeError should be raised by the component __init__() during component registration; this exception type will be caught, logged, and re-registration will be attempted at most 3 x in total by the tomato-daemon

  • A new Payload-2.1, with the following changes to Task specification in Payload.method:

    • component_tag is renamed to component_role

    • task_name entry added, can be used to name tasks across a payload to trigger the below actions

    • start_with_task_name entry added; when specified, the parent task will wait until the task with a matching task_name is started

    • stop_with_task_name entry added; when specified, the parent task will stop execution once a task with a matching task_name is started

    • max_duration and sample_interval can be provided as str, which will be converted to the number of seconds using pint

Code author: Peter Kraus

tomato-v2.0

https://img.shields.io/static/v1?label=tomato&message=v2.0&color=blue&logo=github https://img.shields.io/static/v1?label=tomato&message=v2.0&color=blue&logo=pypi https://img.shields.io/static/v1?label=release%20date&message=2025-02-23&color=red&logo=pypi

Section author: Peter Kraus

Developed at the ConCat lab at TU Berlin.

Changes from tomato-1.0 include:

  • Jobs are now tracked in a queue stored in a sqlite3 database instead of on the tomato.daemon.

  • The logdir can now be set in settings file, with the default value configurable using tomato init.

  • The tomato status command now supports further arguments: pipelines, drivers, devices, and components can be used to query status of subsets of the running tomato.

  • A new passata command and tomato.passata module for interacting with components over CLI and API.

  • A new DriverInterface-2.0, with the following changes: - cmp_constants(): an accessor for ModelDevice.constants and ModelInterface.constants, which are containers for the driver and component-specific metadata, - cmp_last_data(): an accessor for ModelDevice.last_data, which should contain the last timestamped datapoint, - cmp_measure(): a passthrough function to launch ModelDevice.measure(), which will trigger a one-shot measurement to populate ModelDevice.last_data - DeviceFactory(): a factory function that creates an appropriate ModelDevice instance. - Deprecation of dev_*() in favour of cmp_*(). - task_validate(): a validation function which verifies the provided Task contains task_params that are compatible with the Attrs specified on the component.

Code author: Peter Kraus

tomato-v1.0

https://img.shields.io/static/v1?label=tomato&message=v1.0&color=blue&logo=github https://img.shields.io/static/v1?label=tomato&message=v1.0&color=blue&logo=pypi https://img.shields.io/static/v1?label=release%20date&message=2024-04-01&color=red&logo=pypi

Section author: Peter Kraus

Developed at the ConCat lab at TU Berlin.

The code has been restructured and the interprocess communication is now using zmq instead of sqlite. The dependency on yadg has also been removed.

The driver library is now separate from tomato. A ModelInterface class is provided to facilitate new driver development.

Code author: Peter Kraus

tomato-v0.2

https://img.shields.io/static/v1?label=tomato&message=v0.2&color=blue&logo=github https://img.shields.io/static/v1?label=tomato&message=v0.2&color=blue&logo=pypi https://img.shields.io/static/v1?label=release%20date&message=2022-10-06&color=red&logo=pypi

Section author: Peter Kraus

Developed in the Materials for Energy Conversion lab at Empa, in Dübendorf, with contributions from the THEOS lab at EPFL, in Lausanne.

First public release, corresponding to the code developed for the BIG-MAP Stakeholder Initiative Aurora, Deliverable D2. Includes:

  • driver for BioLogic devices;

  • a dummy driver for testing;

  • basic scheduling/queueing functionality;

  • data snapshotting and parsing.

This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No 957189. The project is part of BATTERY 2030+, the large-scale European research initiative for inventing the sustainable batteries of the future.

Code author: Peter Kraus, Loris Ercole.