Skip to main content

Lewis

Lewis - Let's write intricate simulators.

Lewis is a Python framework for simulating hardware devices.

Lewis can be installed via pip or ran from source. See relevant usage sections of the docs for more details.

Resources: GitHub PyPI ISIS-developed device emulators

Lewis was previously named "Plankton" but, due to a package with the same name on PyPI, we decided to rename the project.

Lewis is licensed under GPL v3 or later.

Purpose and Use Cases

Lewis is being developed in the context of instrument control at the ESS, but it is general enough to be used in many other contexts that require detailed, stateful software simulations of hardware devices.

We consider a detailed device simulation to be one that can communicate using the same protocol as the real device, and that can very closely approximate real device behaviour in terms of what is seen through this protocol. This includes gradual processes, side-effects and error conditions.

The purpose of Lewis is to provide a common framework to facilitate the development of such simulators. The framework provides a common set of tools, including communication protocol services, which helps minimize code replication and allows the developer of a simulated device to focus on capturing device behaviour.

Potential use cases for detailed device simulators include:

  • Replacing the physical device when developing and testing software that interfaces with the device
  • Testing failure conditions without risking damage to the physical device
  • Automated system and unit tests of software that communicates with the device
  • Perform "dry runs" against test scripts that are to be run on the real device

Using a simulation for the above has the added benefit that, unlike most real devices, a simulation may be sped up / fast-forwarded past any lengthy delays or processes that occur in the device.

Features

Brief Terminology

Device\ s and Interface\ s are two independent concepts in Lewis. The Device is model for the device behaviour and internal memory. A Device can be represented using a StateMachine, but it does not have to be. A Device does not include anything specific to the communication protocol with the Device. An Interface provides bindings from a protocol Adapter to a Device. Common Adapter\ s, , such as TCP stream, Modbus and EPICS, are provided by Lewis. The Device and Interface are instantiated as part of a Simulation that provides a cycle "heart beat" and manages other environmental aspects and services.

What Can You Do With Lewis?

  • Create new Device\ s to closely imitate the internal behaviour and memory of something
  • Optionally make a Device work as a StateMachine via StateMachineDevice to give rich behaviours
  • Create one or more Interface\ s over your Device to expose it as an EPICS IOC, a TCP listener, or on any other bespoke protocol you like
  • Access and control the Device while it is running via a control server
  • Access and control the Simulation while it is running via a control server
  • Control server can be accessed via command-line utility, Python bindings, or JSON RPC.

Getting started

Metadata

Release files for lewis 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lewis 1.4.0
File Size Uploaded
lewis-1.4.0.tar.gz 237.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lewis 1.4.0
File Interpreter ABI Platform
lewis-1.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 503.8 kB

Release files / lewis-1.4.0.tar.gz

Download URL lewis-1.4.0.tar.gz
Size 237.1 kB
Tags Source
SHA-256 checksum
How to use checksums
fd165f558e69a6447b66089bf055290f6c2c4be7db604e20bde2337df87036f0
BLAKE2b-256 checksum
How to use checksums
795271dc416d28884a04e2a879632a639f8fd1648916ea02dac1bfb425b5e592
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.

Transparency log

Release files / lewis-1.4.0-py3-none-any.whl

Download URL lewis-1.4.0-py3-none-any.whl
Size 266.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
954baf2c53e9fa51a946e0132d3732ce1f643df7103530ae942c22bf33bcbdb0
BLAKE2b-256 checksum
How to use checksums
adc2a4e8c2fc239a028c673f66ae7ca890d0a83288bde70b8a7cf83b91c0f2c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1

2 release files

1.0.4

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page